Files
clang-p2996/lld/test/ELF/cgprofile-rela.test
Alexander Yermolovich 24129fbc9a [LLD] Adding support for RELA for CG Profile.
This is a follow up to https://reviews.llvm.org/D104080, and ca3bdb57fa (diff-e64a48fabe31db213a631fdc5f2acb51bdddf3f16a8fb2928784f4c579229585). The implementation of  call graph profile was changed from a black box section to relocation approach. This was done to be compatible with post processing tools like strip/objcopy, and llvm equivalent. When they are invoked on object file before the final linking step with this new approach the symbol indices correctness is preserved.

The GNU binutils tools change the REL section to RELA section, unlike llvm tools. For example when strip -S is run on the ELF object files, as an intermediate step before linking. To preserve compatibility this patch extends implementation in LLD and ELFDumper to support both REL and RELA sections for call graph profile.

Reviewed By: MaskRay, jhenderson

Differential Revision: https://reviews.llvm.org/D105217
2021-07-13 13:56:30 -07:00

118 lines
2.8 KiB
Plaintext

## Under some circumstances, GNU tools strip/objcopy change REL to RELA. https://sourceware.org/bugzilla/show_bug.cgi?id=28035
## Test that LLD can handle call graph profile data relocated with RELA relocations.
# REQUIRES: x86
# RUN: yaml2obj %s -o %t.o
# RUN: ld.lld %t.o -o %t
# RUN: llvm-nm --no-sort %t | FileCheck %s
# RUN: ld.lld --no-call-graph-profile-sort %t.o -o %t
# RUN: llvm-nm --no-sort %t | FileCheck %s --check-prefix=NO-CG
# CHECK: 0000000000201124 t D
# CHECK: 0000000000201122 t C
# CHECK: 0000000000201128 t B
# CHECK: 0000000000201120 t A
# CHECK: 0000000000201126 T _start
# NO-CG: 0000000000201120 t D
# NO-CG: 0000000000201122 t C
# NO-CG: 0000000000201124 t B
# NO-CG: 0000000000201126 t A
# NO-CG: 0000000000201128 T _start
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text.D
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Size: 2
- Name: .text.C
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Size: 2
- Name: .text.B
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Size: 2
- Name: .text.A
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Size: 2
- Name: .text._start
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Size: 2
- Name: .llvm.call-graph-profile
Type: SHT_LLVM_CALL_GRAPH_PROFILE
Flags: [ SHF_EXCLUDE ]
Link: .symtab
AddressAlign: 0x1
Entries:
- Weight: 10
- Weight: 10
- Weight: 80
- Weight: 40
- Weight: 30
- Weight: 90
- Name: .rela.llvm.call-graph-profile
Type: SHT_RELA
Info: .llvm.call-graph-profile
Relocations:
- Offset: 0x0
Symbol: A
Type: R_X86_64_NONE
- Offset: 0x0
Symbol: B
Type: R_X86_64_NONE
- Offset: 0x8
Symbol: A
Type: R_X86_64_NONE
- Offset: 0x8
Symbol: B
Type: R_X86_64_NONE
- Offset: 0x10
Symbol: _start
Type: R_X86_64_NONE
- Offset: 0x10
Symbol: B
Type: R_X86_64_NONE
- Offset: 0x18
Symbol: A
Type: R_X86_64_NONE
- Offset: 0x18
Symbol: C
Type: R_X86_64_NONE
- Offset: 0x20
Symbol: B
Type: R_X86_64_NONE
- Offset: 0x20
Symbol: C
Type: R_X86_64_NONE
- Offset: 0x28
Symbol: C
Type: R_X86_64_NONE
- Offset: 0x28
Symbol: D
Type: R_X86_64_NONE
Symbols:
- Name: D
Type: STT_FUNC
Section: .text.D
- Name: C
Type: STT_FUNC
Section: .text.C
- Name: B
Type: STT_FUNC
Section: .text.B
- Name: A
Type: STT_FUNC
Section: .text.A
- Name: _start
Binding: STB_GLOBAL
Section: .text._start