| ## Test that yaml2obj emits .debug_aranges section. |
| |
| ## a) Generate the .debug_aranges section from the "DWARF" entry. |
| |
| ## Generate and verify a big endian DWARF32 .debug_aranges section. |
| |
| # RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2MSB -DFORMAT=DWARF32 %s -o %t.be.o |
| # RUN: llvm-readobj --sections --section-data %t.be.o | \ |
| # RUN: FileCheck -DADDRALIGN=1 -DSIZE=96 %s --check-prefixes=DWARF-HEADER,DWARF-BE-CONTENT |
| |
| # DWARF-HEADER: Index: 1 |
| # DWARF-HEADER-NEXT: Name: .debug_aranges (1) |
| # DWARF-HEADER-NEXT: Type: SHT_PROGBITS (0x1) |
| # DWARF-HEADER-NEXT: Flags [ (0x0) |
| # DWARF-HEADER-NEXT: ] |
| # DWARF-HEADER-NEXT: Address: 0x0 |
| # DWARF-HEADER-NEXT: Offset: 0x40 |
| # DWARF-HEADER-NEXT: Size: [[SIZE]] |
| # DWARF-HEADER-NEXT: Link: 0 |
| # DWARF-HEADER-NEXT: Info: 0 |
| # DWARF-HEADER-NEXT: AddressAlignment: [[ADDRALIGN]] |
| # DWARF-HEADER-NEXT: EntrySize: 0 |
| # DWARF-BE-CONTENT-NEXT: SectionData ( |
| # DWARF-BE-CONTENT-NEXT: 0000: 0000002C 00020000 00000400 00000000 |
| ## | | | | | | |
| ## | | | | | +------- Padding zeros (4-byte) |
| ## | | | | +- SegSize (1-byte) 0x00 |
| ## | | | +- AddrSize (1-byte) 0x04 |
| ## | | +-------- CuOffset (4-byte) 0x00 |
| ## | +--- Version (2-byte) 0x02 |
| ## +------- InitialLength (4-byte) 0x2c |
| ## |
| # DWARF-BE-CONTENT-NEXT: 0010: 00001234 00000020 00000000 00000000 |
| ## | | | |
| ## | | +---------------- Terminating Entry |
| ## | +------- Length (4-byte) 0x20 |
| ## +------- Address (4-byte) 0x1234 |
| ## |
| # DWARF-BE-CONTENT-NEXT: 0020: 0000002C 00020000 00650800 00000000 |
| ## | | | | | | |
| ## | | | | | +------- Padding zeros (4-byte) |
| ## | | | | +- SegSize (1-byte) 0x00 |
| ## | | | +- AddrSize (1-byte) 0x08 |
| ## | | +-------- CuOffset (4-byte) 0x00 |
| ## | +--- Version (2-byte) 0x02 |
| ## +------- InitialLength (4-byte) 0x2c |
| ## |
| # DWARF-BE-CONTENT-NEXT: 0030: 00000000 00005678 00000000 00000020 |
| ## | | |
| ## | +---------------- Length (8-byte) 0x20 |
| ## +---------------- Address (8-byte) 0x5678 |
| ## |
| # DWARF-BE-CONTENT-NEXT: 0040: 00000000 56780000 00000000 00000010 |
| ## | | |
| ## | +---------------- Length (8-byte) 0x10 |
| ## +---------------- Address (8-byte) 0x5678 |
| ## |
| # DWARF-BE-CONTENT-NEXT: 0050: 00000000 00000000 00000000 00000000 |
| ## | |
| ## +---------------------------------- Terminating entry |
| ## |
| # DWARF-BE-CONTENT-NEXT: ) |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: [[ENDIAN]] |
| Type: ET_EXEC |
| DWARF: |
| debug_aranges: |
| - Format: [[FORMAT]] |
| Length: 0x2c |
| Version: 2 |
| CuOffset: 0 |
| AddressSize: 0x04 |
| SegmentSelectorSize: 0x00 |
| Descriptors: |
| - Address: 0x00001234 |
| Length: 0x20 |
| - Format: [[FORMAT]] |
| Length: 0x2c |
| Version: 2 |
| CuOffset: 0x65 |
| AddressSize: 0x08 |
| SegmentSelectorSize: 0x00 |
| Descriptors: |
| - Address: 0x0000000000005678 |
| Length: 0x20 |
| - Address: 0x0000000056780000 |
| Length: 0x10 |
| |
| ## Generate and verify a little endian DWARF32 .debug_aranges section. |
| |
| # RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2LSB -DFORMAT=DWARF32 %s -o %t.le.o |
| # RUN: llvm-readobj --sections --section-data %t.le.o | \ |
| # RUN: FileCheck -DADDRALIGN=1 -DSIZE=96 %s --check-prefixes=DWARF-HEADER,DWARF-LE-CONTENT |
| |
| # DWARF-LE-CONTENT-NEXT: SectionData ( |
| # DWARF-LE-CONTENT-NEXT: 0000: 2C000000 02000000 00000400 00000000 |
| ## | | | | | | |
| ## | | | | | +------- Padding zeros (4-byte) |
| ## | | | | +- SegSize (1-byte) 0x00 |
| ## | | | +- AddrSize (1-byte) 0x04 |
| ## | | +-------- CuOffset (4-byte) 0x00 |
| ## | +--- Version (2-byte) 0x02 |
| ## +------- InitialLength (4-byte) 0x2c |
| ## |
| # DWARF-LE-CONTENT-NEXT: 0010: 34120000 20000000 00000000 00000000 |
| ## | | | |
| ## | | +---------------- Terminating Entry |
| ## | +------- Length (4-byte) 0x20 |
| ## +------- Address (4-byte) 0x1234 |
| ## |
| # DWARF-LE-CONTENT-NEXT: 0020: 2C000000 02006500 00000800 00000000 |
| ## | | | | | | |
| ## | | | | | +------- Padding zeros (4-byte) |
| ## | | | | +- SegSize (1-byte) 0x00 |
| ## | | | +- AddrSize (1-byte) 0x08 |
| ## | | +-------- CuOffset (4-byte) 0x00 |
| ## | +--- Version (2-byte) 0x02 |
| ## +------- InitialLength (4-byte) 0x2c |
| ## |
| # DWARF-LE-CONTENT-NEXT: 0030: 78560000 00000000 20000000 00000000 |
| ## | | |
| ## | +---------------- Length (8-byte) 0x20 |
| ## +---------------- Address (8-byte) 0x5678 |
| ## |
| # DWARF-LE-CONTENT-NEXT: 0040: 00007856 00000000 10000000 00000000 |
| ## | | |
| ## | +---------------- Length (8-byte) 0x10 |
| ## +---------------- Address (8-byte) 0x5678 |
| ## |
| # DWARF-LE-CONTENT-NEXT: 0050: 00000000 00000000 00000000 00000000 |
| ## | |
| ## +---------------------------------- Terminating entry |
| ## |
| # DWARF-LE-CONTENT-NEXT: ) |
| |
| ## Generate and verify a big endian DWARF64 .debug_aranges section. |
| |
| # RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2MSB -DFORMAT=DWARF64 %s -o %t.be.dwarf64.o |
| # RUN: llvm-readobj --sections --section-data %t.be.dwarf64.o | \ |
| # RUN: FileCheck -DADDRALIGN=1 -DSIZE=120 %s --check-prefixes=DWARF-HEADER,DWARF64-BE-CONTENT |
| |
| # DWARF64-BE-CONTENT-NEXT: SectionData ( |
| # DWARF64-BE-CONTENT-NEXT: 0000: FFFFFFFF 00000000 0000002C 00020000 |
| ## | | | | |
| ## | | | +--- CuOffset (8-byte) 0x00 |
| ## | | +--- Version (2-byte) 0x02 |
| ## | +---------------- Length (8-byte) 0x2c |
| ## +------- DWARF64 Prefix (4-byte) UINT32_MAX |
| ## |
| # DWARF64-BE-CONTENT-NEXT: 0010: 00000000 00000400 00001234 00000020 |
| ## | | | | | |
| ## | | | | +------- Length (4-byte) 0x20 |
| ## | | | +------- Address (4-byte) 0x1234 |
| ## | | +- SegSize (1-byte) 0x00 |
| ## | +- AddrSize (1-byte) 0x04 |
| ## +------------ Lower bytes of CuOffset |
| ## |
| # DWARF64-BE-CONTENT-NEXT: 0020: 00000000 00000000 FFFFFFFF 00000000 |
| ## | | +------- Length (8-byte) 0x2c |
| ## | +------- DWARF64 Prefix |
| ## +---------------- Terminating Entry (8-byte) 0x00 |
| ## |
| # DWARF64-BE-CONTENT-NEXT: 0030: 0000002C 00020000 00000000 00650800 |
| ## | | | | | |
| ## | | | | +- SegSize (1-byte) 0x00 |
| ## | | | +- AddrSize (1-byte) 0x08 |
| ## | | +----------------- CuOffset (8-byte) 0x65 |
| ## | +--- Version (2-byte) 0x02 |
| ## +------- Lower bytes of Length |
| ## |
| # DWARF64-BE-CONTENT-NEXT: 0040: 00000000 00000000 00000000 00005678 |
| ## | | |
| ## | +---------------- Address (8-byte) 0x5678 |
| ## +---------------- Padding zeros (8-byte) |
| ## |
| # DWARF64-BE-CONTENT-NEXT: 0050: 00000000 00000020 00000000 56780000 |
| ## | | |
| ## | +---------------- Address (8-byte) 0x56780000 |
| ## +---------------- Length (8-byte) 0x20 |
| ## |
| # DWARF64-BE-CONTENT-NEXT: 0060: 00000000 00000010 00000000 00000000 |
| ## | | |
| ## | +---------------- Terminating Entry (16-byte) 0x00 |
| ## +---------------- Length (8-byte) 0x10 |
| ## |
| # DWARF64-BE-CONTENT-NEXT: 0070: 00000000 00000000 |
| ## | |
| ## +---------------- The last bytes of terminating entry. |
| # DWARF64-BE-CONTENT-NEXT: ) |
| |
| ## Generate and verify a little endian DWARF64 .debug_aranges section. |
| |
| # RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2LSB -DFORMAT=DWARF64 %s -o %t.le.dwarf64.o |
| # RUN: llvm-readobj --sections --section-data %t.le.dwarf64.o | \ |
| # RUN: FileCheck -DADDRALIGN=1 -DSIZE=120 %s --check-prefixes=DWARF-HEADER,DWARF64-LE-CONTENT |
| |
| # DWARF64-LE-CONTENT-NEXT: SectionData ( |
| # DWARF64-LE-CONTENT-NEXT: 0000: FFFFFFFF 2C000000 00000000 02000000 |
| ## | | | | |
| ## | | | +--- CuOffset (8-byte) 0x00 |
| ## | | +--- Version (2-byte) 0x02 |
| ## | +---------------- Length (8-byte) 0x2c |
| ## +------- DWARF64 Prefix (4-byte) UINT32_MAX |
| ## |
| # DWARF64-LE-CONTENT-NEXT: 0010: 00000000 00000400 34120000 20000000 |
| ## | | | | | |
| ## | | | | +------- Length (4-byte) 0x20 |
| ## | | | +------- Address (4-byte) 0x1234 |
| ## | | +- SegSize (1-byte) 0x00 |
| ## | +- AddrSize (1-byte) 0x04 |
| ## +------------ Lower bytes of CuOffset |
| ## |
| # DWARF64-LE-CONTENT-NEXT: 0020: 00000000 00000000 FFFFFFFF 2C000000 |
| ## | | +------- Length (8-byte) 0x2c |
| ## | +------- DWARF64 Prefix |
| ## +---------------- Terminating Entry (8-byte) 0x00 |
| ## |
| # DWARF64-LE-CONTENT-NEXT: 0030: 00000000 02006500 00000000 00000800 |
| ## | | | | | |
| ## | | | | +- SegSize (1-byte) 0x00 |
| ## | | | +- AddrSize (1-byte) 0x08 |
| ## | | +----------------- CuOffset (8-byte) 0x65 |
| ## | +--- Version (2-byte) 0x02 |
| ## +------- Lower bytes of Length |
| ## |
| # DWARF64-LE-CONTENT-NEXT: 0040: 00000000 00000000 78560000 00000000 |
| ## | | |
| ## | +---------------- Address (8-byte) 0x5678 |
| ## +---------------- Padding zeros (8-byte) |
| ## |
| # DWARF64-LE-CONTENT-NEXT: 0050: 20000000 00000000 00007856 00000000 |
| ## | | |
| ## | +---------------- Address (8-byte) 0x56780000 |
| ## +---------------- Length (8-byte) 0x20 |
| ## |
| # DWARF64-LE-CONTENT-NEXT: 0060: 10000000 00000000 00000000 00000000 |
| ## | | |
| ## | +---------------- Terminating Entry (16-byte) 0x00 |
| ## +---------------- Length (8-byte) 0x10 |
| ## |
| # DWARF64-LE-CONTENT-NEXT: 0070: 00000000 00000000 |
| ## | |
| ## +---------------- The last bytes of terminating entry. |
| # DWARF64-LE-CONTENT-NEXT: ) |
| |
| ## b) Generate the .debug_aranges section from raw section content. |
| |
| # RUN: yaml2obj --docnum=2 %s -o %t2.o |
| # RUN: llvm-readobj --sections --section-data %t2.o | \ |
| # RUN: FileCheck %s -DADDRALIGN=0 -DSIZE=3 --check-prefixes=DWARF-HEADER,ARBITRARY-CONTENT |
| |
| # ARBITRARY-CONTENT: SectionData ( |
| # ARBITRARY-CONTENT-NEXT: 0000: 112233 |
| # ARBITRARY-CONTENT-NEXT: ) |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2MSB |
| Type: ET_EXEC |
| Sections: |
| - Name: .debug_aranges |
| Type: SHT_PROGBITS |
| Content: "112233" |
| |
| ## c) Generate the .debug_aranges section when the "Size" is specified. |
| |
| # RUN: yaml2obj --docnum=3 %s -o %t3.o |
| # RUN: llvm-readobj --hex-dump=.debug_aranges %t3.o | FileCheck %s --check-prefix=SIZE |
| |
| # SIZE: Hex dump of section '.debug_aranges': |
| # SIZE-NEXT: 0x00000000 00000000 00000000 00000000 00000000 ................ |
| # SIZE-EMPTY: |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2MSB |
| Type: ET_EXEC |
| Sections: |
| - Name: .debug_aranges |
| Type: SHT_PROGBITS |
| Size: 0x10 |
| |
| ## d) Test that yaml2obj emits an error message when both the "Size" and the |
| ## "debug_aranges" entry are specified at the same time. |
| |
| # RUN: not yaml2obj --docnum=4 %s 2>&1 | FileCheck %s --check-prefix=ERROR |
| |
| # ERROR: yaml2obj: error: cannot specify section '.debug_aranges' contents in the 'DWARF' entry and the 'Content' or 'Size' in the 'Sections' entry at the same time |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2MSB |
| Type: ET_EXEC |
| Sections: |
| - Name: .debug_aranges |
| Type: SHT_PROGBITS |
| Size: 0x10 |
| DWARF: |
| debug_aranges: |
| - Length: 0x2c |
| Version: 2 |
| CuOffset: 0 |
| AddressSize: 0x08 |
| SegmentSelectorSize: 0x00 |
| Descriptors: |
| - Address: 0x0000000000001234 |
| Length: 0x20 |
| |
| ## e) Test that yaml2obj emits an error message when both the "Content" and the |
| ## "debug_aranges" entry are specified at the same time. |
| |
| # RUN: not yaml2obj --docnum=5 %s 2>&1 | FileCheck %s --check-prefix=ERROR |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2MSB |
| Type: ET_EXEC |
| Sections: |
| - Name: .debug_aranges |
| Type: SHT_PROGBITS |
| Content: "00" |
| DWARF: |
| debug_aranges: |
| - Length: 0x2c |
| Version: 2 |
| CuOffset: 0 |
| AddressSize: 0x08 |
| SegmentSelectorSize: 0x00 |
| Descriptors: |
| - Address: 0x0000000000001234 |
| Length: 0x20 |
| |
| ## f) Test that all the properties can be overridden by the section header when |
| ## the "debug_aranges" entry doesn't exist. |
| |
| # RUN: yaml2obj --docnum=6 %s -o %t6.o |
| # RUN: llvm-readelf --sections %t6.o | FileCheck %s --check-prefix=OVERRIDDEN |
| |
| # OVERRIDDEN: [Nr] Name Type Address Off Size ES Flg Lk Inf Al |
| # OVERRIDDEN: [ 1] .debug_aranges STRTAB 0000000000002020 000050 000030 01 A 2 1 2 |
| # OVERRIDDEN-NEXT: [ 2] .sec STRTAB 0000000000000000 000080 000000 00 0 0 0 |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2MSB |
| Type: ET_EXEC |
| Sections: |
| - Name: .debug_aranges |
| Type: SHT_STRTAB # SHT_PROGBITS by default. |
| Flags: [SHF_ALLOC] # 0 by default. |
| Link: .sec # 0 by default. |
| EntSize: 1 # 0 by default. |
| Info: 1 # 0 by default. |
| AddressAlign: 2 # 0 by default. |
| Address: 0x0000000000002020 # 0x00 by default. |
| Offset: 0x00000050 # 0x40 for the first section. |
| Size: 0x30 # Set the "Size" so that we can reuse the check tag "OVERRIDDEN". |
| - Name: .sec # Linked by .debug_aranges. |
| Type: SHT_STRTAB |
| |
| ## g) Test that all the properties can be overridden by the section header when |
| ## the "debug_aranges" entry exists. |
| |
| # RUN: yaml2obj --docnum=7 %s -o %t7.o |
| # RUN: llvm-readelf --sections %t7.o | FileCheck %s --check-prefix=OVERRIDDEN |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2MSB |
| Type: ET_EXEC |
| Sections: |
| - Name: .debug_aranges |
| Type: SHT_STRTAB # SHT_PROGBITS by default. |
| Flags: [SHF_ALLOC] # 0 by default. |
| Link: .sec # 0 by default. |
| EntSize: 1 # 0 by default. |
| Info: 1 # 0 by default. |
| AddressAlign: 2 # 1 by default. |
| Address: 0x0000000000002020 # 0x00 by default. |
| Offset: 0x00000050 # 0x40 for the first section. |
| - Name: .sec # Linked by .debug_aranges. |
| Type: SHT_STRTAB |
| DWARF: |
| debug_aranges: |
| - Length: 0x2c |
| Version: 2 |
| CuOffset: 0 |
| AddressSize: 0x08 |
| SegmentSelectorSize: 0x00 |
| Descriptors: |
| - Address: 0x0000000000001234 |
| Length: 0x20 |
| |
| ## h) Test that yaml2obj still generates a .debug_aranges section if we assign an invalid value |
| ## to 'AddrSize' when the 'Descriptors' list is empty. |
| |
| # RUN: yaml2obj --docnum=8 %s -o %t8.o |
| # RUN: llvm-readelf --hex-dump=.debug_aranges %t8.o | \ |
| # RUN: FileCheck %s --check-prefix=ADDR-SIZE |
| |
| # ADDR-SIZE: Hex dump of section '.debug_aranges': |
| # ADDR-SIZE-NEXT: 0x00000000 2c000000 02000000 00000700 00000000 |
| ## ^~ address_size (1-byte) 0x07 |
| # ADDR-SIZE-NEXT: 0x00000010 00000000 00000000 00000000 |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| DWARF: |
| debug_aranges: |
| - Length: 0x2c |
| Version: 2 |
| CuOffset: 0 |
| AddressSize: 0x07 ## Invalid address_size. |
| SegmentSelectorSize: 0 |
| Descriptors: [] |
| |
| ## i) Test that yaml2obj emits an error message if we try to assign an invalid value to |
| ## 'AddrSize' when the 'Descriptors' list isn't empty. |
| |
| # RUN: not yaml2obj --docnum=9 %s 2>&1 | \ |
| # RUN: FileCheck %s --check-prefix=INVALID-SIZE |
| |
| # INVALID-SIZE: yaml2obj: error: unable to write debug_aranges address: invalid integer write size: 7 |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| DWARF: |
| debug_aranges: |
| - Length: 0x2c |
| Version: 2 |
| CuOffset: 0 |
| AddressSize: 0x07 ## Invalid address_size. |
| SegmentSelectorSize: 0 |
| Descriptors: |
| - Address: 0x1234 |
| Length: 0x1000 |
| |
| ## j) Test the default value of address_size and segment_selector_size in a 64/32-bit object file. |
| |
| # RUN: yaml2obj --docnum=10 -DCLASS=ELFCLASS64 %s -o %t10.64-bit.o |
| # RUN: llvm-readelf --hex-dump=.debug_aranges %t10.64-bit.o | \ |
| # RUN: FileCheck %s --check-prefix=DEFAULT64 |
| |
| # DEFAULT64: Hex dump of section '.debug_aranges': |
| # DEFAULT64-NEXT: 0x00000000 2c000000 02000000 00000800 00000000 ,............... |
| ## ^------- unit_length (4-byte) |
| ## ^--- version (2-byte) |
| ## ^-------- debug_info_offset (4-byte) |
| ## ^- address_size (1-byte) |
| ## ^- segment_selector_size (1-byte) |
| ## ^------- padding (4-byte) |
| # DEFAULT64-NEXT: 0x00000010 34120000 00000000 00100000 00000000 4............... |
| ## ^---------------- address (8-byte) |
| ## ^---------------- length (8-byte) |
| # DEFAULT64-NEXT: 0x00000020 00000000 00000000 00000000 00000000 ................ |
| ## ^---------------------------------- terminating entry (16-byte) |
| |
| # RUN: yaml2obj --docnum=10 -DCLASS=ELFCLASS32 %s -o %t10.32-bit.o |
| # RUN: llvm-readelf --hex-dump=.debug_aranges %t10.32-bit.o | \ |
| # RUN: FileCheck %s --check-prefix=DEFAULT32 |
| |
| # DEFAULT32: Hex dump of section '.debug_aranges': |
| # DEFAULT32-NEXT: 0x00000000 2c000000 02000000 00000400 00000000 ,............... |
| ## ^------- unit_length (4-byte) |
| ## ^--- version (2-byte) |
| ## ^-------- debug_info_offset (4-byte) |
| ## ^- address_size (1-byte) |
| ## ^- segment_selector_size (1-byte) |
| ## ^------- padding (4-byte) |
| # DEFAULT32-NEXT: 0x00000010 34120000 00100000 00000000 00000000 4............... |
| ## ^------- address (4-byte) |
| ## ^------- length (4-byte) |
| ## ^---------------- terminating entry (8-byte) |
| |
| --- !ELF |
| FileHeader: |
| Class: [[CLASS]] |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| DWARF: |
| debug_aranges: |
| - Length: 0x2c |
| Version: 2 |
| CuOffset: 0 |
| Descriptors: |
| - Address: 0x1234 |
| Length: 0x1000 |
| |
| ## k) Test that yaml2obj is able to determine the correct length for the address range table |
| ## if the 'Length' field isn't specified. |
| |
| # RUN: yaml2obj --docnum=11 -DCLASS=ELFCLASS64 -DADDRSIZE=4 %s -o %t11.64-bit.o |
| # RUN: llvm-readelf --hex-dump=.debug_aranges %t11.64-bit.o | \ |
| # RUN: FileCheck %s --check-prefix=LENGTH64 |
| |
| # LENGTH64: Hex dump of section '.debug_aranges': |
| # LENGTH64-NEXT: 0x00000000 2c000000 02000000 00000800 00000000 ,............... |
| ## ^------- unit_length (4-byte) |
| ## ^--- version (2-byte) |
| ## ^-------- debug_info_offset (4-byte) |
| ## ^- address_size (1-byte) |
| ## ^- segment_selector_size (1-byte) |
| ## ^------- padding (4-byte) |
| # LENGTH64-NEXT: 0x00000010 34120000 00000000 00100000 00000000 4............... |
| ## ^---------------- address (8-byte) |
| ## ^---------------- length (8-byte) |
| # LENGTH64-NEXT: 0x00000020 00000000 00000000 00000000 00000000 ................ |
| ## ^---------------------------------- terminating entry (16-byte) |
| # LENGTH64-NEXT: 0x00000030 ffffffff 1c000000 00000000 02000000 ................ |
| ## ^------------------------- unit_length (12-byte) |
| ## ^--- version (2-byte) |
| ## ^--- debug_info_offset (8-byte) |
| # LENGTH64-NEXT: 0x00000040 00000000 00000400 34120000 21430000 ........4...!C.. |
| ## ------------- |
| ## ^- address_size (1-byte) |
| ## ^- segment_selector_size (1-byte) |
| ## ^------- address (4-byte) |
| ## ^------- length (4-byte) |
| # LENGTH64-NEXT: 0x00000050 00000000 00000000 ........ |
| ## ^---------------- terminating entry (8-byte) |
| |
| # RUN: yaml2obj --docnum=11 -DCLASS=ELFCLASS32 -DADDRSIZE=8 %s -o %t11.32-bit.o |
| # RUN: llvm-readelf --hex-dump=.debug_aranges %t11.32-bit.o | \ |
| # RUN: FileCheck %s --check-prefix=LENGTH32 |
| |
| # LENGTH32: Hex dump of section '.debug_aranges': |
| # LENGTH32-NEXT: 0x00000000 1c000000 02000000 00000400 00000000 ................ |
| ## ^------- unit_length (4-byte) |
| ## ^--- version (2-byte) |
| ## ^-------- debug_info_offset (4-byte) |
| ## ^- address_size (1-byte) |
| ## ^- segment_selector_size (1-byte) |
| ## ^------- padding (4-byte) |
| # LENGTH32-NEXT: 0x00000010 34120000 00100000 00000000 00000000 4............... |
| ## ^------- address (4-byte) |
| ## ^------- length (4-byte) |
| ## ^---------------- terminating entry (8-byte) |
| # LENGTH32-NEXT: 0x00000020 ffffffff 34000000 00000000 02000000 ....4........... |
| ## ^------------------------- unit_length (12-byte) |
| ## ^--- version (2-byte) |
| ## ^--- debug_info_offset (8-byte) |
| # LENGTH32-NEXT: 0x00000030 00000000 00000800 00000000 00000000 ................ |
| ## ------------- |
| ## ^- address_size (1-byte) |
| ## ^- segment_selector_size (1-byte) |
| ## ^---------------- padding (8-byte) |
| # LENGTH32-NEXT: 0x00000040 34120000 00000000 21430000 00000000 4.......!C...... |
| ## ^---------------- address (8-byte) |
| ## ^---------------- length (8-byte) |
| # LENGTH32-NEXT: 0x00000050 00000000 00000000 00000000 00000000 ................ |
| ## ^---------------------------------- terminating entry (16-byte) |
| |
| --- !ELF |
| FileHeader: |
| Class: [[CLASS]] |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| DWARF: |
| debug_aranges: |
| - Version: 2 |
| CuOffset: 0 |
| Descriptors: |
| - Address: 0x1234 |
| Length: 0x1000 |
| - Format: DWARF64 |
| Version: 2 |
| AddressSize: [[ADDRSIZE]] |
| CuOffset: 0 |
| Descriptors: |
| - Address: 0x1234 |
| Length: 0x4321 |
| |
| ## l) Test that the .debug_aranges section header is emitted if the "debug_aranges" |
| ## entry is empty. |
| |
| # RUN: yaml2obj --docnum=12 %s -o %t12.o |
| # RUN: llvm-readobj --sections --section-data %t12.o | \ |
| # RUN: FileCheck -DSIZE=0 -DADDRALIGN=1 %s --check-prefixes=DWARF-HEADER,EMPTY-CONTENT |
| |
| # EMPTY-CONTENT-NEXT: SectionData ( |
| # EMPTY-CONTENT-NEXT: ) |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| DWARF: |
| debug_aranges: [] |