diff options
author | Swaroop Sridhar <swaroops@microsoft.com> | 2016-08-22 15:06:44 -0700 |
---|---|---|
committer | Swaroop Sridhar <swaroops@microsoft.com> | 2016-09-14 10:16:00 -0700 |
commit | 4871121dbb7d1ee3282f9beb950cd73fb4f8a95b (patch) | |
tree | e45e0025e4c54366cedd61d402fd9b62ef324c6a /src/vm/proftoeeinterfaceimpl.cpp | |
parent | 21e4eb9cd224c6fa257c810d270e3ff45b12a63e (diff) | |
download | coreclr-4871121dbb7d1ee3282f9beb950cd73fb4f8a95b.tar.gz coreclr-4871121dbb7d1ee3282f9beb950cd73fb4f8a95b.tar.bz2 coreclr-4871121dbb7d1ee3282f9beb950cd73fb4f8a95b.zip |
Implement GcInfo v2 for X86
This commit includes the following changes:
1) Thread GcInfo version through X86 specific APIs
2) Add ReturnKind and ReversePinvokeOffset fields to InfoHdr structure
GcInfo v1 and v2 use the same InfoHdr structures, because:
InfoHdrSmall: ReturnKind is encoded within previously unused bits.
InfoHdr: revPInvokeOffset will never be written to the image,
since ReversePinvokeOffset==INVALID_REV_PINVOKE_OFFSET for V1.
3) Update the Pre-computed header table to include bits for the above
[The default setting of ReturnKind=RT_Scalar is used for all entries in the table.
Optimizing this table based in most frequent usage scenarios is to be done separately]
4) Change the GC encoder/decoder to handle the above two fields
5) Use the ReturnKind in the GCInfo from thread-suspension code.
GcInfo version is changed for CoreCLR X86 only, not for Desktop JIT
Fixes #4379
Diffstat (limited to 'src/vm/proftoeeinterfaceimpl.cpp')
-rw-r--r-- | src/vm/proftoeeinterfaceimpl.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/vm/proftoeeinterfaceimpl.cpp b/src/vm/proftoeeinterfaceimpl.cpp index fee883f0ef..20dceed1e4 100644 --- a/src/vm/proftoeeinterfaceimpl.cpp +++ b/src/vm/proftoeeinterfaceimpl.cpp @@ -7081,12 +7081,13 @@ Loop: // GC info will assist us in determining whether this is a non-EBP frame and // info about pushed arguments. - PTR_VOID gcInfo = codeInfo.GetGCInfo(); + GCInfoToken gcInfoToken = codeInfo.GetGCInfoToken(); + PTR_VOID gcInfo = gcInfoToken.Info; InfoHdr header; unsigned uiMethodSizeDummy; PTR_CBYTE table = PTR_CBYTE(gcInfo); table += decodeUnsigned(table, &uiMethodSizeDummy); - table = decodeHeader(table, &header); + table = decodeHeader(table, gcInfoToken.Version, &header); // Ok, GCInfo, can we do a simple EBP walk or what? |