brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.8 KiB · c8646f5 Raw
259 lines · plain
1# REQUIRES: aarch642# UNSUPPORTED: target=arm{{.*}}-unknown-linux-gnueabihf3# RUN: rm -rf %t; split-file %s %t && cd %t4 5## Compile a64_rel_dylib.o6# RUN: llvm-mc -filetype=obj -triple=arm64-apple-macos10.15 -o a64_rel_dylib.o a64_simple_class.s7 8## Test arm64 + relative method lists9# RUN: %no-lsystem-lld a64_rel_dylib.o -o a64_rel_dylib.dylib -map a64_rel_dylib.map -dylib -arch arm6410# RUN: llvm-objdump --macho --objc-meta-data a64_rel_dylib.dylib  | FileCheck %s --check-prefix=CHK_REL11 12## Test arm64 + relative method lists + dead-strip13# RUN: %no-lsystem-lld a64_rel_dylib.o -o a64_rel_dylib.dylib -map a64_rel_dylib.map -dylib -arch arm64 -dead_strip14# RUN: llvm-objdump --macho --objc-meta-data a64_rel_dylib.dylib  | FileCheck %s --check-prefix=CHK_REL15 16## Test arm64 + traditional method lists (no relative offsets)17# RUN: %no-lsystem-lld a64_rel_dylib.o -o a64_rel_dylib.dylib -map a64_rel_dylib.map -dylib -arch arm64 -no_objc_relative_method_lists18# RUN: llvm-objdump --macho --objc-meta-data a64_rel_dylib.dylib  | FileCheck %s --check-prefix=CHK_NO_REL19 20## Test arm64 + relative method lists by explicitly adding `-objc_relative_method_lists`.21# RUN: %lld a64_rel_dylib.o -o a64_rel_dylib.dylib -map a64_rel_dylib.map -dylib -arch arm64 -platform_version macOS 10.15 10.15 -objc_relative_method_lists22# RUN: llvm-objdump --macho --objc-meta-data a64_rel_dylib.dylib  | FileCheck %s --check-prefix=CHK_REL23 24## Test arm64 + no relative method lists by default.25# RUN: %lld a64_rel_dylib.o -o a64_rel_dylib.dylib -map a64_rel_dylib.map -dylib -arch arm64 -platform_version macOS 10.15 10.1526# RUN: llvm-objdump --macho --objc-meta-data a64_rel_dylib.dylib  | FileCheck %s --check-prefix=CHK_NO_REL27 28 29CHK_REL:       Contents of (__DATA_CONST,__objc_classlist) section30CHK_REL-NEXT:  _OBJC_CLASS_$_MyClass31CHK_REL:       baseMethods32CHK_REL-NEXT:  entsize 12 (relative)33CHK_REL-NEXT:  count 334CHK_REL-NEXT:   name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) instance_method_0035CHK_REL-NEXT:  types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:836CHK_REL-NEXT:    imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) -[MyClass instance_method_00]37CHK_REL-NEXT:   name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) instance_method_0138CHK_REL-NEXT:  types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:839CHK_REL-NEXT:    imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) -[MyClass instance_method_01]40CHK_REL-NEXT:   name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) instance_method_0241CHK_REL-NEXT:  types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:842CHK_REL-NEXT:    imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) -[MyClass instance_method_02]43 44CHK_REL:       Meta Class45CHK_REL-NEXT:  isa 0x{{[0-9a-f]*}} _OBJC_METACLASS_$_MyClass46CHK_REL:       baseMethods 0x{{[0-9a-f]*}} (struct method_list_t *)47CHK_REL-NEXT:  entsize 12 (relative)48CHK_REL-NEXT:  count 349CHK_REL-NEXT:   name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}})  class_method_0050CHK_REL-NEXT:  types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}})  v16@0:851CHK_REL-NEXT:    imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}})  +[MyClass class_method_00]52CHK_REL-NEXT:   name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}})  class_method_0153CHK_REL-NEXT:  types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}})  v16@0:854CHK_REL-NEXT:    imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}})  +[MyClass class_method_01]55CHK_REL-NEXT:   name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}})  class_method_0256CHK_REL-NEXT:  types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}})  v16@0:857CHK_REL-NEXT:    imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}})  +[MyClass class_method_02]58 59 60CHK_NO_REL-NOT: (relative)61 62CHK_NO_REL:           Contents of (__DATA_CONST,__objc_classlist) section63CHK_NO_REL-NEXT:      _OBJC_CLASS_$_MyClass64 65CHK_NO_REL:            baseMethods 0x{{[0-9a-f]*}} (struct method_list_t *)66CHK_NO_REL-NEXT:		   entsize 2467CHK_NO_REL-NEXT:		     count 368CHK_NO_REL-NEXT:		      name 0x{{[0-9a-f]*}} instance_method_0069CHK_NO_REL-NEXT:		     types 0x{{[0-9a-f]*}} v16@0:870CHK_NO_REL-NEXT:		       imp -[MyClass instance_method_00]71CHK_NO_REL-NEXT:		      name 0x{{[0-9a-f]*}} instance_method_0172CHK_NO_REL-NEXT:		     types 0x{{[0-9a-f]*}} v16@0:873CHK_NO_REL-NEXT:		       imp -[MyClass instance_method_01]74CHK_NO_REL-NEXT:		      name 0x{{[0-9a-f]*}} instance_method_0275CHK_NO_REL-NEXT:		     types 0x{{[0-9a-f]*}} v16@0:876CHK_NO_REL-NEXT:		       imp -[MyClass instance_method_02]77 78 79CHK_NO_REL:             Meta Class80CHK_NO_REL-NEXT:        _OBJC_METACLASS_$_MyClass81 82CHK_NO_REL:             baseMethods 0x{{[0-9a-f]*}} (struct method_list_t *)83CHK_NO_REL-NEXT:		   entsize 2484CHK_NO_REL-NEXT:		     count 385CHK_NO_REL-NEXT:		      name 0x{{[0-9a-f]*}} class_method_0086CHK_NO_REL-NEXT:		     types 0x{{[0-9a-f]*}} v16@0:887CHK_NO_REL-NEXT:		       imp +[MyClass class_method_00]88CHK_NO_REL-NEXT:		      name 0x{{[0-9a-f]*}} class_method_0189CHK_NO_REL-NEXT:		     types 0x{{[0-9a-f]*}} v16@0:890CHK_NO_REL-NEXT:		       imp +[MyClass class_method_01]91CHK_NO_REL-NEXT:		      name 0x{{[0-9a-f]*}} class_method_0292CHK_NO_REL-NEXT:		     types 0x{{[0-9a-f]*}} v16@0:893CHK_NO_REL-NEXT:		       imp +[MyClass class_method_02]94 95 96######################## Generate a64_simple_class.s #########################97# clang -c simple_class.mm -s -o a64_simple_class.s -target arm64-apple-macos -arch arm64 -Oz98 99########################       simple_class.mm       ########################100#  __attribute__((objc_root_class))101#  @interface MyClass102#  - (void)instance_method_00;103#  - (void)instance_method_01;104#  - (void)instance_method_02;105#  + (void)class_method_00;106#  + (void)class_method_01;107#  + (void)class_method_02;108#  @end109#110#  @implementation MyClass111#  - (void)instance_method_00 {}112#  - (void)instance_method_01 {}113#  - (void)instance_method_02 {}114#  + (void)class_method_00 {}115#  + (void)class_method_01 {}116#  + (void)class_method_02 {}117#  @end118#119#  void *_objc_empty_cache;120#  void *_objc_empty_vtable;121#122 123#--- objc-macros.s124.macro .objc_selector_def name125	.p2align	2126"\name":127	.cfi_startproc128	ret129	.cfi_endproc130.endm131 132#--- a64_simple_class.s133.include "objc-macros.s"134 135.section	__TEXT,__text,regular,pure_instructions136.build_version macos, 10, 15137 138.objc_selector_def "-[MyClass instance_method_00]"139.objc_selector_def "-[MyClass instance_method_01]"140.objc_selector_def "-[MyClass instance_method_02]"141 142.objc_selector_def "+[MyClass class_method_00]"143.objc_selector_def "+[MyClass class_method_01]"144.objc_selector_def "+[MyClass class_method_02]"145 146.globl	__objc_empty_vtable147.zerofill __DATA,__common,__objc_empty_vtable,8,3148.section	__DATA,__objc_data149.globl	_OBJC_CLASS_$_MyClass150.p2align	3, 0x0151 152_OBJC_CLASS_$_MyClass:153	.quad	_OBJC_METACLASS_$_MyClass154	.quad	0155	.quad	__objc_empty_cache156	.quad	__objc_empty_vtable157	.quad	__OBJC_CLASS_RO_$_MyClass158	.globl	_OBJC_METACLASS_$_MyClass159	.p2align	3, 0x0160 161_OBJC_METACLASS_$_MyClass:162	.quad	_OBJC_METACLASS_$_MyClass163	.quad	_OBJC_CLASS_$_MyClass164	.quad	__objc_empty_cache165	.quad	__objc_empty_vtable166	.quad	__OBJC_METACLASS_RO_$_MyClass167 168	.section	__TEXT,__objc_classname,cstring_literals169l_OBJC_CLASS_NAME_:170	.asciz	"MyClass"171	.section	__TEXT,__objc_methname,cstring_literals172l_OBJC_METH_VAR_NAME_:173	.asciz	"class_method_00"174	.section	__TEXT,__objc_methtype,cstring_literals175l_OBJC_METH_VAR_TYPE_:176	.asciz	"v16@0:8"177	.section	__TEXT,__objc_methname,cstring_literals178l_OBJC_METH_VAR_NAME_.1:179	.asciz	"class_method_01"180l_OBJC_METH_VAR_NAME_.2:181	.asciz	"class_method_02"182	.section	__DATA,__objc_const183	.p2align	3, 0x0184__OBJC_$_CLASS_METHODS_MyClass:185	.long	24186	.long	3187	.quad	l_OBJC_METH_VAR_NAME_188	.quad	l_OBJC_METH_VAR_TYPE_189	.quad	"+[MyClass class_method_00]"190	.quad	l_OBJC_METH_VAR_NAME_.1191	.quad	l_OBJC_METH_VAR_TYPE_192	.quad	"+[MyClass class_method_01]"193	.quad	l_OBJC_METH_VAR_NAME_.2194	.quad	l_OBJC_METH_VAR_TYPE_195	.quad	"+[MyClass class_method_02]"196	.p2align	3, 0x0197 198__OBJC_METACLASS_RO_$_MyClass:199	.long	3200	.long	40201	.long	40202	.space	4203	.quad	0204	.quad	l_OBJC_CLASS_NAME_205	.quad	__OBJC_$_CLASS_METHODS_MyClass206	.quad	0207	.quad	0208	.quad	0209	.quad	0210 211	.section	__TEXT,__objc_methname,cstring_literals212l_OBJC_METH_VAR_NAME_.3:213	.asciz	"instance_method_00"214l_OBJC_METH_VAR_NAME_.4:215	.asciz	"instance_method_01"216l_OBJC_METH_VAR_NAME_.5:217	.asciz	"instance_method_02"218 219	.section	__DATA,__objc_const220	.p2align	3, 0x0221__OBJC_$_INSTANCE_METHODS_MyClass:222	.long	24223	.long	3224	.quad	l_OBJC_METH_VAR_NAME_.3225	.quad	l_OBJC_METH_VAR_TYPE_226	.quad	"-[MyClass instance_method_00]"227	.quad	l_OBJC_METH_VAR_NAME_.4228	.quad	l_OBJC_METH_VAR_TYPE_229	.quad	"-[MyClass instance_method_01]"230	.quad	l_OBJC_METH_VAR_NAME_.5231	.quad	l_OBJC_METH_VAR_TYPE_232	.quad	"-[MyClass instance_method_02]"233	.p2align	3, 0x0234 235__OBJC_CLASS_RO_$_MyClass:236	.long	2237	.long	0238	.long	0239	.space	4240	.quad	0241	.quad	l_OBJC_CLASS_NAME_242	.quad	__OBJC_$_INSTANCE_METHODS_MyClass243	.quad	0244	.quad	0245	.quad	0246	.quad	0247	.globl	__objc_empty_cache248 249.zerofill __DATA,__common,__objc_empty_cache,8,3250	.section	__DATA,__objc_classlist,regular,no_dead_strip251	.p2align	3, 0x0252l_OBJC_LABEL_CLASS_$:253	.quad	_OBJC_CLASS_$_MyClass254	.section	__DATA,__objc_imageinfo,regular,no_dead_strip255L_OBJC_IMAGE_INFO:256	.long	0257	.long	64258.subsections_via_symbols259