# RUN: llvm-mc -triple x86_64-unknown-linux %s -filetype=obj -o %t.o # RUN: not llvm-dwarfdump -v %t.o 2>&1 | FileCheck %s # # Test object to verify that llvm-dwarfdump handles an invalid string offsets # table. # # A rudimentary abbrev section. .section .debug_abbrev,"",@progbits .byte 0x01 # Abbrev code .byte 0x11 # DW_TAG_compile_unit .byte 0x00 # DW_CHILDREN_no .byte 0x72 # DW_AT_str_offsets_base .byte 0x17 # DW_FORM_sec_offset .byte 0x00 # EOM(1) .byte 0x00 # EOM(2) .byte 0x00 # EOM(3) # A rudimentary compile unit to convince dwarfdump that we are dealing with a # DWARF v5 string offsets table. .section .debug_info,"",@progbits # DWARF v5 32 bit CU header. .long CU1_end-CU1_begin # Length of Unit CU1_begin: .short 5 # DWARF version number .byte 1 # DWARF Unit Type .byte 8 # Address Size (in bytes) .long .debug_abbrev # Offset Into Abbrev. Section .byte 1 # Abbreviation code: DW_TAG_compile_unit .long 0 # DW_AT_str_offsets_base CU1_end: # DWARF v5 64 bit CU header. .long 0xffffffff .quad CU2_end-CU2_begin # Length of Unit CU2_begin: .short 5 # DWARF version number .byte 1 # DWARF Unit Type .byte 8 # Address Size (in bytes) .quad .debug_abbrev # Offset Into Abbrev. Section .byte 1 # Abbreviation code: DW_TAG_compile_unit .quad 0 # DW_AT_str_offsets_base CU2_end: .long CU3_end-CU3_begin # Length of Unit CU3_begin: .short 5 # DWARF version number .byte 1 # DWARF Unit Type .byte 8 # Address Size (in bytes) .long .debug_abbrev # Offset Into Abbrev. Section .byte 1 # Abbreviation code: DW_TAG_compile_unit .quad .str_off0 # DW_AT_str_offsets_base CU3_end: .long CU4_end-CU4_begin # Length of Unit CU4_begin: .short 5 # DWARF version number .byte 1 # DWARF Unit Type .byte 8 # Address Size (in bytes) .long .debug_abbrev # Offset Into Abbrev. Section .byte 1 # Abbreviation code: DW_TAG_compile_unit .quad .str_off1 # DW_AT_str_offsets_base CU4_end: .long CU5_end-CU5_begin # Length of Unit CU5_begin: .short 5 # DWARF version number .byte 1 # DWARF Unit Type .byte 8 # Address Size (in bytes) .long .debug_abbrev # Offset Into Abbrev. Section .byte 1 # Abbreviation code: DW_TAG_compile_unit .long .str_off2_begin # DW_AT_str_offsets_base CU5_end: .long CU6_end-CU6_begin # Length of Unit CU6_begin: .short 5 # DWARF version number .byte 1 # DWARF Unit Type .byte 8 # Address Size (in bytes) .long .debug_abbrev # Offset Into Abbrev. Section .byte 1 # Abbreviation code: DW_TAG_compile_unit .long .str_off3_begin # DW_AT_str_offsets_base CU6_end: .long 0xffffffff .quad CU7_end-CU7_begin # Length of Unit CU7_begin: .short 5 # DWARF version number .byte 1 # DWARF Unit Type .byte 8 # Address Size (in bytes) .quad .debug_abbrev # Offset Into Abbrev. Section .byte 1 # Abbreviation code: DW_TAG_compile_unit .quad .str_off4_begin # DW_AT_str_offsets_base CU7_end: .long CU8_end-CU8_begin # Length of Unit CU8_begin: .short 5 # DWARF version number .byte 1 # DWARF Unit Type .byte 8 # Address Size (in bytes) .long .debug_abbrev # Offset Into Abbrev. Section .byte 1 # Abbreviation code: DW_TAG_compile_unit .long .str_off_end+16 # DW_AT_str_offsets_base CU8_end: .long 0xffffffff .quad CU9_end-CU9_begin # Length of Unit CU9_begin: .short 5 # DWARF version number .byte 1 # DWARF Unit Type .byte 8 # Address Size (in bytes) .quad .debug_abbrev # Offset Into Abbrev. Section .byte 1 # Abbreviation code: DW_TAG_compile_unit .quad .str_off_end+8 # DW_AT_str_offsets_base CU9_end: .section .debug_str_offsets,"",@progbits # Invalid length .long 0xfffffff4 .short 5 # DWARF version .short 0 # Padding .str_off0: .long 0 # Length beyond section bounds .long .str_off_end-.str_off1+8 .short 5 # DWARF version .short 0 # Padding .str_off1: .long 0 # Length intrudes on following unit .long .str_off2_end-.str_off2_begin+8 .short 5 # DWARF version .short 0 # Padding .str_off2_begin: .long 0 .str_off2_end: # Plain contribution, no errors here .long .str_off3_end-.str_off3_begin .short 5 # DWARF version .short 0 # Padding .str_off3_begin: .long 0 .str_off3_end: # 32 bit contribution referenced from a 64 bit unit .long .str_off4_end-.str_off4_begin .short 5 # DWARF version .short 0 # Padding .str_off4_begin: .long 0 .str_off4_end: .str_off_end: # CHECK: error: invalid reference to or invalid content in .debug_str_offsets[.dwo]: insufficient space for 32 bit header prefix # CHECK: error: invalid reference to or invalid content in .debug_str_offsets[.dwo]: insufficient space for 64 bit header prefix # CHECK: error: invalid reference to or invalid content in .debug_str_offsets[.dwo]: invalid length # CHECK: error: invalid reference to or invalid content in .debug_str_offsets[.dwo]: length exceeds section size # CHECK: error: invalid reference to or invalid content in .debug_str_offsets[.dwo]: 32 bit contribution referenced from a 64 bit unit # CHECK: error: invalid reference to or invalid content in .debug_str_offsets[.dwo]: section offset exceeds section size # CHECK: error: invalid reference to or invalid content in .debug_str_offsets[.dwo]: section offset exceeds section size # CHECK: error: overlapping contributions to string offsets table in section .debug_str_offsets.