Implement GcInfo v2 for X86
authorSwaroop Sridhar <swaroops@microsoft.com>
Mon, 22 Aug 2016 22:06:44 +0000 (15:06 -0700)
committerSwaroop Sridhar <swaroops@microsoft.com>
Wed, 14 Sep 2016 17:16:00 +0000 (10:16 -0700)
commit08e5e9876550745a568bb7b9f00b754b30888426
tree74bafc207d68035e0c3d267c88a1295bc51510d1
parent10126e5f9e398789d6cc1d642022d2afd40128fc
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 dotnet/coreclr#4379

Commit migrated from https://github.com/dotnet/coreclr/commit/4871121dbb7d1ee3282f9beb950cd73fb4f8a95b
20 files changed:
src/coreclr/src/debug/daccess/nidump.cpp
src/coreclr/src/gcdump/gcdumpnonx86.cpp
src/coreclr/src/gcdump/i386/gcdumpx86.cpp
src/coreclr/src/inc/eetwain.h
src/coreclr/src/inc/gcdecoder.cpp
src/coreclr/src/inc/gcdump.h
src/coreclr/src/inc/gcinfo.h
src/coreclr/src/inc/gcinfotypes.h
src/coreclr/src/jit/gcencode.cpp
src/coreclr/src/jit/jitgcinfo.h
src/coreclr/src/vm/codeman.h
src/coreclr/src/vm/debughelp.cpp
src/coreclr/src/vm/eedbginterfaceimpl.cpp
src/coreclr/src/vm/eetwain.cpp
src/coreclr/src/vm/excep.cpp
src/coreclr/src/vm/gccover.cpp
src/coreclr/src/vm/gcenv.ee.cpp
src/coreclr/src/vm/proftoeeinterfaceimpl.cpp
src/coreclr/src/vm/stackwalk.cpp
src/coreclr/src/vm/threadsuspend.cpp