[Lldb-commits] [lldb] r361373 - DWARF: Add debug_ranges/rnglists tests

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Wed May 22 04:44:37 PDT 2019


Author: labath
Date: Wed May 22 04:44:36 2019
New Revision: 361373

URL: http://llvm.org/viewvc/llvm-project?rev=361373&view=rev
Log:
DWARF: Add debug_ranges/rnglists tests

.debug_ranges parsing is not well tested [citation needed] because this
section tends to be only used in optimized code, and we don't build
optimized executables in our tests, as they produce unpredictable
results.

This patch aims to add some very simple tests for parsing static range
data, which can serve as a first line of defense in case things break.

I also include one XFAILed test, which demonstrates that we don't
correctly handle mixed DWARF v5 and v4 ranges in a single file.

Added:
    lldb/trunk/lit/SymbolFile/DWARF/debug_ranges.s
    lldb/trunk/lit/SymbolFile/DWARF/debug_ranges_and_rnglists.test
    lldb/trunk/lit/SymbolFile/DWARF/debug_rnglists.s

Added: lldb/trunk/lit/SymbolFile/DWARF/debug_ranges.s
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/SymbolFile/DWARF/debug_ranges.s?rev=361373&view=auto
==============================================================================
--- lldb/trunk/lit/SymbolFile/DWARF/debug_ranges.s (added)
+++ lldb/trunk/lit/SymbolFile/DWARF/debug_ranges.s Wed May 22 04:44:36 2019
@@ -0,0 +1,92 @@
+# RUN: llvm-mc -triple=x86_64-pc-linux -filetype=obj %s > %t
+# RUN: %lldb %t -o "image lookup -v -s lookup_ranges" -o exit | FileCheck %s
+
+# CHECK:  Function: id = {0x7fffffff0000001c}, name = "ranges", range = [0x0000000000000000-0x0000000000000004)
+# CHECK:    Blocks: id = {0x7fffffff0000001c}, range = [0x00000000-0x00000004)
+# CHECK-NEXT:       id = {0x7fffffff0000002d}, ranges = [0x00000001-0x00000002)[0x00000003-0x00000004)
+
+        .text
+        .p2align 12
+        .globl  ranges
+        .type   ranges, at function
+ranges:                                    # @ranges
+.Lfoo_begin:
+        nop
+.Lblock1_begin:
+lookup_ranges:
+        nop
+.Lblock1_end:
+        nop
+.Lblock2_begin:
+        nop
+.Lblock2_end:
+.Lfunc_end0:
+        .size   ranges, .Lfunc_end0-ranges
+                                        # -- End function
+        .section        .debug_str,"MS", at progbits,1
+.Lproducer:
+        .asciz  "Hand-written DWARF"
+.Lranges:
+        .asciz  "ranges"
+
+        .section        .debug_abbrev,"", at progbits
+        .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   17                      # DW_AT_low_pc
+        .byte   1                       # DW_FORM_addr
+        .byte   18                      # DW_AT_high_pc
+        .byte   6                       # DW_FORM_data4
+        .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   1                       # DW_FORM_addr
+        .byte   18                      # DW_AT_high_pc
+        .byte   6                       # DW_FORM_data4
+        .byte   3                       # DW_AT_name
+        .byte   14                      # DW_FORM_strp
+        .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   23                      # DW_FORM_sec_offset
+        .byte   0                       # EOM(1)
+        .byte   0                       # EOM(2)
+        .byte   0                       # EOM(3)
+
+        .section        .debug_info,"", at progbits
+.Lcu_begin0:
+        .long   .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
+.Ldebug_info_start0:
+        .short  4                       # DWARF version number
+        .long   .debug_abbrev           # Offset Into Abbrev. Section
+        .byte   8                       # Address Size (in bytes)
+        .byte   1                       # Abbrev [1] 0xb:0x7b DW_TAG_compile_unit
+        .long   .Lproducer              # DW_AT_producer
+        .quad   .Lfoo_begin             # DW_AT_low_pc
+        .long   .Lfunc_end0-.Lfoo_begin # DW_AT_high_pc
+        .byte   2                       # Abbrev [2] 0x2a:0x4d DW_TAG_subprogram
+        .quad   .Lfoo_begin             # DW_AT_low_pc
+        .long   .Lfunc_end0-.Lfoo_begin # DW_AT_high_pc
+        .long   .Lranges                # DW_AT_name
+        .byte   5                       # Abbrev [5] 0x61:0x15 DW_TAG_lexical_block
+        .long   .Ldebug_ranges0         # DW_AT_ranges
+        .byte   0                       # End Of Children Mark
+        .byte   0                       # End Of Children Mark
+.Ldebug_info_end0:
+
+        .section        .debug_ranges,"", at progbits
+.Ldebug_ranges0:
+        .quad   .Lblock1_begin-.Lfoo_begin  
+        .quad   .Lblock1_end-.Lfoo_begin  
+        .quad   .Lblock2_begin-.Lfoo_begin  
+        .quad   .Lblock2_end-.Lfoo_begin  
+        .quad   0
+        .quad   0

