1; This test checks to ensure that if a DWARF v5 and DWARF v4 object file is used to 2; generate a dsym, dsymutil correctly outputs the debug information, by keeping 3; the DWARF v5 and DWARF v4 debug info distinct, and that all the section headers 4; have the correct format. 5 6; 1.o was produced with the source file: 7 8; a.cpp 9; __attribute__((section("1,__text_foo"))) void foo() {} 10; 11; int foo2(int a) { 12; return a+5; 13; } 14; int main () { 15; return 1; 16; } 17 18; clang -g -c -O1 a.cpp -Xclang -gdwarf-5 -o 1.o 19 20; 2.o was produced with the following source file: 21 22; b.cpp 23; __attribute__((section("1,__text_foo2"))) void foo2() {} 24; 25; int bar(int x) { 26; int y = x + 2; 27; return y; 28; } 29 30; clang -g -c -O1 b.cpp -gdwarf-4 -o 2.o 31 32RUN: rm -rf %t.dir && mkdir -p %t.dir 33RUN: dsymutil -y %p/dummy-debug-map-amr64.map -oso-prepend-path=%p/../Inputs/DWARF5-DWARF4-combination -o %t.dir/dwarf5-dwarf4-combination-macho.dSYM 34RUN: llvm-dwarfdump %t.dir/dwarf5-dwarf4-combination-macho.dSYM -a --verbose | FileCheck %s --check-prefixes=CHECK,WITH-PARENTS 35 36RUN: rm -rf %t.dir && mkdir -p %t.dir 37RUN: dsymutil --no-odr --linker parallel -y %p/dummy-debug-map-amr64.map \ 38RUN: -oso-prepend-path=%p/../Inputs/DWARF5-DWARF4-combination \ 39RUN: -o %t.dir/dwarf5-dwarf4-combination-macho.dSYM 40RUN: llvm-dwarfdump %t.dir/dwarf5-dwarf4-combination-macho.dSYM \ 41RUN: -a --verbose | FileCheck %s --check-prefixes=CHECK,NO-PARENTS 42 43### Uncomment following when llvm-dwarfdump will dump address ranges 44### correctly for severall compile units case. 45COM: rm -rf %t.dir && mkdir -p %t.dir 46COM: dsymutil --linker parallel -y %p/dummy-debug-map-amr64.map \ 47COM: -oso-prepend-path=%p/../Inputs/DWARF5-DWARF4-combination \ 48COM: -o %t.dir/dwarf5-dwarf4-combination-macho.dSYM 49COM: llvm-dwarfdump %t.dir/dwarf5-dwarf4-combination-macho.dSYM \ 50COM: -a --verbose | FileCheck %s --check-prefixes=CHECK,CHECK-LLVM 51 52 53CHECK:.debug_abbrev contents: 54CHECK-NEXT: Abbrev table for offset: 0x00000000 55 56CHECK: .debug_info contents: 57CHECK-LLVM: Compile Unit: length = 0x0000001f, format = DWARF32, version = 0x0005, unit_type = DW_UT_compile, abbr_offset = {{.*}}, addr_size = 0x08 58CHECK-LLVM: DW_TAG_compile_unit 59CHECK-LLVM: DW_TAG_base_type 60 61CHECK: Compile Unit: length = 0x0000004a, format = DWARF32, version = 0x0005, unit_type = DW_UT_compile, abbr_offset = {{.*}}, addr_size = 0x08 62CHECK: DW_AT_producer [DW_FORM_strx] (indexed (00000000) string = "Apple clang version 14.0.3 (clang-1403.0.22.14.1)") 63CHECK: DW_AT_name [DW_FORM_strx] (indexed (00000001) string = "a.cpp") 64CHECK: DW_AT_LLVM_sysroot [DW_FORM_strx] (indexed (00000002) string = "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk") 65CHECK: DW_AT_APPLE_sdk [DW_FORM_strx] (indexed (00000003) string = "MacOSX.sdk") 66CHECK: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x00000008) 67CHECK: DW_AT_comp_dir [DW_FORM_strx] (indexed (00000004) string = "/Users/shubham/Development/test109275485") 68CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x[[RANGELIST_OFFSET:[0-9a-f]+]] 69CHECK-NEXT: [0x[[RANGELIST_OFFSET_START:[0-9a-f]+]], 0x[[RANGELIST_OFFSET_END:[0-9a-f]+]])) 70CHECK-NEXT: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000008) 71CHECK: DW_TAG_subprogram 72CHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x[[#%.16x,LOCLIST_LOWPC:]]) 73CHECK: DW_AT_linkage_name [DW_FORM_strx] (indexed (00000005) string = "_Z4foo2i") 74CHECK: DW_AT_name [DW_FORM_strx] (indexed (00000006) string = "foo2") 75CHECK: DW_TAG_formal_parameter 76CHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] (0x[[LOCLIST_OFFSET:[0-9a-f]+]]: 77CHECK-NEXT: [0x[[#%.16x,LOCLIST_PAIR_START:]], 0x[[#%.16x,LOCLIST_PAIR_END:]]): [[LOCLIST_EXPR:.*]] 78CHECK-NEXT: [0x[[#%.16x,LOCLIST_PAIR_START2:]], 0x[[#%.16x,LOCLIST_PAIR_END2:]]): [[LOCLIST_EXPR2:.*]]) 79CHECK: DW_AT_name [DW_FORM_strx] (indexed (00000007) string = "a") 80 81CHECK: Compile Unit: length = 0x00000072, format = DWARF32, version = 0x0004, abbr_offset = {{.*}}, addr_size = 0x08 82CHECK: DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000001] = "Apple clang version 14.0.3 (clang-1403.0.22.14.1)") 83CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000e0] = "b.cpp") 84CHECK: DW_AT_LLVM_sysroot [DW_FORM_strp] ( .debug_str[0x00000039] = "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk") 85CHECK: DW_AT_APPLE_sdk [DW_FORM_strp] ( .debug_str[0x00000098] = "MacOSX.sdk") 86CHECK-NOT: DW_AT_str_offsets_base 87CHECK: DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x000000a3] = "/Users/shubham/Development/test109275485") 88CHECK: DW_AT_low_pc [DW_FORM_addr] (0x[[#%.16x,RANGE_LOWPC:]]) 89CHECK-NEXT: DW_AT_ranges [DW_FORM_sec_offset] (0x00000000 90CHECK-NEXT: [0x[[#%.16x,RANGE_START:]], 0x[[#%.16x,RANGE_END:]])) 91CHECK: DW_TAG_subprogram 92CHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x[[#%.16x,LOC_LOWPC:]]) 93CHECK: DW_AT_linkage_name [DW_FORM_strp] ( .debug_str[0x000000e6] = "_Z3bari") 94CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000ee] = "bar") 95CHECK: DW_TAG_formal_parameter 96CHECK-NEXT: DW_AT_location [DW_FORM_sec_offset] (0x[[LOC_OFFSET:[0-9a-f]+]]: 97CHECK-NEXT: [0x[[#%.16x,LOC_PAIR_START:]], 0x[[#%.16x,LOC_PAIR_END:]]): [[LOC_EXPR:.*]] 98CHECK-NEXT: [0x[[#%.16x,LOC_PAIR_START2:]], 0x[[#%.16x,LOC_PAIR_END2:]]): [[LOC_EXPR2:.*]]) 99CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000f2] = "x") 100 101CHECK: .debug_loc contents: 102CHECK-NEXT: 0x[[LOC_OFFSET]]: 103CHECK-NEXT: (0x[[#sub(LOC_PAIR_START,LOC_LOWPC)]], 0x[[#sub(LOC_PAIR_END,LOC_LOWPC)]]): [[LOC_EXPR:.*]] 104CHECK-NEXT: (0x[[#sub(LOC_PAIR_START2,LOC_LOWPC)]], 0x[[#sub(LOC_PAIR_END2,LOC_LOWPC)]]): [[LOC_EXPR2:.*]] 105 106CHECK: .debug_loclists contents: 107CHECK-NEXT: 0x00000000: locations list header: length = 0x00000018, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000 108CHECK-NEXT: 0x[[LOCLIST_OFFSET]]: 109CHECK-NEXT: DW_LLE_base_addressx (0x0000000000000000) 110CHECK-NEXT: DW_LLE_offset_pair (0x[[#sub(LOCLIST_PAIR_START,LOCLIST_LOWPC)]], 0x[[#sub(LOCLIST_PAIR_END,LOCLIST_LOWPC)]]) 111CHECK-NEXT: DW_LLE_offset_pair (0x[[#sub(LOCLIST_PAIR_START2,LOCLIST_LOWPC)]], 0x[[#sub(LOCLIST_PAIR_END2,LOCLIST_LOWPC)]]) 112CHECK-NEXT: DW_LLE_end_of_list () 113 114CHECK: .debug_line contents: 115CHECK-NEXT: debug_line[0x00000000] 116CHECK-NEXT: Line table prologue: 117CHECK-NEXT: total_length: 0x0000005a 118CHECK-NEXT: format: DWARF32 119CHECK-NEXT: version: 5 120CHECK-NEXT: address_size: 8 121CHECK-NEXT: seg_select_size: 0 122CHECK-NEXT: prologue_length: 0x00000037 123CHECK-NEXT: min_inst_length: 1 124CHECK-NEXT: max_ops_per_inst: 1 125CHECK-NEXT: default_is_stmt: 1 126CHECK-NEXT: line_base: -5 127CHECK-NEXT: line_range: 14 128CHECK-NEXT: opcode_base: 13 129CHECK-NEXT: standard_opcode_lengths[DW_LNS_copy] = 0 130CHECK-NEXT: standard_opcode_lengths[DW_LNS_advance_pc] = 1 131CHECK-NEXT: standard_opcode_lengths[DW_LNS_advance_line] = 1 132CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_file] = 1 133CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_column] = 1 134CHECK-NEXT: standard_opcode_lengths[DW_LNS_negate_stmt] = 0 135CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_basic_block] = 0 136CHECK-NEXT: standard_opcode_lengths[DW_LNS_const_add_pc] = 0 137CHECK-NEXT: standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 138CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 139CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 140CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_isa] = 1 141CHECK-NEXT: include_directories[ 0] = .debug_line_str[0x00000000] = "/Users/shubham/Development/test109275485" 142CHECK-NEXT: file_names[ 0]: 143CHECK-NEXT: name: .debug_line_str[0x00000029] = "a.cpp" 144CHECK-NEXT: dir_index: 0 145 146CHECK: debug_line[0x0000005e] 147CHECK-NEXT: Line table prologue: 148CHECK-NEXT: total_length: 0x0000003b 149CHECK-NEXT: format: DWARF32 150CHECK-NEXT: version: 4 151CHECK-NEXT: prologue_length: 0x0000001d 152CHECK-NEXT: min_inst_length: 1 153CHECK-NEXT: max_ops_per_inst: 1 154CHECK-NEXT: default_is_stmt: 1 155CHECK-NEXT: line_base: -5 156CHECK-NEXT: line_range: 14 157CHECK-NEXT: opcode_base: 13 158CHECK-NEXT: standard_opcode_lengths[DW_LNS_copy] = 0 159CHECK-NEXT: standard_opcode_lengths[DW_LNS_advance_pc] = 1 160CHECK-NEXT: standard_opcode_lengths[DW_LNS_advance_line] = 1 161CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_file] = 1 162CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_column] = 1 163CHECK-NEXT: standard_opcode_lengths[DW_LNS_negate_stmt] = 0 164CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_basic_block] = 0 165CHECK-NEXT: standard_opcode_lengths[DW_LNS_const_add_pc] = 0 166CHECK-NEXT: standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1 167CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 168CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 169CHECK-NEXT: standard_opcode_lengths[DW_LNS_set_isa] = 1 170CHECK-NEXT: file_names[ 1]: 171CHECK-NEXT: name: "b.cpp" 172CHECK-NEXT: dir_index: 0 173CHECK-NEXT: mod_time: 0x00000000 174CHECK-NEXT: length: 0x00000000 175 176CHECK: .debug_str contents: 177CHECK-NEXT: 0x00000000: "" 178CHECK-NEXT: 0x00000001: "Apple clang version 14.0.3 (clang-1403.0.22.14.1)" 179CHECK-NEXT: 0x00000033: "a.cpp" 180CHECK-NEXT: 0x00000039: "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk" 181CHECK-NEXT: 0x00000098: "MacOSX.sdk" 182CHECK-NEXT: 0x000000a3: "/Users/shubham/Development/test109275485" 183CHECK-NEXT: 0x000000cc: "_Z4foo2i" 184CHECK-NEXT: 0x000000d5: "foo2" 185CHECK-NEXT: 0x000000da: "a" 186CHECK-NEXT: 0x000000dc: "int" 187CHECK-NEXT: 0x000000e0: "b.cpp" 188CHECK-NEXT: 0x000000e6: "_Z3bari" 189CHECK-NEXT: 0x000000ee: "bar" 190CHECK-NEXT: 0x000000f2: "x" 191CHECK-NEXT: 0x000000f4: "y" 192 193CHECK: .debug_line_str contents: 194CHECK-NEXT: 0x00000000: "/Users/shubham/Development/test109275485" 195CHECK-NEXT: 0x00000029: "a.cpp" 196 197CHECK: .debug_ranges contents: 198CHECK-NEXT: 00000000 [[#sub(RANGE_START,RANGE_LOWPC)]] [[#sub(RANGE_END,RANGE_LOWPC)]] 199 200CHECK: .debug_rnglists contents: 201CHECK-NEXT: 0x00000000: range list header: length = 0x0000000e, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000 202CHECK-NEXT: ranges: 203CHECK-NEXT: [[RANGELIST_OFFSET]]: [DW_RLE_base_addressx]: 0x0000000000000000 204CHECK-NEXT: 0x0000000e: [DW_RLE_offset_pair ]: {{.*}}[0x[[RANGELIST_OFFSET_START]], 0x[[RANGELIST_OFFSET_END]]) 205CHECK-NEXT: 0x00000011: [DW_RLE_end_of_list ] 206 207CHECK: .debug_str_offsets contents: 208CHECK-NEXT: 0x00000000: Contribution size = 40, Format = DWARF32, Version = 5 209CHECK-NEXT: 0x00000008: 00000001 "Apple clang version 14.0.3 (clang-1403.0.22.14.1)" 210CHECK-NEXT: 0x0000000c: 00000033 "a.cpp" 211CHECK-NEXT: 0x00000010: 00000039 "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk" 212CHECK-NEXT: 0x00000014: 00000098 "MacOSX.sdk" 213CHECK-NEXT: 0x00000018: 000000a3 "/Users/shubham/Development/test109275485" 214CHECK-NEXT: 0x0000001c: 000000cc "_Z4foo2i" 215CHECK-NEXT: 0x00000020: 000000d5 "foo2" 216CHECK-NEXT: 0x00000024: 000000da "a" 217CHECK-NEXT: 0x00000028: 000000dc "int" 218 219CHECK: .debug_names contents: 220CHECK-NEXT: Name Index @ 0x0 { 221CHECK-NEXT: Header { 222; FIXME: when the parallel dwarf linker is able to generate DW_IDX_parent, 223; these headers should be the same. 224WITH-PARENTS-NEXT: Length: 0xC0 225NO-PARENTS-NEXT: Length: 0xBC 226CHECK-NEXT: Format: DWARF32 227CHECK-NEXT: Version: 5 228CHECK-NEXT: CU count: 2 229CHECK-NEXT: Local TU count: 0 230CHECK-NEXT: Foreign TU count: 0 231CHECK-NEXT: Bucket count: 5 232CHECK-NEXT: Name count: 5 233WITH-PARENTS-NEXT: Abbreviations table size: 0x15 234NO-PARENTS-NEXT: Abbreviations table size: 0x11 235CHECK-NEXT: Augmentation: 'LLVM0700' 236CHECK-NEXT: } 237