Fix for missing GC ref map record on ARM64 for the X8 register (dotnet/coreclr#22309)
authorTomáš Rylek <trylek@microsoft.com>
Thu, 31 Jan 2019 19:23:38 +0000 (20:23 +0100)
committerGitHub <noreply@github.com>
Thu, 31 Jan 2019 19:23:38 +0000 (20:23 +0100)
commitf56a5ed363dab6c23e0abd4a8737315e8fdc313c
treefca1edf77d53c29d323b2dc8eb47c3981f7e8c44
parent5331a6d556098a900922a01b04734f3a8f329185
Fix for missing GC ref map record on ARM64 for the X8 register (dotnet/coreclr#22309)

GC stress testing revealed a deficiency in GC ref map on ARM64 - we weren't
emitting the entry corresponding to the X8 return buffer address because
a recent refactoring changed its location in the transition block. This change
generalizes transition block by exposing a new function

GetOffsetOfFirstGCRefMapSlot()

that returns the same value as

GetOffsetOfArgumentRegisters()

except on ARM64 where it returns the offset of the X8 register in the
transition block (above the callee-saved registers and 8-byte padding i.e.
at position 13 corresponding to offset 0x68, or
GetOffsetOfArgumentRegisters() - 8).

Thanks

Tomas

Commit migrated from https://github.com/dotnet/coreclr/commit/d4d3af17d582a16e88b58789b116adcd2e07b605
src/coreclr/src/vm/callingconvention.h
src/coreclr/src/vm/compile.cpp
src/coreclr/src/vm/frames.cpp