639 lines · plain
1; RUN: rm -rf %t2; RUN: split-file %s %t3; RUN: sed -e "s|DSTROOT|%/t|g" %t/inputs.json.in > %t/inputs.json4 5; RUN: yaml2obj %t/Umbrella.yaml -o %t/Umbrella6; RUN: mkdir -p %t/System/Library/Frameworks/Bar.framework7; RUN: yaml2obj %t/Bar.yaml -o %t/System/Library/Frameworks/Bar.framework/Bar8 9; RUN: clang-installapi -target x86_64-apple-macosx13 -install_name \10; RUN: /System/Library/Frameworks/Umbrella3.framework/Versions/A/Umbrella3 \11; RUN: -current_version 1 -compatibility_version 1 \12; RUN: --verify-against=%t/Umbrella \13; RUN: -F %t/System/Library/Frameworks -L %t/usr/lib \14; RUN: %t/inputs.json --verify-mode=Pedantic \15; RUN: -reexport_framework Foo -reexport_framework Bar -reexport-lBaz \16; RUN: -o %t/Umbrella.tbd 2>&1 | FileCheck -allow-empty %s17; RUN: llvm-readtapi -compare %t/Umbrella.tbd %t/expected.tbd 2>&1 | FileCheck -allow-empty %s18 19// Checks that one of the reexported frameworks found earlier doesn't resolve 20// a missing export from a declaration.21; RUN: not clang-installapi -target x86_64-apple-macosx13 -install_name \22; RUN: /System/Library/Frameworks/Umbrella3.framework/Versions/A/Umbrella3 \23; RUN: -current_version 1 -compatibility_version 1 \24; RUN: --verify-against=%t/Umbrella \25; RUN: %t/inputs.json -F %t/BadFoo \26; RUN: -F %t/System/Library/Frameworks -L %t/usr/lib \27; RUN: --verify-mode=ErrorsOnly \28; RUN: -reexport_framework Foo -reexport_framework Bar -reexport-lBaz \29; RUN: -o %t/Umbrella.tbd 2>&1 | FileCheck %s --check-prefix MISSING_SYMBOL30 31; MISSING_SYMBOL: error: declaration has external linkage, but dynamic library doesn't have symbol 'foo'32; MISSING_SYMBOL-NEXT: extern int foo();33 34 35; CHECK-NOT: error36; CHECK-NOT: warning37 38;--- System/Library/Frameworks/Umbrella.framework/Headers/Bar.h39extern int bar();40 41;--- System/Library/Frameworks/Umbrella.framework/Headers/Baz.h42extern int baz();43 44;--- System/Library/Frameworks/Umbrella.framework/Headers/Foo.h45extern int foo();46 47;--- System/Library/Frameworks/Umbrella.framework/Headers/Umbrella.h48#import <Umbrella/Bar.h>49#import <Umbrella/Baz.h>50#import <Umbrella/Foo.h>51 52;--- inputs.json.in53{54 "headers": [ {55 "path" : "DSTROOT/System/Library/Frameworks/Umbrella.framework/Headers/Bar.h",56 "type" : "public"57 }, 58 {59 "path" : "DSTROOT/System/Library/Frameworks/Umbrella.framework/Headers/Baz.h",60 "type" : "public"61 },62 {63 "path" : "DSTROOT/System/Library/Frameworks/Umbrella.framework/Headers/Umbrella.h",64 "type" : "public"65 },66 {67 "path" : "DSTROOT/System/Library/Frameworks/Umbrella.framework/Headers/Foo.h",68 "type" : "public"69 }70 ],71 "version": "3"72}73 74;--- Umbrella.yaml75--- !mach-o76FileHeader:77 magic: 0xFEEDFACF78 cputype: 0x100000779 cpusubtype: 0x380 filetype: 0x681 ncmds: 1882 sizeofcmds: 118483 flags: 0x8584 reserved: 0x085LoadCommands:86 - cmd: LC_SEGMENT_6487 cmdsize: 15288 segname: __TEXT89 vmaddr: 090 vmsize: 1228891 fileoff: 092 filesize: 1228893 maxprot: 594 initprot: 595 nsects: 196 flags: 097 Sections:98 - sectname: __text99 segname: __TEXT100 addr: 0x24C0101 size: 0102 offset: 0x24C0103 align: 0104 reloff: 0x0105 nreloc: 0106 flags: 0x80000000107 reserved1: 0x0108 reserved2: 0x0109 reserved3: 0x0110 content: ''111 - cmd: LC_SEGMENT_64112 cmdsize: 152113 segname: __DATA_CONST114 vmaddr: 12288115 vmsize: 4096116 fileoff: 12288117 filesize: 4096118 maxprot: 3119 initprot: 3120 nsects: 1121 flags: 16122 Sections:123 - sectname: __objc_imageinfo124 segname: __DATA_CONST125 addr: 0x3000126 size: 8127 offset: 0x3000128 align: 0129 reloff: 0x0130 nreloc: 0131 flags: 0x0132 reserved1: 0x0133 reserved2: 0x0134 reserved3: 0x0135 content: '0000000040000000'136 - cmd: LC_SEGMENT_64137 cmdsize: 72138 segname: __LINKEDIT139 vmaddr: 16384140 vmsize: 48141 fileoff: 16384142 filesize: 48143 maxprot: 1144 initprot: 1145 nsects: 0146 flags: 0147 - cmd: LC_DYLD_INFO_ONLY148 cmdsize: 48149 rebase_off: 0150 rebase_size: 0151 bind_off: 0152 bind_size: 0153 weak_bind_off: 0154 weak_bind_size: 0155 lazy_bind_off: 0156 lazy_bind_size: 0157 export_off: 0158 export_size: 0159 - cmd: LC_SYMTAB160 cmdsize: 24161 symoff: 16392162 nsyms: 1163 stroff: 16408164 strsize: 24165 - cmd: LC_DYSYMTAB166 cmdsize: 80167 ilocalsym: 0168 nlocalsym: 0169 iextdefsym: 0170 nextdefsym: 0171 iundefsym: 0172 nundefsym: 1173 tocoff: 0174 ntoc: 0175 modtaboff: 0176 nmodtab: 0177 extrefsymoff: 0178 nextrefsyms: 0179 indirectsymoff: 0180 nindirectsyms: 0181 extreloff: 0182 nextrel: 0183 locreloff: 0184 nlocrel: 0185 - cmd: LC_ID_DYLIB186 cmdsize: 96187 dylib:188 name: 24189 timestamp: 0190 current_version: 65536191 compatibility_version: 65536192 Content: '/System/Library/Frameworks/Umbrella3.framework/Versions/A/Umbrella3'193 ZeroPadBytes: 5194 - cmd: LC_UUID195 cmdsize: 24196 uuid: 4C4C44AE-5555-3144-A1D3-33A5C6F7B36A197 - cmd: LC_BUILD_VERSION198 cmdsize: 32199 platform: 1200 minos: 851968201 sdk: 983040202 ntools: 1203 Tools:204 - tool: 4205 version: 1245184206 - cmd: LC_LOAD_DYLIB207 cmdsize: 80208 dylib:209 name: 24210 timestamp: 0211 current_version: 65536212 compatibility_version: 65536213 Content: '/System/Library/Frameworks/Foo.framework/Versions/A/Foo'214 ZeroPadBytes: 1215 - cmd: LC_REEXPORT_DYLIB216 cmdsize: 80217 dylib:218 name: 24219 timestamp: 0220 current_version: 0221 compatibility_version: 0222 Content: '/System/Library/Frameworks/Foo.framework/Versions/A/Foo'223 ZeroPadBytes: 1224 - cmd: LC_LOAD_DYLIB225 cmdsize: 80226 dylib:227 name: 24228 timestamp: 0229 current_version: 65536230 compatibility_version: 65536231 Content: '/System/Library/Frameworks/Bar.framework/Versions/A/Bar'232 ZeroPadBytes: 1233 - cmd: LC_REEXPORT_DYLIB234 cmdsize: 80235 dylib:236 name: 24237 timestamp: 0238 current_version: 0239 compatibility_version: 0240 Content: '/System/Library/Frameworks/Bar.framework/Versions/A/Bar'241 ZeroPadBytes: 1242 - cmd: LC_LOAD_DYLIB243 cmdsize: 48244 dylib:245 name: 24246 timestamp: 0247 current_version: 65536248 compatibility_version: 65536249 Content: '/usr/lib/libBaz.1.dylib'250 ZeroPadBytes: 1251 - cmd: LC_REEXPORT_DYLIB252 cmdsize: 48253 dylib:254 name: 24255 timestamp: 0256 current_version: 0257 compatibility_version: 0258 Content: '/usr/lib/libBaz.1.dylib'259 ZeroPadBytes: 1260 - cmd: LC_LOAD_DYLIB261 cmdsize: 56262 dylib:263 name: 24264 timestamp: 0265 current_version: 88539136266 compatibility_version: 65536267 Content: '/usr/lib/libSystem.B.dylib'268 ZeroPadBytes: 6269 - cmd: LC_FUNCTION_STARTS270 cmdsize: 16271 dataoff: 16384272 datasize: 8273 - cmd: LC_DATA_IN_CODE274 cmdsize: 16275 dataoff: 16392276 datasize: 0277LinkEditData:278 NameList:279 - n_strx: 2280 n_type: 0x1281 n_sect: 0282 n_desc: 1024283 n_value: 0284 StringTable:285 - ' '286 - dyld_stub_binder287 - ''288 - ''289 - ''290 - ''291 - ''292...293 294;--- System/Library/Frameworks/Foo.framework/Foo.tbd295{296 "main_library": {297 "exported_symbols": [298 {299 "text": {300 "global": [301 "_foo"302 ]303 }304 }305 ],306 "flags": [307 {308 "attributes": [309 "not_app_extension_safe"310 ]311 }312 ],313 "install_names": [314 {315 "name": "/System/Library/Frameworks/Foo.framework/Versions/A/Foo"316 }317 ],318 "target_info": [319 {320 "min_deployment": "13",321 "target": "x86_64-macos"322 }323 ]324 },325 "tapi_tbd_version": 5326}327 328;--- Bar.yaml329--- !mach-o330FileHeader:331 magic: 0xFEEDFACF332 cputype: 0x1000007333 cpusubtype: 0x3334 filetype: 0x6335 ncmds: 12336 sizeofcmds: 912337 flags: 0x100085338 reserved: 0x0339LoadCommands:340 - cmd: LC_SEGMENT_64341 cmdsize: 312342 segname: __TEXT343 vmaddr: 0344 vmsize: 8192345 fileoff: 0346 filesize: 8192347 maxprot: 5348 initprot: 5349 nsects: 3350 flags: 0351 Sections:352 - sectname: __text353 segname: __TEXT354 addr: 0xBB0355 size: 8356 offset: 0xBB0357 align: 4358 reloff: 0x0359 nreloc: 0360 flags: 0x80000400361 reserved1: 0x0362 reserved2: 0x0363 reserved3: 0x0364 content: 554889E531C05DC3365 - sectname: __unwind_info366 segname: __TEXT367 addr: 0xBB8368 size: 4152369 offset: 0xBB8370 align: 2371 reloff: 0x0372 nreloc: 0373 flags: 0x0374 reserved1: 0x0375 reserved2: 0x0376 reserved3: 0x0377 content: 010000001C000000010000002000000000000000200000000200000000000001B00B00003800000038000000B80B00000000000038000000030000000C0001001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000378 - sectname: __eh_frame379 segname: __TEXT380 addr: 0x1BF0381 size: 24382 offset: 0x1BF0383 align: 3384 reloff: 0x0385 nreloc: 0386 flags: 0x6000000B387 reserved1: 0x0388 reserved2: 0x0389 reserved3: 0x0390 content: 1400000000000000017A520001781001100C070890010000391 - cmd: LC_SEGMENT_64392 cmdsize: 152393 segname: __DATA_CONST394 vmaddr: 8192395 vmsize: 4096396 fileoff: 8192397 filesize: 4096398 maxprot: 3399 initprot: 3400 nsects: 1401 flags: 16402 Sections:403 - sectname: __objc_imageinfo404 segname: __DATA_CONST405 addr: 0x2000406 size: 8407 offset: 0x2000408 align: 0409 reloff: 0x0410 nreloc: 0411 flags: 0x0412 reserved1: 0x0413 reserved2: 0x0414 reserved3: 0x0415 content: '0000000040000000'416 - cmd: LC_SEGMENT_64417 cmdsize: 72418 segname: __LINKEDIT419 vmaddr: 12288420 vmsize: 80421 fileoff: 12288422 filesize: 80423 maxprot: 1424 initprot: 1425 nsects: 0426 flags: 0427 - cmd: LC_DYLD_INFO_ONLY428 cmdsize: 48429 rebase_off: 0430 rebase_size: 0431 bind_off: 0432 bind_size: 0433 weak_bind_off: 0434 weak_bind_size: 0435 lazy_bind_off: 0436 lazy_bind_size: 0437 export_off: 12288438 export_size: 16439 - cmd: LC_SYMTAB440 cmdsize: 24441 symoff: 12312442 nsyms: 2443 stroff: 12344444 strsize: 24445 - cmd: LC_DYSYMTAB446 cmdsize: 80447 ilocalsym: 0448 nlocalsym: 0449 iextdefsym: 0450 nextdefsym: 1451 iundefsym: 1452 nundefsym: 1453 tocoff: 0454 ntoc: 0455 modtaboff: 0456 nmodtab: 0457 extrefsymoff: 0458 nextrefsyms: 0459 indirectsymoff: 0460 nindirectsyms: 0461 extreloff: 0462 nextrel: 0463 locreloff: 0464 nlocrel: 0465 - cmd: LC_ID_DYLIB466 cmdsize: 80467 dylib:468 name: 24469 timestamp: 0470 current_version: 65536471 compatibility_version: 65536472 Content: '/System/Library/Frameworks/Bar.framework/Versions/A/Bar'473 ZeroPadBytes: 1474 - cmd: LC_UUID475 cmdsize: 24476 uuid: 4C4C4415-5555-3144-A11E-3C68D85CC061477 - cmd: LC_BUILD_VERSION478 cmdsize: 32479 platform: 1480 minos: 851968481 sdk: 983040482 ntools: 1483 Tools:484 - tool: 4485 version: 1245184486 - cmd: LC_LOAD_DYLIB487 cmdsize: 56488 dylib:489 name: 24490 timestamp: 0491 current_version: 88539136492 compatibility_version: 65536493 Content: '/usr/lib/libSystem.B.dylib'494 ZeroPadBytes: 6495 - cmd: LC_FUNCTION_STARTS496 cmdsize: 16497 dataoff: 12304498 datasize: 8499 - cmd: LC_DATA_IN_CODE500 cmdsize: 16501 dataoff: 12312502 datasize: 0503LinkEditData:504 ExportTrie:505 TerminalSize: 0506 NodeOffset: 0507 Name: ''508 Flags: 0x0509 Address: 0x0510 Other: 0x0511 ImportName: ''512 Children:513 - TerminalSize: 3514 NodeOffset: 8515 Name: _bar516 Flags: 0x0517 Address: 0xBB0518 Other: 0x0519 ImportName: ''520 NameList:521 - n_strx: 2522 n_type: 0xF523 n_sect: 1524 n_desc: 0525 n_value: 2992526 - n_strx: 7527 n_type: 0x1528 n_sect: 0529 n_desc: 256530 n_value: 0531 StringTable:532 - ' '533 - _bar534 - dyld_stub_binder535 FunctionStarts: [ 0xBB0 ]536...537 538;--- usr/lib/libBaz.tbd539{540 "main_library": {541 "exported_symbols": [542 {543 "text": {544 "global": [545 "_baz"546 ]547 }548 }549 ],550 "flags": [551 {552 "attributes": [553 "not_app_extension_safe"554 ]555 }556 ],557 "install_names": [558 {559 "name": "/usr/lib/libBaz.1.dylib"560 }561 ],562 "target_info": [563 {564 "min_deployment": "13",565 "target": "x86_64-macos"566 }567 ]568 },569 "tapi_tbd_version": 5570}571 572;--- BadFoo/Foo.framework/Foo.tbd573{574 "main_library": {575 "exported_symbols": [576 {577 "text": {578 "global": [579 "_not_so_foo"580 ]581 }582 }583 ],584 "flags": [585 {586 "attributes": [587 "not_app_extension_safe"588 ]589 }590 ],591 "install_names": [592 {593 "name": "/System/Library/Frameworks/Foo.framework/Versions/A/Foo"594 }595 ],596 "target_info": [597 {598 "min_deployment": "13",599 "target": "x86_64-macos"600 }601 ]602 },603 "tapi_tbd_version": 5604}605 606;--- expected.tbd607{608 "main_library": {609 "flags": [610 {611 "attributes": [612 "not_app_extension_safe"613 ]614 }615 ],616 "install_names": [617 {618 "name": "/System/Library/Frameworks/Umbrella3.framework/Versions/A/Umbrella3"619 }620 ],621 "reexported_libraries": [622 {623 "names": [624 "/System/Library/Frameworks/Bar.framework/Versions/A/Bar",625 "/System/Library/Frameworks/Foo.framework/Versions/A/Foo",626 "/usr/lib/libBaz.1.dylib"627 ]628 }629 ],630 "target_info": [631 {632 "min_deployment": "13",633 "target": "x86_64-macos"634 }635 ]636 },637 "tapi_tbd_version": 5638}639