7
7
// ===----------------------------------------------------------------------===//
8
8
9
9
#include " MCTargetDesc/X86FixupKinds.h"
10
- #include " MCTargetDesc/X86MCExpr .h"
10
+ #include " MCTargetDesc/X86MCAsmInfo .h"
11
11
#include " MCTargetDesc/X86MCTargetDesc.h"
12
12
#include " llvm/BinaryFormat/ELF.h"
13
13
#include " llvm/MC/MCAsmInfo.h"
@@ -39,10 +39,10 @@ class X86ELFObjectWriter : public MCELFObjectTargetWriter {
39
39
40
40
void checkIs32 (SMLoc Loc, X86_64RelType Type) const ;
41
41
void checkIs64 (SMLoc Loc, X86_64RelType Type) const ;
42
- unsigned getRelocType32 (SMLoc Loc, X86MCExpr ::Specifier Specifier,
42
+ unsigned getRelocType32 (SMLoc Loc, X86 ::Specifier Specifier,
43
43
X86_32RelType Type, bool IsPCRel,
44
44
MCFixupKind Kind) const ;
45
- unsigned getRelocType64 (SMLoc Loc, X86MCExpr ::Specifier Specifier,
45
+ unsigned getRelocType64 (SMLoc Loc, X86 ::Specifier Specifier,
46
46
X86_64RelType Type, bool IsPCRel,
47
47
MCFixupKind Kind) const ;
48
48
};
@@ -57,8 +57,8 @@ X86ELFObjectWriter::X86ELFObjectWriter(bool IsELF64, uint8_t OSABI,
57
57
(EMachine != ELF::EM_386) &&
58
58
(EMachine != ELF::EM_IAMCU)) {}
59
59
60
- static X86_64RelType getType64 (MCFixupKind Kind,
61
- X86MCExpr::Specifier &Specifier, bool &IsPCRel) {
60
+ static X86_64RelType getType64 (MCFixupKind Kind, X86::Specifier &Specifier,
61
+ bool &IsPCRel) {
62
62
switch (unsigned (Kind)) {
63
63
default :
64
64
llvm_unreachable (" Unimplemented" );
@@ -68,11 +68,11 @@ static X86_64RelType getType64(MCFixupKind Kind,
68
68
return RT64_64;
69
69
case X86::reloc_signed_4byte:
70
70
case X86::reloc_signed_4byte_relax:
71
- if (Specifier == X86MCExpr::VK_None && !IsPCRel)
71
+ if (Specifier == X86::S_None && !IsPCRel)
72
72
return RT64_32S;
73
73
return RT64_32;
74
74
case X86::reloc_global_offset_table:
75
- Specifier = X86MCExpr::VK_GOT ;
75
+ Specifier = X86::S_GOT ;
76
76
IsPCRel = true ;
77
77
return RT64_32;
78
78
case FK_Data_4:
@@ -86,7 +86,7 @@ static X86_64RelType getType64(MCFixupKind Kind,
86
86
case X86::reloc_riprel_4byte_relax_evex:
87
87
return RT64_32;
88
88
case X86::reloc_branch_4byte_pcrel:
89
- Specifier = X86MCExpr::VK_PLT ;
89
+ Specifier = X86::S_PLT ;
90
90
return RT64_32;
91
91
case FK_PCRel_2:
92
92
case FK_Data_2:
@@ -107,18 +107,17 @@ void X86ELFObjectWriter::checkIs64(SMLoc Loc, X86_64RelType Type) const {
107
107
reportError (Loc, " 64 bit reloc applied to a field with a different size" );
108
108
}
109
109
110
- unsigned X86ELFObjectWriter::getRelocType64 (SMLoc Loc,
111
- X86MCExpr::Specifier Specifier,
110
+ unsigned X86ELFObjectWriter::getRelocType64 (SMLoc Loc, X86::Specifier Specifier,
112
111
X86_64RelType Type, bool IsPCRel,
113
112
MCFixupKind Kind) const {
114
113
switch (Specifier) {
115
114
default :
116
115
llvm_unreachable (" Unimplemented" );
117
- case X86MCExpr::VK_None :
118
- case X86MCExpr::VK_ABS8 :
116
+ case X86::S_None :
117
+ case X86::S_ABS8 :
119
118
switch (Type) {
120
119
case RT64_NONE:
121
- if (Specifier == X86MCExpr::VK_None )
120
+ if (Specifier == X86::S_None )
122
121
return ELF::R_X86_64_NONE;
123
122
llvm_unreachable (" Unimplemented" );
124
123
case RT64_64:
@@ -133,7 +132,7 @@ unsigned X86ELFObjectWriter::getRelocType64(SMLoc Loc,
133
132
return IsPCRel ? ELF::R_X86_64_PC8 : ELF::R_X86_64_8;
134
133
}
135
134
llvm_unreachable (" unexpected relocation type!" );
136
- case X86MCExpr::VK_GOT :
135
+ case X86::S_GOT :
137
136
switch (Type) {
138
137
case RT64_64:
139
138
return IsPCRel ? ELF::R_X86_64_GOTPC64 : ELF::R_X86_64_GOT64;
@@ -146,12 +145,12 @@ unsigned X86ELFObjectWriter::getRelocType64(SMLoc Loc,
146
145
llvm_unreachable (" Unimplemented" );
147
146
}
148
147
llvm_unreachable (" unexpected relocation type!" );
149
- case X86MCExpr::VK_GOTOFF :
148
+ case X86::S_GOTOFF :
150
149
assert (!IsPCRel);
151
150
if (Type != RT64_64)
152
151
reportError (Loc, " unsupported relocation type" );
153
152
return ELF::R_X86_64_GOTOFF64;
154
- case X86MCExpr::VK_TPOFF :
153
+ case X86::S_TPOFF :
155
154
assert (!IsPCRel);
156
155
switch (Type) {
157
156
case RT64_64:
@@ -165,7 +164,7 @@ unsigned X86ELFObjectWriter::getRelocType64(SMLoc Loc,
165
164
llvm_unreachable (" Unimplemented" );
166
165
}
167
166
llvm_unreachable (" unexpected relocation type!" );
168
- case X86MCExpr::VK_DTPOFF :
167
+ case X86::S_DTPOFF :
169
168
assert (!IsPCRel);
170
169
switch (Type) {
171
170
case RT64_64:
@@ -179,7 +178,7 @@ unsigned X86ELFObjectWriter::getRelocType64(SMLoc Loc,
179
178
llvm_unreachable (" Unimplemented" );
180
179
}
181
180
llvm_unreachable (" unexpected relocation type!" );
182
- case X86MCExpr::VK_SIZE :
181
+ case X86::S_SIZE :
183
182
assert (!IsPCRel);
184
183
switch (Type) {
185
184
case RT64_64:
@@ -193,30 +192,30 @@ unsigned X86ELFObjectWriter::getRelocType64(SMLoc Loc,
193
192
llvm_unreachable (" Unimplemented" );
194
193
}
195
194
llvm_unreachable (" unexpected relocation type!" );
196
- case X86MCExpr::VK_TLSCALL :
195
+ case X86::S_TLSCALL :
197
196
return ELF::R_X86_64_TLSDESC_CALL;
198
- case X86MCExpr::VK_TLSDESC :
197
+ case X86::S_TLSDESC :
199
198
return ((unsigned )Kind == X86::reloc_riprel_4byte_relax_rex2)
200
199
? ELF::R_X86_64_CODE_4_GOTPC32_TLSDESC
201
200
: ELF::R_X86_64_GOTPC32_TLSDESC;
202
- case X86MCExpr::VK_TLSGD :
201
+ case X86::S_TLSGD :
203
202
checkIs32 (Loc, Type);
204
203
return ELF::R_X86_64_TLSGD;
205
- case X86MCExpr::VK_GOTTPOFF :
204
+ case X86::S_GOTTPOFF :
206
205
checkIs32 (Loc, Type);
207
206
if ((unsigned )Kind == X86::reloc_riprel_4byte_movq_load_rex2 ||
208
207
(unsigned )Kind == X86::reloc_riprel_4byte_relax_rex2)
209
208
return ELF::R_X86_64_CODE_4_GOTTPOFF;
210
209
else if ((unsigned )Kind == X86::reloc_riprel_4byte_relax_evex)
211
210
return ELF::R_X86_64_CODE_6_GOTTPOFF;
212
211
return ELF::R_X86_64_GOTTPOFF;
213
- case X86MCExpr::VK_TLSLD :
212
+ case X86::S_TLSLD :
214
213
checkIs32 (Loc, Type);
215
214
return ELF::R_X86_64_TLSLD;
216
- case X86MCExpr::VK_PLT :
215
+ case X86::S_PLT :
217
216
checkIs32 (Loc, Type);
218
217
return ELF::R_X86_64_PLT32;
219
- case X86MCExpr::VK_GOTPCREL :
218
+ case X86::S_GOTPCREL :
220
219
checkIs32 (Loc, Type);
221
220
// Older versions of ld.bfd/ld.gold/lld
222
221
// do not support GOTPCRELX/REX_GOTPCRELX/CODE_4_GOTPCRELX,
@@ -236,27 +235,26 @@ unsigned X86ELFObjectWriter::getRelocType64(SMLoc Loc,
236
235
return ELF::R_X86_64_CODE_4_GOTPCRELX;
237
236
}
238
237
llvm_unreachable (" unexpected relocation type!" );
239
- case X86MCExpr::VK_GOTPCREL_NORELAX :
238
+ case X86::S_GOTPCREL_NORELAX :
240
239
checkIs32 (Loc, Type);
241
240
return ELF::R_X86_64_GOTPCREL;
242
- case X86MCExpr::VK_PLTOFF :
241
+ case X86::S_PLTOFF :
243
242
checkIs64 (Loc, Type);
244
243
return ELF::R_X86_64_PLTOFF64;
245
244
}
246
245
}
247
246
248
- unsigned X86ELFObjectWriter::getRelocType32 (SMLoc Loc,
249
- X86MCExpr::Specifier Specifier,
247
+ unsigned X86ELFObjectWriter::getRelocType32 (SMLoc Loc, X86::Specifier Specifier,
250
248
X86_32RelType Type, bool IsPCRel,
251
249
MCFixupKind Kind) const {
252
250
switch (Specifier) {
253
251
default :
254
252
llvm_unreachable (" Unimplemented" );
255
- case X86MCExpr::VK_None :
256
- case X86MCExpr::VK_ABS8 :
253
+ case X86::S_None :
254
+ case X86::S_ABS8 :
257
255
switch (Type) {
258
256
case RT32_NONE:
259
- if (Specifier == X86MCExpr::VK_None )
257
+ if (Specifier == X86::S_None )
260
258
return ELF::R_386_NONE;
261
259
llvm_unreachable (" Unimplemented" );
262
260
case RT32_32:
@@ -267,7 +265,7 @@ unsigned X86ELFObjectWriter::getRelocType32(SMLoc Loc,
267
265
return IsPCRel ? ELF::R_386_PC8 : ELF::R_386_8;
268
266
}
269
267
llvm_unreachable (" unexpected relocation type!" );
270
- case X86MCExpr::VK_GOT :
268
+ case X86::S_GOT :
271
269
if (Type != RT32_32)
272
270
break ;
273
271
if (IsPCRel)
@@ -280,55 +278,55 @@ unsigned X86ELFObjectWriter::getRelocType32(SMLoc Loc,
280
278
return Kind == MCFixupKind (X86::reloc_signed_4byte_relax)
281
279
? ELF::R_386_GOT32X
282
280
: ELF::R_386_GOT32;
283
- case X86MCExpr::VK_GOTOFF :
281
+ case X86::S_GOTOFF :
284
282
assert (!IsPCRel);
285
283
if (Type != RT32_32)
286
284
break ;
287
285
return ELF::R_386_GOTOFF;
288
- case X86MCExpr::VK_TLSCALL :
286
+ case X86::S_TLSCALL :
289
287
return ELF::R_386_TLS_DESC_CALL;
290
- case X86MCExpr::VK_TLSDESC :
288
+ case X86::S_TLSDESC :
291
289
return ELF::R_386_TLS_GOTDESC;
292
- case X86MCExpr::VK_TPOFF :
290
+ case X86::S_TPOFF :
293
291
if (Type != RT32_32)
294
292
break ;
295
293
assert (!IsPCRel);
296
294
return ELF::R_386_TLS_LE_32;
297
- case X86MCExpr::VK_DTPOFF :
295
+ case X86::S_DTPOFF :
298
296
if (Type != RT32_32)
299
297
break ;
300
298
assert (!IsPCRel);
301
299
return ELF::R_386_TLS_LDO_32;
302
- case X86MCExpr::VK_TLSGD :
300
+ case X86::S_TLSGD :
303
301
if (Type != RT32_32)
304
302
break ;
305
303
assert (!IsPCRel);
306
304
return ELF::R_386_TLS_GD;
307
- case X86MCExpr::VK_GOTTPOFF :
305
+ case X86::S_GOTTPOFF :
308
306
if (Type != RT32_32)
309
307
break ;
310
308
assert (!IsPCRel);
311
309
return ELF::R_386_TLS_IE_32;
312
- case X86MCExpr::VK_PLT :
310
+ case X86::S_PLT :
313
311
if (Type != RT32_32)
314
312
break ;
315
313
return ELF::R_386_PLT32;
316
- case X86MCExpr::VK_INDNTPOFF :
314
+ case X86::S_INDNTPOFF :
317
315
if (Type != RT32_32)
318
316
break ;
319
317
assert (!IsPCRel);
320
318
return ELF::R_386_TLS_IE;
321
- case X86MCExpr::VK_NTPOFF :
319
+ case X86::S_NTPOFF :
322
320
if (Type != RT32_32)
323
321
break ;
324
322
assert (!IsPCRel);
325
323
return ELF::R_386_TLS_LE;
326
- case X86MCExpr::VK_GOTNTPOFF :
324
+ case X86::S_GOTNTPOFF :
327
325
if (Type != RT32_32)
328
326
break ;
329
327
assert (!IsPCRel);
330
328
return ELF::R_386_TLS_GOTIE;
331
- case X86MCExpr::VK_TLSLDM :
329
+ case X86::S_TLSLDM :
332
330
if (Type != RT32_32)
333
331
break ;
334
332
assert (!IsPCRel);
@@ -342,19 +340,19 @@ unsigned X86ELFObjectWriter::getRelocType(const MCFixup &Fixup,
342
340
const MCValue &Target,
343
341
bool IsPCRel) const {
344
342
MCFixupKind Kind = Fixup.getKind ();
345
- auto Specifier = X86MCExpr ::Specifier (Target.getSpecifier ());
343
+ auto Specifier = X86 ::Specifier (Target.getSpecifier ());
346
344
switch (Specifier) {
347
- case X86MCExpr::VK_GOTTPOFF :
348
- case X86MCExpr::VK_INDNTPOFF :
349
- case X86MCExpr::VK_NTPOFF :
350
- case X86MCExpr::VK_GOTNTPOFF :
351
- case X86MCExpr::VK_TLSCALL :
352
- case X86MCExpr::VK_TLSDESC :
353
- case X86MCExpr::VK_TLSGD :
354
- case X86MCExpr::VK_TLSLD :
355
- case X86MCExpr::VK_TLSLDM :
356
- case X86MCExpr::VK_TPOFF :
357
- case X86MCExpr::VK_DTPOFF :
345
+ case X86::S_GOTTPOFF :
346
+ case X86::S_INDNTPOFF :
347
+ case X86::S_NTPOFF :
348
+ case X86::S_GOTNTPOFF :
349
+ case X86::S_TLSCALL :
350
+ case X86::S_TLSDESC :
351
+ case X86::S_TLSGD :
352
+ case X86::S_TLSLD :
353
+ case X86::S_TLSLDM :
354
+ case X86::S_TPOFF :
355
+ case X86::S_DTPOFF :
358
356
if (auto *S = Target.getAddSym ())
359
357
cast<MCSymbolELF>(S)->setType (ELF::STT_TLS);
360
358
break ;
@@ -393,10 +391,10 @@ unsigned X86ELFObjectWriter::getRelocType(const MCFixup &Fixup,
393
391
bool X86ELFObjectWriter::needsRelocateWithSymbol (const MCValue &V,
394
392
unsigned Type) const {
395
393
switch (V.getSpecifier ()) {
396
- case X86MCExpr::VK_GOT :
397
- case X86MCExpr::VK_PLT :
398
- case X86MCExpr::VK_GOTPCREL :
399
- case X86MCExpr::VK_GOTPCREL_NORELAX :
394
+ case X86::S_GOT :
395
+ case X86::S_PLT :
396
+ case X86::S_GOTPCREL :
397
+ case X86::S_GOTPCREL_NORELAX :
400
398
return true ;
401
399
default :
402
400
return false ;
0 commit comments