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,@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",@progbits,1 +.Lproducer: + .asciz "Hand-written DWARF" +.Lranges: + .asciz "ranges" + + .section .debug_abbrev,"",@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,"",@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,"",@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,@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",@progbits,1 +.Lproducer: + .asciz "Hand-written DWARF" +.Lrnglists: + .asciz "rnglists" + + .section .debug_abbrev,"",@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,"",@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,"",@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,"",@progbits + .byte 0 # End Of Macro List Mark _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits