1; This test checks to ensure that if three DWARFv5 object files have correct values for the DW_AT_addr_base in their compile units. 2 3; 1.o was produced with the source file: 4 5; a.cpp 6; __attribute__((section("1,__text_foo"))) void foo() {} 7; 8; int foo2(int a) { 9; return a+5; 10; } 11; 12; int foo3(int x) { 13; return x+2; 14; } 15; 16; int main () { 17; return 1; 18; } 19 20; clang -g -c -O1 a.cpp -gdwarf-5 -o 1.o 21 22; 2.o was produced with the following source file: 23 24; b.cpp 25; __attribute__((section("1,__text_foo"))) void bar() {} 26; 27; int bar2(int a) { 28; return a+5; 29; } 30; 31; int bar3(int x) { 32; return x+2; 33; } 34 35; clang -g -c -O1 b.cpp -gdwarf-5 -o 2.o 36 37; 3.o was produced with the following source file: 38 39; c.cpp 40; 41; int baz(int x) { 42; return x+2; 43; } 44 45; clang -g -c -O1 c.cpp -gdwarf-5 -o 3.o 46 47 48RUN: rm -rf %t.dir && mkdir -p %t.dir 49RUN: dsymutil -y %p/dummy-debug-map-amr64.map -oso-prepend-path=%p/../Inputs/DWARF5-addr-base-str-off-base -o %t.dir/dwarf5-addr-base.dSYM 50RUN: llvm-dwarfdump %t.dir/dwarf5-addr-base.dSYM -a --verbose | FileCheck %s 51 52RUN: rm -rf %t.dir && mkdir -p %t.dir 53RUN: dsymutil --linker parallel --no-odr -y %p/dummy-debug-map-amr64.map \ 54RUN: -oso-prepend-path=%p/../Inputs/DWARF5-addr-base-str-off-base \ 55RUN: -o %t.dir/dwarf5-addr-base.dSYM 56RUN: llvm-dwarfdump %t.dir/dwarf5-addr-base.dSYM -a --verbose | FileCheck %s 57 58RUN: rm -rf %t.dir && mkdir -p %t.dir 59RUN: dsymutil --linker parallel -y %p/dummy-debug-map-amr64.map \ 60RUN: -oso-prepend-path=%p/../Inputs/DWARF5-addr-base-str-off-base \ 61RUN: -o %t.dir/dwarf5-addr-base.dSYM 62RUN: llvm-dwarfdump %t.dir/dwarf5-addr-base.dSYM -a --verbose | \ 63RUN: FileCheck %s --check-prefixes=CHECK,CHECK-LLVM 64 65 66RUN: rm -rf %t.dir && mkdir -p %t.dir 67RUN: dsymutil --update -y %p/dummy-debug-map-amr64.map -oso-prepend-path=%p/../Inputs/DWARF5-addr-base-str-off-base -o %t.dir/dwarf5-addr-base.dSYM 68RUN: llvm-dwarfdump %t.dir/dwarf5-addr-base.dSYM -a --verbose | FileCheck %s --check-prefix=UPD 69 70RUN: rm -rf %t.dir && mkdir -p %t.dir 71RUN: dsymutil --linker parallel --no-odr --update -y %p/dummy-debug-map-amr64.map \ 72RUN: -oso-prepend-path=%p/../Inputs/DWARF5-addr-base-str-off-base \ 73RUN: -o %t.dir/dwarf5-addr-base.dSYM 74RUN: llvm-dwarfdump %t.dir/dwarf5-addr-base.dSYM -a --verbose | \ 75RUN: FileCheck %s --check-prefix=UPD 76 77RUN: rm -rf %t.dir && mkdir -p %t.dir 78RUN: dsymutil --linker parallel --update -y %p/dummy-debug-map-amr64.map \ 79RUN: -oso-prepend-path=%p/../Inputs/DWARF5-addr-base-str-off-base \ 80RUN: -o %t.dir/dwarf5-addr-base.dSYM 81RUN: llvm-dwarfdump %t.dir/dwarf5-addr-base.dSYM -a --verbose | \ 82RUN: FileCheck %s --check-prefix=UPD 83 84 85CHECK: .debug_info contents: 86 87CHECK-LLVM: Compile Unit: length = 0x0000001f, format = DWARF32, version = 0x0005, unit_type = DW_UT_compile, abbr_offset = {{.*}}, addr_size = 0x08 88CHECK-LLVM: DW_TAG_compile_unit 89CHECK-LLVM: DW_TAG_base_type 90 91CHECK: Compile Unit: length = 0x0000004a, format = DWARF32, version = 0x0005, unit_type = DW_UT_compile, abbr_offset = {{.*}}, addr_size = 0x08 92 93CHECK: DW_TAG_compile_unit 94CHECK: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000008) 95 96CHECK: DW_TAG_subprogram 97CHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x[[ADDR1:[0-9a-f]+]]) 98 99 100CHECK: Compile Unit: length = 0x0000004a, format = DWARF32, version = 0x0005, unit_type = DW_UT_compile, abbr_offset = {{.*}}, addr_size = 0x08 101 102CHECK: DW_TAG_compile_unit 103CHECK: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000018) 104 105CHECK: DW_TAG_subprogram 106CHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x[[ADDR2:[0-9a-f]+]]) 107 108CHECK: Compile Unit: length = 0x00000043, format = DWARF32, version = 0x0005, unit_type = DW_UT_compile, abbr_offset = {{.*}}, addr_size = 0x08 109 110CHECK: DW_TAG_compile_unit 111CHECK: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000028) 112 113CHECK: DW_TAG_subprogram 114CHECK-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x[[ADDR3:[0-9a-f]+]]) 115 116CHECK: .debug_addr contents: 117CHECK-NEXT: 0x00000000: Address table header: length = 0x0000000c, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00 118CHECK-NEXT: Addrs: [ 119CHECK-NEXT: 0x[[ADDR1]] 120CHECK-NEXT: ] 121CHECK-NEXT: 0x00000010: Address table header: length = 0x0000000c, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00 122CHECK-NEXT: Addrs: [ 123CHECK-NEXT: 0x[[ADDR2]] 124CHECK-NEXT: ] 125CHECK-NEXT: 0x00000020: Address table header: length = 0x0000000c, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00 126CHECK-NEXT: Addrs: [ 127CHECK-NEXT: 0x[[ADDR3]] 128CHECK-NEXT: ] 129 130UPD: .debug_info contents: 131UPD-NEXT: 0x00000000: Compile Unit: length = 0x00000081, format = DWARF32, version = 0x0005, unit_type = DW_UT_compile, abbr_offset = 0x0000, addr_size = 0x08 132 133UPD: 0x0000000c: DW_TAG_compile_unit [1] * 134UPD: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000008) 135 136UPD: 0x00000031: DW_TAG_subprogram [2] (0x0000000c) 137UPD-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000000000018) 138 139UPD: 0x0000003d: DW_TAG_subprogram [3] * (0x0000000c) 140UPD-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000000000000) 141 142UPD: 0x00000057: DW_TAG_subprogram [3] * (0x0000000c) 143UPD-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002) address = 0x0000000000000008) 144 145UPD: 0x00000071: DW_TAG_subprogram [5] (0x0000000c) 146UPD-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000003) address = 0x0000000000000010) 147 148 149UPD: 0x00000085: Compile Unit: length = 0x00000072, format = DWARF32, version = 0x0005, unit_type = DW_UT_compile, abbr_offset = 0x00{{00|99}}, addr_size = 0x08 150 151UPD: 0x00000091: DW_TAG_compile_unit [1] * 152UPD: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000008) 153 154UPD: 0x000000b6: DW_TAG_subprogram [2] (0x00000091) 155UPD-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000000000018) 156 157UPD: 0x000000c2: DW_TAG_subprogram [3] * (0x00000091) 158UPD-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000000000000) 159 160UPD: 0x000000dc: DW_TAG_subprogram [3] * (0x00000091) 161UPD-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002) address = 0x0000000000000008) 162 163UPD: 0x000000fb: Compile Unit: length = 0x00000044, format = DWARF32, version = 0x0005, unit_type = DW_UT_compile, abbr_offset = 0x0{{000|115}}, addr_size = 0x08 164 165UPD: 0x00000107: DW_TAG_compile_unit {{.*}} * 166UPD: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000008) 167 168UPD: 0x00000124: DW_TAG_subprogram {{.*}} * (0x00000107) 169UPD-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000000000018) 170 171UPD: .debug_addr contents: 172UPD-NEXT: 0x00000000: Address table header: length = 0x00000024, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00 173UPD-NEXT: Addrs: [ 174UPD-NEXT: 0x0000000000000018 175UPD-NEXT: 0x0000000000000000 176UPD-NEXT: 0x0000000000000008 177UPD-NEXT: 0x0000000000000010 178UPD-NEXT: ] 179UPD-NEXT: 0x00000028: Address table header: length = 0x0000001c, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00 180UPD-NEXT: Addrs: [ 181UPD-NEXT: 0x0000000000000010 182UPD-NEXT: 0x0000000000000000 183UPD-NEXT: 0x0000000000000008 184UPD-NEXT: ] 185UPD-NEXT: 0x00000048: Address table header: length = 0x0000000c, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00 186UPD-NEXT: Addrs: [ 187UPD-NEXT: 0x0000000000000000 188UPD-NEXT: ] 189