xref: /llvm-project/llvm/test/tools/llvm-objcopy/MachO/remove-swift-symbols.test (revision aa3df8ddcd52ec5e40e73cf8d25471145e3913cb)
1## Verify that -T removes Swift symbols.
2# RUN: yaml2obj -D FLAGS=0x00200085 -D SEGMENT_NAME=__DATA \
3# RUN:  -D SECTION_NAME=__objc_imageinfo -D SECTION_SIZE=8 \
4# RUN:  -D SECTION_CONTENT=0000000040070105 %s -o %t1
5# RUN: llvm-strip -x -T %t1
6# RUN: llvm-readobj -s %t1 | FileCheck --check-prefix=NO-SWIFT-SYMBOLS %s
7
8# RUN: yaml2obj -D FLAGS=0x00200085 -D SEGMENT_NAME=__DATA_CONST \
9# RUN:  -D SECTION_NAME=__objc_imageinfo -D SECTION_SIZE=8 \
10# RUN:  -D SECTION_CONTENT=0000000040070105 %s -o %t2
11# RUN: llvm-strip -x -T %t2
12# RUN: llvm-readobj -s %t2 | FileCheck --check-prefix=NO-SWIFT-SYMBOLS %s
13
14# RUN: yaml2obj -D FLAGS=0x00200085 -D SEGMENT_NAME=__DATA_DIRTY \
15# RUN:  -D SECTION_NAME=__objc_imageinfo -D SECTION_SIZE=8 \
16# RUN:  -D SECTION_CONTENT=0000000040070105 %s -o %t3
17# RUN: llvm-strip -x -T %t3
18# RUN: llvm-readobj -s %t3 | FileCheck --check-prefix=NO-SWIFT-SYMBOLS %s
19
20# NO-SWIFT-SYMBOLS:      Symbols [
21# NO-SWIFT-SYMBOLS-NEXT:  Symbol {
22# NO-SWIFT-SYMBOLS-NEXT:    Name: _main (2)
23# NO-SWIFT-SYMBOLS-NEXT:    Extern
24# NO-SWIFT-SYMBOLS-NEXT:    Type: Section (0xE)
25# NO-SWIFT-SYMBOLS-NEXT:    Section: __text (0x1)
26# NO-SWIFT-SYMBOLS-NEXT:    RefType: UndefinedNonLazy (0x0)
27# NO-SWIFT-SYMBOLS-NEXT:    Flags [ (0x0)
28# NO-SWIFT-SYMBOLS-NEXT:    ]
29# NO-SWIFT-SYMBOLS-NEXT:    Value: 0x100000B70
30# NO-SWIFT-SYMBOLS-NEXT:  }
31# NO-SWIFT-SYMBOLS-NEXT: ]
32
33## Verify that -T does not remove (public) Swift symbols when the binary
34## does not contain __objc_imageinfo in one of the expected segments.
35
36# RUN: yaml2obj -D FLAGS=0x00200085 -D SEGMENT_NAME=__DATA \
37# RUN:  -D SECTION_NAME=__not_objc_imageinfo -D SECTION_SIZE=8 \
38# RUN:  -D SECTION_CONTENT=0000000040070105 %s -o %t4
39# RUN: llvm-strip -x -T %t4
40# RUN: llvm-readobj -s %t4 | FileCheck --check-prefix=SWIFT-SYMBOLS %s
41
42# RUN: yaml2obj -D FLAGS=0x00200085 -D SEGMENT_NAME=__NOT_DATA \
43# RUN:  -D SECTION_NAME=__objc_imageinfo -D SECTION_SIZE=8 \
44# RUN:  -D SECTION_CONTENT=0000000040070105 %s -o %t5
45# RUN: llvm-strip -x -T %t5
46# RUN: llvm-readobj -s %t5 | FileCheck --check-prefix=SWIFT-SYMBOLS %s
47
48## Verify that -T does not remove (public) Swift symbols when swift_version is zero.
49
50# RUN: yaml2obj -D FLAGS=0x00200085 -D SEGMENT_NAME=__DATA \
51# RUN:  -D SECTION_NAME=__objc_imageinfo -D SECTION_SIZE=8 \
52# RUN:  -D SECTION_CONTENT=0000000000000000 %s -o %t6
53# RUN: llvm-strip -x -T %t6
54# RUN: llvm-readobj -s %t6 | FileCheck --check-prefix=SWIFT-SYMBOLS %s
55
56## Verify that -T does not remove (public) Swift symbols when the binary
57## contains invalid (too small) __objc_imageinfo.
58
59# RUN: yaml2obj -D FLAGS=0x00200085 -D SEGMENT_NAME=__DATA \
60# RUN:  -D SECTION_NAME=__objc_imageinfo -D SECTION_SIZE=4 \
61# RUN:  -D SECTION_CONTENT=00000000 %s -o %t7
62# RUN: llvm-strip -x -T %t7
63# RUN: llvm-readobj -s %t7 | FileCheck --check-prefix=SWIFT-SYMBOLS %s
64
65## Verify that -T does not remove (public) Swift symbols
66## when the flag MH_DYLDLINK is not set.
67
68# RUN: yaml2obj -D FLAGS=0x00200000 -D SEGMENT_NAME=__DATA \
69# RUN:  -D SECTION_NAME=__objc_imageinfo -D SECTION_SIZE=8 \
70# RUN:  -D SECTION_CONTENT=0000000040070105 %s -o %t8
71# RUN: llvm-strip -x -T %t8
72# RUN: llvm-readobj -s %t8 | FileCheck --check-prefix=SWIFT-SYMBOLS %s
73
74# SWIFT-SYMBOLS:      Symbols [
75# SWIFT-SYMBOLS-NEXT:  Symbol {
76# SWIFT-SYMBOLS-NEXT:    Name: _$S1a13PublicSymbol1Sivp (27)
77# SWIFT-SYMBOLS-NEXT:    Extern
78# SWIFT-SYMBOLS-NEXT:    Type: Section (0xE)
79# SWIFT-SYMBOLS-NEXT:    Section: __text (0x1)
80# SWIFT-SYMBOLS-NEXT:    RefType: UndefinedNonLazy (0x0)
81# SWIFT-SYMBOLS-NEXT:    Flags [ (0x0)
82# SWIFT-SYMBOLS-NEXT:    ]
83# SWIFT-SYMBOLS-NEXT:    Value: 0x100001160
84# SWIFT-SYMBOLS-NEXT:  }
85# SWIFT-SYMBOLS-NEXT:  Symbol {
86# SWIFT-SYMBOLS-NEXT:    Name: _$s1a13PublicSymbol2Sivp (2)
87# SWIFT-SYMBOLS-NEXT:    Extern
88# SWIFT-SYMBOLS-NEXT:    Type: Section (0xE)
89# SWIFT-SYMBOLS-NEXT:    Section: __text (0x1)
90# SWIFT-SYMBOLS-NEXT:    RefType: UndefinedNonLazy (0x0)
91# SWIFT-SYMBOLS-NEXT:    Flags [ (0x0)
92# SWIFT-SYMBOLS-NEXT:    ]
93# SWIFT-SYMBOLS-NEXT:    Value: 0x100001168
94# SWIFT-SYMBOLS-NEXT:  }
95# SWIFT-SYMBOLS-NEXT:  Symbol {
96# SWIFT-SYMBOLS-NEXT:    Name: _main (52)
97# SWIFT-SYMBOLS-NEXT:    Extern
98# SWIFT-SYMBOLS-NEXT:    Type: Section (0xE)
99# SWIFT-SYMBOLS-NEXT:    Section: __text (0x1)
100# SWIFT-SYMBOLS-NEXT:    RefType: UndefinedNonLazy (0x0)
101# SWIFT-SYMBOLS-NEXT:    Flags [ (0x0)
102# SWIFT-SYMBOLS-NEXT:    ]
103# SWIFT-SYMBOLS-NEXT:    Value: 0x100000B70
104# SWIFT-SYMBOLS-NEXT:  }
105# SWIFT-SYMBOLS-NEXT: ]
106
107--- !mach-o
108FileHeader:
109  magic:           0xFEEDFACF
110  cputype:         0x01000007
111  cpusubtype:      0x80000003
112  filetype:        0x00000002
113  ncmds:           4
114  sizeofcmds:      400
115  flags:           [[FLAGS]]
116  reserved:        0x00000000
117LoadCommands:
118  - cmd:             LC_SEGMENT_64
119    cmdsize:         152
120    segname:         __TEXT
121    vmaddr:          4294967296
122    vmsize:          4096
123    fileoff:         0
124    filesize:        4096
125    maxprot:         5
126    initprot:        5
127    nsects:          1
128    flags:           0
129    Sections:
130      - sectname:        __text
131        segname:         __TEXT
132        addr:            0x0000000100000B70
133        size:            845
134        offset:          0x00000B70
135        align:           4
136        reloff:          0x00000000
137        nreloc:          0
138        flags:           0x80000400
139        reserved1:       0x00000000
140        reserved2:       0x00000000
141        reserved3:       0x00000000
142  - cmd:             LC_SEGMENT_64
143    cmdsize:         152
144    segname:         [[SEGMENT_NAME]]
145    vmaddr:          4294971392
146    vmsize:          4096
147    fileoff:         4096
148    filesize:        4096
149    maxprot:         3
150    initprot:        3
151    nsects:          1
152    flags:           0
153    Sections:
154      - sectname:        [[SECTION_NAME]]
155        segname:         [[SEGMENT_NAME]]
156        addr:            0x0000000100001090
157        size:            [[SECTION_SIZE]]
158        offset:          0x00001090
159        align:           2
160        reloff:          0x00000000
161        nreloc:          0
162        flags:           0x00000000
163        reserved1:       0x00000000
164        reserved2:       0x00000000
165        reserved3:       0x00000000
166        content:         "[[SECTION_CONTENT]]"
167  - cmd:             LC_SEGMENT_64
168    cmdsize:         72
169    segname:         __LINKEDIT
170    vmaddr:          4294975488
171    vmsize:          4096
172    fileoff:         8192
173    filesize:        188
174    maxprot:         1
175    initprot:        1
176    nsects:          0
177    flags:           0
178  - cmd:             LC_SYMTAB
179    cmdsize:         24
180    symoff:          8192
181    nsyms:           5
182    stroff:          8272
183    strsize:         108
184LinkEditData:
185  NameList:
186    - n_strx:          50
187      n_type:          0x1E
188      n_sect:          1
189      n_desc:          0
190      n_value:         4294971760
191    - n_strx:          1
192      n_type:          0x1E
193      n_sect:          1
194      n_desc:          0
195      n_value:         4294971768
196    - n_strx:          74
197      n_type:          0x0F
198      n_sect:          1
199      n_desc:          0
200      n_value:         4294971744
201    - n_strx:          25
202      n_type:          0x0F
203      n_sect:          1
204      n_desc:          0
205      n_value:         4294971752
206    - n_strx:          99
207      n_type:          0x0F
208      n_sect:          1
209      n_desc:          0
210      n_value:         4294970224
211  StringTable:
212    - ''
213    - '_$s1a12LocalSymbol2Sivp'
214    - '_$s1a13PublicSymbol2Sivp'
215    - '_$S1a12LocalSymbol1Sivp'
216    - '_$S1a13PublicSymbol1Sivp'
217    - _main
218    - ''
219    - ''
220    - ''
221...
222