File tree Expand file tree Collapse file tree 3 files changed +12
-45
lines changed
llvm/lib/Target/VE/MCTargetDesc Expand file tree Collapse file tree 3 files changed +12
-45
lines changed Original file line number Diff line number Diff line change 66//
77// ===----------------------------------------------------------------------===//
88
9+ #include " MCTargetDesc/VEMCExpr.h"
910#include " VEFixupKinds.h"
1011#include " VEMCExpr.h"
1112#include " VEMCTargetDesc.h"
@@ -39,6 +40,17 @@ class VEELFObjectWriter : public MCELFObjectTargetWriter {
3940unsigned VEELFObjectWriter::getRelocType (MCContext &Ctx, const MCValue &Target,
4041 const MCFixup &Fixup,
4142 bool IsPCRel) const {
43+ switch (Target.getRefKind ()) {
44+ case VEMCExpr::VK_TLS_GD_HI32:
45+ case VEMCExpr::VK_TLS_GD_LO32:
46+ case VEMCExpr::VK_TPOFF_HI32:
47+ case VEMCExpr::VK_TPOFF_LO32:
48+ if (auto *S = Target.getSymA ())
49+ cast<MCSymbolELF>(S->getSymbol ()).setType (ELF::STT_TLS);
50+ break ;
51+ default :
52+ break ;
53+ }
4254 if (const VEMCExpr *SExpr = dyn_cast<VEMCExpr>(Fixup.getValue ())) {
4355 if (SExpr->getSpecifier () == VEMCExpr::VK_PC_LO32)
4456 return ELF::R_VE_PC_LO32;
Original file line number Diff line number Diff line change @@ -86,49 +86,6 @@ bool VEMCExpr::evaluateAsRelocatableImpl(MCValue &Res,
8686 return true ;
8787}
8888
89- static void fixELFSymbolsInTLSFixupsImpl (const MCExpr *Expr, MCAssembler &Asm) {
90- switch (Expr->getKind ()) {
91- case MCExpr::Target:
92- llvm_unreachable (" Can't handle nested target expr!" );
93- break ;
94-
95- case MCExpr::Constant:
96- break ;
97-
98- case MCExpr::Binary: {
99- const MCBinaryExpr *BE = cast<MCBinaryExpr>(Expr);
100- fixELFSymbolsInTLSFixupsImpl (BE->getLHS (), Asm);
101- fixELFSymbolsInTLSFixupsImpl (BE->getRHS (), Asm);
102- break ;
103- }
104-
105- case MCExpr::SymbolRef: {
106- // We're known to be under a TLS fixup, so any symbol should be
107- // modified. There should be only one.
108- const MCSymbolRefExpr &SymRef = *cast<MCSymbolRefExpr>(Expr);
109- cast<MCSymbolELF>(SymRef.getSymbol ()).setType (ELF::STT_TLS);
110- break ;
111- }
112-
113- case MCExpr::Unary:
114- fixELFSymbolsInTLSFixupsImpl (cast<MCUnaryExpr>(Expr)->getSubExpr (), Asm);
115- break ;
116- }
117- }
118-
11989void VEMCExpr::visitUsedExpr (MCStreamer &Streamer) const {
12090 Streamer.visitUsedExpr (*getSubExpr ());
12191}
122-
123- void VEMCExpr::fixELFSymbolsInTLSFixups (MCAssembler &Asm) const {
124- switch (getSpecifier ()) {
125- default :
126- return ;
127- case VK_TLS_GD_HI32:
128- case VK_TLS_GD_LO32:
129- case VK_TPOFF_HI32:
130- case VK_TPOFF_LO32:
131- break ;
132- }
133- fixELFSymbolsInTLSFixupsImpl (getSubExpr (), Asm);
134- }
Original file line number Diff line number Diff line change @@ -77,8 +77,6 @@ class VEMCExpr : public MCTargetExpr {
7777 return getSubExpr ()->findAssociatedFragment ();
7878 }
7979
80- void fixELFSymbolsInTLSFixups (MCAssembler &Asm) const override ;
81-
8280 static bool classof (const MCExpr *E) {
8381 return E->getKind () == MCExpr::Target;
8482 }
You can’t perform that action at this time.
0 commit comments