200 lines · yaml
1## Test how we dump the .debug_aranges section.2 3## a) Test dumping the DWARF32/64 address range table from 32/64-bit, little/big endian object files.4## The .debug_aranges should be written to the 'DWARF' entry and the 'Sections' entry should remain empty.5 6# RUN: yaml2obj --docnum=1 -DBITS=32 -DENDIAN=LSB %s | obj2yaml | \7# RUN: FileCheck %s --check-prefix=BASIC --implicit-check-not=Sections \8# RUN: -DLENGTH1=24 -DLENGTH2=24 -DADDRSIZE=0x4 \9# RUN: -DVARADDR=0x1234 -DVARLEN=0x567810 11# RUN: yaml2obj --docnum=1 -DBITS=32 -DENDIAN=MSB %s | obj2yaml | \12# RUN: FileCheck %s --check-prefix=BASIC --implicit-check-not=Sections \13# RUN: -DLENGTH1=24 -DLENGTH2=24 -DADDRSIZE=0x4 \14# RUN: -DVARADDR=0x1234 -DVARLEN=0x567815 16# RUN: yaml2obj --docnum=1 -DBITS=64 -DENDIAN=LSB %s | obj2yaml | \17# RUN: FileCheck %s --check-prefix=BASIC --implicit-check-not=Sections \18# RUN: -DLENGTH1=3C -DLENGTH2=44 -DADDRSIZE=0x8 \19# RUN: -DVARADDR=0x1234 -DVARLEN=0x567820 21# RUN: yaml2obj --docnum=1 -DBITS=64 -DENDIAN=MSB %s | obj2yaml | \22# RUN: FileCheck %s --check-prefix=BASIC --implicit-check-not=Sections \23# RUN: -DLENGTH1=3C -DLENGTH2=44 -DADDRSIZE=0x8 \24# RUN: -DVARADDR=0x1234 -DVARLEN=0x567825 26# BASIC: DWARF:27# BASIC-NEXT: debug_aranges:28# BASIC-NEXT: - Length: 0x[[LENGTH1]]29# BASIC-NEXT: Version: 230# BASIC-NEXT: CuOffset: 0x123431# BASIC-NEXT: AddressSize: [[ADDRSIZE]]32# BASIC-NEXT: Descriptors:33# BASIC-NEXT: - Address: 0x123434# BASIC-NEXT: Length: 0x567835# BASIC-NEXT: - Address: 0x123436# BASIC-NEXT: Length: 0x567837# BASIC-NEXT: - Format: DWARF6438# BASIC-NEXT: Length: 0x[[LENGTH2]]39# BASIC-NEXT: Version: 240# BASIC-NEXT: CuOffset: 0x1234567890ABCDEF41# BASIC-NEXT: AddressSize: [[ADDRSIZE]]42# BASIC-NEXT: Descriptors:43# BASIC-NEXT: - Address: [[VARADDR]]44# BASIC-NEXT: Length: [[VARLEN]]45# BASIC-NEXT: - Address: 0x123446# BASIC-NEXT: Length: 0x567847# BASIC-NEXT: ...48 49--- !ELF50FileHeader:51 Class: ELFCLASS[[BITS]]52 Data: ELFDATA2[[ENDIAN]]53 Type: ET_EXEC54DWARF:55 debug_aranges:56 - Version: 257 CuOffset: 0x123458 Descriptors:59 - Address: 0x123460 Length: 0x567861 - Address: 0x123462 Length: 0x567863 - Format: DWARF6464 Version: 265 CuOffset: 0x1234567890abcdef66 Descriptors:67 - Address: [[ADDR=0x1234]]68 Length: [[LENGTH=0x5678]]69 - Address: 0x123470 Length: 0x567871 72## b) Test dumping an .debug_aranges section whose section header properties are overridden.73 74# RUN: yaml2obj --docnum=2 -DTYPE=SHT_STRTAB %s | obj2yaml | FileCheck %s -DTYPE=STRTAB --check-prefixes=ARANGE,SHDR75# RUN: yaml2obj --docnum=2 -DFLAGS=[SHF_ALLOC] %s | obj2yaml | FileCheck %s -DTYPE=PROGBITS --check-prefixes=ARANGE,SHDR,FLAGS76# RUN: yaml2obj --docnum=2 -DLINK='.sec' %s | obj2yaml | FileCheck %s -DTYPE=PROGBITS --check-prefixes=ARANGE,SHDR,LINK77# RUN: yaml2obj --docnum=2 -DENTSIZE=3 %s | obj2yaml | FileCheck %s -DTYPE=PROGBITS --check-prefixes=ARANGE,SHDR,ENTSIZE78# RUN: yaml2obj --docnum=2 -DINFO=3 %s | obj2yaml | FileCheck %s -DTYPE=PROGBITS --check-prefixes=ARANGE,SHDR,INFO79# RUN: yaml2obj --docnum=2 -DADDRALIGN=3 %s | obj2yaml | FileCheck %s -DTYPE=PROGBITS --check-prefixes=ARANGE,SHDR,ADDRALIGN80# RUN: yaml2obj --docnum=2 -DADDRESS=0x2020 %s | obj2yaml | FileCheck %s -DTYPE=PROGBITS --check-prefixes=ARANGE,SHDR,ADDRESS81 82# SHDR: - Name: .debug_aranges83# SHDR-NEXT: Type: SHT_[[TYPE]]84# FLAGS-NEXT: Flags: [ SHF_ALLOC ]85# LINK-NEXT: Link: .sec86# ENTSIZE-NEXT: EntSize: 0x387# INFO-NEXT: Info: 0x388# ADDRALIGN-NEXT: AddressAlign: 0x389# ADDRESS-NEXT: Address: 0x202090 91# ARANGE: DWARF:92# ARANGE-NEXT: debug_aranges:93# ARANGE-NEXT: - Length: 0x1C94# ARANGE-NEXT: Version: 295# ARANGE-NEXT: CuOffset: 0x123496# ARANGE-NEXT: AddressSize: 0x897# ARANGE-NEXT: ...98 99--- !ELF100FileHeader:101 Class: ELFCLASS64102 Data: ELFDATA2LSB103 Type: ET_EXEC104Sections:105 - Name: .debug_aranges106 Type: [[TYPE=SHT_PROGBITS]]107 Flags: [[FLAGS=<none>]]108 Link: [[LINK=<none>]]109 EntSize: [[ENTSIZE=<none>]]110 Info: [[INFO=<none>]]111 AddressAlign: [[ADDRALIGN=0]]112 Address: [[ADDRESS=<none>]]113 - Name: .sec114 Type: SHT_PROGBITS115DWARF:116 debug_aranges:117 - Version: 2118 CuOffset: 0x1234119 120## c) Test dumping a .debug_aranges section whose address_size doesn't match the121## object file's address size.122 123# RUN: yaml2obj --docnum=3 %s | obj2yaml | \124# RUN: FileCheck %s -DLENGTH=0x1C -DADDRSIZE=0x4 -DADDRLEN=0x12345678 --check-prefix=ADDRSIZE125 126# ADDRSIZE: DWARF:127# ADDRSIZE-NEXT: debug_aranges:128# ADDRSIZE-NEXT: - Length: [[LENGTH]]129# ADDRSIZE-NEXT: Version: 2130# ADDRSIZE-NEXT: CuOffset: 0x1234131# ADDRSIZE-NEXT: AddressSize: [[ADDRSIZE]]132# ADDRSIZE-NEXT: Descriptors:133# ADDRSIZE-NEXT: - Address: [[ADDRLEN]]134# ADDRSIZE-NEXT: Length: [[ADDRLEN]]135# ADDRSIZE-NEXT: ...136 137--- !ELF138FileHeader:139 Class: ELFCLASS[[BITS=64]]140 Data: ELFDATA2LSB141 Type: ET_EXEC142DWARF:143 debug_aranges:144 - Version: 2145 CuOffset: 0x1234146 AddressSize: [[ADDRSIZE=0x4]]147 Descriptors:148 - Address: [[ADDRLEN=0x12345678]]149 Length: [[ADDRLEN=0x12345678]]150 151# RUN: yaml2obj --docnum=3 -DBITS=32 -DADDRSIZE=0x8 -DADDRLEN=0x1234567890abcdef %s | \152# RUN: obj2yaml | \153# RUN: FileCheck %s -DLENGTH=0x2C -DADDRSIZE=0x8 -DADDRLEN=0x1234567890ABCDEF --check-prefix=ADDRSIZE154 155## d) Test dumping a .debug_aranges section whose length field doesn't match the actual length.156## This makes the DWARF parser fail to parse it and we will dump it as a raw content section.157 158# RUN: yaml2obj --docnum=4 %s | obj2yaml | FileCheck %s --check-prefix=RAW-CONTENT159 160# RAW-CONTENT: Sections:161# RAW-CONTENT-NEXT: - Name: .debug_aranges162# RAW-CONTENT-NEXT: Type: SHT_PROGBITS163# RAW-CONTENT-NEXT: AddressAlign: 0x1164# RAW-CONTENT-NEXT: Content: '3412000002003412000008000000000000000000000000000000000000000000'165# RAW-CONTENT-NEXT: ...166 167--- !ELF168FileHeader:169 Class: ELFCLASS64170 Data: ELFDATA2LSB171 Type: ET_EXEC172DWARF:173 debug_aranges:174 - Length: 0x1234175 Version: 2176 CuOffset: 0x1234177 178## e) Test dumping an empty .debug_aranges section.179 180# RUN: yaml2obj --docnum=5 %s | obj2yaml | FileCheck %s --check-prefix=EMPTY-CONTENT181 182# EMPTY-CONTENT: DWARF:183# EMPTY-CONTENT-NEXT: debug_aranges: []184# EMPTY-CONTENT-NEXT: ...185 186--- !ELF187FileHeader:188 Class: ELFCLASS64189 Data: ELFDATA2LSB190 Type: ET_EXEC191DWARF:192 debug_aranges: []193 194## f) Show that dumping a table with a premature terminator entry still uses the195## DWARF tag.196 197# RUN: yaml2obj --docnum=1 %s -DADDR=0 -DLENGTH=0 -DBITS=64 -DENDIAN=LSB | obj2yaml | \198# RUN: FileCheck %s --check-prefix=BASIC --implicit-check-not=Sections \199# RUN: -DLENGTH1=3C -DLENGTH2=44 -DADDRSIZE=0x8 -DVARADDR=0x0 -DVARLEN=0x0200