145 lines · plain
1; REQUIRES: aarch642; RUN: rm -rf %t && split-file %s %t3 4; Test that ObjC method names are tail merged and5; ObjCSelRefsHelper::makeSelRef() still works correctly6 7; RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin %t/a.s -o %t/a.o8; RUN: %lld -dylib -arch arm64 --tail-merge-strings %t/a.o -o %t/a9; RUN: llvm-objdump --macho --section="__TEXT,__objc_methname" %t/a | FileCheck %s --implicit-check-not=error10 11; RUN: %lld -dylib -arch arm64 --no-tail-merge-strings %t/a.o -o %t/nomerge12; RUN: llvm-objdump --macho --section="__TEXT,__objc_methname" %t/nomerge | FileCheck %s --check-prefixes=CHECK,NOMERGE --implicit-check-not=error13 14; CHECK: withBar:error:15; NOMERGE: error:16 17;--- a.mm18__attribute__((objc_root_class))19@interface Foo20- (void)withBar:(int)bar error:(int)error;21- (void)error:(int)error;22@end23 24@implementation Foo25- (void)withBar:(int)bar error:(int)error {}26- (void)error:(int)error {}27@end28 29void *_objc_empty_cache;30void *_objc_empty_vtable;31;--- gen32clang -Oz -target arm64-apple-darwin a.mm -S -o -33;--- a.s34 .build_version macos, 11, 035 .section __TEXT,__text,regular,pure_instructions36 .p2align 2 ; -- Begin function -[Foo withBar:error:]37"-[Foo withBar:error:]": ; @"\01-[Foo withBar:error:]"38 .cfi_startproc39; %bb.0:40 ret41 .cfi_endproc42 ; -- End function43 .p2align 2 ; -- Begin function -[Foo error:]44"-[Foo error:]": ; @"\01-[Foo error:]"45 .cfi_startproc46; %bb.0:47 ret48 .cfi_endproc49 ; -- End function50 .globl __objc_empty_vtable ; @_objc_empty_vtable51.zerofill __DATA,__common,__objc_empty_vtable,8,352 .section __DATA,__objc_data53 .globl _OBJC_CLASS_$_Foo ; @"OBJC_CLASS_$_Foo"54 .p2align 3, 0x055_OBJC_CLASS_$_Foo:56 .quad _OBJC_METACLASS_$_Foo57 .quad 058 .quad __objc_empty_cache59 .quad __objc_empty_vtable60 .quad __OBJC_CLASS_RO_$_Foo61 62 .globl _OBJC_METACLASS_$_Foo ; @"OBJC_METACLASS_$_Foo"63 .p2align 3, 0x064_OBJC_METACLASS_$_Foo:65 .quad _OBJC_METACLASS_$_Foo66 .quad _OBJC_CLASS_$_Foo67 .quad __objc_empty_cache68 .quad __objc_empty_vtable69 .quad __OBJC_METACLASS_RO_$_Foo70 71 .section __TEXT,__objc_classname,cstring_literals72l_OBJC_CLASS_NAME_: ; @OBJC_CLASS_NAME_73 .asciz "Foo"74 75 .section __DATA,__objc_const76 .p2align 3, 0x0 ; @"_OBJC_METACLASS_RO_$_Foo"77__OBJC_METACLASS_RO_$_Foo:78 .long 3 ; 0x379 .long 40 ; 0x2880 .long 40 ; 0x2881 .space 482 .quad 083 .quad l_OBJC_CLASS_NAME_84 .quad 085 .quad 086 .quad 087 .quad 088 .quad 089 90 .section __TEXT,__objc_methname,cstring_literals91l_OBJC_METH_VAR_NAME_: ; @OBJC_METH_VAR_NAME_92 .asciz "withBar:error:"93 94 .section __TEXT,__objc_methtype,cstring_literals95l_OBJC_METH_VAR_TYPE_: ; @OBJC_METH_VAR_TYPE_96 .asciz "v24@0:8i16i20"97 98 .section __TEXT,__objc_methname,cstring_literals99l_OBJC_METH_VAR_NAME_.1: ; @OBJC_METH_VAR_NAME_.1100 .asciz "error:"101 102 .section __TEXT,__objc_methtype,cstring_literals103l_OBJC_METH_VAR_TYPE_.2: ; @OBJC_METH_VAR_TYPE_.2104 .asciz "v20@0:8i16"105 106 .section __DATA,__objc_const107 .p2align 3, 0x0 ; @"_OBJC_$_INSTANCE_METHODS_Foo"108__OBJC_$_INSTANCE_METHODS_Foo:109 .long 24 ; 0x18110 .long 2 ; 0x2111 .quad l_OBJC_METH_VAR_NAME_112 .quad l_OBJC_METH_VAR_TYPE_113 .quad "-[Foo withBar:error:]"114 .quad l_OBJC_METH_VAR_NAME_.1115 .quad l_OBJC_METH_VAR_TYPE_.2116 .quad "-[Foo error:]"117 118 .p2align 3, 0x0 ; @"_OBJC_CLASS_RO_$_Foo"119__OBJC_CLASS_RO_$_Foo:120 .long 2 ; 0x2121 .long 0 ; 0x0122 .long 0 ; 0x0123 .space 4124 .quad 0125 .quad l_OBJC_CLASS_NAME_126 .quad __OBJC_$_INSTANCE_METHODS_Foo127 .quad 0128 .quad 0129 .quad 0130 .quad 0131 132 .globl __objc_empty_cache ; @_objc_empty_cache133.zerofill __DATA,__common,__objc_empty_cache,8,3134 .section __DATA,__objc_classlist,regular,no_dead_strip135 .p2align 3, 0x0 ; @"OBJC_LABEL_CLASS_$"136l_OBJC_LABEL_CLASS_$:137 .quad _OBJC_CLASS_$_Foo138 139 .section __DATA,__objc_imageinfo,regular,no_dead_strip140L_OBJC_IMAGE_INFO:141 .long 0142 .long 64143 144.subsections_via_symbols145