diff options
author | Kyungwoo Lee <kyulee@microsoft.com> | 2016-03-14 11:06:11 -0700 |
---|---|---|
committer | Kyungwoo Lee <kyulee@microsoft.com> | 2016-03-14 12:32:22 -0700 |
commit | 469a324391dc49f92a411c5169145606fd50659b (patch) | |
tree | 52ffc39a2471ffc8e286442481906ca37a9a1666 /src/jit/emit.h | |
parent | 7fbb95d2eb98f87c7a2563b37eed004df37a3d0a (diff) | |
download | coreclr-469a324391dc49f92a411c5169145606fd50659b.tar.gz coreclr-469a324391dc49f92a411c5169145606fd50659b.tar.bz2 coreclr-469a324391dc49f92a411c5169145606fd50659b.zip |
ARM64: Fix GC hole in indirect call site
This fixes dotnet#3663.
Indirect call (```br``` or ```blr```) target is encoded with a register
which the first operand internally represents.
Unfortunately, call sites use the first two operands to hold GC
callee-save registers.
So, this GC register information was overridden by the call target operand
in the indirect(virtual) call sites.
The fix is to use 3rd/4th operands instead of 1st/2nd operands to hold GC info.
Ideally we should use different field name and also ensure constness when
we set up the operand so that it's never written more than once.
https://github.com/dotnet/coreclr/issues/3693 is filed.
Diffstat (limited to 'src/jit/emit.h')
-rw-r--r-- | src/jit/emit.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/jit/emit.h b/src/jit/emit.h index c03e902afc..c35532233e 100644 --- a/src/jit/emit.h +++ b/src/jit/emit.h @@ -943,7 +943,7 @@ protected: } // Note that we use the _idReg3 and _idReg4 fields to hold - // the live gcrefReg mask for the call instructions on arm + // the live gcrefReg mask for the call instructions on arm64 // struct { |