Added: lldb/trunk/lit/SymbolFile/DWARF/debug_ranges_and_rnglists.test
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/SymbolFile/DWARF/debug_ranges_and_rnglists.test?rev=361373&view=auto
==============================================================================
--- lldb/trunk/lit/SymbolFile/DWARF/debug_ranges_and_rnglists.test (added)
+++ lldb/trunk/lit/SymbolFile/DWARF/debug_ranges_and_rnglists.test Wed May 22 04:44:36 2019
@@ -0,0 +1,19 @@
+# REQUIRES: lld
+# XFAIL: *
+
+# RUN: llvm-mc -triple=x86_64-pc-linux -filetype=obj %S/debug_ranges.s > %t-ranges.o
+# RUN: llvm-mc -triple=x86_64-pc-linux -filetype=obj %S/debug_rnglists.s > %t-rnglists.o
+# RUN: ld.lld -r %t-ranges.o %t-rnglists.o -o %t
+# RUN: %lldb %t -s %s | FileCheck %s
+
+image lookup -v -s lookup_ranges
+# CHECK-LABEL: image lookup -v -s lookup_ranges
+# CHECK:  Function: {{.*}} name = "ranges", range = [0x0000000000000000-0x0000000000000004)
+# CHECK:    Blocks: {{.*}} range = [0x00000000-0x00000004)
+# CHECK-NEXT:       {{.*}} ranges = [0x00000001-0x00000002)[0x00000003-0x00000004)
+
+image lookup -v -s lookup_rnglists
+# CHECK-LABEL: image lookup -v -s lookup_rnglists
+# CHECK:  Function: {{.*}} name = "rnglists", range = [0x0000000000001000-0x0000000000001004)
+# CHECK:    Blocks: {{.*}} range = [0x00001000-0x00001004)
+# CHECK-NEXT:       {{.*}} ranges = [0x00001001-0x00001002)[0x00001003-0x00001004)

Added: lldb/trunk/lit/SymbolFile/DWARF/debug_rnglists.s
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/SymbolFile/DWARF/debug_rnglists.s?rev=361373&view=auto
==============================================================================
--- lldb/trunk/lit/SymbolFile/DWARF/debug_rnglists.s (added)
+++ lldb/trunk/lit/SymbolFile/DWARF/debug_rnglists.s Wed May 22 04:44:36 2019
@@ -0,0 +1,108 @@
+# 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
+
+# CHECK:  Function: id = {0x7fffffff00000021}, name = "rnglists", range = [0x0000000000000000-0x0000000000000004)
+# CHECK:    Blocks: id = {0x7fffffff00000021}, range = [0x00000000-0x00000004)
+# CHECK-NEXT:       id = {0x7fffffff00000032}, ranges = [0x00000001-0x00000002)[0x00000003-0x00000004)
+
+        .text
+        .p2align 12
+        .globl  rnglists
+        .type   rnglists, at function
+rnglists:                                    # @rnglists
+.Lfoo_begin:
+        nop
+.Lblock1_begin:
+lookup_rnglists:
+        nop
+.Lblock1_end:
+        nop
+.Lblock2_begin:
+        nop
+.Lblock2_end:
+.Lfunc_end0:
+        .size   rnglists, .Lfunc_end0-rnglists
+                                        # -- End function
+        .section        .debug_str,"MS", at progbits,1
+.Lproducer:
+        .asciz  "Hand-written DWARF"
+.Lrnglists:
+        .asciz  "rnglists"
+
+        .section        .debug_abbrev,"", at progbits
+        .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   17                      # DW_AT_low_pc
+        .byte   1                       # DW_FORM_addr
+        .byte   18                      # DW_AT_high_pc
+        .byte   6                       # DW_FORM_data4
+        .byte   116                     # DW_AT_rnglists_base
+        .byte   23                      # DW_FORM_sec_offset
+        .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   1                       # DW_FORM_addr
+        .byte   18                      # DW_AT_high_pc
+        .byte   6                       # DW_FORM_data4
+        .byte   3                       # DW_AT_name
+        .byte   14                      # DW_FORM_strp
+        .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,"", at progbits
+.Lcu_begin0:
+        .long   .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
+.Ldebug_info_start0:
+        .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
+        .long   .Lproducer              # DW_AT_producer
+        .quad   .Lfoo_begin             # DW_AT_low_pc
+        .long   .Lfunc_end0-.Lfoo_begin # DW_AT_high_pc
+        .long   .Lrnglists_table_base0  # DW_AT_rnglists_base
+        .byte   2                       # Abbrev [2] 0x2b:0x37 DW_TAG_subprogram
+        .quad   .Lfoo_begin             # DW_AT_low_pc
+        .long   .Lfunc_end0-.Lfoo_begin # DW_AT_high_pc
+        .long   .Lrnglists              # 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_end0:
+
+        .section        .debug_rnglists,"", at progbits
+        .long   .Ldebug_rnglist_table_end0-.Ldebug_rnglist_table_start0 # Length
+.Ldebug_rnglist_table_start0:
+        .short  5                       # Version
+        .byte   8                       # Address size
+        .byte   0                       # Segment selector size
+        .long   1                       # Offset entry count
+.Lrnglists_table_base0:
+        .long   .Ldebug_ranges0-.Lrnglists_table_base0
+.Ldebug_ranges0:
+        .byte   4                       # DW_RLE_offset_pair
+        .uleb128 .Lblock1_begin-.Lfoo_begin #   starting offset
+        .uleb128 .Lblock1_end-.Lfoo_begin #   ending offset
+        .byte   4                       # DW_RLE_offset_pair
+        .uleb128 .Lblock2_begin-.Lfoo_begin #   starting offset
+        .uleb128 .Lblock2_end-.Lfoo_begin #   ending offset
+        .byte   0                       # DW_RLE_end_of_list
+.Ldebug_rnglist_table_end0:
+        .section        .debug_macinfo,"", at progbits
+        .byte   0                       # End Of Macro List Mark




More information about the lldb-commits mailing list