200 lines
7.0 KiB
YAML
200 lines
7.0 KiB
YAML
## Test how we dump the .debug_aranges section.
|
|
|
|
## a) Test dumping the DWARF32/64 address range table from 32/64-bit, little/big endian object files.
|
|
## The .debug_aranges should be written to the 'DWARF' entry and the 'Sections' entry should remain empty.
|
|
|
|
# RUN: yaml2obj --docnum=1 -DBITS=32 -DENDIAN=LSB %s | obj2yaml | \
|
|
# RUN: FileCheck %s --check-prefix=BASIC --implicit-check-not=Sections \
|
|
# RUN: -DLENGTH1=24 -DLENGTH2=24 -DADDRSIZE=0x4 \
|
|
# RUN: -DVARADDR=0x1234 -DVARLEN=0x5678
|
|
|
|
# RUN: yaml2obj --docnum=1 -DBITS=32 -DENDIAN=MSB %s | obj2yaml | \
|
|
# RUN: FileCheck %s --check-prefix=BASIC --implicit-check-not=Sections \
|
|
# RUN: -DLENGTH1=24 -DLENGTH2=24 -DADDRSIZE=0x4 \
|
|
# RUN: -DVARADDR=0x1234 -DVARLEN=0x5678
|
|
|
|
# RUN: yaml2obj --docnum=1 -DBITS=64 -DENDIAN=LSB %s | obj2yaml | \
|
|
# RUN: FileCheck %s --check-prefix=BASIC --implicit-check-not=Sections \
|
|
# RUN: -DLENGTH1=3C -DLENGTH2=44 -DADDRSIZE=0x8 \
|
|
# RUN: -DVARADDR=0x1234 -DVARLEN=0x5678
|
|
|
|
# RUN: yaml2obj --docnum=1 -DBITS=64 -DENDIAN=MSB %s | obj2yaml | \
|
|
# RUN: FileCheck %s --check-prefix=BASIC --implicit-check-not=Sections \
|
|
# RUN: -DLENGTH1=3C -DLENGTH2=44 -DADDRSIZE=0x8 \
|
|
# RUN: -DVARADDR=0x1234 -DVARLEN=0x5678
|
|
|
|
# BASIC: DWARF:
|
|
# BASIC-NEXT: debug_aranges:
|
|
# BASIC-NEXT: - Length: 0x[[LENGTH1]]
|
|
# BASIC-NEXT: Version: 2
|
|
# BASIC-NEXT: CuOffset: 0x1234
|
|
# BASIC-NEXT: AddressSize: [[ADDRSIZE]]
|
|
# BASIC-NEXT: Descriptors:
|
|
# BASIC-NEXT: - Address: 0x1234
|
|
# BASIC-NEXT: Length: 0x5678
|
|
# BASIC-NEXT: - Address: 0x1234
|
|
# BASIC-NEXT: Length: 0x5678
|
|
# BASIC-NEXT: - Format: DWARF64
|
|
# BASIC-NEXT: Length: 0x[[LENGTH2]]
|
|
# BASIC-NEXT: Version: 2
|
|
# BASIC-NEXT: CuOffset: 0x1234567890ABCDEF
|
|
# BASIC-NEXT: AddressSize: [[ADDRSIZE]]
|
|
# BASIC-NEXT: Descriptors:
|
|
# BASIC-NEXT: - Address: [[VARADDR]]
|
|
# BASIC-NEXT: Length: [[VARLEN]]
|
|
# BASIC-NEXT: - Address: 0x1234
|
|
# BASIC-NEXT: Length: 0x5678
|
|
# BASIC-NEXT: ...
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS[[BITS]]
|
|
Data: ELFDATA2[[ENDIAN]]
|
|
Type: ET_EXEC
|
|
DWARF:
|
|
debug_aranges:
|
|
- Version: 2
|
|
CuOffset: 0x1234
|
|
Descriptors:
|
|
- Address: 0x1234
|
|
Length: 0x5678
|
|
- Address: 0x1234
|
|
Length: 0x5678
|
|
- Format: DWARF64
|
|
Version: 2
|
|
CuOffset: 0x1234567890abcdef
|
|
Descriptors:
|
|
- Address: [[ADDR=0x1234]]
|
|
Length: [[LENGTH=0x5678]]
|
|
- Address: 0x1234
|
|
Length: 0x5678
|
|
|
|
## b) Test dumping an .debug_aranges section whose section header properties are overridden.
|
|
|
|
# RUN: yaml2obj --docnum=2 -DTYPE=SHT_STRTAB %s | obj2yaml | FileCheck %s -DTYPE=STRTAB --check-prefixes=ARANGE,SHDR
|
|
# RUN: yaml2obj --docnum=2 -DFLAGS=[SHF_ALLOC] %s | obj2yaml | FileCheck %s -DTYPE=PROGBITS --check-prefixes=ARANGE,SHDR,FLAGS
|
|
# RUN: yaml2obj --docnum=2 -DLINK='.sec' %s | obj2yaml | FileCheck %s -DTYPE=PROGBITS --check-prefixes=ARANGE,SHDR,LINK
|
|
# RUN: yaml2obj --docnum=2 -DENTSIZE=3 %s | obj2yaml | FileCheck %s -DTYPE=PROGBITS --check-prefixes=ARANGE,SHDR,ENTSIZE
|
|
# RUN: yaml2obj --docnum=2 -DINFO=3 %s | obj2yaml | FileCheck %s -DTYPE=PROGBITS --check-prefixes=ARANGE,SHDR,INFO
|
|
# RUN: yaml2obj --docnum=2 -DADDRALIGN=3 %s | obj2yaml | FileCheck %s -DTYPE=PROGBITS --check-prefixes=ARANGE,SHDR,ADDRALIGN
|
|
# RUN: yaml2obj --docnum=2 -DADDRESS=0x2020 %s | obj2yaml | FileCheck %s -DTYPE=PROGBITS --check-prefixes=ARANGE,SHDR,ADDRESS
|
|
|
|
# SHDR: - Name: .debug_aranges
|
|
# SHDR-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
|
|
|
|
# ARANGE: DWARF:
|
|
# ARANGE-NEXT: debug_aranges:
|
|
# ARANGE-NEXT: - Length: 0x1C
|
|
# ARANGE-NEXT: Version: 2
|
|
# ARANGE-NEXT: CuOffset: 0x1234
|
|
# ARANGE-NEXT: AddressSize: 0x8
|
|
# ARANGE-NEXT: ...
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
Sections:
|
|
- Name: .debug_aranges
|
|
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_aranges:
|
|
- Version: 2
|
|
CuOffset: 0x1234
|
|
|
|
## c) Test dumping a .debug_aranges section whose address_size doesn't match the
|
|
## object file's address size.
|
|
|
|
# RUN: yaml2obj --docnum=3 %s | obj2yaml | \
|
|
# RUN: FileCheck %s -DLENGTH=0x1C -DADDRSIZE=0x4 -DADDRLEN=0x12345678 --check-prefix=ADDRSIZE
|
|
|
|
# ADDRSIZE: DWARF:
|
|
# ADDRSIZE-NEXT: debug_aranges:
|
|
# ADDRSIZE-NEXT: - Length: [[LENGTH]]
|
|
# ADDRSIZE-NEXT: Version: 2
|
|
# ADDRSIZE-NEXT: CuOffset: 0x1234
|
|
# ADDRSIZE-NEXT: AddressSize: [[ADDRSIZE]]
|
|
# ADDRSIZE-NEXT: Descriptors:
|
|
# ADDRSIZE-NEXT: - Address: [[ADDRLEN]]
|
|
# ADDRSIZE-NEXT: Length: [[ADDRLEN]]
|
|
# ADDRSIZE-NEXT: ...
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS[[BITS=64]]
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
DWARF:
|
|
debug_aranges:
|
|
- Version: 2
|
|
CuOffset: 0x1234
|
|
AddressSize: [[ADDRSIZE=0x4]]
|
|
Descriptors:
|
|
- Address: [[ADDRLEN=0x12345678]]
|
|
Length: [[ADDRLEN=0x12345678]]
|
|
|
|
# RUN: yaml2obj --docnum=3 -DBITS=32 -DADDRSIZE=0x8 -DADDRLEN=0x1234567890abcdef %s | \
|
|
# RUN: obj2yaml | \
|
|
# RUN: FileCheck %s -DLENGTH=0x2C -DADDRSIZE=0x8 -DADDRLEN=0x1234567890ABCDEF --check-prefix=ADDRSIZE
|
|
|
|
## d) Test dumping a .debug_aranges section whose length field doesn't match the actual length.
|
|
## This makes the DWARF parser fail to parse it and we will dump it as a raw content section.
|
|
|
|
# RUN: yaml2obj --docnum=4 %s | obj2yaml | FileCheck %s --check-prefix=RAW-CONTENT
|
|
|
|
# RAW-CONTENT: Sections:
|
|
# RAW-CONTENT-NEXT: - Name: .debug_aranges
|
|
# RAW-CONTENT-NEXT: Type: SHT_PROGBITS
|
|
# RAW-CONTENT-NEXT: AddressAlign: 0x1
|
|
# RAW-CONTENT-NEXT: Content: '3412000002003412000008000000000000000000000000000000000000000000'
|
|
# RAW-CONTENT-NEXT: ...
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
DWARF:
|
|
debug_aranges:
|
|
- Length: 0x1234
|
|
Version: 2
|
|
CuOffset: 0x1234
|
|
|
|
## e) Test dumping an empty .debug_aranges section.
|
|
|
|
# RUN: yaml2obj --docnum=5 %s | obj2yaml | FileCheck %s --check-prefix=EMPTY-CONTENT
|
|
|
|
# EMPTY-CONTENT: DWARF:
|
|
# EMPTY-CONTENT-NEXT: debug_aranges: []
|
|
# EMPTY-CONTENT-NEXT: ...
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
DWARF:
|
|
debug_aranges: []
|
|
|
|
## f) Show that dumping a table with a premature terminator entry still uses the
|
|
## DWARF tag.
|
|
|
|
# RUN: yaml2obj --docnum=1 %s -DADDR=0 -DLENGTH=0 -DBITS=64 -DENDIAN=LSB | obj2yaml | \
|
|
# RUN: FileCheck %s --check-prefix=BASIC --implicit-check-not=Sections \
|
|
# RUN: -DLENGTH1=3C -DLENGTH2=44 -DADDRSIZE=0x8 -DVARADDR=0x0 -DVARLEN=0x0
|