summaryrefslogtreecommitdiff
path: root/tests/src/JIT/Methodical/MDArray/DataTypes/long_cs_do.csproj
diff options
context:
space:
mode:
authorRichard L Ford <richford@microsoft.com>2015-07-08 00:17:53 -0700
committerRichard L Ford <richford@microsoft.com>2015-07-08 16:46:46 -0700
commit2d9199d9ad52469d587ecbf12ade3af2fcd91289 (patch)
tree9321c006249cdbf130c33a1c1291dee5154c69e7 /tests/src/JIT/Methodical/MDArray/DataTypes/long_cs_do.csproj
parent9945fc40cc7bbff5b26ff44b6bc74f5fdf93be71 (diff)
downloadcoreclr-2d9199d9ad52469d587ecbf12ade3af2fcd91289.tar.gz
coreclr-2d9199d9ad52469d587ecbf12ade3af2fcd91289.tar.bz2
coreclr-2d9199d9ad52469d587ecbf12ade3af2fcd91289.zip
Modify conservative GC code for unaligned InlinedCallFrames
When making pinvoke calls the JITs allocate InlinedCallFrames within their stack frames to record the location of the managed stack frame. These InlinedCallFrames are not necessarily 8-byte aligned. These were being used as the topStack in src/vm/gcenv.cpp, in the method GCToEEInterface::ScanStackRoots. This change checks to see if a frame is an InlinedCallFrame. If so then its GetCallSiteSP method is used to get the real top of stack. This will always be aligned. There were two problem before this change wwhen the frame was misaligned (e.g. ending with 4 or c): 1. GCToEEInterface::ScanStackRoots starts at the topStack and look at every 8-byte chunk as if it were a pointer. But if topStack is unaligned it is not really finding the pointers on the stack. 2. When it gets to the bottom the 8-byte access read the first 4 bytes ok, but the last 4 bytes go beyond mapped addresses and an access violation results.
Diffstat (limited to 'tests/src/JIT/Methodical/MDArray/DataTypes/long_cs_do.csproj')
0 files changed, 0 insertions, 0 deletions