1RUN: dsymutil -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic.macho.x86_64 | FileCheck %s 2RUN: dsymutil -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic-lto.macho.x86_64 | FileCheck %s --check-prefix=CHECK-LTO 3RUN: dsymutil -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic-archive.macho.x86_64 | FileCheck %s --check-prefix=CHECK-ARCHIVE 4RUN: dsymutil -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic.macho.x86_64 %p/Inputs/basic-lto.macho.x86_64 %p/Inputs/basic-archive.macho.x86_64 | FileCheck %s --check-prefixes=CHECK,CHECK-LTO,CHECK-ARCHIVE 5RUN: dsymutil -no-output -verbose -oso-prepend-path=%p -D %p/Inputs %p/Inputs/basic-relink.macho.arm64.dylib | FileCheck %s --check-prefix=CHECK-RELINK 6RUN: dsymutil -no-output -verbose -oso-prepend-path=%p -D %p/Inputs %p/Inputs/two-level-relink.macho.arm64.dylib | FileCheck %s --check-prefix=CHECK-RELINK-TWO 7RUN: dsymutil -no-output -verbose -oso-prepend-path=%p -build-variant-suffix=_debug -D WrongPath -D %p/Inputs %p/Inputs/variant-relink.macho.arm64.dylib | FileCheck %s --check-prefix=CHECK-RELINK-VARIANT 8 9RUN: dsymutil --linker parallel -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic.macho.x86_64 | FileCheck %s 10RUN: dsymutil --linker parallel -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic-lto.macho.x86_64 | FileCheck %s --check-prefix=CHECK-LTO 11RUN: dsymutil --linker parallel -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic-archive.macho.x86_64 | FileCheck %s --check-prefix=CHECK-ARCHIVE 12RUN: dsymutil --linker parallel -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic.macho.x86_64 %p/Inputs/basic-lto.macho.x86_64 %p/Inputs/basic-archive.macho.x86_64 | FileCheck %s --check-prefixes=CHECK,CHECK-LTO,CHECK-ARCHIVE 13 14This test check the basic Dwarf linking process through the debug dumps. 15 16================================= Simple link ================================ 17CHECK: DEBUG MAP OBJECT: {{.*}}basic1.macho.x86_64.o 18CHECK: Input compilation unit: 19CHECK-NEXT: TAG_compile_unit 20CHECK-NOT: TAG 21CHECK: AT_name {{.*}}basic1.c 22 23CHECK: DEBUG MAP OBJECT: {{.*}}basic2.macho.x86_64.o 24CHECK: Input compilation unit: 25CHECK-NEXT: TAG_compile_unit 26CHECK-NOT: TAG 27CHECK: AT_name {{.*}}basic2.c 28 29CHECK: DEBUG MAP OBJECT: {{.*}}basic3.macho.x86_64.o 30CHECK: Input compilation unit: 31CHECK-NEXT: TAG_compile_unit 32CHECK-NOT: TAG 33CHECK: AT_name {{.*}}basic3.c 34 35CHECK-NOT: Found valid debug map entry 36CHECK: Found valid debug map entry: _main 0x0000000000000000 => 0x0000000100000ea0 37CHECK-NEXT: Keeping subprogram DIE: 38CHECK-NEXT: DW_TAG_subprogram 39CHECK-NEXT: DW_AT_name{{.*}}"main" 40 41CHECK: Found valid debug map entry: _private_int 0x0000000000000560 => 0x0000000100001008 42CHECK-NEXT: Keeping variable DIE: 43CHECK-NEXT: DW_TAG_variable 44CHECK-NEXT: DW_AT_name {{.*}}"private_int" 45CHECK-NOT: Found valid debug map entry 46CHECK: Found valid debug map entry: _baz 0x0000000000000310 => 0x0000000100001000 47CHECK-NEXT: Keeping variable DIE: 48CHECK-NEXT: DW_TAG_variable 49CHECK-NEXT: DW_AT_name {{.*}}"baz" 50CHECK-NOT: Found valid debug map entry 51CHECK: Found valid debug map entry: _foo 0x0000000000000020 => 0x0000000100000ed0 52CHECK-NEXT: Keeping subprogram DIE: 53CHECK-NEXT: DW_TAG_subprogram 54CHECK-NEXT: DW_AT_name {{.*}}"foo" 55CHECK-NOT: Found valid debug map entry 56CHECK: Found valid debug map entry: _inc 0x0000000000000070 => 0x0000000100000f20 57CHECK-NEXT: Keeping subprogram DIE: 58CHECK-NEXT: DW_TAG_subprogram 59CHECK-NEXT: DW_AT_name {{.*}}"inc" 60 61CHECK-NOT: Found valid debug map entry 62CHECK: Found valid debug map entry: _val 0xffffffffffffffff => 0x0000000100001004 63CHECK-NEXT: Keeping variable DIE: 64CHECK-NEXT: DW_TAG_variable 65CHECK-NEXT: DW_AT_name {{.*}}"val" 66CHECK-NOT: Found valid debug map entry 67CHECK: Found valid debug map entry: _bar 0x0000000000000020 => 0x0000000100000f40 68CHECK-NEXT: Keeping subprogram DIE: 69CHECK-NEXT: DW_TAG_subprogram 70CHECK-NEXT: DW_AT_name {{.*}}"bar" 71CHECK-NOT: Found valid debug map entry 72CHECK: Found valid debug map entry: _inc 0x0000000000000070 => 0x0000000100000f90 73CHECK-NEXT: Keeping subprogram DIE: 74CHECK-NEXT: DW_TAG_subprogram 75CHECK-NEXT: DW_AT_name {{.*}}"inc") 76 77 78================================= LTO link ================================ 79CHECK-LTO: DEBUG MAP OBJECT: {{.*}}basic-lto.macho.x86_64.o 80CHECK-LTO: Input compilation unit: 81CHECK-LTO-NEXT: TAG_compile_unit 82CHECK-LTO-NOT: TAG 83CHECK-LTO: AT_name {{.*}}basic1.c 84CHECK-LTO: Input compilation unit: 85CHECK-LTO-NEXT: TAG_compile_unit 86CHECK-LTO-NOT: TAG 87CHECK-LTO: AT_name {{.*}}basic2.c 88CHECK-LTO: Input compilation unit: 89CHECK-LTO-NEXT: TAG_compile_unit 90CHECK-LTO-NOT: TAG 91CHECK-LTO: AT_name {{.*}}basic3.c 92 93CHECK-LTO-NOT: Found valid debug map entry 94CHECK-LTO: Found valid debug map entry: _main 0x0000000000000000 => 0x0000000100000f40 95CHECK-LTO-NEXT: Keeping subprogram DIE: 96CHECK-LTO-NEXT: DW_TAG_subprogram 97CHECK-LTO-NEXT: DW_AT_name {{.*}}"main" 98CHECK-LTO-NOT: Found valid debug map entry 99CHECK-LTO: Found valid debug map entry: _private_int 0x00000000000008e8 => 0x0000000100001008 100CHECK-LTO-NEXT: Keeping variable DIE: 101CHECK-LTO-NEXT: DW_TAG_variable 102CHECK-LTO-NEXT: DW_AT_name {{.*}}"private_int" 103CHECK-LTO-NOT: Found valid debug map entry 104CHECK-LTO: Found valid debug map entry: _baz 0x0000000000000658 => 0x0000000100001000 105CHECK-LTO-NEXT: Keeping variable DIE: 106CHECK-LTO-NEXT: DW_TAG_variable 107CHECK-LTO-NEXT: DW_AT_name {{.*}} "baz" 108CHECK-LTO-NOT: Found valid debug map entry 109CHECK-LTO: Found valid debug map entry: _foo 0x0000000000000010 => 0x0000000100000f50 110CHECK-LTO-NEXT: Keeping subprogram DIE: 111CHECK-LTO-NEXT: DW_TAG_subprogram 112CHECK-LTO-NEXT: DW_AT_name {{.*}}"foo" 113CHECK-LTO-NOT: Found valid debug map entry 114CHECK-LTO: Found valid debug map entry: _val 0x00000000000008ec => 0x0000000100001004 115CHECK-LTO-NEXT: Keeping variable DIE: 116CHECK-LTO-NEXT: DW_TAG_variable 117CHECK-LTO-NEXT: DW_AT_name {{.*}}"val" 118CHECK-LTO-NOT: Found valid debug map entry 119CHECK-LTO: Found valid debug map entry: _bar 0x0000000000000050 => 0x0000000100000f90 120CHECK-LTO-NEXT: Keeping subprogram DIE: 121CHECK-LTO-NEXT: DW_TAG_subprogram 122CHECK-LTO-NEXT: DW_AT_name {{.*}}"bar" 123 124 125================================= Archive link ================================ 126CHECK-ARCHIVE: DEBUG MAP OBJECT: {{.*}}basic1.macho.x86_64.o 127CHECK-ARCHIVE: Input compilation unit: 128CHECK-ARCHIVE-NEXT: TAG_compile_unit 129CHECK-ARCHIVE-NOT: TAG 130CHECK-ARCHIVE: AT_name {{.*}}basic1.c 131 132CHECK-ARCHIVE: DEBUG MAP OBJECT: {{.*}}libbasic.a(basic2.macho.x86_64.o) 133CHECK-ARCHIVE: Input compilation unit: 134CHECK-ARCHIVE-NEXT: TAG_compile_unit 135CHECK-ARCHIVE-NOT: TAG 136CHECK-ARCHIVE: AT_name {{.*}}basic2.c 137 138CHECK-ARCHIVE: DEBUG MAP OBJECT: {{.*}}libbasic.a(basic3.macho.x86_64.o) 139CHECK-ARCHIVE: Input compilation unit: 140CHECK-ARCHIVE-NEXT: TAG_compile_unit 141CHECK-ARCHIVE-NOT: TAG 142CHECK-ARCHIVE: AT_name {{.*}}basic3.c 143 144CHECK-ARCHIVE-NOT: Found valid debug map entry 145CHECK-ARCHIVE: Found valid debug map entry: _main 0x0000000000000000 => 0x0000000100000ea0 146CHECK-ARCHIVE-NEXT: Keeping subprogram DIE: 147CHECK-ARCHIVE-NEXT: DW_TAG_subprogram 148CHECK-ARCHIVE-NEXT: DW_AT_name{{.*}}"main" 149 150CHECK-ARCHIVE-NOT: Found valid debug map entry 151CHECK-ARCHIVE: Found valid debug map entry: _private_int 0x0000000000000560 => 0x0000000100001004 152CHECK-ARCHIVE-NEXT: Keeping variable DIE: 153CHECK-ARCHIVE-NEXT: DW_TAG_variable 154CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"private_int" 155CHECK-ARCHIVE-NOT: Found valid debug map entry 156CHECK-ARCHIVE: Found valid debug map entry: _baz 0x0000000000000310 => 0x0000000100001000 157CHECK-ARCHIVE-NEXT: Keeping variable DIE: 158CHECK-ARCHIVE-NEXT: DW_TAG_variable 159CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"baz" 160CHECK-ARCHIVE-NOT: Found valid debug map entry 161CHECK-ARCHIVE: Found valid debug map entry: _foo 0x0000000000000020 => 0x0000000100000ed0 162CHECK-ARCHIVE-NEXT: Keeping subprogram DIE: 163CHECK-ARCHIVE-NEXT: DW_TAG_subprogram 164CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"foo" 165CHECK-ARCHIVE-NOT: Found valid debug map entry 166CHECK-ARCHIVE: Found valid debug map entry: _inc 0x0000000000000070 => 0x0000000100000f20 167CHECK-ARCHIVE-NEXT: Keeping subprogram DIE: 168CHECK-ARCHIVE-NEXT: DW_TAG_subprogram 169CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"inc" 170 171CHECK-ARCHIVE-NOT: Found valid debug map entry 172CHECK-ARCHIVE: Found valid debug map entry: _val 0xffffffffffffffff => 0x0000000100001008 173CHECK-ARCHIVE-NEXT: Keeping variable DIE: 174CHECK-ARCHIVE-NEXT: DW_TAG_variable 175CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"val" 176CHECK-ARCHIVE-NOT: Found valid debug map entry 177CHECK-ARCHIVE: Found valid debug map entry: _bar 0x0000000000000020 => 0x0000000100000f40 178CHECK-ARCHIVE-NEXT: Keeping subprogram DIE: 179CHECK-ARCHIVE-NEXT: DW_TAG_subprogram 180CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"bar" 181CHECK-ARCHIVE-NOT: Found valid debug map entry 182CHECK-ARCHIVE: Found valid debug map entry: _inc 0x0000000000000070 => 0x0000000100000f90 183CHECK-ARCHIVE-NEXT: Keeping subprogram DIE: 184CHECK-ARCHIVE-NEXT: DW_TAG_subprogram 185CHECK-ARCHIVE-NEXT: DW_AT_name {{.*}}"inc") 186 187 188================================= Simple relink ================================ 189CHECK-RELINK: DEBUG MAP OBJECT: {{.*}}basic-relink.macho.arm64.o 190CHECK-RELINK: Input compilation unit: 191CHECK-RELINK-NEXT: TAG_compile_unit 192CHECK-RELINK-NOT: TAG 193CHECK-RELINK: AT_name {{.*}}basic-relink.macho.arm64.c 194 195CHECK-RELINK: DEBUG MAP OBJECT: {{.*}}foo-relink.dylib 196CHECK-RELINK: Input compilation unit: 197CHECK-RELINK-NEXT: TAG_compile_unit 198CHECK-RELINK-NOT: TAG 199CHECK-RELINK: AT_name {{.*}}foo-relink.c 200 201CHECK-RELINK: Input compilation unit: 202CHECK-RELINK-NEXT: TAG_compile_unit 203CHECK-RELINK-NOT: TAG 204CHECK-RELINK: AT_name {{.*}}altfoo-relink.c 205 206CHECK-RELINK: DEBUG MAP OBJECT: {{.*}}bar-relink.dylib 207CHECK-RELINK: Input compilation unit: 208CHECK-RELINK-NEXT: TAG_compile_unit 209CHECK-RELINK-NOT: TAG 210CHECK-RELINK: AT_name {{.*}}bar-relink.c 211 212CHECK-RELINK-NOT: Found valid debug map entry 213CHECK-RELINK: Found valid debug map entry: _display 0x0000000000000000 => 0x0000000000003f10 214CHECK-RELINK-NEXT: Keeping subprogram DIE: 215CHECK-RELINK-NEXT: DW_TAG_subprogram 216CHECK-RELINK: DW_AT_name{{.*}}"display" 217 218CHECK-RELINK: Found valid debug map entry: _foo 0x0000000000003f54 => 0x0000000000003f2c 219CHECK-RELINK-NEXT: Keeping subprogram DIE: 220CHECK-RELINK-NEXT: DW_TAG_subprogram 221CHECK-RELINK: DW_AT_name {{.*}}"foo" 222 223CHECK-RELINK-NOT: Found valid debug map entry 224CHECK-RELINK: Found valid debug map entry: _foo_unused 0x0000000000003f74 => 0x0000000000003f4c 225CHECK-RELINK-NEXT: Keeping subprogram DIE: 226CHECK-RELINK-NEXT: DW_TAG_subprogram 227CHECK-RELINK: DW_AT_name {{.*}}"foo_unused" 228 229CHECK-RELINK-NOT: Found valid debug map entry 230CHECK-RELINK: Found valid debug map entry: _altfoo 0x0000000000003f7c => 0x0000000000003f54 231CHECK-RELINK-NEXT: Keeping subprogram DIE: 232CHECK-RELINK-NEXT: DW_TAG_subprogram 233CHECK-RELINK: DW_AT_name {{.*}}"altfoo" 234 235CHECK-RELINK-NOT: Found valid debug map entry 236CHECK-RELINK: Found valid debug map entry: _baz 0x0000000000004000 => 0x0000000000008000 237CHECK-RELINK-NEXT: Keeping variable DIE: 238CHECK-RELINK-NEXT: DW_TAG_variable 239CHECK-RELINK-NEXT: DW_AT_name {{.*}}"baz" 240 241CHECK-RELINK-NOT: Found valid debug map entry 242CHECK-RELINK: Found valid debug map entry: _bar 0x0000000000003fa0 => 0x0000000000003f78 243CHECK-RELINK-NEXT: Keeping subprogram DIE: 244CHECK-RELINK-NEXT: DW_TAG_subprogram 245CHECK-RELINK: DW_AT_name {{.*}}"bar" 246 247================================= Two level relink ================================ 248CHECK-RELINK-TWO: DEBUG MAP OBJECT: {{.*}}proxy-relink.dylib 249CHECK-RELINK-TWO: Input compilation unit: 250CHECK-RELINK-TWO-NEXT: TAG_compile_unit 251CHECK-RELINK-TWO-NOT: TAG 252CHECK-RELINK-TWO: AT_name {{.*}}two-level-relink.macho.arm64.c 253 254CHECK-RELINK-TWO: Input compilation unit: 255CHECK-RELINK-TWO-NEXT: TAG_compile_unit 256CHECK-RELINK-TWO-NOT: TAG 257CHECK-RELINK-TWO: AT_name {{.*}}bar-relink.c 258CHECK-RELINK-TWO: DW_AT_APPLE_origin {{.*}}/path/to/bar-relink.dylib 259 260CHECK-RELINK-TWO: Input compilation unit: 261CHECK-RELINK-TWO-NEXT: TAG_compile_unit 262CHECK-RELINK-TWO-NOT: TAG 263CHECK-RELINK-TWO: AT_name {{.*}}foo-relink.c 264CHECK-RELINK-TWO: DW_AT_APPLE_origin {{.*}}/path/to/foo-relink.dylib 265 266CHECK-RELINK-TWO: Input compilation unit: 267CHECK-RELINK-TWO-NEXT: TAG_compile_unit 268CHECK-RELINK-TWO-NOT: TAG 269CHECK-RELINK-TWO: AT_name {{.*}}altfoo-relink.c 270CHECK-RELINK-TWO: DW_AT_APPLE_origin {{.*}}/path/to/foo-relink.dylib 271 272CHECK-RELINK-TWO-NOT: Found valid debug map entry 273CHECK-RELINK-TWO: Found valid debug map entry: _display 0x0000000000003f1c => 0x0000000000003f1c 274CHECK-RELINK-TWO-NEXT: Keeping subprogram DIE: 275CHECK-RELINK-TWO-NEXT: DW_TAG_subprogram 276CHECK-RELINK-TWO: DW_AT_name{{.*}}"display" 277 278CHECK-RELINK-TWO-NOT: Found valid debug map entry 279CHECK-RELINK-TWO: Found valid debug map entry: _baz 0x0000000000008000 => 0x0000000000008000 280CHECK-RELINK-TWO-NEXT: Keeping variable DIE: 281CHECK-RELINK-TWO-NEXT: DW_TAG_variable 282CHECK-RELINK-TWO-NEXT: DW_AT_name {{.*}}"baz" 283 284CHECK-RELINK-TWO-NOT: Found valid debug map entry 285CHECK-RELINK-TWO: Found valid debug map entry: _bar 0x0000000000003f38 => 0x0000000000003f38 286CHECK-RELINK-TWO-NEXT: Keeping subprogram DIE: 287CHECK-RELINK-TWO-NEXT: DW_TAG_subprogram 288CHECK-RELINK-TWO: DW_AT_name {{.*}}"bar" 289 290CHECK-RELINK-TWO: Found valid debug map entry: _foo 0x0000000000003f40 => 0x0000000000003f40 291CHECK-RELINK-TWO-NEXT: Keeping subprogram DIE: 292CHECK-RELINK-TWO-NEXT: DW_TAG_subprogram 293CHECK-RELINK-TWO: DW_AT_name {{.*}}"foo" 294 295CHECK-RELINK-TWO-NOT: Found valid debug map entry 296CHECK-RELINK-TWO: Found valid debug map entry: _altfoo 0x0000000000003f64 => 0x0000000000003f64 297CHECK-RELINK-TWO-NEXT: Keeping subprogram DIE: 298CHECK-RELINK-TWO-NEXT: DW_TAG_subprogram 299CHECK-RELINK-TWO: DW_AT_name {{.*}}"altfoo" 300 301================================= Build variants relink ================================ 302CHECK-RELINK-VARIANT: DEBUG MAP OBJECT: {{.*}}basic-relink.macho.arm64.o 303CHECK-RELINK-VARIANT: DEBUG MAP OBJECT: {{.*}}foo-relink-variant_debug.dylib 304CHECK-RELINK-VARIANT: DEBUG MAP OBJECT: {{.*}}bar-relink-variant.dylib 305