227 lines · yaml
1## Test how we dump the .debug_ranges section.2 3## a) Test dumping the .debug_ranges section from various object files with4## different endian and bits.5 6## Dump the .debug_ranges section from a 32-bit little endian object file where7## the address_size of debug_info is 4.8# RUN: yaml2obj --docnum=1 %s -DBITS=32 -DLOWOFFSET=0xFFFFFFFF \9# RUN: -DHIGHOFFSET=0x10 | obj2yaml | \10# RUN: FileCheck %s --check-prefix=BASIC -DADDRSIZE=0x4 \11# RUN: -DOFFSET=0x18 -DLOWOFFSET=0xFFFFFFFF -DHIGHOFFSET=0x1012 13## Dump the .debug_ranges section from a 32-bit big endian object file where the14## address_size of debug_info is 4.15# RUN: yaml2obj --docnum=1 %s -DBITS=32 -DENDIAN=MSB -DLOWOFFSET=0xFFFFFFFF \16# RUN: -DHIGHOFFSET=0x10 | obj2yaml | \17# RUN: FileCheck %s --check-prefix=BASIC -DADDRSIZE=0x4 \18# RUN: -DOFFSET=0x18 -DLOWOFFSET=0xFFFFFFFF -DHIGHOFFSET=0x1019 20## Dump the .debug_ranges section from a 32-bit little endian object file where21## the address_size of debug_info is 8.22# RUN: yaml2obj --docnum=1 %s -DBITS=32 -DADDRSIZE1=8 \23# RUN: -DADDRSIZE2=8 -DADDRSIZE3=8 -DADDRSIZE4=8 \24# RUN: -DLOWOFFSET=0xFFFFFFFFFFFFFFFF -DHIGHOFFSET=0x10 | obj2yaml | \25# RUN: FileCheck %s --check-prefix=BASIC -DADDRSIZE=0x8 \26# RUN: -DOFFSET=0x30 -DLOWOFFSET=0xFFFFFFFFFFFFFFFF \27# RUN: -DHIGHOFFSET=0x1028 29## Dump the .debug_ranges section from a 32-bit big endian object file where the30## address_size of debug_info is 8.31# RUN: yaml2obj --docnum=1 %s -DBITS=32 -DENDIAN=MSB -DADDRSIZE1=8 \32# RUN: -DADDRSIZE2=8 -DADDRSIZE3=8 -DADDRSIZE4=8 \33# RUN: -DLOWOFFSET=0xFFFFFFFFFFFFFFFF -DHIGHOFFSET=0x10 | obj2yaml | \34# RUN: FileCheck %s --check-prefix=BASIC -DADDRSIZE=0x8 \35# RUN: -DOFFSET=0x30 -DLOWOFFSET=0xFFFFFFFFFFFFFFFF -DHIGHOFFSET=0x1036 37## Dump the .debug_ranges section from a 64-bit little endian object file where38## the address_size of debug_info is 8.39# RUN: yaml2obj --docnum=1 %s -DLOWOFFSET=0xFFFFFFFFFFFFFFFF \40# RUN: -DHIGHOFFSET=0x10 | obj2yaml | \41# RUN: FileCheck %s --check-prefix=BASIC -DADDRSIZE=0x8 \42# RUN: -DOFFSET=0x30 -DLOWOFFSET=0xFFFFFFFFFFFFFFFF -DHIGHOFFSET=0x1043 44## Dump the .debug_ranges section from a 64-bit big endian object file where the45## address_size of debug_info is 8.46# RUN: yaml2obj --docnum=1 %s -DENDIAN=MSB -DLOWOFFSET=0xFFFFFFFFFFFFFFFF \47# RUN: -DHIGHOFFSET=0x10 | obj2yaml | \48# RUN: FileCheck %s --check-prefix=BASIC -DADDRSIZE=0x8 \49# RUN: -DOFFSET=0x30 -DLOWOFFSET=0xFFFFFFFFFFFFFFFF -DHIGHOFFSET=0x1050 51## Dump the .debug_ranges section from a 64-bit little endian object file where52## the address_size of debug_info is 4.53# RUN: yaml2obj --docnum=1 %s -DADDRSIZE1=4 -DADDRSIZE2=4 -DADDRSIZE3=4 \54# RUN: -DADDRSIZE4=4 -DLOWOFFSET=0xFFFFFFFFFFFFFFFF \55# RUN: -DHIGHOFFSET=0x10 | obj2yaml | \56# RUN: FileCheck %s --check-prefix=BASIC -DADDRSIZE=0x4 \57# RUN: -DOFFSET=0x18 -DLOWOFFSET=0xFFFFFFFF -DHIGHOFFSET=0x1058 59## Dump the .debug_ranges section from a 64-bit big endian object file where the60## address_size of debug_info is 4.61# RUN: yaml2obj --docnum=1 %s -DADDRSIZE1=4 -DADDRSIZE2=4 -DADDRSIZE3=4 \62# RUN: -DADDRSIZE4=4 -DLOWOFFSET=0xFFFFFFFFFFFFFFFF \63# RUN: -DHIGHOFFSET=0x10 | obj2yaml | \64# RUN: FileCheck %s --check-prefix=BASIC -DADDRSIZE=0x4 \65# RUN: -DOFFSET=0x18 -DLOWOFFSET=0xFFFFFFFF -DHIGHOFFSET=0x1066 67 68# BASIC-NOT: debug_ranges69# BASIC: debug_ranges:70# BASIC-NEXT: - Offset: 0x071# BASIC-NEXT: AddrSize: [[ADDRSIZE]]72# BASIC-NEXT: Entries:73# BASIC-NEXT: - LowOffset: 0x1074# BASIC-NEXT: HighOffset: 0x2075# BASIC-NEXT: - LowOffset: 0x3076# BASIC-NEXT: HighOffset: 0x4077# BASIC-NEXT: - Offset: [[OFFSET]]78# BASIC-NEXT: AddrSize: [[ADDRSIZE]]79# BASIC-NEXT: Entries:80# BASIC-NEXT: - LowOffset: [[LOWOFFSET]]81# BASIC-NEXT: HighOffset: [[HIGHOFFSET]]82 83--- !ELF84FileHeader:85 Class: ELFCLASS[[BITS=64]]86 Data: ELFDATA2[[ENDIAN=LSB]]87 Type: ET_EXEC88DWARF:89 ## The debug_ranges parser depends on the address_size field90 ## of compilation units. We add the .debug_info section to91 ## assist the parser.92 debug_info:93 - Version: 494 AddrSize: [[ADDRSIZE1=<none>]]95 - Version: 496 AddrSize: [[ADDRSIZE2=<none>]]97 debug_ranges:98 - AddrSize: [[ADDRSIZE3=<none>]]99 Entries:100 - LowOffset: 0x10101 HighOffset: 0x20102 - LowOffset: 0x30103 HighOffset: 0x40104 - AddrSize: [[ADDRSIZE4=<none>]]105 Entries:106 - LowOffset: [[LOWOFFSET=0x10]]107 HighOffset: [[HIGHOFFSET=0x20]]108 109## b) Test that obj2yaml dumps the .debug_ranges as a raw content section when110## the parser fails. In this case, the address_size of the two compilation units111## doesn't match.112 113# RUN: yaml2obj --docnum=1 -DADDRSIZE1=4 -DADDRSIZE2=8 %s | obj2yaml | \114# RUN: FileCheck %s --check-prefix=RAW --implicit-check-not=debug_ranges115 116# RAW: - Name: .debug_ranges117# RAW-NEXT: Type: SHT_PROGBITS118# RAW-NEXT: AddressAlign: 0x1119# RAW-NEXT: Content: '1000000000000000120## ^--------------- LowOffset121# RAW-SAME: {{^}}2000000000000000122## ^--------------- HighOffset123# RAW-SAME: {{^}}3000000000000000124## ^--------------- LowOffset125# RAW-SAME: {{^}}4000000000000000126## ^--------------- HighOffset127# RAW-SAME: {{^}}0000000000000000128## ^---------------129# RAW-SAME: {{^}}0000000000000000130## ---------------- terminator131# RAW-SAME: {{^}}1000000000000000132## ^--------------- LowOffset133# RAW-SAME: {{^}}2000000000000000134## ^--------------- HighOffset135# RAW-SAME: {{^}}0000000000000000136## ^---------------137# RAW-SAME: {{^}}0000000000000000'138## ---------------- terminator139 140## c) Test dumping an empty .debug_ranges section.141 142# RUN: yaml2obj --docnum=2 %s | obj2yaml | \143# RUN: FileCheck %s --check-prefix=EMPTY --implicit-check-not=Sections:144 145# EMPTY: DWARF:146# EMPTY-NEXT: debug_ranges: []147 148--- !ELF149FileHeader:150 Class: ELFCLASS64151 Data: ELFDATA2LSB152 Type: ET_EXEC153DWARF:154 debug_ranges: []155 156## d) Test dumping a .debug_ranges section whose section header properties are157## overridden.158 159## Override the sh_type field.160# RUN: yaml2obj --docnum=3 -DTYPE=SHT_STRTAB %s | obj2yaml | \161# RUN: FileCheck %s -DTYPE=STRTAB --check-prefixes=COMMON162 163## Override the sh_flags field.164# RUN: yaml2obj --docnum=3 -DFLAGS=[SHF_ALLOC] %s | obj2yaml | \165# RUN: FileCheck %s -DTYPE=PROGBITS --check-prefixes=COMMON,FLAGS166 167## Override the sh_link field.168# RUN: yaml2obj --docnum=3 -DLINK='.sec' %s | obj2yaml | \169# RUN: FileCheck %s -DTYPE=PROGBITS --check-prefixes=COMMON,LINK170 171## Override the sh_entsize field.172# RUN: yaml2obj --docnum=3 -DENTSIZE=3 %s | obj2yaml | \173# RUN: FileCheck %s -DTYPE=PROGBITS --check-prefixes=COMMON,ENTSIZE174 175## Override the sh_info field.176# RUN: yaml2obj --docnum=3 -DINFO=3 %s | obj2yaml | \177# RUN: FileCheck %s -DTYPE=PROGBITS --check-prefixes=COMMON,INFO178 179## Override the sh_addralign field.180# RUN: yaml2obj --docnum=3 -DADDRALIGN=3 %s | obj2yaml | \181# RUN: FileCheck %s -DTYPE=PROGBITS --check-prefixes=COMMON,ADDRALIGN182 183## Override the sh_address field.184# RUN: yaml2obj --docnum=3 -DADDRESS=0x2020 %s | obj2yaml | \185# RUN: FileCheck %s -DTYPE=PROGBITS --check-prefixes=COMMON,ADDRESS186 187# COMMON: - Name: .debug_ranges188# COMMON-NEXT: Type: SHT_[[TYPE]]189# FLAGS-NEXT: Flags: [ SHF_ALLOC ]190# LINK-NEXT: Link: .sec191# ENTSIZE-NEXT: EntSize: 0x3192# INFO-NEXT: Info: 0x3193# ADDRALIGN-NEXT: AddressAlign: 0x3194# ADDRESS-NEXT: Address: 0x2020195 196# COMMON: debug_ranges:197# COMMON-NEXT: - Offset: 0x0198# COMMON-NEXT: AddrSize: 0x8199# COMMON-NEXT: Entries:200# COMMON-NEXT: - LowOffset: 0x10201# COMMON-NEXT: HighOffset: 0x20202 203--- !ELF204FileHeader:205 Class: ELFCLASS64206 Data: ELFDATA2LSB207 Type: ET_EXEC208Sections:209 - Name: .debug_ranges210 Type: [[TYPE=SHT_PROGBITS]]211 Flags: [[FLAGS=<none>]]212 Link: [[LINK=<none>]]213 EntSize: [[ENTSIZE=<none>]]214 Info: [[INFO=<none>]]215 AddressAlign: [[ADDRALIGN=0]]216 Address: [[ADDRESS=<none>]]217 - Name: .sec218 Type: SHT_PROGBITS219DWARF:220 debug_info:221 - Version: 4222 AddrSize: 8223 debug_ranges:224 - Entries:225 - LowOffset: 0x10226 HighOffset: 0x20227