Skip to content

Commit e820af6

Browse files
author
git apple-llvm automerger
committed
Merge commit 'b19b6d9fab0b' from llvm.org/main into next
2 parents 7383c6f + b19b6d9 commit e820af6

File tree

12 files changed

+149
-107
lines changed

12 files changed

+149
-107
lines changed

llvm/include/llvm/MC/MCExpr.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -197,20 +197,14 @@ class MCSymbolRefExpr : public MCExpr {
197197
VK_None,
198198

199199
VK_GOT,
200-
VK_GOTENT,
201200
VK_GOTOFF,
202201
VK_GOTPCREL,
203202
VK_GOTTPOFF,
204-
VK_INDNTPOFF,
205-
VK_NTPOFF,
206203
VK_PLT,
207204
VK_TLSGD,
208205
VK_TLSLD,
209206
VK_TLSLDM,
210207
VK_TPOFF,
211-
VK_DTPOFF,
212-
VK_TLSCALL, // symbol(tlscall)
213-
VK_TLSDESC, // symbol(tlsdesc)
214208
VK_TLVP, // Mach-O thread local variable relocations
215209
VK_TLVPPAGE,
216210
VK_TLVPPAGEOFF,

llvm/lib/MC/ELFObjectWriter.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1523,15 +1523,10 @@ void ELFObjectWriter::fixSymbolsInTLSFixups(MCAssembler &Asm,
15231523
default:
15241524
return;
15251525
case MCSymbolRefExpr::VK_GOTTPOFF:
1526-
case MCSymbolRefExpr::VK_INDNTPOFF:
1527-
case MCSymbolRefExpr::VK_NTPOFF:
1528-
case MCSymbolRefExpr::VK_TLSCALL:
1529-
case MCSymbolRefExpr::VK_TLSDESC:
15301526
case MCSymbolRefExpr::VK_TLSGD:
15311527
case MCSymbolRefExpr::VK_TLSLD:
15321528
case MCSymbolRefExpr::VK_TLSLDM:
15331529
case MCSymbolRefExpr::VK_TPOFF:
1534-
case MCSymbolRefExpr::VK_DTPOFF:
15351530
break;
15361531
}
15371532
Asm.registerSymbol(symRef.getSymbol());

llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#include "MCTargetDesc/SystemZGNUInstPrinter.h"
1010
#include "MCTargetDesc/SystemZMCAsmInfo.h"
11+
#include "MCTargetDesc/SystemZMCExpr.h"
1112
#include "MCTargetDesc/SystemZMCTargetDesc.h"
1213
#include "MCTargetDesc/SystemZTargetStreamer.h"
1314
#include "TargetInfo/SystemZTargetInfo.h"
@@ -1668,12 +1669,12 @@ ParseStatus SystemZAsmParser::parsePCRel(OperandVector &Operands,
16681669
if (Parser.getTok().isNot(AsmToken::Identifier))
16691670
return Error(Parser.getTok().getLoc(), "unexpected token");
16701671

1671-
MCSymbolRefExpr::VariantKind Kind = MCSymbolRefExpr::VK_None;
1672+
SystemZMCExpr::Specifier Kind = SystemZMCExpr::VK_None;
16721673
StringRef Name = Parser.getTok().getString();
16731674
if (Name == "tls_gdcall")
1674-
Kind = MCSymbolRefExpr::VK_TLSGD;
1675+
Kind = SystemZMCExpr::VK_TLSGD;
16751676
else if (Name == "tls_ldcall")
1676-
Kind = MCSymbolRefExpr::VK_TLSLDM;
1677+
Kind = SystemZMCExpr::VK_TLSLDM;
16771678
else
16781679
return Error(Parser.getTok().getLoc(), "unknown TLS tag");
16791680
Parser.Lex();

llvm/lib/Target/SystemZ/MCTargetDesc/SystemZELFObjectWriter.cpp

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9+
#include "MCTargetDesc/SystemZMCExpr.h"
910
#include "MCTargetDesc/SystemZMCFixups.h"
1011
#include "MCTargetDesc/SystemZMCTargetDesc.h"
1112
#include "llvm/BinaryFormat/ELF.h"
@@ -33,6 +34,8 @@ class SystemZELFObjectWriter : public MCELFObjectTargetWriter {
3334
// Override MCELFObjectTargetWriter.
3435
unsigned getRelocType(MCContext &Ctx, const MCValue &Target,
3536
const MCFixup &Fixup, bool IsPCRel) const override;
37+
bool needsRelocateWithSymbol(const MCValue &Val, const MCSymbol &Sym,
38+
unsigned Type) const override;
3639
};
3740

3841
} // end anonymous namespace
@@ -155,43 +158,57 @@ unsigned SystemZELFObjectWriter::getRelocType(MCContext &Ctx,
155158
unsigned Kind = Fixup.getKind();
156159
if (Kind >= FirstLiteralRelocationKind)
157160
return Kind - FirstLiteralRelocationKind;
158-
MCSymbolRefExpr::VariantKind Modifier = Target.getAccessVariant();
159-
switch (Modifier) {
160-
case MCSymbolRefExpr::VK_None:
161+
auto Specifier = SystemZMCExpr::Specifier(Target.getAccessVariant());
162+
switch (Specifier) {
163+
case SystemZMCExpr::VK_INDNTPOFF:
164+
case SystemZMCExpr::VK_NTPOFF:
165+
case SystemZMCExpr::VK_TLSGD:
166+
case SystemZMCExpr::VK_TLSLD:
167+
case SystemZMCExpr::VK_TLSLDM:
168+
case SystemZMCExpr::VK_DTPOFF:
169+
if (auto *S = Target.getSymA())
170+
cast<MCSymbolELF>(S->getSymbol()).setType(ELF::STT_TLS);
171+
break;
172+
default:
173+
break;
174+
}
175+
176+
switch (Specifier) {
177+
case SystemZMCExpr::VK_None:
161178
if (IsPCRel)
162179
return getPCRelReloc(Ctx, Loc, Kind);
163180
return getAbsoluteReloc(Ctx, Loc, Kind);
164181

165-
case MCSymbolRefExpr::VK_NTPOFF:
182+
case SystemZMCExpr::VK_NTPOFF:
166183
assert(!IsPCRel && "NTPOFF shouldn't be PC-relative");
167184
return getTLSLEReloc(Ctx, Loc, Kind);
168185

169-
case MCSymbolRefExpr::VK_INDNTPOFF:
186+
case SystemZMCExpr::VK_INDNTPOFF:
170187
if (IsPCRel && Kind == SystemZ::FK_390_PC32DBL)
171188
return ELF::R_390_TLS_IEENT;
172189
Ctx.reportError(Loc, "Only PC-relative INDNTPOFF accesses are supported for now");
173190
return 0;
174191

175-
case MCSymbolRefExpr::VK_DTPOFF:
192+
case SystemZMCExpr::VK_DTPOFF:
176193
assert(!IsPCRel && "DTPOFF shouldn't be PC-relative");
177194
return getTLSLDOReloc(Ctx, Loc, Kind);
178195

179-
case MCSymbolRefExpr::VK_TLSLDM:
196+
case SystemZMCExpr::VK_TLSLDM:
180197
assert(!IsPCRel && "TLSLDM shouldn't be PC-relative");
181198
return getTLSLDMReloc(Ctx, Loc, Kind);
182199

183-
case MCSymbolRefExpr::VK_TLSGD:
200+
case SystemZMCExpr::VK_TLSGD:
184201
assert(!IsPCRel && "TLSGD shouldn't be PC-relative");
185202
return getTLSGDReloc(Ctx, Loc, Kind);
186203

187-
case MCSymbolRefExpr::VK_GOT:
188-
case MCSymbolRefExpr::VK_GOTENT:
204+
case SystemZMCExpr::VK_GOT:
205+
case SystemZMCExpr::VK_GOTENT:
189206
if (IsPCRel && Kind == SystemZ::FK_390_PC32DBL)
190207
return ELF::R_390_GOTENT;
191208
Ctx.reportError(Loc, "Only PC-relative GOT accesses are supported for now");
192209
return 0;
193210

194-
case MCSymbolRefExpr::VK_PLT:
211+
case SystemZMCExpr::VK_PLT:
195212
assert(IsPCRel && "@PLT shouldn't be PC-relative");
196213
return getPLTReloc(Ctx, Loc, Kind);
197214

@@ -200,6 +217,18 @@ unsigned SystemZELFObjectWriter::getRelocType(MCContext &Ctx,
200217
}
201218
}
202219

220+
bool SystemZELFObjectWriter::needsRelocateWithSymbol(const MCValue &V,
221+
const MCSymbol &Sym,
222+
unsigned Type) const {
223+
switch (getSpecifier(V.getSymA())) {
224+
case SystemZMCExpr::VK_GOT:
225+
case SystemZMCExpr::VK_PLT:
226+
return true;
227+
default:
228+
return false;
229+
}
230+
}
231+
203232
std::unique_ptr<MCObjectTargetWriter>
204233
llvm::createSystemZELFObjectWriter(uint8_t OSABI) {
205234
return std::make_unique<SystemZELFObjectWriter>(OSABI);

llvm/lib/Target/SystemZ/MCTargetDesc/SystemZInstPrinterCommon.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "SystemZInstPrinterCommon.h"
10+
#include "MCTargetDesc/SystemZMCExpr.h"
1011
#include "llvm/MC/MCExpr.h"
1112
#include "llvm/MC/MCInst.h"
1213
#include "llvm/MC/MCRegister.h"
@@ -168,11 +169,11 @@ void SystemZInstPrinterCommon::printPCRelTLSOperand(const MCInst *MI,
168169
if ((unsigned)OpNum + 1 < MI->getNumOperands()) {
169170
const MCOperand &MO = MI->getOperand(OpNum + 1);
170171
const MCSymbolRefExpr &refExp = cast<MCSymbolRefExpr>(*MO.getExpr());
171-
switch (refExp.getKind()) {
172-
case MCSymbolRefExpr::VK_TLSGD:
172+
switch (getSpecifier(&refExp)) {
173+
case SystemZMCExpr::VK_TLSGD:
173174
O << ":tls_gdcall:";
174175
break;
175-
case MCSymbolRefExpr::VK_TLSLDM:
176+
case SystemZMCExpr::VK_TLSLDM:
176177
O << ":tls_ldcall:";
177178
break;
178179
default:

llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCAsmInfo.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,22 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "SystemZMCAsmInfo.h"
10+
#include "MCTargetDesc/SystemZMCExpr.h"
1011
#include "llvm/MC/MCContext.h"
1112
#include "llvm/MC/MCExpr.h"
1213

1314
using namespace llvm;
1415

1516
const MCAsmInfo::VariantKindDesc variantKindDescs[] = {
16-
{MCSymbolRefExpr::VK_DTPOFF, "DTPOFF"},
17-
{MCSymbolRefExpr::VK_GOT, "GOT"},
18-
{MCSymbolRefExpr::VK_GOTENT, "GOTENT"},
19-
{MCSymbolRefExpr::VK_INDNTPOFF, "INDNTPOFF"},
20-
{MCSymbolRefExpr::VK_NTPOFF, "NTPOFF"},
21-
{MCSymbolRefExpr::VK_PLT, "PLT"},
22-
{MCSymbolRefExpr::VK_TLSGD, "TLSGD"},
23-
{MCSymbolRefExpr::VK_TLSLD, "TLSLD"},
24-
{MCSymbolRefExpr::VK_TLSLDM, "TLSLDM"},
17+
{SystemZMCExpr::VK_DTPOFF, "DTPOFF"},
18+
{SystemZMCExpr::VK_GOT, "GOT"},
19+
{SystemZMCExpr::VK_GOTENT, "GOTENT"},
20+
{SystemZMCExpr::VK_INDNTPOFF, "INDNTPOFF"},
21+
{SystemZMCExpr::VK_NTPOFF, "NTPOFF"},
22+
{SystemZMCExpr::VK_PLT, "PLT"},
23+
{SystemZMCExpr::VK_TLSGD, "TLSGD"},
24+
{SystemZMCExpr::VK_TLSLD, "TLSLD"},
25+
{SystemZMCExpr::VK_TLSLDM, "TLSLDM"},
2526
};
2627

2728
SystemZMCAsmInfoELF::SystemZMCAsmInfoELF(const Triple &TT) {

llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCExpr.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ using namespace llvm;
1212

1313
#define DEBUG_TYPE "systemzmcexpr"
1414

15-
const SystemZMCExpr *SystemZMCExpr::create(VariantKind Kind, const MCExpr *Expr,
16-
MCContext &Ctx) {
15+
const SystemZMCExpr *SystemZMCExpr::create(SystemZMCExpr::Specifier Kind,
16+
const MCExpr *Expr, MCContext &Ctx) {
1717
return new (Ctx) SystemZMCExpr(Kind, Expr);
1818
}
1919

2020
StringRef SystemZMCExpr::getVariantKindName() const {
21-
switch (static_cast<uint32_t>(getKind())) {
22-
case VK_SystemZ_None:
21+
switch (getSpecifier()) {
22+
case VK_None:
2323
return "A";
2424
case VK_SystemZ_RCon:
2525
return "R";
@@ -41,8 +41,8 @@ bool SystemZMCExpr::evaluateAsRelocatableImpl(MCValue &Res,
4141
if (!getSubExpr()->evaluateAsRelocatable(Res, Asm))
4242
return false;
4343

44-
Res =
45-
MCValue::get(Res.getSymA(), Res.getSymB(), Res.getConstant(), getKind());
44+
Res = MCValue::get(Res.getSymA(), Res.getSymB(), Res.getConstant(),
45+
getSpecifier());
4646

4747
return true;
4848
}

llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCExpr.h

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,29 +17,37 @@ namespace llvm {
1717

1818
class SystemZMCExpr : public MCTargetExpr {
1919
public:
20-
// HLASM docs for address constants:
21-
// https://www.ibm.com/docs/en/hla-and-tf/1.6?topic=value-address-constants
22-
enum VariantKind {
23-
VK_SystemZ_None,
24-
VK_SystemZ_RCon, // Address of ADA of symbol.
25-
VK_SystemZ_VCon, // Address of external function symbol.
20+
enum Specifier : uint8_t {
21+
VK_None,
22+
23+
VK_DTPOFF = MCSymbolRefExpr::FirstTargetSpecifier,
24+
VK_GOT,
25+
VK_GOTENT,
26+
VK_INDNTPOFF,
27+
VK_NTPOFF,
28+
VK_PLT,
29+
VK_TLSGD,
30+
VK_TLSLD,
31+
VK_TLSLDM,
32+
33+
// HLASM docs for address constants:
34+
// https://www.ibm.com/docs/en/hla-and-tf/1.6?topic=value-address-constants
35+
VK_SystemZ_RCon, // Address of ADA of symbol.
36+
VK_SystemZ_VCon, // Address of external function symbol.
2637
};
2738

2839
private:
29-
const VariantKind Kind;
40+
const Specifier specifier;
3041
const MCExpr *Expr;
3142

32-
explicit SystemZMCExpr(VariantKind Kind, const MCExpr *Expr)
33-
: Kind(Kind), Expr(Expr) {}
43+
explicit SystemZMCExpr(Specifier S, const MCExpr *Expr)
44+
: specifier(S), Expr(Expr) {}
3445

3546
public:
36-
static const SystemZMCExpr *create(VariantKind Kind, const MCExpr *Expr,
47+
static const SystemZMCExpr *create(Specifier Kind, const MCExpr *Expr,
3748
MCContext &Ctx);
3849

39-
/// getOpcode - Get the kind of this expression.
40-
VariantKind getKind() const { return Kind; }
41-
42-
/// getSubExpr - Get the child of this expression.
50+
Specifier getSpecifier() const { return specifier; }
4351
const MCExpr *getSubExpr() const { return Expr; }
4452

4553
StringRef getVariantKindName() const;
@@ -58,6 +66,11 @@ class SystemZMCExpr : public MCTargetExpr {
5866
return E->getKind() == MCExpr::Target;
5967
}
6068
};
69+
70+
static inline SystemZMCExpr::Specifier
71+
getSpecifier(const MCSymbolRefExpr *SRE) {
72+
return SystemZMCExpr::Specifier(SRE->getKind());
73+
}
6174
} // end namespace llvm
6275

6376
#endif

0 commit comments

Comments
 (0)