openbsd-ports/devel/llvm/patches/patch-lib_Target_PowerPC_PPCISelDAGToDAG_cpp
ajacoutot 634e5c9204 - Sync with base:
add PowerPC Secure PLT support and enable Secure PLT by default for
OpenBSD.

from Brad (maintainer)
2018-11-17 08:32:38 +00:00

33 lines
1.1 KiB
Plaintext

$OpenBSD: patch-lib_Target_PowerPC_PPCISelDAGToDAG_cpp,v 1.5 2018/11/17 08:32:38 ajacoutot Exp $
[PowerPC] Secure PLT support
Index: lib/Target/PowerPC/PPCISelDAGToDAG.cpp
--- lib/Target/PowerPC/PPCISelDAGToDAG.cpp.orig
+++ lib/Target/PowerPC/PPCISelDAGToDAG.cpp
@@ -3894,6 +3894,24 @@ void PPCDAGToDAGISel::Select(SDNode *N) {
return;
break;
+ case PPCISD::CALL: {
+ const Module *M = MF->getFunction().getParent();
+ if (PPCLowering->getPointerTy(CurDAG->getDataLayout()) != MVT::i32 ||
+ !PPCSubTarget->isSecurePlt() || !PPCSubTarget->isTargetELF() ||
+ M->getPICLevel() == PICLevel::SmallPIC)
+ break;
+ SDValue Op = N->getOperand(1);
+ if (GlobalAddressSDNode *GA = dyn_cast<GlobalAddressSDNode>(Op)) {
+ if (GA->getTargetFlags() == PPCII::MO_PLT)
+ getGlobalBaseReg();
+ }
+ else if (ExternalSymbolSDNode *ES = dyn_cast<ExternalSymbolSDNode>(Op)) {
+ if (ES->getTargetFlags() == PPCII::MO_PLT)
+ getGlobalBaseReg();
+ }
+ }
+ break;
+
case PPCISD::GlobalBaseReg:
ReplaceNode(N, getGlobalBaseReg());
return;