| ## Test that yaml2obj emits a .debug_str_offsets section when requested. |
| |
| ## a) Generate and verify a little endian .debug_str_offsets section. |
| |
| # RUN: yaml2obj -DENDIAN=ELFDATA2LSB --docnum=1 %s -o %t1.le.o |
| # RUN: llvm-readobj --sections --section-data %t1.le.o | \ |
| # RUN: FileCheck -DSIZE=48 -DADDRALIGN=1 %s --check-prefixes=SHDR,DWARF-LE |
| |
| # SHDR: Index: 1 |
| # SHDR-NEXT: Name: .debug_str_offsets (1) |
| # SHDR-NEXT: Type: SHT_PROGBITS (0x1) |
| # SHDR-NEXT: Flags [ (0x0) |
| # SHDR-NEXT: ] |
| # SHDR-NEXT: Address: 0x0 |
| # SHDR-NEXT: Offset: 0x40 |
| # SHDR-NEXT: Size: [[SIZE]] |
| # SHDR-NEXT: Link: 0 |
| # SHDR-NEXT: Info: 0 |
| # SHDR-NEXT: AddressAlignment: [[ADDRALIGN]] |
| # SHDR-NEXT: EntrySize: 0 |
| # DWARF-LE-NEXT: SectionData ( |
| # DWARF-LE-NEXT: 0000: 0C000000 05000000 78563412 21436587 |........xV4.!Ce.| |
| ## ^------- unit_length (4-byte) |
| ## ^--- version (2-byte) |
| ## ^--- padding (2-byte) |
| ## ^------- offsets[0] (4-byte) |
| ## ^------- offsets[1] (4-byte) |
| # DWARF-LE-NEXT: 0010: FFFFFFFF 14000000 00000000 05000000 |................| |
| ## ^------------------------- unit_length (12-byte) |
| ## ^--- version (2-byte) |
| ## ^--- padding (2-byte) |
| # DWARF-LE-NEXT: 0020: F0DEBC9A 78563412 89674523 01EFCDAB |....xV4..gE#....| |
| ## ^---------------- offsets[0] (8-byte) |
| ## ^---------------- offsets[1] (8-byte) |
| # DWARF-LE-NEXT: ) |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: [[ENDIAN]] |
| Type: ET_EXEC |
| DWARF: |
| debug_str_offsets: |
| - Offsets: |
| - 0x12345678 |
| - 0x87654321 |
| - Format: DWARF64 |
| Offsets: |
| - 0x123456789abcdef0 |
| - 0xabcdef0123456789 |
| |
| ## b) Generate and verify a big endian .debug_str_offsets section. |
| |
| # RUN: yaml2obj -DENDIAN=ELFDATA2MSB --docnum=1 %s -o %t1.be.o |
| # RUN: llvm-readobj --sections --section-data %t1.be.o | \ |
| # RUN: FileCheck -DSIZE=48 -DADDRALIGN=1 %s --check-prefixes=SHDR,DWARF-BE |
| |
| # DWARF-BE-NEXT: SectionData ( |
| # DWARF-BE-NEXT: 0000: 0000000C 00050000 12345678 87654321 |.........4Vx.eC!| |
| ## ^------- unit_length (4-byte) |
| ## ^--- version (2-byte) |
| ## ^--- padding (2-byte) |
| ## ^------- offsets[0] (4-byte) |
| ## ^------- offsets[1] (4-byte) |
| # DWARF-BE-NEXT: 0010: FFFFFFFF 00000000 00000014 00050000 |................| |
| ## ^------------------------- unit_length (12-byte) |
| ## ^--- version (2-byte) |
| ## ^--- padding (2-byte) |
| # DWARF-BE-NEXT: 0020: 12345678 9ABCDEF0 ABCDEF01 23456789 |.4Vx........#Eg.| |
| ## ^---------------- offsets[0] (8-byte) |
| ## ^---------------- offsets[1] (8-byte) |
| # DWARF-BE-NEXT: ) |
| |
| ## c) Test that the length, version and padding fields can be overwritten. |
| |
| # RUN: yaml2obj --docnum=2 %s -o %t2.o |
| # RUN: llvm-readelf --hex-dump=.debug_str_offsets %t2.o | \ |
| # RUN: FileCheck %s --check-prefix=OVERWRITE |
| |
| # OVERWRITE: Hex dump of section '.debug_str_offsets': |
| # OVERWRITE-NEXT: 0x00000000 34120000 06001200 4....... |
| ## ^------- unit_length (4-byte) |
| ## ^--- version (2-byte) |
| ## ^--- padding (2-bye) |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| DWARF: |
| debug_str_offsets: |
| - Length: 0x1234 |
| Version: 6 |
| Padding: 0x12 |
| |
| ## d) Test that an empty 'Offsets' field is allowed. |
| |
| # RUN: yaml2obj --docnum=3 %s -o %t3.o |
| # RUN: llvm-readelf --hex-dump=.debug_str_offsets %t3.o | \ |
| # RUN: FileCheck %s --check-prefix=EMPTY-OFFSETS |
| |
| # EMPTY-OFFSETS: Hex dump of section '.debug_str_offsets': |
| # EMPTY-OFFSETS-NEXT: 0x00000000 04000000 05000000 ........ |
| ## ^------- unit_length (4-byte) |
| ## ^--- version (2-byte) |
| ## ^--- padding (2-byte) |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| DWARF: |
| debug_str_offsets: |
| - Offsets: [] |
| |
| ## e) Test that the .debug_str_offsets section header is emitted if the "debug_str_offsets" is empty. |
| |
| # RUN: yaml2obj --docnum=4 %s -o %t4.o |
| # RUN: llvm-readobj --sections --section-data %t4.o | \ |
| # RUN: FileCheck -DSIZE=0 -DADDRALIGN=1 %s --check-prefixes=SHDR,EMPTY-CONTENT |
| |
| # EMPTY-CONTENT-NEXT: SectionData ( |
| # EMPTY-CONTENT-NEXT: ) |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| DWARF: |
| debug_str_offsets: [] |
| |
| ## f) Generate the .debug_str_offsets section from raw section content. |
| |
| # RUN: yaml2obj --docnum=5 %s -o %t5.o |
| # RUN: llvm-readobj --sections --section-data %t5.o | \ |
| # RUN: FileCheck %s -DADDRALIGN=0 -DSIZE=3 --check-prefixes=SHDR,ARBITRARY-CONTENT |
| |
| # ARBITRARY-CONTENT: SectionData ( |
| # ARBITRARY-CONTENT-NEXT: 0000: 112233 |
| # ARBITRARY-CONTENT-NEXT: ) |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Sections: |
| - Name: .debug_str_offsets |
| Type: SHT_PROGBITS |
| Content: "112233" |
| |
| ## g) Generate the .debug_str_offsets section when the "Size" is specified. |
| |
| # RUN: yaml2obj --docnum=6 %s -o %t6.o |
| # RUN: llvm-readelf --hex-dump=.debug_str_offsets %t6.o | \ |
| # RUN: FileCheck %s --check-prefix=SIZE |
| |
| # SIZE: Hex dump of section '.debug_str_offsets': |
| # SIZE-NEXT: 0x00000000 00000000 00000000 00000000 00000000 ................ |
| # SIZE-EMPTY: |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Sections: |
| - Name: .debug_str_offsets |
| Type: SHT_PROGBITS |
| Size: 0x10 |
| |
| ## h) Test that yaml2obj emits an error message when both the "Size" and the |
| ## "debug_str_offsets" entry are specified at the same time. |
| |
| # RUN: not yaml2obj --docnum=7 %s 2>&1 | FileCheck %s --check-prefix=ERROR |
| |
| # ERROR: yaml2obj: error: cannot specify section '.debug_str_offsets' contents in the 'DWARF' entry and the 'Content' or 'Size' in the 'Sections' entry at the same time |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Sections: |
| - Name: .debug_str_offsets |
| Type: SHT_PROGBITS |
| Size: 0x10 |
| DWARF: |
| debug_str_offsets: |
| - Offsets: [] |
| |
| ## i) Test that yaml2obj emits an error message when both the "Content" and the |
| ## "debug_str_offsets" entry are specified at the same time. |
| |
| # RUN: not yaml2obj --docnum=8 %s 2>&1 | FileCheck %s --check-prefix=ERROR |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Sections: |
| - Name: .debug_str_offsets |
| Type: SHT_PROGBITS |
| Content: "00" |
| DWARF: |
| debug_str_offsets: |
| - Offsets: [] |
| |
| ## j) Test that all the properties can be overridden by the section header when |
| ## the "debug_str_offsets" entry doesn't exist. |
| |
| # RUN: yaml2obj --docnum=9 %s -o %t9.o |
| # RUN: llvm-readelf --sections %t9.o | FileCheck %s --check-prefix=OVERRIDDEN |
| |
| # OVERRIDDEN: [Nr] Name Type Address Off Size ES Flg Lk Inf Al |
| # OVERRIDDEN: [ 1] .debug_str_offsets STRTAB 0000000000002020 000050 000008 01 A 2 1 2 |
| # OVERRIDDEN-NEXT: [ 2] .sec STRTAB 0000000000000000 000058 000000 00 0 0 0 |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Sections: |
| - Name: .debug_str_offsets |
| 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: 0x2020 ## 0x00 by default. |
| Offset: 0x50 ## 0x40 for the first section. |
| Size: 0x08 ## Set the "Size" so that we can reuse the check tag "OVERRIDDEN". |
| - Name: .sec ## Linked by .debug_str_offsets. |
| Type: SHT_STRTAB |
| |
| ## k) Test that all the properties can be overridden by the section header when |
| ## the "debug_str_offsets" entry exists. |
| |
| # RUN: yaml2obj --docnum=10 %s -o %t10.o |
| # RUN: llvm-readelf --sections %t10.o | FileCheck %s --check-prefix=OVERRIDDEN |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Sections: |
| - Name: .debug_str_offsets |
| 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: 0x2020 ## 0x00 by default. |
| Offset: 0x50 ## 0x40 for the first section. |
| - Name: .sec ## Linked by .debug_str_offsets. |
| Type: SHT_STRTAB |
| DWARF: |
| debug_str_offsets: |
| - Offsets: [] |