diff options
author | Tim Shen <timshen91@gmail.com> | 2016-04-19 20:14:52 +0000 |
---|---|---|
committer | Tim Shen <timshen91@gmail.com> | 2016-04-19 20:14:52 +0000 |
commit | a1d8bc559761c94dded3d1e7200cb264a982d1c5 (patch) | |
tree | defb71dc282b62864f218f590486990247491956 /llvm/lib/Target/PowerPC/PPCInstrInfo.cpp | |
parent | 8743f8ca245d94e91889f376c236aed81b61ffa3 (diff) | |
download | bcm5719-llvm-a1d8bc559761c94dded3d1e7200cb264a982d1c5.tar.gz bcm5719-llvm-a1d8bc559761c94dded3d1e7200cb264a982d1c5.zip |
[PPC, SSP] Support PowerPC Linux stack protection.
llvm-svn: 266809
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCInstrInfo.cpp')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCInstrInfo.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp b/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp index b6dc00f37b7..9b682dae7a5 100644 --- a/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp +++ b/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp @@ -1857,3 +1857,19 @@ PPCInstrInfo::getSerializableBitmaskMachineOperandTargetFlags() const { return makeArrayRef(TargetFlags); } +bool PPCInstrInfo::expandPostRAPseudo(MachineBasicBlock::iterator MI) const { + switch (MI->getOpcode()) { + case TargetOpcode::LOAD_STACK_GUARD: { + assert(Subtarget.isTargetLinux() && + "Only Linux target is expected to contain LOAD_STACK_GUARD"); + const int64_t Offset = Subtarget.isPPC64() ? -0x7010 : -0x7008; + const unsigned Reg = Subtarget.isPPC64() ? PPC::X13 : PPC::R2; + MI->setDesc(get(PPC::LD)); + MachineInstrBuilder(*MI->getParent()->getParent(), MI) + .addImm(Offset) + .addReg(Reg); + return true; + } + } + return false; +} |