87 lines · plain
1RUN: llvm-objdump --macho --objc-meta-data %p/Inputs/rel-method-lists-arm64_32.dylib | FileCheck %s --check-prefix=CHK322RUN: llvm-otool -ov %p/Inputs/rel-method-lists-arm64_32.dylib | FileCheck %s --check-prefix=CHK323 4RUN: llvm-objdump --macho --objc-meta-data %p/Inputs/rel-method-lists-arm64.dylib | FileCheck %s --check-prefix=CHK645RUN: llvm-otool -ov %p/Inputs/rel-method-lists-arm64.dylib | FileCheck %s --check-prefix=CHK646 7CHK32: baseMethods 0x660 (struct method_list_t *)8CHK32-NEXT: entsize 12 (relative)9CHK32-NEXT: count 310CHK32-NEXT: name 0x144 (0x{{[0-9a-f]*}}) instance_method_0011CHK32-NEXT: types 0x91 (0x{{[0-9a-f]*}}) v8@0:412CHK32-NEXT: imp 0xffffff18 (0x{{[0-9a-f]*}}) -[MyClass instance_method_00]13CHK32-NEXT: name 0x13c (0x{{[0-9a-f]*}}) instance_method_0114CHK32-NEXT: types 0x85 (0x{{[0-9a-f]*}}) v8@0:415CHK32-NEXT: imp 0xffffff28 (0x{{[0-9a-f]*}}) -[MyClass instance_method_01]16CHK32-NEXT: name 0x134 (0x{{[0-9a-f]*}}) instance_method_0217CHK32-NEXT: types 0x79 (0x{{[0-9a-f]*}}) v8@0:418CHK32-NEXT: imp 0xffffff38 (0x{{[0-9a-f]*}}) -[MyClass instance_method_02]19 20CHK32: baseMethods 0x630 (struct method_list_t *)21CHK32-NEXT: entsize 12 (relative)22CHK32-NEXT: count 323CHK32-NEXT: name 0x180 (0x{{[0-9a-f]*}}) class_method_0024CHK32-NEXT: types 0xc1 (0x{{[0-9a-f]*}}) v8@0:425CHK32-NEXT: imp 0xffffff9c (0x{{[0-9a-f]*}}) +[MyClass class_method_00]26CHK32-NEXT: name 0x178 (0x{{[0-9a-f]*}}) class_method_0127CHK32-NEXT: types 0xb5 (0x{{[0-9a-f]*}}) v8@0:428CHK32-NEXT: imp 0xffffffac (0x{{[0-9a-f]*}}) +[MyClass class_method_01]29CHK32-NEXT: name 0x170 (0x{{[0-9a-f]*}}) class_method_0230CHK32-NEXT: types 0xa9 (0x{{[0-9a-f]*}}) v8@0:431CHK32-NEXT: imp 0xffffffbc (0x{{[0-9a-f]*}}) +[MyClass class_method_02]32 33CHK64: baseMethods 0x6e0 (struct method_list_t *)34CHK64-NEXT: entsize 12 (relative)35CHK64-NEXT: count 336CHK64-NEXT: name 0x188 (0x{{[0-9a-f]*}}) instance_method_0037CHK64-NEXT: types 0x91 (0x{{[0-9a-f]*}}) v16@0:838CHK64-NEXT: imp 0xffffffa8 (0x{{[0-9a-f]*}}) -[MyClass instance_method_00]39CHK64-NEXT: name 0x184 (0x{{[0-9a-f]*}}) instance_method_0140CHK64-NEXT: types 0x85 (0x{{[0-9a-f]*}}) v16@0:841CHK64-NEXT: imp 0xffffffa0 (0x{{[0-9a-f]*}}) -[MyClass instance_method_01]42CHK64-NEXT: name 0x180 (0x{{[0-9a-f]*}}) instance_method_0243CHK64-NEXT: types 0x79 (0x{{[0-9a-f]*}}) v16@0:844CHK64-NEXT: imp 0xffffff98 (0x{{[0-9a-f]*}}) -[MyClass instance_method_02]45 46CHK64: baseMethods 0x6b0 (struct method_list_t *)47CHK64-NEXT: entsize 12 (relative)48CHK64-NEXT: count 349CHK64-NEXT: name 0x1d0 (0x{{[0-9a-f]*}}) class_method_0050CHK64-NEXT: types 0xc1 (0x{{[0-9a-f]*}}) v16@0:851CHK64-NEXT: imp 0xffffffe4 (0x{{[0-9a-f]*}}) +[MyClass class_method_00]52CHK64-NEXT: name 0x1cc (0x{{[0-9a-f]*}}) class_method_0153CHK64-NEXT: types 0xb5 (0x{{[0-9a-f]*}}) v16@0:854CHK64-NEXT: imp 0xffffffdc (0x{{[0-9a-f]*}}) +[MyClass class_method_01]55CHK64-NEXT: name 0x1c8 (0x{{[0-9a-f]*}}) class_method_0256CHK64-NEXT: types 0xa9 (0x{{[0-9a-f]*}}) v16@0:857CHK64-NEXT: imp 0xffffffd4 (0x{{[0-9a-f]*}}) +[MyClass class_method_02]58 59######## Generate rel-method-lists-arm64.dylib ########60// clang -c main.mm -o main.o -target arm64-apple-macos -arch arm6461// ld64.ld64 -dylib -demangle -dynamic main.o -o rel-method-lists-arm64.dylib -syslibroot MacOSX14.2.sdk -segalign 0x10 -objc_relative_method_lists62 63######## Generate rel-method-lists-arm64_32.dylib ########64// clang -c main.mm -o main.o -target arm64_32-apple-watchos -arch arm64_3265// ld64.ld64 -dylib -demangle -dynamic main.o -o rel-method-lists-arm64_32.dylib -syslibroot WatchOS.sdk -segalign 0x10 -objc_relative_method_lists66 67// ~~~~~~~~~~~~~~~~~~~~~~~~~ main.mm ~~~~~~~~~~~~~~~~~~~~~~~~~68__attribute__((objc_root_class))69@interface MyClass70- (void)instance_method_00;71- (void)instance_method_01;72- (void)instance_method_02;73+ (void)class_method_00;74+ (void)class_method_01;75+ (void)class_method_02;76@end77@implementation MyClass78- (void)instance_method_00 {}79- (void)instance_method_01 {}80- (void)instance_method_02 {}81+ (void)class_method_00 {}82+ (void)class_method_01 {}83+ (void)class_method_02 {}84@end85void *_objc_empty_cache;86void *_objc_empty_vtable;87