Skip to content

Commit c119da2

Browse files
committed
[PowerPC] Function descriptor symbol may be omitted for external symbol. #97526
If a function's address is taken, which means it may be called via a function pointer, we need the function descriptor for it. Otherwise, the function descriptor can be omitted for external symbols.
1 parent 1604c24 commit c119da2

File tree

7 files changed

+77
-179
lines changed

7 files changed

+77
-179
lines changed

llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2328,8 +2328,10 @@ bool AsmPrinter::doFinalization(Module &M) {
23282328
// Emit linkage for the function entry point.
23292329
emitLinkage(&F, FnEntryPointSym);
23302330

2331-
// Emit linkage for the function descriptor.
2332-
emitLinkage(&F, Name);
2331+
// If a function's address is taken, which means it may be called via a
2332+
// function pointer, we need the function descriptor for it.
2333+
if (F.hasAddressTaken())
2334+
emitLinkage(&F, Name);
23332335
}
23342336

23352337
// Emit the remarks section contents.

llvm/test/CodeGen/PowerPC/aix-available-externally-linkage-fun.ll

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ entry:
1818
}
1919

2020
; CHECK: .extern .foo[PR]
21-
; CHECK: .extern foo[DS]
2221

2322
; OBJ: Name: .foo
2423
; OBJ-NEXT: Value (RelocatableAddress): 0x0
@@ -34,18 +33,3 @@ entry:
3433
; OBJ-NEXT: SymbolAlignmentLog2: 0
3534
; OBJ-NEXT: SymbolType: XTY_ER (0x0)
3635
; OBJ-NEXT: StorageMappingClass: XMC_PR (0x0)
37-
38-
; OBJ: Name: foo
39-
; OBJ-NEXT: Value (RelocatableAddress): 0x0
40-
; OBJ-NEXT: Section: N_UNDEF
41-
; OBJ-NEXT: Type: 0x0
42-
; OBJ-NEXT: StorageClass: C_EXT (0x2)
43-
; OBJ-NEXT: NumberOfAuxEntries: 1
44-
; OBJ-NEXT: CSECT Auxiliary Entry {
45-
; OBJ-NEXT: Index: [[#NFA+4]]
46-
; OBJ-NEXT: SectionLen: 0
47-
; OBJ-NEXT: ParameterHashIndex: 0x0
48-
; OBJ-NEXT: TypeChkSectNum: 0x0
49-
; OBJ-NEXT: SymbolAlignmentLog2: 0
50-
; OBJ-NEXT: SymbolType: XTY_ER (0x0)
51-
; OBJ-NEXT: StorageMappingClass: XMC_DS (0xA)

llvm/test/CodeGen/PowerPC/aix-extern-weak.ll

Lines changed: 17 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ declare extern_weak void @foo_ext_weak(ptr)
5555
; COMMON-NEXT: .weak .foo_ext_weak_ref[PR]
5656
; COMMON-NEXT: .weak foo_ext_weak_ref[DS]
5757
; COMMON-NEXT: .weak .foo_ext_weak[PR]
58-
; COMMON-NEXT: .weak foo_ext_weak[DS]
5958
; COMMON-NEXT: .toc
6059
; COMMON-NEXT: L..C0:
6160
; COMMON-NEXT: .tc foo_ext_weak_p[TC],foo_ext_weak_p
@@ -159,35 +158,14 @@ declare extern_weak void @foo_ext_weak(ptr)
159158
; CHECKSYM-NEXT: }
160159
; CHECKSYM-NEXT: Symbol {
161160
; CHECKSYM-NEXT: Index: [[#Index+8]]
162-
; CHECKSYM-NEXT: Name: foo_ext_weak
163-
; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0
164-
; CHECKSYM-NEXT: Section: N_UNDEF
165-
; CHECKSYM-NEXT: Type: 0x0
166-
; CHECKSYM-NEXT: StorageClass: C_WEAKEXT (0x6F)
167-
; CHECKSYM-NEXT: NumberOfAuxEntries: 1
168-
; CHECKSYM-NEXT: CSECT Auxiliary Entry {
169-
; CHECKSYM-NEXT: Index: [[#Index+9]]
170-
; CHECKSYM-NEXT: SectionLen: 0
171-
; CHECKSYM-NEXT: ParameterHashIndex: 0x0
172-
; CHECKSYM-NEXT: TypeChkSectNum: 0x0
173-
; CHECKSYM-NEXT: SymbolAlignmentLog2: 0
174-
; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0)
175-
; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA)
176-
; CHECKSYM32-NEXT: StabInfoIndex: 0x0
177-
; CHECKSYM32-NEXT: StabSectNum: 0x0
178-
; CHECKSYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
179-
; CHECKSYM-NEXT: }
180-
; CHECKSYM-NEXT: }
181-
; CHECKSYM-NEXT: Symbol {
182-
; CHECKSYM-NEXT: Index: [[#Index+10]]
183161
; CHECKSYM-NEXT: Name:
184162
; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0
185163
; CHECKSYM-NEXT: Section: .text
186164
; CHECKSYM-NEXT: Type: 0x0
187165
; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B)
188166
; CHECKSYM-NEXT: NumberOfAuxEntries: 1
189167
; CHECKSYM-NEXT: CSECT Auxiliary Entry {
190-
; CHECKSYM-NEXT: Index: [[#Index+11]]
168+
; CHECKSYM-NEXT: Index: [[#Index+9]]
191169
; CHECKSYM-NEXT: SectionLen: 80
192170
; CHECKSYM-NEXT: ParameterHashIndex: 0x0
193171
; CHECKSYM-NEXT: TypeChkSectNum: 0x0
@@ -200,16 +178,16 @@ declare extern_weak void @foo_ext_weak(ptr)
200178
; CHECKSYM-NEXT: }
201179
; CHECKSYM-NEXT: }
202180
; CHECKSYM-NEXT: Symbol {
203-
; CHECKSYM-NEXT: Index: [[#Index+12]]
181+
; CHECKSYM-NEXT: Index: [[#Index+10]]
204182
; CHECKSYM-NEXT: Name: .main
205183
; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0
206184
; CHECKSYM-NEXT: Section: .text
207185
; CHECKSYM-NEXT: Type: 0x0
208186
; CHECKSYM-NEXT: StorageClass: C_EXT (0x2)
209187
; CHECKSYM-NEXT: NumberOfAuxEntries: 1
210188
; CHECKSYM-NEXT: CSECT Auxiliary Entry {
211-
; CHECKSYM-NEXT: Index: [[#Index+13]]
212-
; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#Index+10]]
189+
; CHECKSYM-NEXT: Index: [[#Index+11]]
190+
; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#Index+8]]
213191
; CHECKSYM-NEXT: ParameterHashIndex: 0x0
214192
; CHECKSYM-NEXT: TypeChkSectNum: 0x0
215193
; CHECKSYM-NEXT: SymbolAlignmentLog2: 0
@@ -221,15 +199,15 @@ declare extern_weak void @foo_ext_weak(ptr)
221199
; CHECKSYM-NEXT: }
222200
; CHECKSYM-NEXT: }
223201
; CHECKSYM-NEXT: Symbol {
224-
; CHECKSYM-NEXT: Index: [[#Index+14]]
202+
; CHECKSYM-NEXT: Index: [[#Index+12]]
225203
; CHECKSYM-NEXT: Name: .data
226204
; CHECKSYM-NEXT: Value (RelocatableAddress): 0x50
227205
; CHECKSYM-NEXT: Section: .data
228206
; CHECKSYM-NEXT: Type: 0x0
229207
; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B)
230208
; CHECKSYM-NEXT: NumberOfAuxEntries: 1
231209
; CHECKSYM-NEXT: CSECT Auxiliary Entry {
232-
; CHECKSYM-NEXT: Index: [[#Index+15]]
210+
; CHECKSYM-NEXT: Index: [[#Index+13]]
233211
; CHECKSYM32-NEXT: SectionLen: 4
234212
; CHECKSYM64-NEXT: SectionLen: 8
235213
; CHECKSYM-NEXT: ParameterHashIndex: 0x0
@@ -244,16 +222,16 @@ declare extern_weak void @foo_ext_weak(ptr)
244222
; CHECKSYM-NEXT: }
245223
; CHECKSYM-NEXT: }
246224
; CHECKSYM-NEXT: Symbol {
247-
; CHECKSYM-NEXT: Index: [[#Index+16]]
225+
; CHECKSYM-NEXT: Index: [[#Index+14]]
248226
; CHECKSYM-NEXT: Name: foo_ext_weak_p
249227
; CHECKSYM-NEXT: Value (RelocatableAddress): 0x50
250228
; CHECKSYM-NEXT: Section: .data
251229
; CHECKSYM-NEXT: Type: 0x0
252230
; CHECKSYM-NEXT: StorageClass: C_EXT (0x2)
253231
; CHECKSYM-NEXT: NumberOfAuxEntries: 1
254232
; CHECKSYM-NEXT: CSECT Auxiliary Entry {
255-
; CHECKSYM-NEXT: Index: [[#Index+17]]
256-
; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#Index+14]]
233+
; CHECKSYM-NEXT: Index: [[#Index+15]]
234+
; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#Index+12]]
257235
; CHECKSYM-NEXT: ParameterHashIndex: 0x0
258236
; CHECKSYM-NEXT: TypeChkSectNum: 0x0
259237
; CHECKSYM-NEXT: SymbolAlignmentLog2: 0
@@ -265,7 +243,7 @@ declare extern_weak void @foo_ext_weak(ptr)
265243
; CHECKSYM-NEXT: }
266244
; CHECKSYM-NEXT: }
267245
; CHECKSYM-NEXT: Symbol {
268-
; CHECKSYM-NEXT: Index: [[#Index+18]]
246+
; CHECKSYM-NEXT: Index: [[#Index+16]]
269247
; CHECKSYM-NEXT: Name: main
270248
; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x54
271249
; CHECKSYM64-NEXT: Value (RelocatableAddress): 0x58
@@ -274,7 +252,7 @@ declare extern_weak void @foo_ext_weak(ptr)
274252
; CHECKSYM-NEXT: StorageClass: C_EXT (0x2)
275253
; CHECKSYM-NEXT: NumberOfAuxEntries: 1
276254
; CHECKSYM-NEXT: CSECT Auxiliary Entry {
277-
; CHECKSYM-NEXT: Index: [[#Index+19]]
255+
; CHECKSYM-NEXT: Index: [[#Index+17]]
278256
; CHECKSYM32-NEXT: SectionLen: 12
279257
; CHECKSYM64-NEXT: SectionLen: 24
280258
; CHECKSYM-NEXT: ParameterHashIndex: 0x0
@@ -289,7 +267,7 @@ declare extern_weak void @foo_ext_weak(ptr)
289267
; CHECKSYM-NEXT: }
290268
; CHECKSYM-NEXT: }
291269
; CHECKSYM-NEXT: Symbol {
292-
; CHECKSYM-NEXT: Index: [[#Index+20]]
270+
; CHECKSYM-NEXT: Index: [[#Index+18]]
293271
; CHECKSYM-NEXT: Name: TOC
294272
; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x60
295273
; CHECKSYM64-NEXT: Value (RelocatableAddress): 0x70
@@ -298,7 +276,7 @@ declare extern_weak void @foo_ext_weak(ptr)
298276
; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B)
299277
; CHECKSYM-NEXT: NumberOfAuxEntries: 1
300278
; CHECKSYM-NEXT: CSECT Auxiliary Entry {
301-
; CHECKSYM-NEXT: Index: [[#Index+21]]
279+
; CHECKSYM-NEXT: Index: [[#Index+19]]
302280
; CHECKSYM-NEXT: SectionLen: 0
303281
; CHECKSYM-NEXT: ParameterHashIndex: 0x0
304282
; CHECKSYM-NEXT: TypeChkSectNum: 0x0
@@ -311,7 +289,7 @@ declare extern_weak void @foo_ext_weak(ptr)
311289
; CHECKSYM-NEXT: }
312290
; CHECKSYM-NEXT: }
313291
; CHECKSYM-NEXT: Symbol {
314-
; CHECKSYM-NEXT: Index: [[#Index+22]]
292+
; CHECKSYM-NEXT: Index: [[#Index+20]]
315293
; CHECKSYM-NEXT: Name: foo_ext_weak_p
316294
; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x60
317295
; CHECKSYM64-NEXT: Value (RelocatableAddress): 0x70
@@ -320,7 +298,7 @@ declare extern_weak void @foo_ext_weak(ptr)
320298
; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B)
321299
; CHECKSYM-NEXT: NumberOfAuxEntries: 1
322300
; CHECKSYM-NEXT: CSECT Auxiliary Entry {
323-
; CHECKSYM-NEXT: Index: [[#Index+23]]
301+
; CHECKSYM-NEXT: Index: [[#Index+21]]
324302
; CHECKSYM32-NEXT: SectionLen: 4
325303
; CHECKSYM64-NEXT: SectionLen: 8
326304
; CHECKSYM-NEXT: ParameterHashIndex: 0x0
@@ -335,7 +313,7 @@ declare extern_weak void @foo_ext_weak(ptr)
335313
; CHECKSYM-NEXT: }
336314
; CHECKSYM-NEXT: }
337315
; CHECKSYM-NEXT: Symbol {
338-
; CHECKSYM-NEXT: Index: [[#Index+24]]
316+
; CHECKSYM-NEXT: Index: [[#Index+22]]
339317
; CHECKSYM-NEXT: Name: b_w
340318
; CHECKSYM32-NEXT: Value (RelocatableAddress): 0x64
341319
; CHECKSYM64-NEXT: Value (RelocatableAddress): 0x78
@@ -344,7 +322,7 @@ declare extern_weak void @foo_ext_weak(ptr)
344322
; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B)
345323
; CHECKSYM-NEXT: NumberOfAuxEntries: 1
346324
; CHECKSYM-NEXT: CSECT Auxiliary Entry {
347-
; CHECKSYM-NEXT: Index: [[#Index+25]]
325+
; CHECKSYM-NEXT: Index: [[#Index+23]]
348326
; CHECKSYM32-NEXT: SectionLen: 4
349327
; CHECKSYM64-NEXT: SectionLen: 8
350328
; CHECKSYM-NEXT: ParameterHashIndex: 0x0

0 commit comments

Comments
 (0)