diff --git a/llvm/test/tools/dsymutil/ARM/dummy-debug-map-amr64.map b/llvm/test/tools/dsymutil/ARM/dummy-debug-map-amr64.map --- a/llvm/test/tools/dsymutil/ARM/dummy-debug-map-amr64.map +++ b/llvm/test/tools/dsymutil/ARM/dummy-debug-map-amr64.map @@ -11,5 +11,8 @@ - filename: 1.o symbols: - { sym: _bar, objAddr: 0x0, binAddr: 0x10000, size: 0x10 } + - filename: 2.o + symbols: + - { sym: __Z3foov, objAddr: 0x0, binAddr: 0x20000, size: 0x10 } ... diff --git a/llvm/test/tools/dsymutil/ARM/dwarf5-dwarf4-combination-macho.test b/llvm/test/tools/dsymutil/ARM/dwarf5-dwarf4-combination-macho.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/dsymutil/ARM/dwarf5-dwarf4-combination-macho.test @@ -0,0 +1,161 @@ +; This test checks to ensure that if a DWARF v5 and DWARF v4 object file is used to +; generate a dsym, dsymutil correctly outputs the debug information, by keeping +; the DWARF v5 and DWARF v4 debug info distinct, and that all the section headers +; have the correct format. + +; 1.o was produced with the source file: + +; a.cpp +; __attribute__((section("1,__text_foo"))) void foo() {} +; +; int foo2(int a) { +; return a+5; +; } +; int main () { +; return 1; +; } + +; clang -g -c -O1 a.cpp -Xclang -gdwarf-5 -o 1.o + +; 2.o was produced with the following source file: + +; b.cpp +; __attribute__((section("1,__text_foo2"))) void foo2() {} +; +; int bar(int x) { +; int y = x + 2; +; return y; +; } + +; clang -g -c -O1 b.cpp -gdwarf-4 -o 2.o + + +RUN: rm -rf %t.dir && mkdir -p %t.dir +RUN: dsymutil -y %p/dummy-debug-map-amr64.map -oso-prepend-path=%p/../Inputs/DWARF5-DWARF4-combination -o %t.dir/dwarf5-dwarf4-combination-macho.dSYM +RUN: llvm-dwarfdump %t.dir/dwarf5-dwarf4-combination-macho.dSYM -a --verbose | FileCheck %s + + +CHECK:.debug_abbrev contents: +CHECK-NEXT: Abbrev table for offset: 0x00000000 + +CHECK: .debug_info contents: +CHECK-NEXT: 0x00000000: Compile Unit: length = 0x0000007d, format = DWARF32, version = 0x0005, unit_type = DW_UT_compile, abbr_offset = 0x0000, addr_size = 0x08 (next unit at 0x00000081) +CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x[[RANGELIST_OFFSET:[0-9a-f]+]] +CHECK-NEXT: [0x[[RANGELIST_OFFSET_START:[0-9a-f]+]], 0x[[RANGELIST_OFFSET_END:[0-9a-f]+]])) +CHECK: 0x00000050: DW_TAG_formal_parameter [3] (0x00000033) +CHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] (0x[[LOCLIST_OFFSET:[0-9a-f]+]]: +CHECK-NEXT: [0x[[LOCLIST_OFFSET_START:[0-9a-f]+]], 0x[[LOCLIST_OFFSET_END:[0-9a-f]+]]): [[LOCLIST_EXPR:.*]] +CHECK-NEXT: [0x[[LOCLIST_OFFSET_START2:[0-9a-f]+]], 0x[[LOCLIST_OFFSET_END2:[0-9a-f]+]]): [[LOCLIST_EXPR2:.*]]) + +CHECK: 0x00000081: Compile Unit: length = 0x00000072, format = DWARF32, version = 0x0004, abbr_offset = 0x0000, addr_size = 0x08 (next unit at 0x000000f7) +CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 +CHECK-NEXT: [0x00000000000200[[RANGE_OFFSET_START:[0-9a-f][0-9a-f]]], 0x00000000000200[[RANGE_OFFSET_END:[0-9a-f][0-9a-f]]])) +CHECK:0x000000d0: DW_TAG_formal_parameter [3] (0x000000b3) +CHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] (0x[[LOC_OFFSET:[0-9a-f]+]]: +CHECK-NEXT: [0x00000000000200[[LOC_OFFSET_START:[0-9a-f][0-9a-f]]], 0x00000000000200[[LOC_OFFSET_END:[0-9a-f][0-9a-f]]]): [[LOC_EXPR:.*]] +CHECK-NEXT: [0x00000000000200[[LOC_OFFSET_START2:[0-9a-f][0-9a-f]]], 0x00000000000200[[LOC_OFFSET_END2:[0-9a-f][0-9a-f]]]): [[LOC_EXPR2:.*]]) + +CHECK: .debug_loc contents: +CHECK-NEXT: 0x[[LOC_OFFSET]]: +CHECK-NEXT: (0x0000000000000000, 0x0000000000000004): [[LOC_EXPR:.*]] +CHECK-NEXT: (0x0000000000000004, 0x0000000000000008): [[LOC_EXPR2:.*]] + +CHECK: .debug_loclists contents: +CHECK-NEXT: 0x00000000: locations list header: length = 0x00000024, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000 +CHECK-NEXT: 0x[[LOCLIST_OFFSET]]: +CHECK-NEXT: DW_LLE_start_length {{.*}} +CHECK-NEXT: => [0x[[LOCLIST_OFFSET_START]], 0x[[LOCLIST_OFFSET_END]]): [[LOCLIST_EXPR]] +CHECK-NEXT: DW_LLE_start_length {{.*}} +CHECK-NEXT: => [0x[[LOCLIST_OFFSET_START2]], 0x[[LOCLIST_OFFSET_END2]]): [[LOCLIST_EXPR2]] +CHECK-NEXT: DW_LLE_end_of_list () + +CHECK: .debug_line contents: +CHECK-NEXT: debug_line[0x00000000] +CHECK-NEXT: Line table prologue: +CHECK-NEXT: total_length: 0x00000050 +CHECK-NEXT: format: DWARF32 +CHECK-NEXT: version: 5 +CHECK-NEXT: address_size: 8 +CHECK-NEXT: seg_select_size: 0 +CHECK-NEXT: prologue_length: 0x00000025 +CHECK-NEXT: min_inst_length: 1 +CHECK-NEXT: max_ops_per_inst: 1 +CHECK-NEXT: default_is_stmt: 1 +CHECK-NEXT: line_base: -5 +CHECK-NEXT: line_range: 14 +CHECK-NEXT: opcode_base: 13 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_copy] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_advance_pc] = 1 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_advance_line] = 1 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_file] = 1 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_column] = 1 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_negate_stmt] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_basic_block] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_const_add_pc] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_isa] = 1 +CHECK-NEXT: include_directories[ 0] = .debug_line_str[0x00000000] = "/Users/shubham/Development/test109275485" +CHECK-NEXT: file_names[ 0]: +CHECK-NEXT: name: .debug_line_str[0x00000029] = "a.cpp" +CHECK-NEXT: dir_index: 0 + +CHECK: debug_line[0x00000054] +CHECK-NEXT: Line table prologue: +CHECK-NEXT: total_length: 0x0000003b +CHECK-NEXT: format: DWARF32 +CHECK-NEXT: version: 4 +CHECK-NEXT: prologue_length: 0x0000001d +CHECK-NEXT: min_inst_length: 1 +CHECK-NEXT: max_ops_per_inst: 1 +CHECK-NEXT: default_is_stmt: 1 +CHECK-NEXT: line_base: -5 +CHECK-NEXT: line_range: 14 +CHECK-NEXT: opcode_base: 13 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_copy] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_advance_pc] = 1 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_advance_line] = 1 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_file] = 1 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_column] = 1 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_negate_stmt] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_basic_block] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_const_add_pc] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_isa] = 1 +CHECK-NEXT: file_names[ 1]: +CHECK-NEXT: name: "b.cpp" +CHECK-NEXT: dir_index: 0 +CHECK-NEXT: mod_time: 0x00000000 +CHECK-NEXT: length: 0x00000000 + +CHECK: .debug_str contents: + +CHECK: .debug_line_str contents: +CHECK-NEXT: 0x00000000: "/Users/shubham/Development/test109275485" +CHECK-NEXT: 0x00000029: "a.cpp" + +CHECK: .debug_ranges contents: +CHECK-NEXT: 00000000 00000000000000[[RANGE_OFFSET_START]] 00000000000000[[RANGE_OFFSET_END]] + +CHECK: .debug_rnglists contents: +CHECK-NEXT: 0x00000000: range list header: length = 0x00000013, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000 +CHECK-NEXT: ranges: +CHECK-NEXT: [[RANGELIST_OFFSET]]: [DW_RLE_start_length]: {{.*}}[0x[[RANGELIST_OFFSET_START]], 0x[[RANGELIST_OFFSET_END]]) + +CHECK: .debug_names contents: +CHECK-NEXT: Name Index @ 0x0 { +CHECK-NEXT: Header { +CHECK-NEXT: Length: 0xD4 +CHECK-NEXT: Format: DWARF32 +CHECK-NEXT: Version: 5 +CHECK-NEXT: CU count: 2 +CHECK-NEXT: Local TU count: 0 +CHECK-NEXT: Foreign TU count: 0 +CHECK-NEXT: Bucket count: 6 +CHECK-NEXT: Name count: 6 +CHECK-NEXT: Abbreviations table size: 0x11 +CHECK-NEXT: Augmentation: 'LLVM0700' +CHECK-NEXT: } diff --git a/llvm/test/tools/dsymutil/ARM/dwarf5-macho.test b/llvm/test/tools/dsymutil/ARM/dwarf5-macho.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/dsymutil/ARM/dwarf5-macho.test @@ -0,0 +1,103 @@ +; This test checks to that DWARF v5 debug info can be correctly linked +; into a dSYM bundle by dsymutil, with the correct section names and DWARF v5 +; headers for the different sections. + +; 1.o was produced with the source file: + +; a.cpp +; __attribute__((section("1,__text_foo"))) void foo() {} +; +; int foo2(int a) { +; return a+5; +; } +; int main () { +; return 1; +; } + +; clang -g -c -O1 a.cpp -Xclang -gdwarf-5 -o 1.o + + +RUN: rm -rf %t.dir && mkdir -p %t.dir +RUN: dsymutil -y %p/dummy-debug-map-amr64.map -oso-prepend-path=%p/../Inputs/DWARF5 -o %t.dir/dwarf5-macho.dSYM +RUN: llvm-dwarfdump %t.dir/dwarf5-macho.dSYM -a --verbose | FileCheck %s + +CHECK:.debug_abbrev contents: +CHECK-NEXT: Abbrev table for offset: 0x00000000 + +CHECK: .debug_info contents: +CHECK-NEXT: 0x00000000: Compile Unit: length = 0x0000007d, format = DWARF32, version = 0x0005, unit_type = DW_UT_compile, abbr_offset = 0x0000, addr_size = 0x08 (next unit at 0x00000081) +CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x[[RANGE_OFFSET:[0-9a-f]+]] +CHECK-NEXT: [0x[[RANGE_OFFSET_START:[0-9a-f]+]], 0x[[RANGE_OFFSET_END:[0-9a-f]+]])) +CHECK: 0x00000050: DW_TAG_formal_parameter [3] (0x00000033) +CHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] (0x[[LOC_OFFSET:[0-9a-f]+]]: +CHECK-NEXT: [0x[[LOC_OFFSET_START:[0-9a-f]+]], 0x[[LOC_OFFSET_END:[0-9a-f]+]]): [[LOC_EXPR:.*]] +CHECK-NEXT: [0x[[LOC_OFFSET_START2:[0-9a-f]+]], 0x[[LOC_OFFSET_END2:[0-9a-f]+]]): [[LOC_EXPR2:.*]]) + +CHECK: .debug_loclists contents: +CHECK-NEXT: 0x00000000: locations list header: length = 0x00000024, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000 +CHECK-NEXT: 0x[[LOC_OFFSET]]: +CHECK-NEXT: DW_LLE_start_length {{.*}} +CHECK-NEXT: => [0x[[LOC_OFFSET_START]], 0x[[LOC_OFFSET_END]]): [[LOC_EXPR]] +CHECK-NEXT: DW_LLE_start_length {{.*}} +CHECK-NEXT: => [0x[[LOC_OFFSET_START2]], 0x[[LOC_OFFSET_END2]]): [[LOC_EXPR2]] +CHECK-NEXT: DW_LLE_end_of_list () + +CHECK: .debug_line contents: +CHECK-NEXT: debug_line[0x00000000] +CHECK-NEXT: Line table prologue: +CHECK-NEXT: total_length: 0x00000050 +CHECK-NEXT: format: DWARF32 +CHECK-NEXT: version: 5 +CHECK-NEXT: address_size: 8 +CHECK-NEXT: seg_select_size: 0 +CHECK-NEXT: prologue_length: 0x00000025 +CHECK-NEXT: min_inst_length: 1 +CHECK-NEXT: max_ops_per_inst: 1 +CHECK-NEXT: default_is_stmt: 1 +CHECK-NEXT: line_base: -5 +CHECK-NEXT: line_range: 14 +CHECK-NEXT: opcode_base: 13 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_copy] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_advance_pc] = 1 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_advance_line] = 1 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_file] = 1 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_column] = 1 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_negate_stmt] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_basic_block] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_const_add_pc] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 +CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_isa] = 1 +CHECK-NEXT: include_directories[ 0] = .debug_line_str[0x00000000] = "/Users/shubham/Development/test109275485" +CHECK-NEXT: file_names[ 0]: +CHECK-NEXT: name: .debug_line_str[0x00000029] = "a.cpp" +CHECK-NEXT: dir_index: 0 + + +CHECK: .debug_str contents: + +CHECK: .debug_line_str contents: +CHECK-NEXT: 0x00000000: "/Users/shubham/Development/test109275485" +CHECK-NEXT: 0x00000029: "a.cpp" + +CHECK: .debug_rnglists contents: +CHECK-NEXT: 0x00000000: range list header: length = 0x00000013, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000 +CHECK-NEXT: ranges: +CHECK-NEXT: [[RANGE_OFFSET]]: [DW_RLE_start_length]: {{.*}}[0x[[RANGE_OFFSET_START]], 0x[[RANGE_OFFSET_END]]) + +CHECK: .debug_names contents: +CHECK-NEXT: Name Index @ 0x0 { +CHECK-NEXT: Header { +CHECK-NEXT: Length: 0x94 +CHECK-NEXT: Format: DWARF32 +CHECK-NEXT: Version: 5 +CHECK-NEXT: CU count: 1 +CHECK-NEXT: Local TU count: 0 +CHECK-NEXT: Foreign TU count: 0 +CHECK-NEXT: Bucket count: 4 +CHECK-NEXT: Name count: 4 +CHECK-NEXT: Abbreviations table size: 0xD +CHECK-NEXT: Augmentation: 'LLVM0700' +CHECK-NEXT: } + diff --git a/llvm/test/tools/dsymutil/Inputs/DWARF5-DWARF4-combination/1.o b/llvm/test/tools/dsymutil/Inputs/DWARF5-DWARF4-combination/1.o new file mode 100644 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@