diff options
Diffstat (limited to 'build_files/build_environment/patches/llvm-alloca-fix.diff')
-rw-r--r-- | build_files/build_environment/patches/llvm-alloca-fix.diff | 111 |
1 files changed, 0 insertions, 111 deletions
diff --git a/build_files/build_environment/patches/llvm-alloca-fix.diff b/build_files/build_environment/patches/llvm-alloca-fix.diff deleted file mode 100644 index 5394a472167..00000000000 --- a/build_files/build_environment/patches/llvm-alloca-fix.diff +++ /dev/null @@ -1,111 +0,0 @@ -Index: lib/Target/X86/X86ISelLowering.cpp -=================================================================== ---- lib/Target/X86/X86ISelLowering.cpp 2014-04-11 23:04:44.000000000 +0200 -+++ lib/Target/X86/X86ISelLowering.cpp (working copy) -@@ -15493,12 +15493,36 @@ - // non-trivial part is impdef of ESP. - - if (Subtarget->isTargetWin64()) { -+ const char *StackProbeSymbol = -+ Subtarget->isTargetCygMing() ? "___chkstk" : "__chkstk"; -+ -+ MachineInstrBuilder MIB; -+ -+ if (getTargetMachine().getCodeModel() == CodeModel::Large) { -+ // For large code model we need to do indirect call to __chkstk. -+ -+ // R11 will be used to contain the address of __chkstk. -+ // R11 is a volotiale register and assumed to be destoyed by the callee, -+ // so there is no need to save and restore it. -+ BuildMI(*BB, MI, DL, TII->get(X86::MOV64ri), X86::R11) -+ .addExternalSymbol(StackProbeSymbol); -+ // Create a call to __chkstk function which address contained in R11. -+ MIB = BuildMI(*BB, MI, DL, TII->get(X86::CALL64r)) -+ .addReg(X86::R11, RegState::Kill); -+ -+ } else { -+ -+ // For non-large code model we can do direct call to __chkstk. -+ -+ MIB = BuildMI(*BB, MI, DL, TII->get(X86::W64ALLOCA)) -+ .addExternalSymbol(StackProbeSymbol); -+ } -+ - if (Subtarget->isTargetCygMing()) { - // ___chkstk(Mingw64): - // Clobbers R10, R11, RAX and EFLAGS. - // Updates RSP. -- BuildMI(*BB, MI, DL, TII->get(X86::W64ALLOCA)) -- .addExternalSymbol("___chkstk") -+ MIB - .addReg(X86::RAX, RegState::Implicit) - .addReg(X86::RSP, RegState::Implicit) - .addReg(X86::RAX, RegState::Define | RegState::Implicit) -@@ -15507,8 +15531,7 @@ - } else { - // __chkstk(MSVCRT): does not update stack pointer. - // Clobbers R10, R11 and EFLAGS. -- BuildMI(*BB, MI, DL, TII->get(X86::W64ALLOCA)) -- .addExternalSymbol("__chkstk") -+ MIB - .addReg(X86::RAX, RegState::Implicit) - .addReg(X86::EFLAGS, RegState::Define | RegState::Implicit); - // RAX has the offset to be subtracted from RSP. -Index: lib/Target/X86/X86FrameLowering.cpp -=================================================================== ---- lib/Target/X86/X86FrameLowering.cpp 2013-10-24 01:37:01.000000000 +0200 -+++ lib/Target/X86/X86FrameLowering.cpp (working copy) -@@ -635,25 +635,49 @@ - .addReg(X86::EAX, RegState::Kill) - .setMIFlag(MachineInstr::FrameSetup); - } -+ -+ MachineInstrBuilder MIB; - - if (Is64Bit) { -+ - // Handle the 64-bit Windows ABI case where we need to call __chkstk. - // Function prologue is responsible for adjusting the stack pointer. - BuildMI(MBB, MBBI, DL, TII.get(X86::MOV64ri), X86::RAX) - .addImm(NumBytes) - .setMIFlag(MachineInstr::FrameSetup); -+ -+ if (TM.getCodeModel() == CodeModel::Large) { -+ // For large code model we need to do indirect call to __chkstk. -+ -+ -+ // R11 will be used to contain the address of __chkstk. -+ // R11 is a volotiale register and assumed to be destoyed by the callee, -+ // so there is no need to save and restore it. -+ BuildMI(MBB, MBBI, DL, TII.get(X86::MOV64ri), X86::R11) -+ .addExternalSymbol(StackProbeSymbol); -+ // Create a call to __chkstk function which address contained in R11. -+ MIB = BuildMI(MBB, MBBI, DL, TII.get(X86::CALL64r)) -+ .addReg(X86::R11, RegState::Kill); -+ } else { -+ -+ // For non-large code model we can do direct call to __chkstk. -+ -+ MIB = BuildMI(MBB, MBBI, DL, TII.get(X86::W64ALLOCA)) -+ .addExternalSymbol(StackProbeSymbol); -+ } - } else { - // Allocate NumBytes-4 bytes on stack in case of isEAXAlive. - // We'll also use 4 already allocated bytes for EAX. - BuildMI(MBB, MBBI, DL, TII.get(X86::MOV32ri), X86::EAX) - .addImm(isEAXAlive ? NumBytes - 4 : NumBytes) - .setMIFlag(MachineInstr::FrameSetup); -+ -+ MIB = BuildMI(MBB, MBBI, DL, TII.get(X86::CALLpcrel32)) -+ .addExternalSymbol(StackProbeSymbol); - } - -- BuildMI(MBB, MBBI, DL, -- TII.get(Is64Bit ? X86::W64ALLOCA : X86::CALLpcrel32)) -- .addExternalSymbol(StackProbeSymbol) -- .addReg(StackPtr, RegState::Define | RegState::Implicit) -+ -+ MIB.addReg(StackPtr, RegState::Define | RegState::Implicit) - .addReg(X86::EFLAGS, RegState::Define | RegState::Implicit) - .setMIFlag(MachineInstr::FrameSetup); - |