Index: test/tools/llvm-dwarfdump/X86/no_debug_addr.s =================================================================== --- test/tools/llvm-dwarfdump/X86/no_debug_addr.s +++ test/tools/llvm-dwarfdump/X86/no_debug_addr.s @@ -1,47 +1,29 @@ # RUN: llvm-mc %s -filetype obj -triple=x86_64-pc-linux -o %t.o # RUN: llvm-dwarfdump -v %t.o | FileCheck %s -## When .debug_addr is absent for some reason, -## check we do not print a bogus section name. +## When .debug_addr is absent for some reason, check we do not print a bogus section name. +## We had a bug that could be a reason of that when +## DW_RLE_startx_length/DW_RLE_base_addressx/DW_RLE_offset_pair tags were used. # CHECK: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x00000004 # CHECK-NEXT: [0x0000000000000000, 0x0000000000000001) -# CHECK-NEXT: [0x0000000000000000, 0x0000000000000002) # CHECK-NEXT: [0x0000000000000003, 0x0000000000000004)) .text -.section .text._Z3zedv,"ax",@progbits -.Lfunc_begin0: - retq -.Lfunc_end0: - -.section .text.main,"ax",@progbits -.Lfunc_begin1: - retq - retq -.Lfunc_end1: - .section .debug_str_offsets,"",@progbits .long 32 .short 5 .short 0 .Lstr_offsets_base0: - .long .Linfo_string0 - .long .Linfo_string0 - .long .Linfo_string0 - .long .Linfo_string0 - .long .Linfo_string0 - .long .Linfo_string0 - .long .Linfo_string0 + .long 0 # Index 0 ("stub") .section .debug_str,"MS",@progbits,1 -.Linfo_string0: .asciz "stub" .section .debug_abbrev,"",@progbits .byte 1 # Abbreviation Code .byte 17 # DW_TAG_compile_unit - .byte 1 # DW_CHILDREN_yes + .byte 0 # DW_CHILDREN_yes .byte 37 # DW_AT_producer .byte 37 # DW_FORM_strx1 .byte 19 # DW_AT_language @@ -64,50 +46,7 @@ .byte 23 # DW_FORM_sec_offset .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 2 # Abbreviation Code - .byte 46 # DW_TAG_subprogram - .byte 0 # DW_CHILDREN_no - .byte 17 # DW_AT_low_pc - .byte 27 # DW_FORM_addrx - .byte 18 # DW_AT_high_pc - .byte 6 # DW_FORM_data4 - .byte 64 # DW_AT_frame_base - .byte 24 # DW_FORM_exprloc - .byte 110 # DW_AT_linkage_name - .byte 37 # DW_FORM_strx1 - .byte 3 # DW_AT_name - .byte 37 # DW_FORM_strx1 - .byte 58 # DW_AT_decl_file - .byte 11 # DW_FORM_data1 - .byte 59 # DW_AT_decl_line - .byte 11 # DW_FORM_data1 - .byte 73 # DW_AT_type - .byte 19 # DW_FORM_ref4 - .byte 63 # DW_AT_external - .byte 25 # DW_FORM_flag_present - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 3 # Abbreviation Code - .byte 46 # DW_TAG_subprogram - .byte 0 # DW_CHILDREN_no - .byte 17 # DW_AT_low_pc - .byte 27 # DW_FORM_addrx - .byte 18 # DW_AT_high_pc - .byte 6 # DW_FORM_data4 - .byte 64 # DW_AT_frame_base - .byte 24 # DW_FORM_exprloc - .byte 3 # DW_AT_name - .byte 37 # DW_FORM_strx1 - .byte 58 # DW_AT_decl_file - .byte 11 # DW_FORM_data1 - .byte 59 # DW_AT_decl_line - .byte 11 # DW_FORM_data1 - .byte 73 # DW_AT_type - .byte 19 # DW_FORM_ref4 - .byte 63 # DW_AT_external - .byte 25 # DW_FORM_flag_present - .byte 0 # EOM(1) - .byte 0 # EOM(2) + .byte 4 # Abbreviation Code .byte 36 # DW_TAG_base_type .byte 0 # DW_CHILDREN_no @@ -123,7 +62,7 @@ .section .debug_info,"",@progbits .Lcu_begin0: - .long 75 # Length of Unit + .long 40 # Length of Unit .short 5 # DWARF version number .byte 1 # DWARF Unit Type .byte 8 # Address Size (in bytes) @@ -132,42 +71,15 @@ .byte 1 # Abbrev [1] 0xc:0x43 DW_TAG_compile_unit .byte 0 # DW_AT_producer .short 4 # DW_AT_language - .byte 1 # DW_AT_name - .long .Lstr_offsets_base0 # DW_AT_str_offsets_base + .byte 0 # DW_AT_name + .long 8 # DW_AT_str_offsets_base .long 0 # DW_AT_stmt_list - .byte 2 # DW_AT_comp_dir + .byte 0 # DW_AT_comp_dir .long 0 # DW_AT_addr_base .quad 0 # DW_AT_low_pc .byte 0 # DW_AT_ranges .long .Lrnglists_table_base0 # DW_AT_rnglists_base - .byte 2 # Abbrev [2] 0x2b:0x10 DW_TAG_subprogram - .byte 0 # DW_AT_low_pc - .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc - .byte 1 # DW_AT_frame_base - .byte 86 - .byte 3 # DW_AT_linkage_name - .byte 4 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 1 # DW_AT_decl_line - .long 74 # DW_AT_type - # DW_AT_external - - .byte 3 # Abbrev [3] 0x3b:0xf DW_TAG_subprogram - .byte 1 # DW_AT_low_pc - .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc - .byte 1 # DW_AT_frame_base - .byte 86 - .byte 6 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 5 # DW_AT_decl_line - .long 74 # DW_AT_type - # DW_AT_external - - .byte 4 # Abbrev [4] 0x4a:0x4 DW_TAG_base_type - .byte 5 # DW_AT_name - .byte 5 # DW_AT_encoding - .byte 4 # DW_AT_byte_size .byte 0 # End Of Children Mark .section .debug_rnglists,"",@progbits @@ -182,13 +94,11 @@ .Ldebug_ranges0: .byte 3 # DW_RLE_startx_length .byte 0 # start index - .uleb128 .Lfunc_end0-.Lfunc_begin0 # length - .byte 3 # DW_RLE_startx_length - .byte 1 # start index - .uleb128 .Lfunc_end1-.Lfunc_begin1 # length + .uleb128 1 # length .byte 1 # DW_RLE_base_addressx .byte 0 # Base address (index 0 in .debug_addr) + .byte 4 # DW_RLE_offset_pair .byte 0x3 # Start offset .byte 0x4 # End offset