## This test checks how we handle the --bb-addr-map option on relocatable
## object files.
# RUN: yaml2obj %s -o %t1.o
# RUN: llvm-readobj %t1.o --bb-addr-map | FileCheck %s
# CHECK: BBAddrMap [
# CHECK-NEXT: Function {
# CHECK-NEXT: At: 0x0
# CHECK-NEXT: Name: <?>
# CHECK-NEXT: BB Ranges [
# CHECK-NEXT: {
# CHECK-NEXT: Base Address: 0x0
# CHECK-NEXT: BB Entries [
# CHECK-NEXT: {
# CHECK-NEXT: ID: 0
# CHECK-NEXT: Offset: 0x0
# CHECK-NEXT: Size: 0xF
# CHECK-NEXT: HasReturn: Yes
# CHECK-NEXT: HasTailCall: No
# CHECK-NEXT: IsEHPad: No
# CHECK-NEXT: CanFallThrough: No
# CHECK-NEXT: HasIndirectBranch: No
# CHECK-NEXT: }
# CHECK-NEXT: ]
# CHECK-NEXT: }
# CHECK-NEXT: ]
# CHECK-NEXT: }
# CHECK-NEXT: Function {
# CHECK-NEXT: At: 0x10
# CHECK-NEXT: Name: <?>
# CHECK-NEXT: BB Ranges [
# CHECK-NEXT: {
# CHECK-NEXT: Base Address: 0x10
# CHECK-NEXT: BB Entries [
# CHECK-NEXT: {
# CHECK-NEXT: ID: 0
# CHECK-NEXT: Offset: 0x0
# CHECK-NEXT: Size: 0x11
# CHECK-NEXT: HasReturn: No
# CHECK-NEXT: HasTailCall: No
# CHECK-NEXT: IsEHPad: No
# CHECK-NEXT: CanFallThrough: Yes
# CHECK-NEXT: HasIndirectBranch: No
# CHECK-NEXT: }
# CHECK-NEXT: ]
# CHECK-NEXT: }
# CHECK-NEXT: ]
# CHECK-NEXT: }
# CHECK-NEXT: ]
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- Name: .llvm_bb_addr_map
Type: SHT_LLVM_BB_ADDR_MAP
Link: .text
Entries:
- Version: 2
BBRanges:
- BBEntries:
- ID: 0
AddressOffset: 0x0
Size: 0xF
Metadata: 0x1
- Version: 2
BBRanges:
- BBEntries:
- ID: 0
AddressOffset: 0x0
Size: 0x11
Metadata: 0x8
- Name: .rela.llvm_bb_addr_map
Type: SHT_RELA
Flags: [ SHF_INFO_LINK ]
Link: .symtab
Info: .llvm_bb_addr_map
Relocations:
- Offset: 0x2
Symbol: .text
Type: R_X86_64_64
- Offset: 0x11
Symbol: .text
Type: R_X86_64_64
Addend: 16
Symbols:
- Name: a
Section: .text
Value: 0x0
- Name: c
Section: .text
Value: 0x10
- Name: .text
Type: STT_SECTION
Section: .text
## Check that if we have a relocatable file and no relocation section for
## a SHT_LLVM_BB_ADDR_MAP section, we give the appropriate warnings.
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- Name: .llvm_bb_addr_map
Type: SHT_LLVM_BB_ADDR_MAP
Link: .text
# RUN: yaml2obj %s --docnum=2 -o %t2.o
# RUN: llvm-readobj %t2.o --bb-addr-map 2>&1 | FileCheck %s --check-prefix=NO-RELA -DFILE=%t2.o
# NO-RELA: warning: '[[FILE]]': unable to get relocation section for SHT_LLVM_BB_ADDR_MAP section with index 2
## Check that we get a warning if we expect a relocation and it is not present.
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- Name: .llvm_bb_addr_map
Type: SHT_LLVM_BB_ADDR_MAP
Link: .text
Entries:
- Version: 2
BBRanges:
- BBEntries:
- ID: 0
AddressOffset: 0x0
Size: 0xF
Metadata: 0x1
- Name: .rela.llvm_bb_addr_map
Type: SHT_RELA
Flags: [ SHF_INFO_LINK ]
Info: .llvm_bb_addr_map
# RUN: yaml2obj %s --docnum=3 -o %t3.o
# RUN: llvm-readobj %t3.o --bb-addr-map 2>&1 | FileCheck %s --check-prefix=MISSING-RELOCATION -DFILE=%t3.o
# MISSING-RELOCATION: warning: '[[FILE]]': unable to dump SHT_LLVM_BB_ADDR_MAP section with index 2: failed to get relocation data for offset: 2 in section SHT_LLVM_BB_ADDR_MAP section with index 2
## Check that if we have a missing relocated section, we fail and give the
## appropriate warning.
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .rela.llvm_bb_addr_map
Type: SHT_RELA
Flags: [ SHF_INFO_LINK ]
Info: 0xFF
# RUN: yaml2obj %s --docnum=4 -o %t4.o
# RUN: llvm-readobj %t4.o --bb-addr-map 2>&1 | FileCheck %s --check-prefix=NO-RELOCATED-SECTION -DFILE=%t4.o
# NO-RELOCATED-SECTION: warning: '[[FILE]]': failed to get SHT_LLVM_BB_ADDR_MAP section(s): SHT_RELA section with index 1: failed to get a relocated section: invalid section index: 255
## Check that if we have an ET_DYN file with a .rela.dyn section, we don't get
## a warning about a missing relocation section and can get the baddrmap data.
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_X86_64
Sections:
- Name: .rela.dyn
Type: SHT_RELA
Flags: [ SHF_ALLOC ]
- Name: .llvm_bb_addr_map
Type: SHT_LLVM_BB_ADDR_MAP
Flags: [ SHF_LINK_ORDER ]
Entries:
- Version: 2
BBRanges:
- BaseAddress: 0xF
BBEntries:
- ID: 0
AddressOffset: 0x0
Size: 0xF
Metadata: 0x1
# RUN: yaml2obj %s --docnum=5 -o %t5.o
# RUN: llvm-readobj %t5.o --bb-addr-map 2>&1 | FileCheck %s --check-prefix=ET-DYN-NO-WARNING -DFILE=%t5.o
# ET-DYN-NO-WARNING: BBAddrMap [
# ET-DYN-NO-WARNING: Function {
# ET-DYN-NO-WARNING: At: 0xF
# ET-DYN-NO-WARNING: Name: <?>
# ET-DYN-NO-WARNING: BB Ranges [
# ET-DYN-NO-WARNING: {
# ET-DYN-NO-WARNING: Base Address: 0xF
# ET-DYN-NO-WARNING: BB Entries [
# ET-DYN-NO-WARNING: {
# ET-DYN-NO-WARNING: ID: 0
# ET-DYN-NO-WARNING: Offset: 0x0
# ET-DYN-NO-WARNING: Size: 0xF
# ET-DYN-NO-WARNING: HasReturn: Yes
# ET-DYN-NO-WARNING: HasTailCall: No
# ET-DYN-NO-WARNING: IsEHPad: No
# ET-DYN-NO-WARNING: CanFallThrough: No
# ET-DYN-NO-WARNING: HasIndirectBranch: No
# ET-DYN-NO-WARNING: }
# ET-DYN-NO-WARNING: ]
# ET-DYN-NO-WARNING: }
# ET-DYN-NO-WARNING: ]
# ET-DYN-NO-WARNING: }
# ET-DYN-NO-WARNING: ]