Index: llvm/test/tools/llvm-dwarfdump/X86/typeunit-name.s =================================================================== --- /dev/null +++ llvm/test/tools/llvm-dwarfdump/X86/typeunit-name.s @@ -0,0 +1,100 @@ +# Demonstrate that -name works with type units. +# RUN: llvm-mc -triple x86_64-unknown-linux %s -filetype=obj -o %t.o +# RUN: llvm-dwarfdump -name=V4_type_unit -name=V5_split_type_unit %t.o | FileCheck %s +# +# The names should appear twice, once for the unit and once for the type DIE, +# because we give them the same name. +# CHECK: V4_type_unit +# CHECK: V4_type_unit +# CHECK: V5_split_type_unit +# CHECK: V5_split_type_unit + + .section .debug_str,"MS",@progbits,1 +str_TU_4: + .asciz "V4_type_unit" + + .section .debug_str.dwo,"MS",@progbits,1 +dwo_TU_5: + .asciz "V5_split_type_unit" + +# Abbrev section for the normal type unit. + .section .debug_abbrev,"",@progbits + .byte 0x01 # Abbrev code + .byte 0x41 # DW_TAG_type_unit + .byte 0x01 # DW_CHILDREN_yes + .byte 0x03 # DW_AT_name + .byte 0x0e # DW_FORM_strp + .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 0x03 # DW_AT_name + .byte 0x0e # DW_FORM_strp + .byte 0x00 # EOM(1) + .byte 0x00 # EOM(2) + .byte 0x00 # EOM(3) + +# And a .dwo copy for the .dwo section. + .section .debug_abbrev.dwo,"",@progbits + .byte 0x01 # Abbrev code + .byte 0x41 # DW_TAG_type_unit + .byte 0x01 # DW_CHILDREN_yes + .byte 0x03 # DW_AT_name + .byte 0x0e # DW_FORM_strp + .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 0x03 # DW_AT_name + .byte 0x0e # DW_FORM_strp + .byte 0x00 # EOM(1) + .byte 0x00 # EOM(2) + .byte 0x00 # EOM(3) + + .section .debug_types,"",@progbits + +# DWARF v4 Type unit header. Normal/split are identical so we do only one. +TU_4_start: + .long TU_4_end-TU_4_version # Length of Unit +TU_4_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_type-TU_4_start # Type offset +# The type-unit DIE, which has a name. + .byte 1 + .long str_TU_4 +# The type DIE, which has the same name. +TU_4_type: + .byte 2 + .long str_TU_4 + .byte 0 # NULL + .byte 0 # NULL +TU_4_end: + + .section .debug_types.dwo,"",@progbits +# FIXME: DWARF v5 wants type units in .debug_info[.dwo] not .debug_types[.dwo]. + +# DWARF v5 split type unit header. +TU_split_5_start: + .long TU_split_5_end-TU_split_5_version # Length of Unit +TU_split_5_version: + .short 5 # DWARF version number + .byte 6 # DWARF Unit Type + .byte 8 # Address Size (in bytes) + .long .debug_abbrev.dwo # Offset Into Abbrev. Section + .quad 0x8899aabbccddeeff # Type Signature + .long TU_split_5_type-TU_split_5_start # Type offset +# The type-unit DIE, which has a name. + .byte 1 + .long dwo_TU_5 +# The type DIE, which has the same name. +TU_split_5_type: + .byte 2 + .long dwo_TU_5 + .byte 0 # NULL + .byte 0 # NULL +TU_split_5_end: Index: llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp =================================================================== --- llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp +++ llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp @@ -422,8 +422,8 @@ for (auto name : Name) Names.insert((IgnoreCase && !UseRegex) ? StringRef(name).lower() : name); - filterByName(Names, DICtx.compile_units(), OS); - filterByName(Names, DICtx.dwo_compile_units(), OS); + filterByName(Names, DICtx.normal_units(), OS); + filterByName(Names, DICtx.dwo_units(), OS); return true; }