## Tests that lld correctly resolves the custom personality referenced by objc code in an archive. # REQUIRES: x86 # RUN: rm -rf %t; split-file %s %t # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-iossimulator %t/defined.s -o %t/defined.o # RUN: yaml2obj %t/combined.yaml > %t/combined.o # RUN: llvm-ar r %t/pack.a %t/defined.o %t/combined.o # RUN: %no-arg-lld -dylib -arch x86_64 -platform_version ios-simulator 12.0.0 15.0 -ObjC %t/pack.a -o %t/a.dylib # RUN: llvm-objdump --macho --syms %t/a.dylib | FileCheck %s # RUN: %no-arg-lld -dylib -arch x86_64 -platform_version ios-simulator 12.0.0 15.0 -ObjC --start-lib %t/defined.o %t/combined.o --end-lib -o %t/a.dylib # RUN: llvm-objdump --macho --syms %t/a.dylib | FileCheck %s # CHECK: SYMBOL TABLE: # CHECK: {{.*}} l F __TEXT,__text _my_personality #--- defined.s .private_extern _my_personality .text .no_dead_strip _my_personality _my_personality: .cfi_startproc .cfi_def_cfa_offset 16 .cfi_endproc nop .subsections_via_symbols ## combined.yaml is produced from combined.o below: ## lvm-mc -filetype=obj -triple=x86_64-apple-iossimulator %t/objc.s -o %t/objc.o ## ld -r -o combined.o defined.o objc.o ## // objc.s: ## .section __TEXT,__text ## .global _OBJC_CLASS_$_MyTest ## .no_dead_strip _OBJC_CLASS_$_MyTest ## _OBJC_CLASS_$_MyTest: ## .cfi_startproc ## .cfi_personality 155, _my_personality ## .cfi_def_cfa_offset 16 ## ret ## .cfi_endproc ## ## ret ## .subsections_via_symbols #--- combined.yaml --- !mach-o FileHeader: magic: 0xFEEDFACF cputype: 0x1000007 cpusubtype: 0x3 filetype: 0x1 ncmds: 3 sizeofcmds: 352 flags: 0x2000 reserved: 0x0 LoadCommands: - cmd: LC_SEGMENT_64 cmdsize: 312 segname: '' vmaddr: 0 vmsize: 152 fileoff: 416 filesize: 152 maxprot: 7 initprot: 7 nsects: 3 flags: 0 Sections: - sectname: __text segname: __TEXT addr: 0x0 size: 3 offset: 0x1A0 align: 0 reloff: 0x0 nreloc: 0 flags: 0x80000400 reserved1: 0x0 reserved2: 0x0 reserved3: 0x0 content: 90C3C3 - sectname: __eh_frame segname: __TEXT addr: 0x8 size: 80 offset: 0x1A8 align: 3 reloff: 0x238 nreloc: 5 flags: 0x0 reserved1: 0x0 reserved2: 0x0 reserved3: 0x0 content: 1400000000000000017A520001781001100C0708900100001800000000000000017A505200017810069B04000000100C070890011800000004000000F8FFFFFFFFFFFFFF0100000000000000000E1000 relocations: - address: 0x2A symbolnum: 0 pcrel: true length: 2 extern: true type: 4 scattered: false value: 0 - address: 0x38 symbolnum: 2 pcrel: false length: 2 extern: true type: 5 scattered: false value: 0 - address: 0x38 symbolnum: 3 pcrel: false length: 2 extern: true type: 0 scattered: false value: 0 - address: 0x3C symbolnum: 3 pcrel: false length: 3 extern: true type: 5 scattered: false value: 0 - address: 0x3C symbolnum: 4 pcrel: false length: 3 extern: true type: 0 scattered: false value: 0 - sectname: __compact_unwind segname: __LD addr: 0x58 size: 64 offset: 0x1F8 align: 3 reloff: 0x260 nreloc: 3 flags: 0x2000000 reserved1: 0x0 reserved2: 0x0 reserved3: 0x0 content: '00000000000000000100000000000202000000000000000000000000000000000000000000000000020000000000020200000000000000000000000000000000' relocations: - address: 0x0 symbolnum: 0 pcrel: false length: 3 extern: true type: 0 scattered: false value: 0 - address: 0x20 symbolnum: 4 pcrel: false length: 3 extern: true type: 0 scattered: false value: 0 - address: 0x30 symbolnum: 0 pcrel: false length: 3 extern: true type: 0 scattered: false value: 0 - cmd: LC_SYMTAB cmdsize: 24 symoff: 632 nsyms: 5 stroff: 712 strsize: 64 - cmd: LC_DATA_IN_CODE cmdsize: 16 dataoff: 632 datasize: 0 LinkEditData: NameList: - n_strx: 23 n_type: 0x1E n_sect: 1 n_desc: 32 n_value: 0 - n_strx: 39 n_type: 0xE n_sect: 2 n_desc: 0 n_value: 8 - n_strx: 39 n_type: 0xE n_sect: 2 n_desc: 0 n_value: 32 - n_strx: 49 n_type: 0xE n_sect: 2 n_desc: 0 n_value: 60 - n_strx: 2 n_type: 0xF n_sect: 1 n_desc: 32 n_value: 1 StringTable: - ' ' - '_OBJC_CLASS_$_MyTest' - _my_personality - EH_Frame1 - func.eh - '' - '' - '' - '' - '' - '' - '' ...