; RUN: rm -rf %t ; RUN: split-file %s %t ; RUN: sed -e "s|DSTROOT|%/t|g" %t/inputs.json.in > %t/inputs.json ; RUN: yaml2obj %t/AliasList.yaml -o %t/Frameworks/AliasList.framework/AliasList ; RUN: clang-installapi --target=x86_64-apple-macos13 \ ; RUN: -alias_list %t/aliases.txt \ ; RUN: -install_name /System/Library/Frameworks/AliasList.framework/Versions/A/AliasList \ ; RUN: -current_version 1 -compatibility_version 1 \ ; RUN: -F%t/Frameworks -ObjC %t/inputs.json --verify-mode=Pedantic \ ; RUN: --verify-against=%t/Frameworks/AliasList.framework/AliasList \ ; RUN: -o %t/AliasList.tbd 2>&1 | FileCheck -allow-empty %s \ ; RUN: --implicit-check-not=error --implicit-check-not=warning ; RUN: llvm-readtapi -compare %t/expected.tbd %t/AliasList.tbd // Check error handling. ; RUN: not clang-installapi --target=x86_64-apple-macos13 \ ; RUN: -alias_list %t/invalid.txt \ ; RUN: -install_name /System/Library/Frameworks/AliasList.framework/Versions/A/AliasList \ ; RUN: -current_version 1 -compatibility_version 1 \ ; RUN: -F%t/Frameworks -ObjC %t/inputs.json --verify-mode=Pedantic \ ; RUN: --verify-against=%t/Frameworks/AliasList.framework/AliasList \ ; RUN: -o %t/AliasList.tbd 2>&1 | FileCheck -allow-empty %s \ ; RUN: --check-prefix=INVALID ; INVALID: error: could not read symbol alias input list {{.*}}invalid.txt': invalid input format: missing alias for: _hidden ;--- Frameworks/AliasList.framework/Headers/AliasList.h // simple alias from one symbol to another. extern int simple_symbol; extern int alias_symbol; // This symbol comes from the alias file. extern int exported_symbol; // This symbol was moved here and has several special hide symbols in the alias // file. extern int moved_here_symbol; // This alias is public, whereas the source is private. extern int public_symbol; ;--- Frameworks/AliasList.framework/PrivateHeaders/AliasList_Private.h // This is a private symbol that has a public alias. extern int private_symbol; ;--- aliases.txt # comment _simple_symbol _alias_symbol # test multiple space characters separated symbol and alias _hidden_symbol _exported_symbol # test inline comment with spaces # test tab character separated symbol and alias _moved_here_symbol $ld$hide$os10.4$_moved_here_symbol# test inline comment without spaces # test trailing space character _moved_here_symbol $ld$hide$os10.5$_moved_here_symbol # test trailing tab character _moved_here_symbol $ld$hide$os10.6$_moved_here_symbol _private_symbol _public_symbol ;--- invalid.txt # comment _simple_symbol _alias_symbol _hidden # no matching ;--- expected.tbd { "main_library": { "exported_symbols": [ { "data": { "global": [ "_exported_symbol", "_simple_symbol", "_moved_here_symbol", "$ld$hide$os10.6$_moved_here_symbol", "$ld$hide$os10.4$_moved_here_symbol", "$ld$hide$os10.5$_moved_here_symbol", "_public_symbol", "_private_symbol", "_alias_symbol" ] } } ], "flags": [ { "attributes": [ "not_app_extension_safe" ] } ], "install_names": [ { "name": "/System/Library/Frameworks/AliasList.framework/Versions/A/AliasList" } ], "target_info": [ { "min_deployment": "13", "target": "x86_64-macos" } ] }, "tapi_tbd_version": 5 } ;--- AliasList.yaml --- !mach-o FileHeader: magic: 0xFEEDFACF cputype: 0x1000007 cpusubtype: 0x3 filetype: 0x6 ncmds: 13 sizeofcmds: 920 flags: 0x100085 reserved: 0x0 LoadCommands: - cmd: LC_SEGMENT_64 cmdsize: 152 segname: __TEXT vmaddr: 0 vmsize: 4096 fileoff: 0 filesize: 4096 maxprot: 5 initprot: 5 nsects: 1 flags: 0 Sections: - sectname: __text segname: __TEXT addr: 0xBB8 size: 0 offset: 0xBB8 align: 0 reloff: 0x0 nreloc: 0 flags: 0x80000000 reserved1: 0x0 reserved2: 0x0 reserved3: 0x0 content: '' - cmd: LC_SEGMENT_64 cmdsize: 152 segname: __DATA_CONST vmaddr: 4096 vmsize: 4096 fileoff: 4096 filesize: 4096 maxprot: 3 initprot: 3 nsects: 1 flags: 16 Sections: - sectname: __objc_imageinfo segname: __DATA_CONST addr: 0x1000 size: 8 offset: 0x1000 align: 0 reloff: 0x0 nreloc: 0 flags: 0x0 reserved1: 0x0 reserved2: 0x0 reserved3: 0x0 content: '0000000040000000' - cmd: LC_SEGMENT_64 cmdsize: 152 segname: __DATA vmaddr: 8192 vmsize: 4096 fileoff: 8192 filesize: 0 maxprot: 3 initprot: 3 nsects: 1 flags: 0 Sections: - sectname: __common segname: __DATA addr: 0x2000 size: 40 offset: 0x0 align: 2 reloff: 0x0 nreloc: 0 flags: 0x1 reserved1: 0x0 reserved2: 0x0 reserved3: 0x0 - cmd: LC_SEGMENT_64 cmdsize: 72 segname: __LINKEDIT vmaddr: 12288 vmsize: 672 fileoff: 8192 filesize: 672 maxprot: 1 initprot: 1 nsects: 0 flags: 0 - cmd: LC_DYLD_INFO_ONLY cmdsize: 48 rebase_off: 0 rebase_size: 0 bind_off: 0 bind_size: 0 weak_bind_off: 0 weak_bind_size: 0 lazy_bind_off: 0 lazy_bind_size: 0 export_off: 8192 export_size: 248 - cmd: LC_SYMTAB cmdsize: 24 symoff: 8448 nsyms: 11 stroff: 8624 strsize: 240 - cmd: LC_DYSYMTAB cmdsize: 80 ilocalsym: 0 nlocalsym: 1 iextdefsym: 1 nextdefsym: 9 iundefsym: 10 nundefsym: 1 tocoff: 0 ntoc: 0 modtaboff: 0 nmodtab: 0 extrefsymoff: 0 nextrefsyms: 0 indirectsymoff: 0 nindirectsyms: 0 extreloff: 0 nextrel: 0 locreloff: 0 nlocrel: 0 - cmd: LC_ID_DYLIB cmdsize: 96 dylib: name: 24 timestamp: 0 current_version: 65536 compatibility_version: 65536 Content: '/System/Library/Frameworks/AliasList.framework/Versions/A/AliasList' ZeroPadBytes: 5 - cmd: LC_UUID cmdsize: 24 uuid: 4C4C4468-5555-3144-A123-B0FDB87F9813 - cmd: LC_BUILD_VERSION cmdsize: 32 platform: 1 minos: 851968 sdk: 983040 ntools: 1 Tools: - tool: 4 version: 1245184 - cmd: LC_LOAD_DYLIB cmdsize: 56 dylib: name: 24 timestamp: 0 current_version: 88539136 compatibility_version: 65536 Content: '/usr/lib/libSystem.B.dylib' ZeroPadBytes: 6 - cmd: LC_FUNCTION_STARTS cmdsize: 16 dataoff: 8440 datasize: 8 - cmd: LC_DATA_IN_CODE cmdsize: 16 dataoff: 8448 datasize: 0 LinkEditData: ExportTrie: TerminalSize: 0 NodeOffset: 0 Name: '' Flags: 0x0 Address: 0x0 Other: 0x0 ImportName: '' Children: - TerminalSize: 0 NodeOffset: 21 Name: '$ld$hide$os10.' Flags: 0x0 Address: 0x0 Other: 0x0 ImportName: '' Children: - TerminalSize: 3 NodeOffset: 89 Name: '4$_moved_here_symbol' Flags: 0x0 Address: 0x2000 Other: 0x0 ImportName: '' - TerminalSize: 3 NodeOffset: 94 Name: '6$_moved_here_symbol' Flags: 0x0 Address: 0x2008 Other: 0x0 ImportName: '' - TerminalSize: 3 NodeOffset: 99 Name: '5$_moved_here_symbol' Flags: 0x0 Address: 0x2004 Other: 0x0 ImportName: '' - TerminalSize: 0 NodeOffset: 104 Name: _ Flags: 0x0 Address: 0x0 Other: 0x0 ImportName: '' Children: - TerminalSize: 3 NodeOffset: 179 Name: alias_symbol Flags: 0x0 Address: 0x2024 Other: 0x0 ImportName: '' - TerminalSize: 0 NodeOffset: 184 Name: p Flags: 0x0 Address: 0x0 Other: 0x0 ImportName: '' Children: - TerminalSize: 3 NodeOffset: 217 Name: ublic_symbol Flags: 0x0 Address: 0x2020 Other: 0x0 ImportName: '' - TerminalSize: 3 NodeOffset: 222 Name: rivate_symbol Flags: 0x0 Address: 0x2018 Other: 0x0 ImportName: '' - TerminalSize: 3 NodeOffset: 227 Name: simple_symbol Flags: 0x0 Address: 0x200C Other: 0x0 ImportName: '' - TerminalSize: 3 NodeOffset: 232 Name: moved_here_symbol Flags: 0x0 Address: 0x2014 Other: 0x0 ImportName: '' - TerminalSize: 3 NodeOffset: 237 Name: exported_symbol Flags: 0x0 Address: 0x201C Other: 0x0 ImportName: '' NameList: - n_strx: 122 n_type: 0x1E n_sect: 3 n_desc: 0 n_value: 8208 - n_strx: 2 n_type: 0xF n_sect: 3 n_desc: 0 n_value: 8192 - n_strx: 37 n_type: 0xF n_sect: 3 n_desc: 0 n_value: 8196 - n_strx: 72 n_type: 0xF n_sect: 3 n_desc: 0 n_value: 8200 - n_strx: 107 n_type: 0xF n_sect: 3 n_desc: 0 n_value: 8204 - n_strx: 137 n_type: 0xF n_sect: 3 n_desc: 0 n_value: 8212 - n_strx: 156 n_type: 0xF n_sect: 3 n_desc: 0 n_value: 8216 - n_strx: 172 n_type: 0xF n_sect: 3 n_desc: 0 n_value: 8220 - n_strx: 189 n_type: 0xF n_sect: 3 n_desc: 0 n_value: 8224 - n_strx: 204 n_type: 0xF n_sect: 3 n_desc: 0 n_value: 8228 - n_strx: 218 n_type: 0x1 n_sect: 0 n_desc: 256 n_value: 0 StringTable: - ' ' - '$ld$hide$os10.4$_moved_here_symbol' - '$ld$hide$os10.5$_moved_here_symbol' - '$ld$hide$os10.6$_moved_here_symbol' - _simple_symbol - _hidden_symbol - _moved_here_symbol - _private_symbol - _exported_symbol - _public_symbol - _alias_symbol - dyld_stub_binder - '' - '' - '' - '' - '' ... ;--- inputs.json.in { "headers": [ { "path" : "DSTROOT/Frameworks/AliasList.framework/Headers/AliasList.h", "type" : "public" }, { "path" : "DSTROOT/Frameworks/AliasList.framework/PrivateHeaders/AliasList_Private.h", "type" : "private" } ], "version": "3" }