Skip to content

Conversation

@MaskRay
Copy link
Member

@MaskRay MaskRay commented Apr 13, 2025

... to match GNU Assembler. This generalizes the
SHT_LLVM_CALL_GRAPH_PROFILE special case (which uses .reloc with
BFD_RELOC_NONE https://reviews.llvm.org/D104080).

Targets that want STT_SECTION adjustment cannot use
FirstLiteralRelocationKind derived fixup kinds.

Depends on the fix of #135521

Created using spr 1.3.5-bogner
@llvmbot llvmbot added the llvm:mc Machine (object) code label Apr 13, 2025
@llvmbot
Copy link
Member

llvmbot commented Apr 13, 2025

@llvm/pr-subscribers-mc

Author: Fangrui Song (MaskRay)

Changes

... to match GNU Assembler. This generalizes the
SHT_LLVM_CALL_GRAPH_PROFILE special case (which uses .reloc with
BFD_RELOC_NONE https://reviews.llvm.org/D104080).

Targets that want STT_SECTION adjustment cannot use
FirstLiteralRelocationKind derived fixup kinds.


Full diff: https://github.com/llvm/llvm-project/pull/135519.diff

2 Files Affected:

  • (modified) llvm/lib/MC/ELFObjectWriter.cpp (+2-3)
  • (modified) llvm/test/MC/ELF/reloc-directive.s (+4-3)
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp
index 6e37dad7b753e..3a21ca2e4943d 100644
--- a/llvm/lib/MC/ELFObjectWriter.cpp
+++ b/llvm/lib/MC/ELFObjectWriter.cpp
@@ -1389,9 +1389,8 @@ void ELFObjectWriter::recordRelocation(MCAssembler &Asm,
   if (UseSectionSym) {
     UseSectionSym = useSectionSymbol(Asm, Target, SymA, C, Type);
 
-    // Disable STT_SECTION adjustment for CG Profile to help with --cg-profile.
-    const auto *Parent = cast<MCSectionELF>(Fragment->getParent());
-    UseSectionSym &= Parent->getType() != ELF::SHT_LLVM_CALL_GRAPH_PROFILE;
+    // Disable STT_SECTION adjustment for .reloc directives.
+    UseSectionSym &= Fixup.getKind() < FirstLiteralRelocationKind;
   }
 
   uint64_t Addend = UseSectionSym ? C + Asm.getSymbolOffset(*SymA) : C;
diff --git a/llvm/test/MC/ELF/reloc-directive.s b/llvm/test/MC/ELF/reloc-directive.s
index f4121ef071810..42995aa9e7d81 100644
--- a/llvm/test/MC/ELF/reloc-directive.s
+++ b/llvm/test/MC/ELF/reloc-directive.s
@@ -8,24 +8,25 @@
 # ASM-NEXT: .Ltmp1:
 # ASM-NEXT:  .reloc .Ltmp1-1, R_X86_64_NONE, foo
 # ASM-NEXT: .Ltmp2:
-# ASM-NEXT:  .reloc 2+.Ltmp2, R_X86_64_NONE, foo
+# ASM-NEXT:  .reloc 2+.Ltmp2, R_X86_64_NONE, local
 # ASM-NEXT:  .reloc 1+foo+3, R_X86_64_NONE, data+1
 # ASM-NEXT: .Ltmp3:
 # ASM-NEXT:  .reloc .Ltmp3, BFD_RELOC_NONE, unused
 
 # CHECK:      0x2 R_X86_64_NONE foo 0x0
 # CHECK-NEXT: 0x0 R_X86_64_NONE foo 0x0
-# CHECK-NEXT: 0x3 R_X86_64_NONE foo 0x0
+# CHECK-NEXT: 0x3 R_X86_64_NONE local 0x0
 # CHECK-NEXT: 0x4 R_X86_64_NONE data 0x1
 # CHECK-NEXT: 0x1 R_X86_64_NONE unused 0x0
 
 .text
 .globl foo
 foo:
+local:
   ret
   .reloc .+3-2, R_X86_64_NONE, foo
   .reloc .-1, R_X86_64_NONE, foo
-  .reloc 2+., R_X86_64_NONE, foo
+  .reloc 2+., R_X86_64_NONE, local
   .reloc 1+foo+3, R_X86_64_NONE, data+1
   .reloc ., BFD_RELOC_NONE, unused
 

MaskRay added a commit that referenced this pull request Apr 13, 2025
Move `Fixup.getKind() >= FirstLiteralRelocationKind` from target hooks
to ELFObjectWriter::recordRelocation.

Currently, getRelocType cannot be skipped for LoongArch due to #135519
.
Created using spr 1.3.5-bogner
@MaskRay MaskRay merged commit a630ef7 into main Apr 16, 2025
6 of 10 checks passed
@MaskRay MaskRay deleted the users/MaskRay/spr/elfobjectwriter-disable-stt_section-adjustment-for-reloc branch April 16, 2025 07:07
llvm-sync bot pushed a commit to arm/arm-toolchain that referenced this pull request Apr 16, 2025
... to match GNU Assembler. This generalizes the
SHT_LLVM_CALL_GRAPH_PROFILE special case (which uses .reloc with
BFD_RELOC_NONE https://reviews.llvm.org/D104080).

Targets that want STT_SECTION adjustment cannot use
FirstLiteralRelocationKind derived fixup kinds.

Depends on the fix of #135521

Pull Request: llvm/llvm-project#135519
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

llvm:mc Machine (object) code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants