Fix GS cookie check on ARM in functions with stackalloc (#25628)
authorJan Vorlicek <janvorli@microsoft.com>
Thu, 11 Jul 2019 21:26:14 +0000 (23:26 +0200)
committerGitHub <noreply@github.com>
Thu, 11 Jul 2019 21:26:14 +0000 (23:26 +0200)
commit2290c1f10e58feef8636679788eb060705dae9b3
tree17590690298f1e37255b7d87e03da6b85cda2b46
parentb4c7a2e6d97759b1d90f184664b510596cc64fd9
Fix GS cookie check on ARM in functions with stackalloc (#25628)

* Fix GS cookie check on ARM in functions with stackalloc

The GC cookie check was failing during GC stack walking on ARM for frames
of functions using stackalloc and pinvoke. The InlinedCallFrame stores
only the SP after the stackalloc adjustment and unwinder needs R9
that contains SP before the stackalloc to be able to unwind the frame
to get caller SP. The caller SP is used as a base for getting the GS
cookie address. We were incorrectly setting the R9 in the CONTEXT
to the same value as SP and so the unwinding was getting an incorrect
caller SP.

The fix is to store R9 in the InlinedCallFrame for ARM.
src/inc/corinfo.h
src/jit/lower.cpp
src/jit/target.h
src/vm/arm/PInvokeStubs.asm
src/vm/arm/asmconstants.h
src/vm/arm/pinvokestubs.S
src/vm/arm/stubs.cpp
src/vm/frames.h
src/vm/jitinterface.cpp