Chromium Code Reviews| Index: lib/Target/X86/X86NaClRewritePass.cpp |
| diff --git a/lib/Target/X86/X86NaClRewritePass.cpp b/lib/Target/X86/X86NaClRewritePass.cpp |
| index 85004b734325e857f68388b6bb3d0a1404b4a3c8..a6cd65dcfb057c2f985b08dc3f6f311bd96e845d 100644 |
| --- a/lib/Target/X86/X86NaClRewritePass.cpp |
| +++ b/lib/Target/X86/X86NaClRewritePass.cpp |
| @@ -260,11 +260,25 @@ bool X86NaClRewritePass::ApplyStackSFI(MachineBasicBlock &MBB, |
| return true; |
| } |
| - // Promote 32-bit lea to 64-bit lea (does this ever happen?) |
| assert(Opc != X86::LEA32r && "Invalid opcode in 64-bit mode!"); |
| - if (Opc == X86::LEA64_32r) { |
| - unsigned DestReg = MI.getOperand(0).getReg(); |
| + if (Opc == X86::LEA64_32r){ |
| unsigned BaseReg = MI.getOperand(1).getReg(); |
| + if (BaseReg != X86::EBP) { |
|
jvoung (off chromium)
2015/05/12 23:53:05
Add a comment about why EBP is a special case?
Ha
Derek Schuff
2015/05/13 00:44:50
Done.
|
| + // Create a MachineInstr bundle (i.e. a bundle-locked group) and fix up |
| + // the stack pointer by adding R15. TODO(dschuff): generalize this for |
| + // other uses if needed, and try to replace some pseudos if |
| + // possible. Eventually replace with auto-sandboxing. |
| + auto NextMBBI = MBBI; |
| + ++NextMBBI; |
| + BuildMI(MBB, NextMBBI, MBBI->getDebugLoc(), |
| + TII->get(X86::ADD64rr), X86::RSP).addReg(X86::RSP).addReg(X86::R15); |
|
jvoung (off chromium)
2015/05/12 23:53:04
80 col
Derek Schuff
2015/05/13 00:44:50
Done.
|
| + MIBundleBuilder(MBB, MBBI, NextMBBI); |
| + finalizeBundle(MBB, MBBI.getInstrIterator()); |
| + return true; |
| + } |
| + |
| + // Promote 32-bit lea to 64-bit lea (does this ever happen?) |
| + unsigned DestReg = MI.getOperand(0).getReg(); |
| unsigned Scale = MI.getOperand(2).getImm(); |
| unsigned IndexReg = MI.getOperand(3).getReg(); |
| assert(DestReg == X86::ESP); |