[llvm] a630ef7 - ELFObjectWriter: Disable STT_SECTION adjustment for .reloc
via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 16 00:07:19 PDT 2025
Author: Fangrui Song
Date: 2025-04-16T00:07:16-07:00
New Revision: a630ef71e84a6bf09a99053ea42d37632ca0d18a
URL: https://github.com/llvm/llvm-project/commit/a630ef71e84a6bf09a99053ea42d37632ca0d18a
DIFF: https://github.com/llvm/llvm-project/commit/a630ef71e84a6bf09a99053ea42d37632ca0d18a.diff
LOG: ELFObjectWriter: Disable STT_SECTION adjustment for .reloc
... 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: https://github.com/llvm/llvm-project/pull/135519
Added:
Modified:
llvm/lib/MC/ELFObjectWriter.cpp
llvm/test/MC/ELF/reloc-directive.s
Removed:
################################################################################
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp
index 46c71e28ebc13..2ae9c21271624 100644
--- a/llvm/lib/MC/ELFObjectWriter.cpp
+++ b/llvm/lib/MC/ELFObjectWriter.cpp
@@ -1395,9 +1395,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
More information about the llvm-commits
mailing list