| # Test object with an artifically constructed type unit header to verify |
| # that the length field is correctly used to verify the validity of the |
| # type_offset field. |
| # |
| # To generate the test object: |
| # llvm-mc -triple x86_64-unknown-linux typeunit-header.s -filetype=obj \ |
| # -o typeunit-header.elf-x86-64 |
| # |
| # We only have an abbreviation for the type unit die which is all we need. |
| # Real type unit dies have quite different attributes of course, but we |
| # just need to demonstrate an issue with validating length, so we just give it |
| # a single visibility attribute. |
| .section .debug_abbrev,"",@progbits |
| .byte 0x01 # Abbrev code |
| .byte 0x41 # DW_TAG_type_unit |
| .byte 0x01 # DW_CHILDREN_yes |
| .byte 0x17 # DW_AT_visibility |
| .byte 0x0b # DW_FORM_data1 |
| .byte 0x00 # EOM(1) |
| .byte 0x00 # EOM(2) |
| .byte 0x02 # Abbrev code |
| .byte 0x13 # DW_TAG_structure_type |
| .byte 0x00 # DW_CHILDREN_no (no members) |
| .byte 0x17 # DW_AT_visibility |
| .byte 0x0b # DW_FORM_data1 |
| .byte 0x00 # EOM(1) |
| .byte 0x00 # EOM(2) |
| .byte 0x00 # EOM(3) |
| |
| .section .debug_types,"",@progbits |
| # DWARF v4 Type unit header - DWARF32 format. |
| TU_4_32_start: |
| .long TU_4_32_end-TU_4_32_version # Length of Unit |
| TU_4_32_version: |
| .short 4 # DWARF version number |
| .long .debug_abbrev # Offset Into Abbrev. Section |
| .byte 8 # Address Size (in bytes) |
| .quad 0x0011223344556677 # Type Signature |
| .long TU_4_32_type-TU_4_32_start # Type offset |
| # The type-unit DIE, which has just a visibility attribute. |
| .byte 1 # Abbreviation code |
| .byte 1 # DW_VIS_local |
| # The type DIE, which also just has a one-byte visibility attribute. |
| TU_4_32_type: |
| .byte 2 # Abbreviation code |
| .byte 1 # DW_VIS_local |
| .byte 0 # NULL |
| .byte 0 # NULL |
| TU_4_32_end: |