## Test how we dump the .debug_addr section. ## a) Dumping address tables from various object files. ## Dumping address tables from a little endian 64-bit object file. # RUN: yaml2obj --docnum=1 %s -DADDRESS=0xFFFFFFFFFFFFFFFF \ # RUN: -DADDRSIZE=4 | obj2yaml | \ # RUN: FileCheck %s --check-prefix=BASIC --implicit-check-not=Sections: \ # RUN: -DLENGTH1=0x14 -DADDRSIZE1=0x8 -DADDR=0xFFFFFFFFFFFFFFFF \ # RUN: -DLENGTH2=0xC -DADDRSIZE2=0x4 ## Dumping address tables from a big endian 64-bit object file. # RUN: yaml2obj --docnum=1 %s -DENDIAN=MSB -DADDRESS=0xFFFFFFFFFFFFFFFF \ # RUN: -DADDRSIZE=4 | obj2yaml | \ # RUN: FileCheck %s --check-prefix=BASIC --implicit-check-not=Sections: \ # RUN: -DLENGTH1=0x14 -DADDRSIZE1=0x8 -DADDR=0xFFFFFFFFFFFFFFFF \ # RUN: -DLENGTH2=0xC -DADDRSIZE2=0x4 ## Dumping address tables from a little endian 32-bit object file. # RUN: yaml2obj --docnum=1 %s -DBITS=32 -DADDRESS=0xFFFFFFFF \ # RUN: -DADDRSIZE=8 | obj2yaml | \ # RUN: FileCheck %s --check-prefix=BASIC --implicit-check-not=Sections: \ # RUN: -DLENGTH1=0xC -DADDRSIZE1=0x4 -DADDR=0xFFFFFFFF \ # RUN: -DLENGTH2=0x14 -DADDRSIZE2=0x8 ## Dumping address tables from a big endian 32-bit object file. # RUN: yaml2obj --docnum=1 %s -DBITS=32 -DENDIAN=MSB -DADDRESS=0xFFFFFFFF \ # RUN: -DADDRSIZE=8 | obj2yaml | \ # RUN: FileCheck %s --check-prefix=BASIC --implicit-check-not=Sections: \ # RUN: -DLENGTH1=0xC -DADDRSIZE1=0x4 -DADDR=0xFFFFFFFF \ # RUN: -DLENGTH2=0x14 -DADDRSIZE2=0x8 # BASIC: DWARF: # BASIC-NEXT: debug_addr: # BASIC-NEXT: - Length: [[LENGTH1]] # BASIC-NEXT: Version: 0x5 # BASIC-NEXT: AddressSize: [[ADDRSIZE1]] # BASIC-NEXT: Entries: # BASIC-NEXT: - Address: 0x1234 # BASIC-NEXT: - Address: 0x5678 # BASIC-NEXT: - Format: DWARF64 # BASIC-NEXT: Length: [[LENGTH1]] # BASIC-NEXT: Version: 0x5 # BASIC-NEXT: AddressSize: [[ADDRSIZE1]] # BASIC-NEXT: Entries: # BASIC-NEXT: - Address: 0x1234 # BASIC-NEXT: - Address: [[ADDR]] # BASIC-NEXT: - Length: [[LENGTH2]] # BASIC-NEXT: Version: 0x5 # BASIC-NEXT: AddressSize: [[ADDRSIZE2]] # BASIC-NEXT: Entries: # BASIC-NEXT: - Address: 0x1234 # BASIC-NEXT: - Address: 0x5678 # BASIC-NEXT: - Format: DWARF64 # BASIC-NEXT: Length: [[LENGTH2]] # BASIC-NEXT: Version: 0x5 # BASIC-NEXT: AddressSize: [[ADDRSIZE2]] # BASIC-NEXT: Entries: # BASIC-NEXT: - Address: 0x1234 # BASIC-NEXT: - Address: 0x5678 # BASIC-NEXT: ... --- !ELF FileHeader: Class: ELFCLASS[[BITS=64]] Data: ELFDATA2[[ENDIAN=LSB]] Type: ET_EXEC DWARF: debug_addr: ## A DWARF32 address table. - Version: 5 Entries: - Address: 0x1234 - Address: 0x5678 ## A DWARF64 address table. - Format: DWARF64 Version: 5 Entries: - Address: 0x1234 - Address: [[ADDRESS]] ## A DWARF32 address table with a mutable address size. - Version: 5 AddressSize: [[ADDRSIZE]] Entries: - Address: 0x1234 - Address: 0x5678 ## A DWARF64 address table with a mutable address size. - Format: DWARF64 Version: 5 AddressSize: [[ADDRSIZE]] Entries: - Address: 0x1234 - Address: 0x5678 ## b) Test dumping a .debug_addr section whose section header properties are ## overridden. ## Override the sh_type field. # RUN: yaml2obj --docnum=2 %s -DTYPE=SHT_STRTAB | obj2yaml | \ # RUN: FileCheck %s -DTYPE=SHT_STRTAB --check-prefix=COMMON ## Override the sh_flags field. # RUN: yaml2obj --docnum=2 %s -DFLAGS='[ SHF_ALLOC ]' | obj2yaml | \ # RUN: FileCheck %s -DTYPE=SHT_PROGBITS --check-prefixes=COMMON,FLAGS ## Override the sh_link field. # RUN: yaml2obj --docnum=2 %s -DLINK=.sec | obj2yaml | \ # RUN: FileCheck %s -DTYPE=SHT_PROGBITS --check-prefixes=COMMON,LINK ## Override the sh_addr field. # RUN: yaml2obj --docnum=2 %s -DADDRESS=0x2020 | obj2yaml | \ # RUN: FileCheck %s -DTYPE=SHT_PROGBITS --check-prefixes=COMMON,ADDR ## Override the sh_addralign field. # RUN: yaml2obj --docnum=2 %s -DADDRALIGN=3 | obj2yaml | \ # RUN: FileCheck %s -DTYPE=SHT_PROGBITS --check-prefixes=COMMON,ADDRALIGN ## Override the sh_entsize field. # RUN: yaml2obj --docnum=2 %s -DENTSIZE=3 | obj2yaml | \ # RUN: FileCheck %s -DTYPE=SHT_PROGBITS --check-prefixes=COMMON,ENTSIZE ## Override the sh_info field. # RUN: yaml2obj --docnum=2 %s -DINFO=3 | obj2yaml | \ # RUN: FileCheck %s -DTYPE=SHT_PROGBITS --check-prefixes=COMMON,INFO # COMMON: Sections: # COMMON-NEXT: - Name: .debug_addr # COMMON-NEXT: Type: [[TYPE]] # FLAGS-NEXT: Flags: [ SHF_ALLOC ] # LINK-NEXT: Link: .sec # ADDR-NEXT: Address: 0x2020 # ADDRALIGN-NEXT: AddressAlign: 0x3 # ENTSIZE-NEXT: EntSize: 0x3 # INFO-NEXT: Info: 0x3 # COMMON-NEXT: - Name: .sec # COMMON-NEXT: Type: SHT_PROGBITS # COMMON-NEXT: DWARF: # COMMON-NEXT: debug_addr: # COMMON-NEXT: - Length: 0x14 # COMMON-NEXT: Version: 0x5 # COMMON-NEXT: AddressSize: 0x8 # COMMON-NEXT: Entries: # COMMON-NEXT: - Address: 0x1234 # COMMON-NEXT: - Address: 0x5678 # COMMON-NEXT: ... --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_EXEC Sections: - Name: .debug_addr Type: [[TYPE=SHT_PROGBITS]] Flags: [[FLAGS=]] Link: [[LINK=]] EntSize: [[ENTSIZE=]] Info: [[INFO=]] AddressAlign: [[ADDRALIGN=0]] Address: [[ADDRESS=]] - Name: .sec Type: SHT_PROGBITS DWARF: debug_addr: - Version: 5 Entries: - Address: 0x1234 - Address: 0x5678 ## c) Test dumping an address table whose version isn't 5. ## This causes the DWARF parser to fail to parse it and we will dump it as a raw ## content section. # RUN: yaml2obj --docnum=3 %s -DCONTENT="AABBCC" | obj2yaml | \ # RUN: FileCheck %s --check-prefix=RAW --implicit-check-not=DWARF: # RAW: Sections: # RAW-NEXT: - Name: .debug_addr # RAW-NEXT: Type: SHT_PROGBITS # RAW-NEXT: AddressAlign: 0x1 # RAW-NEXT: Content: AABBCC # RAW-NEXT: ... --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_EXEC Sections: - Name: .debug_addr Type: SHT_PROGBITS AddressAlign: 1 Size: [[SIZE=]] Content: [[CONTENT=]] ## d) Test dumping an empty .debug_addr section. # RUN: yaml2obj --docnum=3 %s -DSIZE=0 | obj2yaml | \ # RUN: FileCheck %s --check-prefix=EMPTY --implicit-check-not=Sections: # EMPTY: DWARF: # EMPTY-NEXT: debug_addr: [] # EMPTY-NEXT: ...