
* This completes support for verifying every declaration found in a header is discovered in the dylib. Diagnostics are reported for each class for differences that are representable in TBD files. * This patch also now captures unavailable attributes that depend on target triples. This is needed for proper tbd file generation.
632 lines
20 KiB
Plaintext
632 lines
20 KiB
Plaintext
; 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/Availability.yaml -o %t/System/Library/Frameworks/Availability.framework/Availability
|
|
|
|
; RUN: clang-installapi \
|
|
; RUN: --target=x86_64-apple-macos13 \
|
|
; RUN: -install_name /System/Library/Frameworks/Availability.framework/Versions/A/Availability \
|
|
; RUN: -current_version 1 -compatibility_version 1 \
|
|
; RUN: -F %t/System/Library/Frameworks \
|
|
; RUN: %t/inputs.json -o %t/output.tbd \
|
|
; RUN: --verify-against=%t/System/Library/Frameworks/Availability.framework/Availability \
|
|
; RUN: --verify-mode=ErrorsOnly --filetype=tbd-v5 2> %t/errors.log
|
|
; RUN: FileCheck -allow-empty -check-prefix=ERRORSONLY -input-file %t/errors.log %s
|
|
|
|
; RUN: clang-installapi \
|
|
; RUN: --target=x86_64-apple-macos13 \
|
|
; RUN: -install_name /System/Library/Frameworks/Availability.framework/Versions/A/Availability \
|
|
; RUN: -current_version 1 -compatibility_version 1 \
|
|
; RUN: -F %t/System/Library/Frameworks \
|
|
; RUN: %t/inputs.json -o %t/output-warnings.tbd \
|
|
; RUN: --verify-against=%t/System/Library/Frameworks/Availability.framework/Availability \
|
|
; RUN: --verify-mode=ErrorsAndWarnings 2> %t/errors.log
|
|
; RUN: FileCheck -check-prefixes=VIOLATIONS,ERRORSANDWARNINGS -input-file %t/errors.log %s
|
|
|
|
; RUN: not clang-installapi \
|
|
; RUN: --target=x86_64-apple-macos13 \
|
|
; RUN: -install_name /System/Library/Frameworks/Availability.framework/Versions/A/Availability \
|
|
; RUN: -current_version 1 -compatibility_version 1 \
|
|
; RUN: -F %t/System/Library/Frameworks \
|
|
; RUN: %t/inputs.json -o %t/output-pedantic.tbd \
|
|
; RUN: --verify-against=%t/System/Library/Frameworks/Availability.framework/Availability \
|
|
; RUN: --verify-mode=Pedantic 2> %t/errors.log
|
|
; RUN: FileCheck -check-prefixes=VIOLATIONS,PEDANTIC -input-file %t/errors.log %s
|
|
|
|
; ERRORSONLY-NOT: error
|
|
; ERRORSONLY-NOT: warning
|
|
|
|
; ERRORSANDWARNINGS-NOT: error
|
|
; VIOLATIONS: warning: violations found for x86_64-apple-macos
|
|
; VIOLATIONS: declaration 'publicGlobalVariable' is marked unavailable, but symbol is exported in dynamic library
|
|
; VIOLATIONS-NEXT: extern int publicGlobalVariable NS_AVAILABLE
|
|
; VIOLATIONS: declaration 'Foo' is marked unavailable, but symbol is exported in dynamic library
|
|
; VIOLATIONS-NEXT: @interface Foo : NSObject
|
|
; VIOLATIONS: declaration 'publicGlobalVariable3' is marked unavailable, but symbol is exported in dynamic library
|
|
; VIOLATIONS-NEXT: extern int publicGlobalVariable3 __attribute__((unavailable))
|
|
; VIOLATIONS: declaration 'privateGlobalVariable' is marked unavailable, but symbol is exported in dynamic library
|
|
; VIOLATIONS-NEXT: extern int privateGlobalVariable;
|
|
|
|
; ERRORSANDWARNINGS-NOT: warning
|
|
; PEDANTIC-NOT: error
|
|
|
|
;--- inputs.json.in
|
|
{
|
|
"headers": [ {
|
|
"path" : "DSTROOT/System/Library/Frameworks/Availability.framework/Headers/Availability.h",
|
|
"type" : "public"
|
|
},
|
|
{
|
|
"path" : "DSTROOT/System/Library/Frameworks/Availability.framework/PrivateHeaders/AvailabilityPrivate.h",
|
|
"type" : "private"
|
|
}
|
|
],
|
|
"version": "3"
|
|
}
|
|
|
|
;--- System/Library/Frameworks/Availability.framework/Headers/AV_Defines.h
|
|
#ifndef AV_DEFINES
|
|
#define AV_DEFINES
|
|
|
|
#define NS_AVAILABLE __attribute__((availability(macosx,introduced=NA)))
|
|
|
|
@interface NSObject
|
|
@end
|
|
|
|
#endif //AV_DEFINES
|
|
|
|
;--- System/Library/Frameworks/Availability.framework/PrivateHeaders/AvailabilityPrivate.h
|
|
#import <Availability/AV_Defines.h>
|
|
// Test private global variable.
|
|
NS_AVAILABLE
|
|
extern int privateGlobalVariable;
|
|
|
|
;--- System/Library/Frameworks/Availability.framework/Headers/Availability.h
|
|
#import <Availability/AV_Defines.h>
|
|
extern int publicGlobalVariable NS_AVAILABLE;
|
|
|
|
// Test public ObjC class
|
|
NS_AVAILABLE
|
|
@interface Foo : NSObject
|
|
@end
|
|
|
|
// Test unavailable attribute.
|
|
#ifdef __i386__
|
|
#define UNAVAILABLE_I386 __attribute__((unavailable))
|
|
#else
|
|
#define UNAVAILABLE_I386
|
|
#endif
|
|
extern int publicGlobalVariable2 UNAVAILABLE_I386;
|
|
|
|
extern int publicGlobalVariable3 __attribute__((unavailable))
|
|
__attribute__((availability(macosx, introduced = 10.9)));
|
|
|
|
// Test obsoleted with exported variable.
|
|
extern int publicGlobalVariable4 __attribute__((availability(
|
|
macosx, introduced = 10.9, deprecated = 10.10, obsoleted = 10.11)));
|
|
// Test obsoleted with non-existent variable.
|
|
extern int publicGlobalVariable5 __attribute__((availability(
|
|
macosx, introduced = 10.9, deprecated = 10.10, obsoleted = 10.11)));
|
|
|
|
#ifdef __i386__
|
|
#define OBSOLETE_I386 __attribute__((availability(macosx, obsoleted = 10.11)))
|
|
#else
|
|
#define OBSOLETE_I386
|
|
#endif
|
|
extern int publicGlobalVariable6 OBSOLETE_I386;
|
|
|
|
|
|
/// Created from:
|
|
// int publicGlobalVariable; int privateGlobalVariable;
|
|
//
|
|
// @implementation Foo
|
|
// @end
|
|
//
|
|
// #ifndef __i386__
|
|
// int publicGlobalVariable2;
|
|
// #endif
|
|
//
|
|
// int publicGlobalVariable3;
|
|
// int publicGlobalVariable4;
|
|
//
|
|
// #ifndef __i386__
|
|
// int publicGlobalVariable6;
|
|
// #endif
|
|
;--- Availability.yaml
|
|
--- !mach-o
|
|
FileHeader:
|
|
magic: 0xFEEDFACF
|
|
cputype: 0x1000007
|
|
cpusubtype: 0x3
|
|
filetype: 0x6
|
|
ncmds: 14
|
|
sizeofcmds: 1312
|
|
flags: 0x100085
|
|
reserved: 0x0
|
|
LoadCommands:
|
|
- cmd: LC_SEGMENT_64
|
|
cmdsize: 232
|
|
segname: __TEXT
|
|
vmaddr: 0
|
|
vmsize: 8192
|
|
fileoff: 0
|
|
filesize: 8192
|
|
maxprot: 5
|
|
initprot: 5
|
|
nsects: 2
|
|
flags: 0
|
|
Sections:
|
|
- sectname: __text
|
|
segname: __TEXT
|
|
addr: 0x1140
|
|
size: 0
|
|
offset: 0x1140
|
|
align: 0
|
|
reloff: 0x0
|
|
nreloc: 0
|
|
flags: 0x80000000
|
|
reserved1: 0x0
|
|
reserved2: 0x0
|
|
reserved3: 0x0
|
|
content: ''
|
|
- sectname: __cstring
|
|
segname: __TEXT
|
|
addr: 0x1140
|
|
size: 4
|
|
offset: 0x1140
|
|
align: 0
|
|
reloff: 0x0
|
|
nreloc: 0
|
|
flags: 0x2
|
|
reserved1: 0x0
|
|
reserved2: 0x0
|
|
reserved3: 0x0
|
|
content: 466F6F00
|
|
- cmd: LC_SEGMENT_64
|
|
cmdsize: 232
|
|
segname: __DATA_CONST
|
|
vmaddr: 8192
|
|
vmsize: 4096
|
|
fileoff: 8192
|
|
filesize: 4096
|
|
maxprot: 3
|
|
initprot: 3
|
|
nsects: 2
|
|
flags: 16
|
|
Sections:
|
|
- sectname: __objc_classlist
|
|
segname: __DATA_CONST
|
|
addr: 0x2000
|
|
size: 8
|
|
offset: 0x2000
|
|
align: 3
|
|
reloff: 0x0
|
|
nreloc: 0
|
|
flags: 0x10000000
|
|
reserved1: 0x0
|
|
reserved2: 0x0
|
|
reserved3: 0x0
|
|
content: B830000000000000
|
|
- sectname: __objc_imageinfo
|
|
segname: __DATA_CONST
|
|
addr: 0x2008
|
|
size: 8
|
|
offset: 0x2008
|
|
align: 0
|
|
reloff: 0x0
|
|
nreloc: 0
|
|
flags: 0x0
|
|
reserved1: 0x0
|
|
reserved2: 0x0
|
|
reserved3: 0x0
|
|
content: '0000000040000000'
|
|
- cmd: LC_SEGMENT_64
|
|
cmdsize: 312
|
|
segname: __DATA
|
|
vmaddr: 12288
|
|
vmsize: 4096
|
|
fileoff: 12288
|
|
filesize: 4096
|
|
maxprot: 3
|
|
initprot: 3
|
|
nsects: 3
|
|
flags: 0
|
|
Sections:
|
|
- sectname: __objc_const
|
|
segname: __DATA
|
|
addr: 0x3000
|
|
size: 144
|
|
offset: 0x3000
|
|
align: 3
|
|
reloff: 0x0
|
|
nreloc: 0
|
|
flags: 0x0
|
|
reserved1: 0x0
|
|
reserved2: 0x0
|
|
reserved3: 0x0
|
|
content: '010000002800000028000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000008000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
|
- sectname: __objc_data
|
|
segname: __DATA
|
|
addr: 0x3090
|
|
size: 80
|
|
offset: 0x3090
|
|
align: 3
|
|
reloff: 0x0
|
|
nreloc: 0
|
|
flags: 0x0
|
|
reserved1: 0x0
|
|
reserved2: 0x0
|
|
reserved3: 0x0
|
|
content: '0000000000000000000000000000000000000000000000000000000000000000003000000000000090300000000000000000000000000000000000000000000000000000000000004830000000000000'
|
|
- sectname: __common
|
|
segname: __DATA
|
|
addr: 0x30E0
|
|
size: 24
|
|
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: 16384
|
|
vmsize: 824
|
|
fileoff: 16384
|
|
filesize: 824
|
|
maxprot: 1
|
|
initprot: 1
|
|
nsects: 0
|
|
flags: 0
|
|
- cmd: LC_DYLD_INFO_ONLY
|
|
cmdsize: 48
|
|
rebase_off: 16384
|
|
rebase_size: 16
|
|
bind_off: 16400
|
|
bind_size: 104
|
|
weak_bind_off: 0
|
|
weak_bind_size: 0
|
|
lazy_bind_off: 0
|
|
lazy_bind_size: 0
|
|
export_off: 16504
|
|
export_size: 152
|
|
- cmd: LC_SYMTAB
|
|
cmdsize: 24
|
|
symoff: 16664
|
|
nsyms: 14
|
|
stroff: 16888
|
|
strsize: 320
|
|
- cmd: LC_DYSYMTAB
|
|
cmdsize: 80
|
|
ilocalsym: 0
|
|
nlocalsym: 2
|
|
iextdefsym: 2
|
|
nextdefsym: 8
|
|
iundefsym: 10
|
|
nundefsym: 4
|
|
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: 112
|
|
dylib:
|
|
name: 24
|
|
timestamp: 0
|
|
current_version: 65536
|
|
compatibility_version: 65536
|
|
Content: '/System/Library/Frameworks/Availability.framework/Versions/A/Availability'
|
|
ZeroPadBytes: 7
|
|
- cmd: LC_UUID
|
|
cmdsize: 24
|
|
uuid: 4C4C4470-5555-3144-A142-4EE44DA08D2F
|
|
- 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: 14942208
|
|
compatibility_version: 65536
|
|
Content: '/usr/lib/libobjc.A.dylib'
|
|
ZeroPadBytes: 8
|
|
- cmd: LC_LOAD_DYLIB
|
|
cmdsize: 56
|
|
dylib:
|
|
name: 24
|
|
timestamp: 0
|
|
current_version: 88473600
|
|
compatibility_version: 65536
|
|
Content: '/usr/lib/libSystem.B.dylib'
|
|
ZeroPadBytes: 6
|
|
- cmd: LC_FUNCTION_STARTS
|
|
cmdsize: 16
|
|
dataoff: 16656
|
|
datasize: 8
|
|
- cmd: LC_DATA_IN_CODE
|
|
cmdsize: 16
|
|
dataoff: 16664
|
|
datasize: 0
|
|
LinkEditData:
|
|
RebaseOpcodes:
|
|
- Opcode: REBASE_OPCODE_SET_TYPE_IMM
|
|
Imm: 1
|
|
- Opcode: REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
|
|
Imm: 1
|
|
ExtraData: [ 0x0 ]
|
|
- Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES
|
|
Imm: 1
|
|
- Opcode: REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
|
|
Imm: 2
|
|
ExtraData: [ 0x18 ]
|
|
- Opcode: REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB
|
|
Imm: 0
|
|
ExtraData: [ 0x2, 0x40 ]
|
|
- Opcode: REBASE_OPCODE_ADD_ADDR_IMM_SCALED
|
|
Imm: 1
|
|
- Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES
|
|
Imm: 2
|
|
- Opcode: REBASE_OPCODE_ADD_ADDR_IMM_SCALED
|
|
Imm: 3
|
|
- Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES
|
|
Imm: 1
|
|
- Opcode: REBASE_OPCODE_DONE
|
|
Imm: 0
|
|
BindOpcodes:
|
|
- Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
|
|
Imm: 0
|
|
Symbol: '_OBJC_METACLASS_$_NSObject'
|
|
- Opcode: BIND_OPCODE_SET_TYPE_IMM
|
|
Imm: 1
|
|
Symbol: ''
|
|
- Opcode: BIND_OPCODE_SET_DYLIB_ORDINAL_IMM
|
|
Imm: 1
|
|
Symbol: ''
|
|
- Opcode: BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
|
|
Imm: 2
|
|
ULEBExtraData: [ 0x90 ]
|
|
Symbol: ''
|
|
- Opcode: BIND_OPCODE_DO_BIND
|
|
Imm: 0
|
|
Symbol: ''
|
|
- Opcode: BIND_OPCODE_DO_BIND
|
|
Imm: 0
|
|
Symbol: ''
|
|
- Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
|
|
Imm: 0
|
|
Symbol: __objc_empty_cache
|
|
- Opcode: BIND_OPCODE_SET_TYPE_IMM
|
|
Imm: 1
|
|
Symbol: ''
|
|
- Opcode: BIND_OPCODE_DO_BIND
|
|
Imm: 0
|
|
Symbol: ''
|
|
- Opcode: BIND_OPCODE_ADD_ADDR_ULEB
|
|
Imm: 0
|
|
ULEBExtraData: [ 0x20 ]
|
|
Symbol: ''
|
|
- Opcode: BIND_OPCODE_DO_BIND
|
|
Imm: 0
|
|
Symbol: ''
|
|
- Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
|
|
Imm: 0
|
|
Symbol: '_OBJC_CLASS_$_NSObject'
|
|
- Opcode: BIND_OPCODE_SET_TYPE_IMM
|
|
Imm: 1
|
|
Symbol: ''
|
|
- Opcode: BIND_OPCODE_ADD_ADDR_ULEB
|
|
Imm: 0
|
|
ULEBExtraData: [ 0xFFFFFFFFFFFFFFF0 ]
|
|
Symbol: ''
|
|
- Opcode: BIND_OPCODE_DO_BIND
|
|
Imm: 0
|
|
Symbol: ''
|
|
- Opcode: BIND_OPCODE_DONE
|
|
Imm: 0
|
|
Symbol: ''
|
|
ExportTrie:
|
|
TerminalSize: 0
|
|
NodeOffset: 0
|
|
Name: ''
|
|
Flags: 0x0
|
|
Address: 0x0
|
|
Other: 0x0
|
|
ImportName: ''
|
|
Children:
|
|
- TerminalSize: 0
|
|
NodeOffset: 5
|
|
Name: _
|
|
Flags: 0x0
|
|
Address: 0x0
|
|
Other: 0x0
|
|
ImportName: ''
|
|
Children:
|
|
- TerminalSize: 0
|
|
NodeOffset: 17
|
|
Name: OBJC_
|
|
Flags: 0x0
|
|
Address: 0x0
|
|
Other: 0x0
|
|
ImportName: ''
|
|
Children:
|
|
- TerminalSize: 3
|
|
NodeOffset: 49
|
|
Name: 'METACLASS_$_Foo'
|
|
Flags: 0x0
|
|
Address: 0x3090
|
|
Other: 0x0
|
|
ImportName: ''
|
|
- TerminalSize: 3
|
|
NodeOffset: 54
|
|
Name: 'CLASS_$_Foo'
|
|
Flags: 0x0
|
|
Address: 0x30B8
|
|
Other: 0x0
|
|
ImportName: ''
|
|
- TerminalSize: 0
|
|
NodeOffset: 59
|
|
Name: p
|
|
Flags: 0x0
|
|
Address: 0x0
|
|
Other: 0x0
|
|
ImportName: ''
|
|
Children:
|
|
- TerminalSize: 3
|
|
NodeOffset: 104
|
|
Name: rivateGlobalVariable
|
|
Flags: 0x0
|
|
Address: 0x30E0
|
|
Other: 0x0
|
|
ImportName: ''
|
|
- TerminalSize: 3
|
|
NodeOffset: 109
|
|
Name: ublicGlobalVariable
|
|
Flags: 0x0
|
|
Address: 0x30E4
|
|
Other: 0x0
|
|
ImportName: ''
|
|
Children:
|
|
- TerminalSize: 3
|
|
NodeOffset: 130
|
|
Name: '4'
|
|
Flags: 0x0
|
|
Address: 0x30F0
|
|
Other: 0x0
|
|
ImportName: ''
|
|
- TerminalSize: 3
|
|
NodeOffset: 135
|
|
Name: '3'
|
|
Flags: 0x0
|
|
Address: 0x30EC
|
|
Other: 0x0
|
|
ImportName: ''
|
|
- TerminalSize: 3
|
|
NodeOffset: 140
|
|
Name: '2'
|
|
Flags: 0x0
|
|
Address: 0x30E8
|
|
Other: 0x0
|
|
ImportName: ''
|
|
- TerminalSize: 3
|
|
NodeOffset: 145
|
|
Name: '6'
|
|
Flags: 0x0
|
|
Address: 0x30F4
|
|
Other: 0x0
|
|
ImportName: ''
|
|
NameList:
|
|
- n_strx: 2
|
|
n_type: 0xE
|
|
n_sect: 5
|
|
n_desc: 0
|
|
n_value: 12288
|
|
- n_strx: 28
|
|
n_type: 0xE
|
|
n_sect: 5
|
|
n_desc: 0
|
|
n_value: 12360
|
|
- n_strx: 50
|
|
n_type: 0xF
|
|
n_sect: 7
|
|
n_desc: 0
|
|
n_value: 12512
|
|
- n_strx: 73
|
|
n_type: 0xF
|
|
n_sect: 7
|
|
n_desc: 0
|
|
n_value: 12516
|
|
- n_strx: 95
|
|
n_type: 0xF
|
|
n_sect: 7
|
|
n_desc: 0
|
|
n_value: 12520
|
|
- n_strx: 118
|
|
n_type: 0xF
|
|
n_sect: 7
|
|
n_desc: 0
|
|
n_value: 12524
|
|
- n_strx: 141
|
|
n_type: 0xF
|
|
n_sect: 7
|
|
n_desc: 0
|
|
n_value: 12528
|
|
- n_strx: 164
|
|
n_type: 0xF
|
|
n_sect: 7
|
|
n_desc: 0
|
|
n_value: 12532
|
|
- n_strx: 187
|
|
n_type: 0xF
|
|
n_sect: 6
|
|
n_desc: 0
|
|
n_value: 12432
|
|
- n_strx: 209
|
|
n_type: 0xF
|
|
n_sect: 6
|
|
n_desc: 0
|
|
n_value: 12472
|
|
- n_strx: 227
|
|
n_type: 0x1
|
|
n_sect: 0
|
|
n_desc: 256
|
|
n_value: 0
|
|
- n_strx: 250
|
|
n_type: 0x1
|
|
n_sect: 0
|
|
n_desc: 256
|
|
n_value: 0
|
|
- n_strx: 277
|
|
n_type: 0x1
|
|
n_sect: 0
|
|
n_desc: 256
|
|
n_value: 0
|
|
- n_strx: 296
|
|
n_type: 0x1
|
|
n_sect: 0
|
|
n_desc: 512
|
|
n_value: 0
|
|
StringTable:
|
|
- ' '
|
|
- '__OBJC_METACLASS_RO_$_Foo'
|
|
- '__OBJC_CLASS_RO_$_Foo'
|
|
- _privateGlobalVariable
|
|
- _publicGlobalVariable
|
|
- _publicGlobalVariable2
|
|
- _publicGlobalVariable3
|
|
- _publicGlobalVariable4
|
|
- _publicGlobalVariable6
|
|
- '_OBJC_METACLASS_$_Foo'
|
|
- '_OBJC_CLASS_$_Foo'
|
|
- '_OBJC_CLASS_$_NSObject'
|
|
- '_OBJC_METACLASS_$_NSObject'
|
|
- __objc_empty_cache
|
|
- dyld_stub_binder
|
|
- ''
|
|
- ''
|
|
- ''
|
|
- ''
|
|
- ''
|
|
- ''
|
|
- ''
|
|
...
|