256 lines · plain
1# REQUIRES: x862# UNSUPPORTED: target=arm{{.*}}-unknown-linux-gnueabihf3# RUN: rm -rf %t; split-file %s %t && cd %t4 5## Compile rel_dylib.o6# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o rel_dylib.o simple_class.s7 8## Test relative method lists9# RUN: %no-lsystem-lld rel_dylib.o -o rel_dylib.dylib -map rel_dylib.map -dylib -objc_relative_method_lists10# RUN: llvm-objdump --macho --objc-meta-data rel_dylib.dylib | FileCheck %s --check-prefix=CHK_REL11 12## Test relative method lists + dead-strip13# RUN: %no-lsystem-lld rel_dylib.o -o rel_dylib.dylib -map rel_dylib.map -dylib -objc_relative_method_lists -dead_strip14# RUN: llvm-objdump --macho --objc-meta-data rel_dylib.dylib | FileCheck %s --check-prefix=CHK_REL15 16## Test traditional method lists (no relative offsets)17# RUN: %no-lsystem-lld rel_dylib.o -o rel_dylib.dylib -map rel_dylib.map -dylib -no_objc_relative_method_lists18# RUN: llvm-objdump --macho --objc-meta-data rel_dylib.dylib | FileCheck %s --check-prefix=CHK_NO_REL19 20 21CHK_REL: Contents of (__DATA_CONST,__objc_classlist) section22CHK_REL-NEXT: _OBJC_CLASS_$_MyClass23CHK_REL: baseMethods24CHK_REL-NEXT: entsize 12 (relative)25CHK_REL-NEXT: count 326CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) instance_method_0027CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:828CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) -[MyClass instance_method_00]29CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) instance_method_0130CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:831CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) -[MyClass instance_method_01]32CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) instance_method_0233CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:834CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) -[MyClass instance_method_02]35 36CHK_REL: Meta Class37CHK_REL-NEXT: isa 0x{{[0-9a-f]*}} _OBJC_METACLASS_$_MyClass38CHK_REL: baseMethods 0x{{[0-9a-f]*}} (struct method_list_t *)39CHK_REL-NEXT: entsize 12 (relative)40CHK_REL-NEXT: count 341CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) class_method_0042CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:843CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) +[MyClass class_method_00]44CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) class_method_0145CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:846CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) +[MyClass class_method_01]47CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) class_method_0248CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:849CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) +[MyClass class_method_02]50 51 52CHK_NO_REL-NOT: (relative)53 54CHK_NO_REL: Contents of (__DATA_CONST,__objc_classlist) section55CHK_NO_REL-NEXT: _OBJC_CLASS_$_MyClass56 57CHK_NO_REL: baseMethods 0x{{[0-9a-f]*}} (struct method_list_t *)58CHK_NO_REL-NEXT: entsize 2459CHK_NO_REL-NEXT: count 360CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} instance_method_0061CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:862CHK_NO_REL-NEXT: imp -[MyClass instance_method_00]63CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} instance_method_0164CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:865CHK_NO_REL-NEXT: imp -[MyClass instance_method_01]66CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} instance_method_0267CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:868CHK_NO_REL-NEXT: imp -[MyClass instance_method_02]69 70 71CHK_NO_REL: Meta Class72CHK_NO_REL-NEXT: _OBJC_METACLASS_$_MyClass73 74CHK_NO_REL: baseMethods 0x{{[0-9a-f]*}} (struct method_list_t *)75CHK_NO_REL-NEXT: entsize 2476CHK_NO_REL-NEXT: count 377CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} class_method_0078CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:879CHK_NO_REL-NEXT: imp +[MyClass class_method_00]80CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} class_method_0181CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:882CHK_NO_REL-NEXT: imp +[MyClass class_method_01]83CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} class_method_0284CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:885CHK_NO_REL-NEXT: imp +[MyClass class_method_02]86 87 88######################## Generate simple_class.s #########################89# clang -c simple_class.mm -s -o simple_class.s -target x86_64-apple-macos11 -Oz90 91######################## simple_class.mm ########################92# __attribute__((objc_root_class))93# @interface MyClass94# - (void)instance_method_00;95# - (void)instance_method_01;96# - (void)instance_method_02;97# + (void)class_method_00;98# + (void)class_method_01;99# + (void)class_method_02;100# @end101#102# @implementation MyClass103# - (void)instance_method_00 {}104# - (void)instance_method_01 {}105# - (void)instance_method_02 {}106# + (void)class_method_00 {}107# + (void)class_method_01 {}108# + (void)class_method_02 {}109# @end110#111# void *_objc_empty_cache;112#113 114#--- objc-macros.s115.macro .objc_selector_def name116 .p2align 2117"\name":118 .cfi_startproc119 ret120 .cfi_endproc121.endm122 123#--- simple_class.s124.include "objc-macros.s"125 126.section __TEXT,__text,regular,pure_instructions127.build_version macos, 11, 0128 129.objc_selector_def "-[MyClass instance_method_00]"130.objc_selector_def "-[MyClass instance_method_01]"131.objc_selector_def "-[MyClass instance_method_02]"132 133.objc_selector_def "+[MyClass class_method_00]"134.objc_selector_def "+[MyClass class_method_01]"135.objc_selector_def "+[MyClass class_method_02]"136 137.section __DATA,__objc_data138.globl _OBJC_CLASS_$_MyClass139.p2align 3, 0x0140_OBJC_CLASS_$_MyClass:141 .quad _OBJC_METACLASS_$_MyClass142 .quad 0143 .quad __objc_empty_cache144 .quad 0145 .quad __OBJC_CLASS_RO_$_MyClass146 147 .globl _OBJC_METACLASS_$_MyClass148 .p2align 3, 0x0149_OBJC_METACLASS_$_MyClass:150 .quad _OBJC_METACLASS_$_MyClass151 .quad _OBJC_CLASS_$_MyClass152 .quad __objc_empty_cache153 .quad 0154 .quad __OBJC_METACLASS_RO_$_MyClass155 156 .section __TEXT,__objc_classname,cstring_literals157L_OBJC_CLASS_NAME_:158 .asciz "MyClass"159 160 .section __TEXT,__objc_methname,cstring_literals161L_OBJC_METH_VAR_NAME_:162 .asciz "class_method_00"163 164 .section __TEXT,__objc_methtype,cstring_literals165L_OBJC_METH_VAR_TYPE_:166 .asciz "v16@0:8"167 168 .section __TEXT,__objc_methname,cstring_literals169L_OBJC_METH_VAR_NAME_.1:170 .asciz "class_method_01"171 172L_OBJC_METH_VAR_NAME_.2:173 .asciz "class_method_02"174 175 .section __DATA,__objc_const176 .p2align 3, 0x0177__OBJC_$_CLASS_METHODS_MyClass:178 .long 24179 .long 3180 .quad L_OBJC_METH_VAR_NAME_181 .quad L_OBJC_METH_VAR_TYPE_182 .quad "+[MyClass class_method_00]"183 .quad L_OBJC_METH_VAR_NAME_.1184 .quad L_OBJC_METH_VAR_TYPE_185 .quad "+[MyClass class_method_01]"186 .quad L_OBJC_METH_VAR_NAME_.2187 .quad L_OBJC_METH_VAR_TYPE_188 .quad "+[MyClass class_method_02]"189 190 .p2align 3, 0x0191__OBJC_METACLASS_RO_$_MyClass:192 .long 3193 .long 40194 .long 40195 .space 4196 .quad 0197 .quad L_OBJC_CLASS_NAME_198 .quad __OBJC_$_CLASS_METHODS_MyClass199 .quad 0200 .quad 0201 .quad 0202 .quad 0203 204 .section __TEXT,__objc_methname,cstring_literals205L_OBJC_METH_VAR_NAME_.3:206 .asciz "instance_method_00"207 208L_OBJC_METH_VAR_NAME_.4:209 .asciz "instance_method_01"210 211L_OBJC_METH_VAR_NAME_.5:212 .asciz "instance_method_02"213 214 .section __DATA,__objc_const215 .p2align 3, 0x0216__OBJC_$_INSTANCE_METHODS_MyClass:217 .long 24218 .long 3219 .quad L_OBJC_METH_VAR_NAME_.3220 .quad L_OBJC_METH_VAR_TYPE_221 .quad "-[MyClass instance_method_00]"222 .quad L_OBJC_METH_VAR_NAME_.4223 .quad L_OBJC_METH_VAR_TYPE_224 .quad "-[MyClass instance_method_01]"225 .quad L_OBJC_METH_VAR_NAME_.5226 .quad L_OBJC_METH_VAR_TYPE_227 .quad "-[MyClass instance_method_02]"228 229 .p2align 3, 0x0230__OBJC_CLASS_RO_$_MyClass:231 .long 2232 .long 0233 .long 0234 .space 4235 .quad 0236 .quad L_OBJC_CLASS_NAME_237 .quad __OBJC_$_INSTANCE_METHODS_MyClass238 .quad 0239 .quad 0240 .quad 0241 .quad 0242 243 .globl __objc_empty_cache244.zerofill __DATA,__common,__objc_empty_cache,8,3245 .section __DATA,__objc_classlist,regular,no_dead_strip246 .p2align 3, 0x0247l_OBJC_LABEL_CLASS_$:248 .quad _OBJC_CLASS_$_MyClass249 250 .section __DATA,__objc_imageinfo,regular,no_dead_strip251L_OBJC_IMAGE_INFO:252 .long 0253 .long 64254 255.subsections_via_symbols256