## Test how we dump the .debug_ranges section.
## a) Test dumping the .debug_ranges section from various object files with
## different endian and bits.
## Dump the .debug_ranges section from a 32-bit little endian object file where
## the address_size of debug_info is 4.
# RUN: yaml2obj --docnum=1 %s -DBITS=32 -DLOWOFFSET=0xFFFFFFFF \
# RUN: -DHIGHOFFSET=0x10 | obj2yaml | \
# RUN: FileCheck %s --check-prefix=BASIC -DADDRSIZE=0x4 \
# RUN: -DOFFSET=0x18 -DLOWOFFSET=0xFFFFFFFF -DHIGHOFFSET=0x10
## Dump the .debug_ranges section from a 32-bit big endian object file where the
## address_size of debug_info is 4.
# RUN: yaml2obj --docnum=1 %s -DBITS=32 -DENDIAN=MSB -DLOWOFFSET=0xFFFFFFFF \
# RUN: -DHIGHOFFSET=0x10 | obj2yaml | \
# RUN: FileCheck %s --check-prefix=BASIC -DADDRSIZE=0x4 \
# RUN: -DOFFSET=0x18 -DLOWOFFSET=0xFFFFFFFF -DHIGHOFFSET=0x10
## Dump the .debug_ranges section from a 32-bit little endian object file where
## the address_size of debug_info is 8.
# RUN: yaml2obj --docnum=1 %s -DBITS=32 -DADDRSIZE1=8 \
# RUN: -DADDRSIZE2=8 -DADDRSIZE3=8 -DADDRSIZE4=8 \
# RUN: -DLOWOFFSET=0xFFFFFFFFFFFFFFFF -DHIGHOFFSET=0x10 | obj2yaml | \
# RUN: FileCheck %s --check-prefix=BASIC -DADDRSIZE=0x8 \
# RUN: -DOFFSET=0x30 -DLOWOFFSET=0xFFFFFFFFFFFFFFFF \
# RUN: -DHIGHOFFSET=0x10
## Dump the .debug_ranges section from a 32-bit big endian object file where the
## address_size of debug_info is 8.
# RUN: yaml2obj --docnum=1 %s -DBITS=32 -DENDIAN=MSB -DADDRSIZE1=8 \
# RUN: -DADDRSIZE2=8 -DADDRSIZE3=8 -DADDRSIZE4=8 \
# RUN: -DLOWOFFSET=0xFFFFFFFFFFFFFFFF -DHIGHOFFSET=0x10 | obj2yaml | \
# RUN: FileCheck %s --check-prefix=BASIC -DADDRSIZE=0x8 \
# RUN: -DOFFSET=0x30 -DLOWOFFSET=0xFFFFFFFFFFFFFFFF -DHIGHOFFSET=0x10
## Dump the .debug_ranges section from a 64-bit little endian object file where
## the address_size of debug_info is 8.
# RUN: yaml2obj --docnum=1 %s -DLOWOFFSET=0xFFFFFFFFFFFFFFFF \
# RUN: -DHIGHOFFSET=0x10 | obj2yaml | \
# RUN: FileCheck %s --check-prefix=BASIC -DADDRSIZE=0x8 \
# RUN: -DOFFSET=0x30 -DLOWOFFSET=0xFFFFFFFFFFFFFFFF -DHIGHOFFSET=0x10
## Dump the .debug_ranges section from a 64-bit big endian object file where the
## address_size of debug_info is 8.
# RUN: yaml2obj --docnum=1 %s -DENDIAN=MSB -DLOWOFFSET=0xFFFFFFFFFFFFFFFF \
# RUN: -DHIGHOFFSET=0x10 | obj2yaml | \
# RUN: FileCheck %s --check-prefix=BASIC -DADDRSIZE=0x8 \
# RUN: -DOFFSET=0x30 -DLOWOFFSET=0xFFFFFFFFFFFFFFFF -DHIGHOFFSET=0x10
## Dump the .debug_ranges section from a 64-bit little endian object file where
## the address_size of debug_info is 4.
# RUN: yaml2obj --docnum=1 %s -DADDRSIZE1=4 -DADDRSIZE2=4 -DADDRSIZE3=4 \
# RUN: -DADDRSIZE4=4 -DLOWOFFSET=0xFFFFFFFFFFFFFFFF \
# RUN: -DHIGHOFFSET=0x10 | obj2yaml | \
# RUN: FileCheck %s --check-prefix=BASIC -DADDRSIZE=0x4 \
# RUN: -DOFFSET=0x18 -DLOWOFFSET=0xFFFFFFFF -DHIGHOFFSET=0x10
## Dump the .debug_ranges section from a 64-bit big endian object file where the
## address_size of debug_info is 4.
# RUN: yaml2obj --docnum=1 %s -DADDRSIZE1=4 -DADDRSIZE2=4 -DADDRSIZE3=4 \
# RUN: -DADDRSIZE4=4 -DLOWOFFSET=0xFFFFFFFFFFFFFFFF \
# RUN: -DHIGHOFFSET=0x10 | obj2yaml | \
# RUN: FileCheck %s --check-prefix=BASIC -DADDRSIZE=0x4 \
# RUN: -DOFFSET=0x18 -DLOWOFFSET=0xFFFFFFFF -DHIGHOFFSET=0x10
# BASIC-NOT: debug_ranges
# BASIC: debug_ranges:
# BASIC-NEXT: - Offset: 0x0
# BASIC-NEXT: AddrSize: [[ADDRSIZE]]
# BASIC-NEXT: Entries:
# BASIC-NEXT: - LowOffset: 0x10
# BASIC-NEXT: HighOffset: 0x20
# BASIC-NEXT: - LowOffset: 0x30
# BASIC-NEXT: HighOffset: 0x40
# BASIC-NEXT: - Offset: [[OFFSET]]
# BASIC-NEXT: AddrSize: [[ADDRSIZE]]
# BASIC-NEXT: Entries:
# BASIC-NEXT: - LowOffset: [[LOWOFFSET]]
# BASIC-NEXT: HighOffset: [[HIGHOFFSET]]
--- !ELF
FileHeader:
Class: ELFCLASS[[BITS=64]]
Data: ELFDATA2[[ENDIAN=LSB]]
Type: ET_EXEC
DWARF:
## The debug_ranges parser depends on the address_size field
## of compilation units. We add the .debug_info section to
## assist the parser.
debug_info:
- Version: 4
AddrSize: [[ADDRSIZE1=<none>]]
- Version: 4
AddrSize: [[ADDRSIZE2=<none>]]
debug_ranges:
- AddrSize: [[ADDRSIZE3=<none>]]
Entries:
- LowOffset: 0x10
HighOffset: 0x20
- LowOffset: 0x30
HighOffset: 0x40
- AddrSize: [[ADDRSIZE4=<none>]]
Entries:
- LowOffset: [[LOWOFFSET=0x10]]
HighOffset: [[HIGHOFFSET=0x20]]
## b) Test that obj2yaml dumps the .debug_ranges as a raw content section when
## the parser fails. In this case, the address_size of the two compilation units
## doesn't match.
# RUN: yaml2obj --docnum=1 -DADDRSIZE1=4 -DADDRSIZE2=8 %s | obj2yaml | \
# RUN: FileCheck %s --check-prefix=RAW --implicit-check-not=debug_ranges
# RAW: - Name: .debug_ranges
# RAW-NEXT: Type: SHT_PROGBITS
# RAW-NEXT: AddressAlign: 0x1
# RAW-NEXT: Content: '1000000000000000
## ^--------------- LowOffset
# RAW-SAME: {{^}}2000000000000000
## ^--------------- HighOffset
# RAW-SAME: {{^}}3000000000000000
## ^--------------- LowOffset
# RAW-SAME: {{^}}4000000000000000
## ^--------------- HighOffset
# RAW-SAME: {{^}}0000000000000000
## ^---------------
# RAW-SAME: {{^}}0000000000000000
## ---------------- terminator
# RAW-SAME: {{^}}1000000000000000
## ^--------------- LowOffset
# RAW-SAME: {{^}}2000000000000000
## ^--------------- HighOffset
# RAW-SAME: {{^}}0000000000000000
## ^---------------
# RAW-SAME: {{^}}0000000000000000'
## ---------------- terminator
## c) Test dumping an empty .debug_ranges section.
# RUN: yaml2obj --docnum=2 %s | obj2yaml | \
# RUN: FileCheck %s --check-prefix=EMPTY --implicit-check-not=Sections:
# EMPTY: DWARF:
# EMPTY-NEXT: debug_ranges: []
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
DWARF:
debug_ranges: []
## d) Test dumping a .debug_ranges section whose section header properties are
## overridden.
## Override the sh_type field.
# RUN: yaml2obj --docnum=3 -DTYPE=SHT_STRTAB %s | obj2yaml | \
# RUN: FileCheck %s -DTYPE=STRTAB --check-prefixes=COMMON
## Override the sh_flags field.
# RUN: yaml2obj --docnum=3 -DFLAGS=[SHF_ALLOC] %s | obj2yaml | \
# RUN: FileCheck %s -DTYPE=PROGBITS --check-prefixes=COMMON,FLAGS
## Override the sh_link field.
# RUN: yaml2obj --docnum=3 -DLINK='.sec' %s | obj2yaml | \
# RUN: FileCheck %s -DTYPE=PROGBITS --check-prefixes=COMMON,LINK
## Override the sh_entsize field.
# RUN: yaml2obj --docnum=3 -DENTSIZE=3 %s | obj2yaml | \
# RUN: FileCheck %s -DTYPE=PROGBITS --check-prefixes=COMMON,ENTSIZE
## Override the sh_info field.
# RUN: yaml2obj --docnum=3 -DINFO=3 %s | obj2yaml | \
# RUN: FileCheck %s -DTYPE=PROGBITS --check-prefixes=COMMON,INFO
## Override the sh_addralign field.
# RUN: yaml2obj --docnum=3 -DADDRALIGN=3 %s | obj2yaml | \
# RUN: FileCheck %s -DTYPE=PROGBITS --check-prefixes=COMMON,ADDRALIGN
## Override the sh_address field.
# RUN: yaml2obj --docnum=3 -DADDRESS=0x2020 %s | obj2yaml | \
# RUN: FileCheck %s -DTYPE=PROGBITS --check-prefixes=COMMON,ADDRESS
# COMMON: - Name: .debug_ranges
# COMMON-NEXT: Type: SHT_[[TYPE]]
# FLAGS-NEXT: Flags: [ SHF_ALLOC ]
# LINK-NEXT: Link: .sec
# ENTSIZE-NEXT: EntSize: 0x3
# INFO-NEXT: Info: 0x3
# ADDRALIGN-NEXT: AddressAlign: 0x3
# ADDRESS-NEXT: Address: 0x2020
# COMMON: debug_ranges:
# COMMON-NEXT: - Offset: 0x0
# COMMON-NEXT: AddrSize: 0x8
# COMMON-NEXT: Entries:
# COMMON-NEXT: - LowOffset: 0x10
# COMMON-NEXT: HighOffset: 0x20
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Sections:
- Name: .debug_ranges
Type: [[TYPE=SHT_PROGBITS]]
Flags: [[FLAGS=<none>]]
Link: [[LINK=<none>]]
EntSize: [[ENTSIZE=<none>]]
Info: [[INFO=<none>]]
AddressAlign: [[ADDRALIGN=0]]
Address: [[ADDRESS=<none>]]
- Name: .sec
Type: SHT_PROGBITS
DWARF:
debug_info:
- Version: 4
AddrSize: 8
debug_ranges:
- Entries:
- LowOffset: 0x10
HighOffset: 0x20