diff options
| author | Strahinja Petrovic <strahinja.petrovic@rt-rk.com> | 2019-03-06 15:00:10 +0000 |
|---|---|---|
| committer | Strahinja Petrovic <strahinja.petrovic@rt-rk.com> | 2019-03-06 15:00:10 +0000 |
| commit | 94fccc93dec54bfc7d810870aa965c4e6fb9bdfa (patch) | |
| tree | 5c29bad80af5bdfc60c37fdd22c42bd51d465009 /llvm/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp | |
| parent | b1daf0aef67d4998aef2bbfd7709bc0ee0e89923 (diff) | |
| download | bcm5719-llvm-94fccc93dec54bfc7d810870aa965c4e6fb9bdfa.tar.gz bcm5719-llvm-94fccc93dec54bfc7d810870aa965c4e6fb9bdfa.zip | |
[PowerPC] Add secure plt support for TLS symbols
This patch supports secure plt mode for TLS symbols.
Differential Revision: https://reviews.llvm.org/D45520
llvm-svn: 355513
Diffstat (limited to 'llvm/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp')
| -rw-r--r-- | llvm/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/llvm/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp b/llvm/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp index 77206494990..251385e95f3 100644 --- a/llvm/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp +++ b/llvm/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp @@ -444,13 +444,22 @@ void PPCInstPrinter::printTLSCall(const MCInst *MI, unsigned OpNo, // On PPC64, VariantKind is VK_None, but on PPC32, it's VK_PLT, and it must // come at the _end_ of the expression. const MCOperand &Op = MI->getOperand(OpNo); - const MCSymbolRefExpr &refExp = cast<MCSymbolRefExpr>(*Op.getExpr()); - O << refExp.getSymbol().getName(); + const MCSymbolRefExpr *RefExp = nullptr; + const MCConstantExpr *ConstExp = nullptr; + if (const MCBinaryExpr *BinExpr = dyn_cast<MCBinaryExpr>(Op.getExpr())) { + RefExp = cast<MCSymbolRefExpr>(BinExpr->getLHS()); + ConstExp = cast<MCConstantExpr>(BinExpr->getRHS()); + } else + RefExp = cast<MCSymbolRefExpr>(Op.getExpr()); + + O << RefExp->getSymbol().getName(); O << '('; printOperand(MI, OpNo+1, O); O << ')'; - if (refExp.getKind() != MCSymbolRefExpr::VK_None) - O << '@' << MCSymbolRefExpr::getVariantKindName(refExp.getKind()); + if (RefExp->getKind() != MCSymbolRefExpr::VK_None) + O << '@' << MCSymbolRefExpr::getVariantKindName(RefExp->getKind()); + if (ConstExp != nullptr) + O << '+' << ConstExp->getValue(); } /// showRegistersWithPercentPrefix - Check if this register name should be |

