diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index 45fcc6a1de4c..75450aa7de9d 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/lib/MC/ELFObjectWriter.cpp @@ -1390,8 +1390,9 @@ void ELFObjectWriter::recordRelocation(MCAssembler &Asm, if (UseSectionSym) { UseSectionSym = useSectionSymbol(Asm, Target, SymA, C, Type); - // Disable STT_SECTION adjustment for .reloc directives. - UseSectionSym &= Fixup.getKind() >= FirstLiteralRelocationKind; + // 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; } 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 42995aa9e7d8..f4121ef07181 100644 --- a/llvm/test/MC/ELF/reloc-directive.s +++ b/llvm/test/MC/ELF/reloc-directive.s @@ -8,25 +8,24 @@ # 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, local +# ASM-NEXT: .reloc 2+.Ltmp2, R_X86_64_NONE, foo # 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 local 0x0 +# CHECK-NEXT: 0x3 R_X86_64_NONE foo 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, local + .reloc 2+., R_X86_64_NONE, foo .reloc 1+foo+3, R_X86_64_NONE, data+1 .reloc ., BFD_RELOC_NONE, unused