Skip to content

Commit ac741f9

Browse files
committed
[XCOFF][AIX] Fix for missing of undefined symbols from symbol table
Summary: When we use undefined symbol with its qualname, we are not able to generate that symbol because of the logic of early "continue" that skip the qualname symbol. This patch fixes it. Differential revision: https://reviews.llvm.org/D71667
1 parent df2e2ab commit ac741f9

File tree

2 files changed

+107
-29
lines changed

2 files changed

+107
-29
lines changed

llvm/lib/MC/XCOFFObjectWriter.cpp

+7-7
Original file line numberDiff line numberDiff line change
@@ -317,21 +317,21 @@ void XCOFFObjectWriter::executePostLayoutBinding(MCAssembler &Asm,
317317
// Nothing to do for temporary symbols.
318318
if (S.isTemporary())
319319
continue;
320-
const MCSymbolXCOFF *XSym = cast<MCSymbolXCOFF>(&S);
321320

322-
// Map the symbol into its containing csect.
321+
const MCSymbolXCOFF *XSym = cast<MCSymbolXCOFF>(&S);
323322
const MCSectionXCOFF *ContainingCsect = XSym->getContainingCsect();
324323

324+
// Handle undefined symbol.
325+
if (ContainingCsect->getCSectType() == XCOFF::XTY_ER) {
326+
UndefinedCsects.emplace_back(ContainingCsect);
327+
continue;
328+
}
329+
325330
// If the symbol is the csect itself, we don't need to put the symbol
326331
// into csect's Syms.
327332
if (XSym == ContainingCsect->getQualNameSymbol())
328333
continue;
329334

330-
if (XSym->isUndefined(false)) {
331-
UndefinedCsects.emplace_back(ContainingCsect);
332-
continue;
333-
}
334-
335335
assert(WrapperMap.find(ContainingCsect) != WrapperMap.end() &&
336336
"Expected containing csect to exist in map");
337337

llvm/test/CodeGen/PowerPC/aix-xcoff-toc.ll

+100-22
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mtriple powerpc-ibm-aix-xcoff < %s | FileCheck --check-prefixes CHECK,CHECK32 %s
2-
; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mtriple powerpc64-ibm-aix-xcoff < %s 2>&1 | FileCheck --check-prefixes CHECK,CHECK64 %s
1+
; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc-ibm-aix-xcoff < %s | FileCheck --check-prefixes CHECK,CHECK32 %s
2+
; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc64-ibm-aix-xcoff < %s 2>&1 | FileCheck --check-prefixes CHECK,CHECK64 %s
33

4-
; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mtriple powerpc-ibm-aix-xcoff -filetype=obj -o %t.o < %s
4+
; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc-ibm-aix-xcoff -filetype=obj -o %t.o < %s
55
; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefix=SYM %s
66

7-
; RUN: not llc -verify-machineinstrs -mcpu=pwr7 -mtriple powerpc64-ibm-aix-xcoff -filetype=obj -o %t.o 2>&1 \
7+
; RUN: not llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc64-ibm-aix-xcoff -filetype=obj -o %t.o 2>&1 \
88
; RUN: < %s | FileCheck --check-prefix=XCOFF64 %s
99
; XCOFF64: LLVM ERROR: 64-bit XCOFF object files are not supported yet.
1010

@@ -70,14 +70,92 @@ define void @foobar() {
7070
; CHECK-NEXT: .tc foobar[TC],foobar[DS]
7171

7272
; SYM: File: {{.*}}aix-xcoff-toc.ll.tmp.o
73-
; SYM: Symbol {{[{][[:space:]] *}}Index: [[#INDX:]]{{[[:space:]] *}}Name: TOC
73+
; SYM: Symbol {{[{][[:space:]] *}}Index: [[#UNDEF_INDX:]]{{[[:space:]] *}}Name: a
74+
; SYM-NEXT: Value (RelocatableAddress): 0x0
75+
; SYM-NEXT: Section: N_UNDEF
76+
; SYM-NEXT: Type: 0x0
77+
; SYM-NEXT: StorageClass: C_EXT (0x2)
78+
; SYM-NEXT: NumberOfAuxEntries: 1
79+
; SYM-NEXT: CSECT Auxiliary Entry {
80+
; SYM-NEXT: Index: [[#UNDEF_INDX+1]]
81+
; SYM-NEXT: SectionLen: 0
82+
; SYM-NEXT: ParameterHashIndex: 0x0
83+
; SYM-NEXT: TypeChkSectNum: 0x0
84+
; SYM-NEXT: SymbolAlignmentLog2: 0
85+
; SYM-NEXT: SymbolType: XTY_ER (0x0)
86+
; SYM-NEXT: StorageMappingClass: XMC_UA (0x4)
87+
; SYM-NEXT: StabInfoIndex: 0x0
88+
; SYM-NEXT: StabSectNum: 0x0
89+
; SYM-NEXT: }
90+
; SYM-NEXT: }
91+
; SYM-NEXT: Symbol {
92+
; SYM-NEXT: Index: [[#UNDEF_INDX+2]]
93+
; SYM-NEXT: Name: b
94+
; SYM-NEXT: Value (RelocatableAddress): 0x0
95+
; SYM-NEXT: Section: N_UNDEF
96+
; SYM-NEXT: Type: 0x0
97+
; SYM-NEXT: StorageClass: C_EXT (0x2)
98+
; SYM-NEXT: NumberOfAuxEntries: 1
99+
; SYM-NEXT: CSECT Auxiliary Entry {
100+
; SYM-NEXT: Index: [[#UNDEF_INDX+3]]
101+
; SYM-NEXT: SectionLen: 0
102+
; SYM-NEXT: ParameterHashIndex: 0x0
103+
; SYM-NEXT: TypeChkSectNum: 0x0
104+
; SYM-NEXT: SymbolAlignmentLog2: 0
105+
; SYM-NEXT: SymbolType: XTY_ER (0x0)
106+
; SYM-NEXT: StorageMappingClass: XMC_UA (0x4)
107+
; SYM-NEXT: StabInfoIndex: 0x0
108+
; SYM-NEXT: StabSectNum: 0x0
109+
; SYM-NEXT: }
110+
; SYM-NEXT: }
111+
; SYM-NEXT: Symbol {
112+
; SYM-NEXT: Index: [[#UNDEF_INDX+4]]
113+
; SYM-NEXT: Name: c
114+
; SYM-NEXT: Value (RelocatableAddress): 0x0
115+
; SYM-NEXT: Section: N_UNDEF
116+
; SYM-NEXT: Type: 0x0
117+
; SYM-NEXT: StorageClass: C_EXT (0x2)
118+
; SYM-NEXT: NumberOfAuxEntries: 1
119+
; SYM-NEXT: CSECT Auxiliary Entry {
120+
; SYM-NEXT: Index: [[#UNDEF_INDX+5]]
121+
; SYM-NEXT: SectionLen: 0
122+
; SYM-NEXT: ParameterHashIndex: 0x0
123+
; SYM-NEXT: TypeChkSectNum: 0x0
124+
; SYM-NEXT: SymbolAlignmentLog2: 0
125+
; SYM-NEXT: SymbolType: XTY_ER (0x0)
126+
; SYM-NEXT: StorageMappingClass: XMC_UA (0x4)
127+
; SYM-NEXT: StabInfoIndex: 0x0
128+
; SYM-NEXT: StabSectNum: 0x0
129+
; SYM-NEXT: }
130+
; SYM-NEXT: }
131+
; SYM-NEXT: Symbol {
132+
; SYM-NEXT: Index: [[#UNDEF_INDX+6]]
133+
; SYM-NEXT: Name: foo
134+
; SYM-NEXT: Value (RelocatableAddress): 0x0
135+
; SYM-NEXT: Section: N_UNDEF
136+
; SYM-NEXT: Type: 0x0
137+
; SYM-NEXT: StorageClass: C_EXT (0x2)
138+
; SYM-NEXT: NumberOfAuxEntries: 1
139+
; SYM-NEXT: CSECT Auxiliary Entry {
140+
; SYM-NEXT: Index: [[#UNDEF_INDX+7]]
141+
; SYM-NEXT: SectionLen: 0
142+
; SYM-NEXT: ParameterHashIndex: 0x0
143+
; SYM-NEXT: TypeChkSectNum: 0x0
144+
; SYM-NEXT: SymbolAlignmentLog2: 0
145+
; SYM-NEXT: SymbolType: XTY_ER (0x0)
146+
; SYM-NEXT: StorageMappingClass: XMC_DS (0xA)
147+
; SYM-NEXT: StabInfoIndex: 0x0
148+
; SYM-NEXT: StabSectNum: 0x0
149+
; SYM-NEXT: }
150+
; SYM-NEXT: }
151+
; SYM: Symbol {{[{][[:space:]] *}}Index: [[#TOC_INDX:]]{{[[:space:]] *}}Name: TOC
74152
; SYM-NEXT: Value (RelocatableAddress): 0xA8
75153
; SYM-NEXT: Section: .data
76154
; SYM-NEXT: Type: 0x0
77155
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
78156
; SYM-NEXT: NumberOfAuxEntries: 1
79157
; SYM-NEXT: CSECT Auxiliary Entry {
80-
; SYM-NEXT: Index: [[#INDX+1]]
158+
; SYM-NEXT: Index: [[#TOC_INDX+1]]
81159
; SYM-NEXT: SectionLen: 0
82160
; SYM-NEXT: ParameterHashIndex: 0x0
83161
; SYM-NEXT: TypeChkSectNum: 0x0
@@ -89,15 +167,15 @@ define void @foobar() {
89167
; SYM-NEXT: }
90168
; SYM-NEXT: }
91169
; SYM-NEXT: Symbol {
92-
; SYM-NEXT: Index: [[#INDX+2]]
170+
; SYM-NEXT: Index: [[#TOC_INDX+2]]
93171
; SYM-NEXT: Name: a
94172
; SYM-NEXT: Value (RelocatableAddress): 0xA8
95173
; SYM-NEXT: Section: .data
96174
; SYM-NEXT: Type: 0x0
97175
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
98176
; SYM-NEXT: NumberOfAuxEntries: 1
99177
; SYM-NEXT: CSECT Auxiliary Entry {
100-
; SYM-NEXT: Index: [[#INDX+3]]
178+
; SYM-NEXT: Index: [[#TOC_INDX+3]]
101179
; SYM-NEXT: SectionLen: 4
102180
; SYM-NEXT: ParameterHashIndex: 0x0
103181
; SYM-NEXT: TypeChkSectNum: 0x0
@@ -109,15 +187,15 @@ define void @foobar() {
109187
; SYM-NEXT: }
110188
; SYM-NEXT: }
111189
; SYM-NEXT: Symbol {
112-
; SYM-NEXT: Index: [[#INDX+4]]
190+
; SYM-NEXT: Index: [[#TOC_INDX+4]]
113191
; SYM-NEXT: Name: b
114192
; SYM-NEXT: Value (RelocatableAddress): 0xAC
115193
; SYM-NEXT: Section: .data
116194
; SYM-NEXT: Type: 0x0
117195
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
118196
; SYM-NEXT: NumberOfAuxEntries: 1
119197
; SYM-NEXT: CSECT Auxiliary Entry {
120-
; SYM-NEXT: Index: [[#INDX+5]]
198+
; SYM-NEXT: Index: [[#TOC_INDX+5]]
121199
; SYM-NEXT: SectionLen: 4
122200
; SYM-NEXT: ParameterHashIndex: 0x0
123201
; SYM-NEXT: TypeChkSectNum: 0x0
@@ -129,15 +207,15 @@ define void @foobar() {
129207
; SYM-NEXT: }
130208
; SYM-NEXT: }
131209
; SYM-NEXT: Symbol {
132-
; SYM-NEXT: Index: [[#INDX+6]]
210+
; SYM-NEXT: Index: [[#TOC_INDX+6]]
133211
; SYM-NEXT: Name: c
134212
; SYM-NEXT: Value (RelocatableAddress): 0xB0
135213
; SYM-NEXT: Section: .data
136214
; SYM-NEXT: Type: 0x0
137215
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
138216
; SYM-NEXT: NumberOfAuxEntries: 1
139217
; SYM-NEXT: CSECT Auxiliary Entry {
140-
; SYM-NEXT: Index: [[#INDX+7]]
218+
; SYM-NEXT: Index: [[#TOC_INDX+7]]
141219
; SYM-NEXT: SectionLen: 4
142220
; SYM-NEXT: ParameterHashIndex: 0x0
143221
; SYM-NEXT: TypeChkSectNum: 0x0
@@ -149,15 +227,15 @@ define void @foobar() {
149227
; SYM-NEXT: }
150228
; SYM-NEXT: }
151229
; SYM-NEXT: Symbol {
152-
; SYM-NEXT: Index: [[#INDX+8]]
230+
; SYM-NEXT: Index: [[#TOC_INDX+8]]
153231
; SYM-NEXT: Name: globa
154232
; SYM-NEXT: Value (RelocatableAddress): 0xB4
155233
; SYM-NEXT: Section: .data
156234
; SYM-NEXT: Type: 0x0
157235
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
158236
; SYM-NEXT: NumberOfAuxEntries: 1
159237
; SYM-NEXT: CSECT Auxiliary Entry {
160-
; SYM-NEXT: Index: [[#INDX+9]]
238+
; SYM-NEXT: Index: [[#TOC_INDX+9]]
161239
; SYM-NEXT: SectionLen: 4
162240
; SYM-NEXT: ParameterHashIndex: 0x0
163241
; SYM-NEXT: TypeChkSectNum: 0x0
@@ -169,15 +247,15 @@ define void @foobar() {
169247
; SYM-NEXT: }
170248
; SYM-NEXT: }
171249
; SYM-NEXT: Symbol {
172-
; SYM-NEXT: Index: [[#INDX+10]]
250+
; SYM-NEXT: Index: [[#TOC_INDX+10]]
173251
; SYM-NEXT: Name: ptr
174252
; SYM-NEXT: Value (RelocatableAddress): 0xB8
175253
; SYM-NEXT: Section: .data
176254
; SYM-NEXT: Type: 0x0
177255
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
178256
; SYM-NEXT: NumberOfAuxEntries: 1
179257
; SYM-NEXT: CSECT Auxiliary Entry {
180-
; SYM-NEXT: Index: [[#INDX+11]]
258+
; SYM-NEXT: Index: [[#TOC_INDX+11]]
181259
; SYM-NEXT: SectionLen: 4
182260
; SYM-NEXT: ParameterHashIndex: 0x0
183261
; SYM-NEXT: TypeChkSectNum: 0x0
@@ -189,15 +267,15 @@ define void @foobar() {
189267
; SYM-NEXT: }
190268
; SYM-NEXT: }
191269
; SYM-NEXT: Symbol {
192-
; SYM-NEXT: Index: [[#INDX+12]]
270+
; SYM-NEXT: Index: [[#TOC_INDX+12]]
193271
; SYM-NEXT: Name: bar
194272
; SYM-NEXT: Value (RelocatableAddress): 0xBC
195273
; SYM-NEXT: Section: .data
196274
; SYM-NEXT: Type: 0x0
197275
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
198276
; SYM-NEXT: NumberOfAuxEntries: 1
199277
; SYM-NEXT: CSECT Auxiliary Entry {
200-
; SYM-NEXT: Index: [[#INDX+13]]
278+
; SYM-NEXT: Index: [[#TOC_INDX+13]]
201279
; SYM-NEXT: SectionLen: 4
202280
; SYM-NEXT: ParameterHashIndex: 0x0
203281
; SYM-NEXT: TypeChkSectNum: 0x0
@@ -209,15 +287,15 @@ define void @foobar() {
209287
; SYM-NEXT: }
210288
; SYM-NEXT: }
211289
; SYM-NEXT: Symbol {
212-
; SYM-NEXT: Index: [[#INDX+14]]
290+
; SYM-NEXT: Index: [[#TOC_INDX+14]]
213291
; SYM-NEXT: Name: foo
214292
; SYM-NEXT: Value (RelocatableAddress): 0xC0
215293
; SYM-NEXT: Section: .data
216294
; SYM-NEXT: Type: 0x0
217295
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
218296
; SYM-NEXT: NumberOfAuxEntries: 1
219297
; SYM-NEXT: CSECT Auxiliary Entry {
220-
; SYM-NEXT: Index: [[#INDX+15]]
298+
; SYM-NEXT: Index: [[#TOC_INDX+15]]
221299
; SYM-NEXT: SectionLen: 4
222300
; SYM-NEXT: ParameterHashIndex: 0x0
223301
; SYM-NEXT: TypeChkSectNum: 0x0
@@ -229,15 +307,15 @@ define void @foobar() {
229307
; SYM-NEXT: }
230308
; SYM-NEXT: }
231309
; SYM-NEXT: Symbol {
232-
; SYM-NEXT: Index: [[#INDX+16]]
310+
; SYM-NEXT: Index: [[#TOC_INDX+16]]
233311
; SYM-NEXT: Name: foobar
234312
; SYM-NEXT: Value (RelocatableAddress): 0xC4
235313
; SYM-NEXT: Section: .data
236314
; SYM-NEXT: Type: 0x0
237315
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
238316
; SYM-NEXT: NumberOfAuxEntries: 1
239317
; SYM-NEXT: CSECT Auxiliary Entry {
240-
; SYM-NEXT: Index: [[#INDX+17]]
318+
; SYM-NEXT: Index: [[#TOC_INDX+17]]
241319
; SYM-NEXT: SectionLen: 4
242320
; SYM-NEXT: ParameterHashIndex: 0x0
243321
; SYM-NEXT: TypeChkSectNum: 0x0

0 commit comments

Comments
 (0)