diff options
| author | Pavel Labath <pavel@labath.sk> | 2019-12-05 15:30:18 +0100 |
|---|---|---|
| committer | Pavel Labath <pavel@labath.sk> | 2019-12-06 10:26:52 +0100 |
| commit | 5ee8e673135891072789f0f9bf14a5d82f0f8e01 (patch) | |
| tree | abdbbe40e2a495ae7a33337f510f2c6fc1df1dd3 /lldb/test/Shell/SymbolFile | |
| parent | 777d1f7272b52cbe372e7234a7247b189e416062 (diff) | |
| download | bcm5719-llvm-5ee8e673135891072789f0f9bf14a5d82f0f8e01.tar.gz bcm5719-llvm-5ee8e673135891072789f0f9bf14a5d82f0f8e01.zip | |
[lldb/DWARF] Fix DW_AT_rnglists_base handling for dwo files
the value of DW_AT_rnglists_base of the skeleton unit is for that unit
alone (e.g. used in DW_AT_ranges of the unit DIE) and should not apply
to the split unit.
The split unit has a hardcoded range list base value -- we should
initialize range list code whenever we detect a nonempty
debug_rnglists.dwo section.
Diffstat (limited to 'lldb/test/Shell/SymbolFile')
| -rw-r--r-- | lldb/test/Shell/SymbolFile/DWARF/debug_rnglists-dwo.s | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/lldb/test/Shell/SymbolFile/DWARF/debug_rnglists-dwo.s b/lldb/test/Shell/SymbolFile/DWARF/debug_rnglists-dwo.s new file mode 100644 index 00000000000..17ed6a76b7e --- /dev/null +++ b/lldb/test/Shell/SymbolFile/DWARF/debug_rnglists-dwo.s @@ -0,0 +1,156 @@ +# REQUIRES: x86 + +# RUN: cd %T +# RUN: llvm-mc -triple=x86_64-pc-linux -filetype=obj %s >debug_rnglists-dwo.o +# RUN: %lldb debug_rnglists-dwo.o -o "image lookup -v -s lookup_rnglists" \ +# RUN: -o exit | FileCheck %s + +# CHECK-LABEL: image lookup -v -s lookup_rnglists +# CHECK: Function: id = {0x00000028}, name = "rnglists", range = [0x0000000000000000-0x0000000000000003) +# CHECK: Blocks: id = {0x00000028}, range = [0x00000000-0x00000003) +# CHECK-NEXT: id = {0x00000037}, range = [0x00000001-0x00000002) + + .text +rnglists: + nop +.Lblock1_begin: +lookup_rnglists: + nop +.Lblock1_end: + nop +.Lrnglists_end: + + .section .debug_abbrev,"",@progbits + .byte 1 # Abbreviation Code + .byte 17 # DW_TAG_compile_unit + .byte 0 # DW_CHILDREN_no + .byte 0x76 # DW_AT_dwo_name + .byte 8 # DW_FORM_string + .byte 115 # DW_AT_addr_base + .byte 23 # DW_FORM_sec_offset + .byte 85 # DW_AT_ranges + .byte 35 # DW_FORM_rnglistx + .byte 116 # DW_AT_rnglists_base + .byte 23 # DW_FORM_sec_offset + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 0 # EOM(3) + + .section .debug_info,"",@progbits +.Lcu_begin0: + .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit +.Ldebug_info_start0: + .short 5 # DWARF version number + .byte 4 # DWARF Unit Type + .byte 8 # Address Size (in bytes) + .long .debug_abbrev # Offset Into Abbrev. Section + .quad 0xdeadbeefbaadf00d # DWO id + .byte 1 # Abbrev [1] 0xc:0x5f DW_TAG_compile_unit + .asciz "debug_rnglists-dwo.o" # DW_AT_dwo_name + .long .Laddr_table_base0 # DW_AT_addr_base + .byte 0 # DW_AT_ranges + .long .Lskel_rnglists_table_base # DW_AT_rnglists_base +.Ldebug_info_end0: + + .section .debug_addr,"",@progbits + .long .Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution +.Ldebug_addr_start0: + .short 5 # DWARF version number + .byte 8 # Address size + .byte 0 # Segment selector size +.Laddr_table_base0: + .quad rnglists + .quad .Lblock1_begin +.Ldebug_addr_end0: + + .section .debug_rnglists,"",@progbits + # A fake rnglists contribution so that range list bases for the skeleton + # and split units differ. + .long .Lfake_rnglist_table_end-.Lfake_rnglist_table_start # Length +.Lfake_rnglist_table_start: + .short 5 # Version + .byte 8 # Address size + .byte 0 # Segment selector size + .long 0 # Offset entry count +.Lfake_rnglists_table_base: +.Lfake_rnglist_table_end: + + .long .Lskel_rnglist_table_end-.Lskel_rnglist_table_start # Length +.Lskel_rnglist_table_start: + .short 5 # Version + .byte 8 # Address size + .byte 0 # Segment selector size + .long 1 # Offset entry count +.Lskel_rnglists_table_base: + .long .Lskel_ranges0-.Lskel_rnglists_table_base +.Lskel_ranges0: + .byte 7 # DW_RLE_start_length + .quad rnglists + .uleb128 .Lrnglists_end-rnglists + .byte 0 # DW_RLE_end_of_list +.Lskel_rnglist_table_end: + + .section .debug_abbrev.dwo,"e",@progbits + .byte 1 # Abbreviation Code + .byte 17 # DW_TAG_compile_unit + .byte 1 # DW_CHILDREN_yes + .byte 37 # DW_AT_producer + .byte 8 # DW_FORM_string + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 2 # Abbreviation Code + .byte 46 # DW_TAG_subprogram + .byte 1 # DW_CHILDREN_yes + .byte 17 # DW_AT_low_pc + .byte 27 # DW_FORM_addrx + .byte 18 # DW_AT_high_pc + .byte 6 # DW_FORM_data4 + .byte 3 # DW_AT_name + .byte 8 # DW_FORM_string + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 5 # Abbreviation Code + .byte 11 # DW_TAG_lexical_block + .byte 0 # DW_CHILDREN_no + .byte 85 # DW_AT_ranges + .byte 35 # DW_FORM_rnglistx + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 0 # EOM(3) + + .section .debug_info.dwo,"e",@progbits +.Lcu_begin1: + .long .Ldebug_info_end1-.Ldebug_info_start1 # Length of Unit +.Ldebug_info_start1: + .short 5 # DWARF version number + .byte 5 # DWARF Unit Type + .byte 8 # Address Size (in bytes) + .long .debug_abbrev # Offset Into Abbrev. Section + .quad 0xdeadbeefbaadf00d # DWO id + .byte 1 # Abbrev [1] 0xc:0x5f DW_TAG_compile_unit + .asciz "Hand-written DWARF" # DW_AT_producer + .byte 2 # Abbrev [2] 0x2b:0x37 DW_TAG_subprogram + .byte 0 # DW_AT_low_pc + .long .Lrnglists_end-rnglists # DW_AT_high_pc + .asciz "rnglists" # DW_AT_name + .byte 5 # Abbrev [5] 0x52:0xf DW_TAG_lexical_block + .byte 0 # DW_AT_ranges + .byte 0 # End Of Children Mark + .byte 0 # End Of Children Mark +.Ldebug_info_end1: + + .section .debug_rnglists.dwo,"e",@progbits + .long .Ldwo_rnglist_table_end-.Ldwo_rnglist_table_start # Length +.Ldwo_rnglist_table_start: + .short 5 # Version + .byte 8 # Address size + .byte 0 # Segment selector size + .long 1 # Offset entry count +.Ldwo_rnglists_table_base: + .long .Ldwo_ranges-.Ldwo_rnglists_table_base +.Ldwo_ranges: + .byte 3 # DW_RLE_startx_length + .uleb128 1 + .uleb128 .Lblock1_end-.Lblock1_begin + .byte 0 # DW_RLE_end_of_list +.Ldwo_rnglist_table_end: |

