xref: /llvm-project/lld/test/MachO/objc-uses-custom-personality.s (revision 889847922dc6b9247f7f9189cf06e46fa5591049)
1## Tests that lld correctly resolves the custom personality referenced by objc code in an archive.
2
3# REQUIRES: x86
4# RUN: rm -rf %t; split-file %s %t
5# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-iossimulator %t/defined.s -o %t/defined.o
6# RUN: yaml2obj %t/combined.yaml > %t/combined.o
7# RUN: llvm-ar r %t/pack.a %t/defined.o %t/combined.o
8# 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
9# RUN: llvm-objdump --macho --syms %t/a.dylib | FileCheck %s
10# 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
11# RUN: llvm-objdump --macho --syms %t/a.dylib | FileCheck %s
12
13# CHECK: SYMBOL TABLE:
14# CHECK: {{.*}}  l     F __TEXT,__text _my_personality
15
16
17#--- defined.s
18.private_extern _my_personality
19
20.text
21.no_dead_strip _my_personality
22_my_personality:
23.cfi_startproc
24.cfi_def_cfa_offset 16
25.cfi_endproc
26nop
27.subsections_via_symbols
28
29## combined.yaml is produced from combined.o below:
30## lvm-mc -filetype=obj -triple=x86_64-apple-iossimulator %t/objc.s -o %t/objc.o
31## ld -r -o combined.o defined.o objc.o
32## // objc.s:
33## .section __TEXT,__text
34## .global _OBJC_CLASS_$_MyTest
35## .no_dead_strip _OBJC_CLASS_$_MyTest
36## _OBJC_CLASS_$_MyTest:
37##  .cfi_startproc
38##  .cfi_personality 155, _my_personality
39##  .cfi_def_cfa_offset 16
40##  ret
41##  .cfi_endproc
42##
43##  ret
44## .subsections_via_symbols
45
46#--- combined.yaml
47--- !mach-o
48FileHeader:
49  magic:           0xFEEDFACF
50  cputype:         0x1000007
51  cpusubtype:      0x3
52  filetype:        0x1
53  ncmds:           3
54  sizeofcmds:      352
55  flags:           0x2000
56  reserved:        0x0
57LoadCommands:
58  - cmd:             LC_SEGMENT_64
59    cmdsize:         312
60    segname:         ''
61    vmaddr:          0
62    vmsize:          152
63    fileoff:         416
64    filesize:        152
65    maxprot:         7
66    initprot:        7
67    nsects:          3
68    flags:           0
69    Sections:
70      - sectname:        __text
71        segname:         __TEXT
72        addr:            0x0
73        size:            3
74        offset:          0x1A0
75        align:           0
76        reloff:          0x0
77        nreloc:          0
78        flags:           0x80000400
79        reserved1:       0x0
80        reserved2:       0x0
81        reserved3:       0x0
82        content:         90C3C3
83      - sectname:        __eh_frame
84        segname:         __TEXT
85        addr:            0x8
86        size:            80
87        offset:          0x1A8
88        align:           3
89        reloff:          0x238
90        nreloc:          5
91        flags:           0x0
92        reserved1:       0x0
93        reserved2:       0x0
94        reserved3:       0x0
95        content:         1400000000000000017A520001781001100C0708900100001800000000000000017A505200017810069B04000000100C070890011800000004000000F8FFFFFFFFFFFFFF0100000000000000000E1000
96        relocations:
97          - address:         0x2A
98            symbolnum:       0
99            pcrel:           true
100            length:          2
101            extern:          true
102            type:            4
103            scattered:       false
104            value:           0
105          - address:         0x38
106            symbolnum:       2
107            pcrel:           false
108            length:          2
109            extern:          true
110            type:            5
111            scattered:       false
112            value:           0
113          - address:         0x38
114            symbolnum:       3
115            pcrel:           false
116            length:          2
117            extern:          true
118            type:            0
119            scattered:       false
120            value:           0
121          - address:         0x3C
122            symbolnum:       3
123            pcrel:           false
124            length:          3
125            extern:          true
126            type:            5
127            scattered:       false
128            value:           0
129          - address:         0x3C
130            symbolnum:       4
131            pcrel:           false
132            length:          3
133            extern:          true
134            type:            0
135            scattered:       false
136            value:           0
137      - sectname:        __compact_unwind
138        segname:         __LD
139        addr:            0x58
140        size:            64
141        offset:          0x1F8
142        align:           3
143        reloff:          0x260
144        nreloc:          3
145        flags:           0x2000000
146        reserved1:       0x0
147        reserved2:       0x0
148        reserved3:       0x0
149        content:         '00000000000000000100000000000202000000000000000000000000000000000000000000000000020000000000020200000000000000000000000000000000'
150        relocations:
151          - address:         0x0
152            symbolnum:       0
153            pcrel:           false
154            length:          3
155            extern:          true
156            type:            0
157            scattered:       false
158            value:           0
159          - address:         0x20
160            symbolnum:       4
161            pcrel:           false
162            length:          3
163            extern:          true
164            type:            0
165            scattered:       false
166            value:           0
167          - address:         0x30
168            symbolnum:       0
169            pcrel:           false
170            length:          3
171            extern:          true
172            type:            0
173            scattered:       false
174            value:           0
175  - cmd:             LC_SYMTAB
176    cmdsize:         24
177    symoff:          632
178    nsyms:           5
179    stroff:          712
180    strsize:         64
181  - cmd:             LC_DATA_IN_CODE
182    cmdsize:         16
183    dataoff:         632
184    datasize:        0
185LinkEditData:
186  NameList:
187    - n_strx:          23
188      n_type:          0x1E
189      n_sect:          1
190      n_desc:          32
191      n_value:         0
192    - n_strx:          39
193      n_type:          0xE
194      n_sect:          2
195      n_desc:          0
196      n_value:         8
197    - n_strx:          39
198      n_type:          0xE
199      n_sect:          2
200      n_desc:          0
201      n_value:         32
202    - n_strx:          49
203      n_type:          0xE
204      n_sect:          2
205      n_desc:          0
206      n_value:         60
207    - n_strx:          2
208      n_type:          0xF
209      n_sect:          1
210      n_desc:          32
211      n_value:         1
212  StringTable:
213    - ' '
214    - '_OBJC_CLASS_$_MyTest'
215    - _my_personality
216    - EH_Frame1
217    - func.eh
218    - ''
219    - ''
220    - ''
221    - ''
222    - ''
223    - ''
224    - ''
225...
226