[PEI] Don't re-allocate a pre-allocated stack protector slot
authorFrancis Visoiu Mistrih <francisvm@yahoo.com>
Wed, 17 Jul 2019 20:46:19 +0000 (20:46 +0000)
committerFrancis Visoiu Mistrih <francisvm@yahoo.com>
Wed, 17 Jul 2019 20:46:19 +0000 (20:46 +0000)
commit9f2b290addfc4d9f514790b47773b141682b0db5
tree9707d7fdcf11359e28d37c19ea777ee485804e5a
parent39fc2843e4eb07370d55f0a7a0db34d4bd6c9d5f
[PEI] Don't re-allocate a pre-allocated stack protector slot

The LocalStackSlotPass pre-allocates a stack protector and makes sure
that it comes before the local variables on the stack.

We need to make sure that later during PEI we don't re-allocate a new
stack protector slot. If that happens, the new stack protector slot will
end up being **after** the local variables that it should be protecting.

Therefore, we would have two slots assigned for two different stack
protectors, one at the top of the stack, and one at the bottom. Since
PEI will overwrite the assigned slot for the stack protector, the load
that is used to compare the value of the stack protector will use the
slot assigned by PEI, which is wrong.

For this, we need to check if the object is pre-allocated, and re-use
that pre-allocated slot.

Differential Revision: https://reviews.llvm.org/D64757

llvm-svn: 366371
llvm/lib/CodeGen/LocalStackSlotAllocation.cpp
llvm/lib/CodeGen/PrologEpilogInserter.cpp
llvm/test/CodeGen/AArch64/stack-guard-reassign.ll
llvm/test/CodeGen/AArch64/stack-guard-reassign.mir
llvm/test/CodeGen/AArch64/stack-guard-vaarg.ll
llvm/test/CodeGen/ARM/stack-guard-reassign.ll
llvm/test/CodeGen/PowerPC/stack-guard-reassign.ll