diff options
author | Pavel Labath <labath@google.com> | 2018-02-24 00:35:21 +0000 |
---|---|---|
committer | Pavel Labath <labath@google.com> | 2018-02-24 00:35:21 +0000 |
commit | d99072bc9749874a7885740959e35ac08d99e324 (patch) | |
tree | f89ad4876b7b009ca75439a04cd3a3dd3a44afc3 /llvm/test | |
parent | d4e2dabbbb4cf31d4cebb26bf6fefe4b0249bec9 (diff) | |
download | bcm5719-llvm-d99072bc9749874a7885740959e35ac08d99e324.tar.gz bcm5719-llvm-d99072bc9749874a7885740959e35ac08d99e324.zip |
Implement equal_range for the DWARF v5 accelerator table
Summary:
This patch implements the name lookup functionality of the .debug_names
accelerator table and hooks it up to "llvm-dwarfdump -find". To make the
interface of the two kinds of accelerator tables more consistent, I've
created an abstract "DWARFAcceleratorTable::Entry" class, which provides
a consistent interface to access the common functionality of the table
entries (such as getting the die offset, die tag, etc.). I've also
modified the apple table to vend entries conforming to this interface.
Reviewers: JDevlieghere, aprantl, probinson, dblaikie
Subscribers: vleschuk, clayborg, echristo, llvm-commits
Differential Revision: https://reviews.llvm.org/D43067
llvm-svn: 326003
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/tools/llvm-dwarfdump/X86/debug-names-find.s | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-dwarfdump/X86/debug-names-find.s b/llvm/test/tools/llvm-dwarfdump/X86/debug-names-find.s new file mode 100644 index 00000000000..280c3d771b0 --- /dev/null +++ b/llvm/test/tools/llvm-dwarfdump/X86/debug-names-find.s @@ -0,0 +1,182 @@ +# RUN: llvm-mc -triple x86_64-pc-linux %s -filetype=obj -o %t +# RUN: llvm-dwarfdump -find=foo %t | FileCheck --check-prefix=FOO %s +# RUN: llvm-dwarfdump -find=baz %t | FileCheck --check-prefix=BAZ %s +# RUN: llvm-dwarfdump -find=missing %t | FileCheck --check-prefix=MISSING %s + +# FOO: DW_TAG_subprogram +# FOO-NEXT: DW_AT_name ("foo") +# FOO-NEXT: DW_AT_external + +# BAZ: DW_TAG_subprogram +# BAZ-NEXT: DW_AT_name ("baz") +# BAZ-NEXT: DW_AT_external + +# MISSING-NOT: foo +# MISSING-NOT: bar +# MISSING-NOT: baz +# MISSING-NOT: bazz + + .section .debug_str,"MS",@progbits,1 +.Lstring_foo: + .asciz "foo" +.Lstring_foo_mangled: + .asciz "_Z3foov" +.Lstring_bar: + .asciz "bar" +.Lstring_baz: + .asciz "baz" +.Lstring_bazz: + .asciz "bazz" +.Lstring_producer: + .asciz "Hand-written dwarf" + + .section .debug_abbrev,"",@progbits +.Lsection_abbrev: + .byte 1 # Abbreviation Code + .byte 17 # DW_TAG_compile_unit + .byte 1 # DW_CHILDREN_yes + .byte 37 # DW_AT_producer + .byte 14 # DW_FORM_strp + .byte 19 # DW_AT_language + .byte 5 # DW_FORM_data2 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 2 # Abbreviation Code + .byte 46 # DW_TAG_subprogram + .byte 0 # DW_CHILDREN_no + .byte 3 # DW_AT_name + .byte 14 # DW_FORM_strp + .byte 63 # DW_AT_external + .byte 25 # DW_FORM_flag_present + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 0 # EOM(3) + + .section .debug_info,"",@progbits +.Lcu_begin0: + .long .Lcu_end0-.Lcu_start0 # Length of Unit +.Lcu_start0: + .short 4 # DWARF version number + .long .Lsection_abbrev # Offset Into Abbrev. Section + .byte 8 # Address Size (in bytes) + .byte 1 # Abbrev [1] DW_TAG_compile_unit + .long .Lstring_producer # DW_AT_producer + .short 12 # DW_AT_language +.Ldie_foo: + .byte 2 # Abbrev [2] DW_TAG_subprogram + .long .Lstring_foo # DW_AT_name + # DW_AT_external +.Ldie_bar: + .byte 2 # Abbrev [2] DW_TAG_subprogram + .long .Lstring_bar # DW_AT_name + # DW_AT_external + .byte 0 # End Of Children Mark +.Lcu_end0: + +.Lcu_begin1: + .long .Lcu_end1-.Lcu_start1 # Length of Unit +.Lcu_start1: + .short 4 # DWARF version number + .long .Lsection_abbrev # Offset Into Abbrev. Section + .byte 8 # Address Size (in bytes) + .byte 1 # Abbrev [1] DW_TAG_compile_unit + .long .Lstring_producer # DW_AT_producer + .short 12 # DW_AT_language +.Ldie_baz: + .byte 2 # Abbrev [2] DW_TAG_subprogram + .long .Lstring_baz # DW_AT_name + # DW_AT_external +.Ldie_bazz: + .byte 2 # Abbrev [2] DW_TAG_subprogram + .long .Lstring_bazz # DW_AT_name + # DW_AT_external + .byte 0 # End Of Children Mark +.Lcu_end1: + + .section .debug_names,"",@progbits + .long .Lnames_end0-.Lnames_start0 # Header: contribution length +.Lnames_start0: + .short 5 # Header: version + .short 0 # Header: padding + .long 1 # Header: compilation unit count + .long 0 # Header: local type unit count + .long 0 # Header: foreign type unit count + .long 2 # Header: bucket count + .long 3 # Header: name count + .long .Lnames_abbrev_end0-.Lnames_abbrev_start0 # Header: abbreviation table size + .long 0 # Header: augmentation length + .long .Lcu_begin0 # Compilation unit 0 + .long 1 # Bucket 0 + .long 2 # Bucket 1 + .long 193487034 # Hash in Bucket 0 + .long 193491849 # Hash in Bucket 1 + .long -1257882357 # Hash in Bucket 1 + .long .Lstring_bar # String in Bucket 1: bar + .long .Lstring_foo # String in Bucket 1: foo + .long .Lstring_foo_mangled # String in Bucket 1: _Z3foov + .long .Lnames0-.Lnames_entries0 # Offset in Bucket 1 + .long .Lnames1-.Lnames_entries0 # Offset in Bucket 1 + .long .Lnames2-.Lnames_entries0 # Offset in Bucket 1 +.Lnames_abbrev_start0: + .byte 46 # Abbrev code + .byte 46 # DW_TAG_subprogram + .byte 3 # DW_IDX_die_offset + .byte 6 # DW_FORM_data4 + .byte 0 # End of abbrev + .byte 0 # End of abbrev + .byte 0 # End of abbrev list +.Lnames_abbrev_end0: +.Lnames_entries0: +.Lnames0: + .byte 46 # Abbrev code + .long .Ldie_bar # DW_IDX_die_offset + .long 0 # End of list: bar +.Lnames1: + .byte 46 # Abbrev code + .long .Ldie_foo # DW_IDX_die_offset + .long 0 # End of list: foo +.Lnames2: + .byte 46 # Abbrev code + .long .Ldie_foo # DW_IDX_die_offset + .long 0 # End of list: _Z3foov + .p2align 2 +.Lnames_end0: + +# Index of compilation unit 1. This one has no hash table. + .long .Lnames_end1-.Lnames_start1 # Header: contribution length +.Lnames_start1: + .short 5 # Header: version + .short 0 # Header: padding + .long 1 # Header: compilation unit count + .long 0 # Header: local type unit count + .long 0 # Header: foreign type unit count + .long 0 # Header: bucket count + .long 2 # Header: name count + .long .Lnames_abbrev_end1-.Lnames_abbrev_start1 # Header: abbreviation table size + .long 0 # Header: augmentation length + .long .Lcu_begin1 # Compilation unit 0 + .long .Lstring_baz # String in Bucket 1: baz + .long .Lstring_bazz # String in Bucket 1: bazz + .long .Lnames3-.Lnames_entries1 # Offset in Bucket 1 + .long .Lnames4-.Lnames_entries1 # Offset in Bucket 1 +.Lnames_abbrev_start1: + .byte 46 # Abbrev code + .byte 46 # DW_TAG_subprogram + .byte 3 # DW_IDX_die_offset + .byte 6 # DW_FORM_data4 + .byte 0 # End of abbrev + .byte 0 # End of abbrev + .byte 0 # End of abbrev list +.Lnames_abbrev_end1: +.Lnames_entries1: +.Lnames3: + .byte 46 # Abbrev code + .long .Ldie_baz # DW_IDX_die_offset + .long 0 # End of list: baz + .p2align 2 +.Lnames4: + .byte 46 # Abbrev code + .long .Ldie_bazz # DW_IDX_die_offset + .long 0 # End of list: baz + .p2align 2 +.Lnames_end1: |