summaryrefslogtreecommitdiffstats
path: root/lldb/test/Shell
diff options
context:
space:
mode:
authorPavel Labath <pavel@labath.sk>2019-12-04 16:06:44 +0100
committerPavel Labath <pavel@labath.sk>2019-12-05 13:02:03 +0100
commitf5767e284beaff4e5eb35f0f64270a070b47f6d3 (patch)
treef859de0cdec94fd57cc3fe213cea620155196830 /lldb/test/Shell
parent7f9b5138470db1dc58f3bc05631284c653c9ed7a (diff)
downloadbcm5719-llvm-f5767e284beaff4e5eb35f0f64270a070b47f6d3.tar.gz
bcm5719-llvm-f5767e284beaff4e5eb35f0f64270a070b47f6d3.zip
[lldb/DWARF] Switch to llvm debug_rnglists parser
Summary: Our rnglist support was working only for the trivial cases (one CU), because we only ever parsed one contribution out of the debug_rnglists section. This means we were never able to resolve range lists for the second and subsequent units (DW_FORM_sec_offset references came out blang, and DW_FORM_rnglistx references always used the ranges lists from the first unit). Since both llvm and lldb rnglist parsers are sufficiently self-contained, and operate similarly, we can fix this problem by switching to the llvm parser instead. Besides the changes which are due to variations in the interface, the main thing is that now the range list object is a member of the DWARFUnit, instead of the entire symbol file. This ensures that each unit can get it's own private set of range list indices, and is consistent with how llvm's DWARFUnit does it (overall, I've tried to structure the code the same way as the llvm version). I've also added a test case for the two unit scenario. Reviewers: JDevlieghere, aprantl, clayborg Subscribers: dblaikie, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D71021
Diffstat (limited to 'lldb/test/Shell')
-rw-r--r--lldb/test/Shell/SymbolFile/DWARF/debug_rnglists.s55
1 files changed, 54 insertions, 1 deletions
diff --git a/lldb/test/Shell/SymbolFile/DWARF/debug_rnglists.s b/lldb/test/Shell/SymbolFile/DWARF/debug_rnglists.s
index 7daa32da8af..1d718054a58 100644
--- a/lldb/test/Shell/SymbolFile/DWARF/debug_rnglists.s
+++ b/lldb/test/Shell/SymbolFile/DWARF/debug_rnglists.s
@@ -1,12 +1,19 @@
# REQUIRES: x86
# RUN: llvm-mc -triple=x86_64-pc-linux -filetype=obj %s > %t
-# RUN: %lldb %t -o "image lookup -v -s lookup_rnglists" -o exit | FileCheck %s
+# RUN: %lldb %t -o "image lookup -v -s lookup_rnglists" \
+# RUN: -o "image lookup -v -s lookup_rnglists2" -o exit | FileCheck %s
+# CHECK-LABEL: image lookup -v -s lookup_rnglists
# CHECK: Function: id = {0x7fffffff00000030}, name = "rnglists", range = [0x0000000000000000-0x0000000000000004)
# CHECK: Blocks: id = {0x7fffffff00000030}, range = [0x00000000-0x00000004)
# CHECK-NEXT: id = {0x7fffffff00000046}, ranges = [0x00000001-0x00000002)[0x00000003-0x00000004)
+# CHECK-LABEL: image lookup -v -s lookup_rnglists2
+# CHECK: Function: id = {0x7fffffff0000007a}, name = "rnglists2", range = [0x0000000000000004-0x0000000000000007)
+# CHECK: Blocks: id = {0x7fffffff0000007a}, range = [0x00000004-0x00000007)
+# CHECK-NEXT: id = {0x7fffffff00000091}, range = [0x00000005-0x00000007)
+
.text
.p2align 12
rnglists:
@@ -21,6 +28,15 @@ lookup_rnglists:
.Lblock2_end:
.Lrnglists_end:
+rnglists2:
+ nop
+.Lblock3_begin:
+lookup_rnglists2:
+ nop
+ nop
+.Lblock3_end:
+.Lrnglists2_end:
+
.section .debug_abbrev,"",@progbits
.byte 1 # Abbreviation Code
.byte 17 # DW_TAG_compile_unit
@@ -78,6 +94,28 @@ lookup_rnglists:
.byte 0 # End Of Children Mark
.Ldebug_info_end0:
+.Lcu_begin1:
+ .long .Ldebug_info_end1-.Ldebug_info_start1 # Length of Unit
+.Ldebug_info_start1:
+ .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 # Abbrev [1] 0xc:0x5f DW_TAG_compile_unit
+ .asciz "Hand-written DWARF" # DW_AT_producer
+ .quad rnglists2 # DW_AT_low_pc
+ .long .Lrnglists2_end-rnglists2 # DW_AT_high_pc
+ .long .Lrnglists_table_base1 # DW_AT_rnglists_base
+ .byte 2 # Abbrev [2] 0x2b:0x37 DW_TAG_subprogram
+ .quad rnglists2 # DW_AT_low_pc
+ .long .Lrnglists2_end-rnglists2 # DW_AT_high_pc
+ .asciz "rnglists2" # 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,"",@progbits
.long .Ldebug_rnglist_table_end0-.Ldebug_rnglist_table_start0 # Length
.Ldebug_rnglist_table_start0:
@@ -96,3 +134,18 @@ lookup_rnglists:
.uleb128 .Lblock2_end-rnglists # ending offset
.byte 0 # DW_RLE_end_of_list
.Ldebug_rnglist_table_end0:
+
+ .long .Ldebug_rnglist_table_end1-.Ldebug_rnglist_table_start1 # Length
+.Ldebug_rnglist_table_start1:
+ .short 5 # Version
+ .byte 8 # Address size
+ .byte 0 # Segment selector size
+ .long 1 # Offset entry count
+.Lrnglists_table_base1:
+ .long .Ldebug_ranges1-.Lrnglists_table_base1
+.Ldebug_ranges1:
+ .byte 4 # DW_RLE_offset_pair
+ .uleb128 .Lblock3_begin-rnglists2 # starting offset
+ .uleb128 .Lblock3_end-rnglists2 # ending offset
+ .byte 0 # DW_RLE_end_of_list
+.Ldebug_rnglist_table_end1:
OpenPOWER on IntegriCloud