summaryrefslogtreecommitdiff
path: root/src/jit/codegencommon.cpp
diff options
context:
space:
mode:
authorKyungwoo Lee <kyulee@microsoft.com>2016-04-22 06:49:35 -0700
committerKyungwoo Lee <kyulee@microsoft.com>2016-04-22 11:30:12 -0700
commit8737b292d81a753fc78ba600f574edaddfc37834 (patch)
treeb4212ee072a9108f5318365f1341ab07cc831e28 /src/jit/codegencommon.cpp
parent4e769b7658f239cff2a0c80b673b91de8d686388 (diff)
downloadcoreclr-8737b292d81a753fc78ba600f574edaddfc37834.tar.gz
coreclr-8737b292d81a753fc78ba600f574edaddfc37834.tar.bz2
coreclr-8737b292d81a753fc78ba600f574edaddfc37834.zip
ARM64: Fix Frame with VarArg
Fixes https://github.com/dotnet/coreclr/issues/4424 JIT homes incoming vararg (8) registers to the top of the stack. When stack location is computed for local vars, JIT didn't take it into consideration causing the overlapped stack offsets for local vars and varargs. The stack offsets of local vars corresponding to varargs should point to this home area instead of the newly alloacted slot.
Diffstat (limited to 'src/jit/codegencommon.cpp')
-rw-r--r--src/jit/codegencommon.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/jit/codegencommon.cpp b/src/jit/codegencommon.cpp
index ab65d576c4..7daaff4826 100644
--- a/src/jit/codegencommon.cpp
+++ b/src/jit/codegencommon.cpp
@@ -3099,7 +3099,10 @@ void CodeGen::genGenerateCode(void * * codePtr,
trackedStackPtrsContig = false;
#elif defined(_TARGET_ARM_)
// On arm due to prespilling of arguments, tracked stk-ptrs may not be contiguous
- trackedStackPtrsContig = !compiler->opts.compDbgEnC && !compiler->compIsProfilerHookNeeded();
+ trackedStackPtrsContig = !compiler->opts.compDbgEnC && !compiler->compIsProfilerHookNeeded();
+#elif defined(_TARGET_ARM64_)
+ // Incoming vararg registers are homed on the top of the stack. Tracked var may not be contiguous.
+ trackedStackPtrsContig = !compiler->opts.compDbgEnC && !compiler->info.compIsVarArgs;
#else
trackedStackPtrsContig = !compiler->opts.compDbgEnC;
#endif