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(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