summaryrefslogtreecommitdiff
path: root/src/ToolBox/superpmi/superpmi-shared/methodcontext.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ToolBox/superpmi/superpmi-shared/methodcontext.h')
-rw-r--r--src/ToolBox/superpmi/superpmi-shared/methodcontext.h1179
1 files changed, 1179 insertions, 0 deletions
diff --git a/src/ToolBox/superpmi/superpmi-shared/methodcontext.h b/src/ToolBox/superpmi/superpmi-shared/methodcontext.h
new file mode 100644
index 0000000000..5869c85b45
--- /dev/null
+++ b/src/ToolBox/superpmi/superpmi-shared/methodcontext.h
@@ -0,0 +1,1179 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+//----------------------------------------------------------
+// MethodContext.h - Primary structure to store all the EE-JIT details required to replay creation of a method
+// CompileResult contains the stuff generated by a compilation
+//----------------------------------------------------------
+#ifndef _MethodContext
+#define _MethodContext
+
+#include "runtimedetails.h"
+#include "compileresult.h"
+#include "lightweightmap.h"
+#include "errorhandling.h"
+
+#define METHOD_IDENTITY_INFO_SIZE 0x10000 //We assume that the METHOD_IDENTITY_INFO_SIZE will not exceed 64KB
+
+#define MD5_HASH_BYTE_SIZE 16 //MD5 is 128-bit, so we need 16 bytes to store it
+#define MD5_HASH_BUFFER_SIZE 33 //MD5 is 128-bit, so we need 32 chars + 1 char to store null-terminator
+
+class MethodContext
+{
+public:
+#pragma pack(push, 1)
+ struct Agnostic_CORINFO_SIG_INFO
+ {
+ DWORD callConv;
+ DWORDLONG retTypeClass;
+ DWORDLONG retTypeSigClass;
+ DWORD retType;
+ DWORD flags;
+ DWORD numArgs;
+ DWORD sigInst_classInstCount;
+ DWORD sigInst_classInst_Index;
+ DWORD sigInst_methInstCount;
+ DWORD sigInst_methInst_Index;
+ DWORDLONG args;
+ DWORD pSig;
+ DWORD cbSig;
+ DWORDLONG scope;
+ DWORD token;
+ };
+ struct Agnostic_CORINFO_METHOD_INFO
+ {
+ DWORDLONG ftn;
+ DWORDLONG scope;
+ DWORD ILCode_offset;
+ DWORD ILCodeSize;
+ DWORD maxStack;
+ DWORD EHcount;
+ DWORD options;
+ DWORD regionKind;
+ Agnostic_CORINFO_SIG_INFO args;
+ Agnostic_CORINFO_SIG_INFO locals;
+ };
+ struct Agnostic_CompileMethod
+ {
+ Agnostic_CORINFO_METHOD_INFO info;
+ DWORD flags;
+ };
+ struct Agnostic_InitClass
+ {
+ DWORDLONG field;
+ DWORDLONG method;
+ DWORDLONG context;
+ DWORD speculative;
+ };
+ struct DLDL
+ {
+ DWORDLONG A;
+ DWORDLONG B;
+ };
+ struct Agnostic_CanInline
+ {
+ DWORD Restrictions;
+ DWORD result;
+ DWORD exceptionCode;
+ };
+ struct Agnostic_GetClassGClayout
+ {
+ DWORD gcPtrs_Index;
+ DWORD len;
+ DWORD valCount;
+ };
+ struct DLD
+ {
+ DWORDLONG A;
+ DWORD B;
+ };
+ struct Agnostic_CORINFO_RESOLVED_TOKENin
+ {
+ DWORDLONG tokenContext;
+ DWORDLONG tokenScope;
+ DWORD token;
+ DWORD tokenType;
+ };
+ struct Agnostic_CORINFO_RESOLVED_TOKENout
+ {
+ DWORDLONG hClass;
+ DWORDLONG hMethod;
+ DWORDLONG hField;
+ DWORD pTypeSpec_Index;
+ DWORD cbTypeSpec;
+ DWORD pMethodSpec_Index;
+ DWORD cbMethodSpec;
+ DWORD exceptionCode;
+ };
+ struct Agnostic_GetArgType
+ {
+ Agnostic_CORINFO_SIG_INFO sig;
+ DWORDLONG args;
+ };
+ struct Agnostic_GetArgClass
+ {
+ Agnostic_CORINFO_SIG_INFO sig;
+ DWORDLONG args;
+ };
+ struct Agnostic_GetBoundaries
+ {
+ DWORD cILOffsets;
+ DWORD pILOffset_offset;
+ DWORD implicitBoundaries;
+ };
+ struct Agnostic_CORINFO_EE_INFO
+ {
+ struct Agnostic_InlinedCallFrameInfo
+ {
+ DWORD size;
+ DWORD offsetOfGSCookie;
+ DWORD offsetOfFrameVptr;
+ DWORD offsetOfFrameLink;
+ DWORD offsetOfCallSiteSP;
+ DWORD offsetOfCalleeSavedFP;
+ DWORD offsetOfCallTarget;
+ DWORD offsetOfReturnAddress;
+ }
+ inlinedCallFrameInfo;
+ DWORD offsetOfThreadFrame;
+ DWORD offsetOfGCState;
+ DWORD offsetOfDelegateInstance;
+ DWORD offsetOfDelegateFirstTarget;
+ DWORD offsetOfSecureDelegateIndirectCell;
+ DWORD offsetOfTransparentProxyRP;
+ DWORD offsetOfRealProxyServer;
+ DWORD offsetOfObjArrayData;
+ DWORD sizeOfReversePInvokeFrame;
+ DWORD osPageSize;
+ DWORD maxUncheckedOffsetForNullObject;
+ DWORD targetAbi;
+ DWORD osType;
+ DWORD osMajor;
+ DWORD osMinor;
+ DWORD osBuild;
+ };
+ struct Agnostic_GetFieldAddress
+ {
+ DWORDLONG ppIndirection;
+ DWORDLONG fieldAddress;
+ DWORD fieldValue;
+ };
+ struct Agnostic_CORINFO_RESOLVED_TOKEN
+ {
+ DWORDLONG tokenContext;
+ DWORDLONG tokenScope;
+ DWORD token;
+ DWORD tokenType;
+ DWORDLONG hClass;
+ DWORDLONG hMethod;
+ DWORDLONG hField;
+ DWORD typeSpec_Index;
+ DWORD cbTypeSpec;
+ DWORD methodSpec_Index;
+ DWORD cbMethodSpec;
+ };
+ struct Agnostic_GetFieldInfo
+ {
+ Agnostic_CORINFO_RESOLVED_TOKEN ResolvedToken;
+ DWORDLONG callerHandle;
+ DWORD flags;
+ };
+ struct Agnostic_CORINFO_HELPER_ARG
+ {
+ DWORDLONG constant; //one view of a large union of ptr size
+ DWORD argType;
+ };
+ struct Agnostic_CORINFO_HELPER_DESC
+ {
+ DWORD helperNum;
+ DWORD numArgs;
+ Agnostic_CORINFO_HELPER_ARG args[CORINFO_ACCESS_ALLOWED_MAX_ARGS];
+ };
+ struct Agnostic_CORINFO_FIELD_INFO
+ {
+ DWORD fieldAccessor;
+ DWORD fieldFlags;
+ DWORD helper;
+ DWORD offset;
+ DWORD fieldType;
+ DWORDLONG structType;
+ DWORD accessAllowed;
+ Agnostic_CORINFO_HELPER_DESC accessCalloutHelper;
+ };
+ struct DD
+ {
+ DWORD A;
+ DWORD B;
+ };
+ struct Agnostic_CanTailCall
+ {
+ DWORDLONG callerHnd;
+ DWORDLONG declaredCalleeHnd;
+ DWORDLONG exactCalleeHnd;
+ WORD fIsTailPrefix;
+ };
+ struct Agnostic_Environment
+ {
+ DWORD name_index;;
+ DWORD val_index;
+ };
+ struct Agnostic_GetCallInfo
+ {
+ Agnostic_CORINFO_RESOLVED_TOKEN ResolvedToken;
+ Agnostic_CORINFO_RESOLVED_TOKEN ConstrainedResolvedToken;
+ DWORDLONG callerHandle;
+ DWORD flags;
+ };
+ struct Agnostic_CORINFO_LOOKUP_KIND
+ {
+ DWORD needsRuntimeLookup;
+ DWORD runtimeLookupKind;
+ WORD runtimeLookupFlags;
+ };
+ struct Agnostic_CORINFO_RUNTIME_LOOKUP
+ {
+ DWORDLONG signature;
+ DWORD helper;
+ DWORD indirections;
+ DWORD testForNull;
+ DWORD testForFixup;
+ DWORDLONG offsets[CORINFO_MAXINDIRECTIONS];
+ };
+ struct Agnostic_CORINFO_CONST_LOOKUP
+ {
+ DWORD accessType;
+ DWORDLONG handle; // actually a union of two pointer sized things
+ };
+ struct Agnostic_CORINFO_LOOKUP
+ {
+ Agnostic_CORINFO_LOOKUP_KIND lookupKind;
+ Agnostic_CORINFO_RUNTIME_LOOKUP runtimeLookup; //This and constLookup actually a union, but with different layouts.. :-| copy the right one based on lookupKinds value
+ Agnostic_CORINFO_CONST_LOOKUP constLookup;
+ };
+ struct Agnostic_CORINFO_CALL_INFO
+ {
+ DWORDLONG hMethod;
+ DWORD methodFlags;
+ DWORD classFlags;
+ Agnostic_CORINFO_SIG_INFO sig;
+ DWORD verMethodFlags;
+ Agnostic_CORINFO_SIG_INFO verSig;
+ DWORD accessAllowed;
+ Agnostic_CORINFO_HELPER_DESC callsiteCalloutHelper;
+ DWORD thisTransform;
+ DWORD kind;
+ DWORD nullInstanceCheck;
+ DWORDLONG contextHandle;
+ DWORD exactContextNeedsRuntimeLookup;
+ Agnostic_CORINFO_LOOKUP stubLookup;//first view of union. others are matching or subordinate
+ Agnostic_CORINFO_CONST_LOOKUP instParamLookup;
+ DWORD secureDelegateInvoke;
+ DWORD exceptionCode;
+ };
+ struct Agnostic_GetMethodInfo
+ {
+ Agnostic_CORINFO_METHOD_INFO info;
+ bool result;
+ DWORD exceptionCode;
+ };
+ struct Agnostic_FindSig
+ {
+ DWORDLONG module;
+ DWORD sigTOK;
+ DWORDLONG context;
+ };
+ struct Agnostic_PInvokeMarshalingRequired
+ {
+ DWORDLONG method;
+ Agnostic_CORINFO_SIG_INFO callSiteSig;
+ };
+ struct Agnostic_CORINFO_EH_CLAUSE
+ {
+ DWORD Flags;
+ DWORD TryOffset;
+ DWORD TryLength;
+ DWORD HandlerOffset;
+ DWORD HandlerLength;
+ DWORD ClassToken;//first view of a two dword union
+ };
+ struct Agnostic_GetVars
+ {
+ DWORD cVars;
+ DWORD vars_offset;
+ DWORD extendOthers;
+ };
+ struct Agnostic_CanAccessClassIn
+ {
+ Agnostic_CORINFO_RESOLVED_TOKEN ResolvedToken;
+ DWORDLONG callerHandle;
+ };
+ struct Agnostic_CanAccessClassOut
+ {
+ Agnostic_CORINFO_HELPER_DESC AccessHelper;
+ DWORD result;
+ };
+ struct Agnostic_AppendClassName
+ {
+ DWORDLONG classHandle;
+ DWORD fNamespace;
+ DWORD fFullInst;
+ DWORD fAssembly;
+ };
+ struct Agnostic_CheckMethodModifier
+ {
+ DWORDLONG hMethod;
+ DWORD modifier;
+ DWORD fOptional;
+ };
+ struct Agnostic_EmbedGenericHandle
+ {
+ Agnostic_CORINFO_RESOLVED_TOKEN ResolvedToken;
+ DWORD fEmbedParent;
+ };
+ struct Agnostic_CORINFO_GENERICHANDLE_RESULT
+ {
+
+ Agnostic_CORINFO_LOOKUP lookup;
+ DWORDLONG compileTimeHandle;
+ DWORD handleType;
+ };
+ struct Agnostic_GetDelegateCtorIn
+ {
+ DWORDLONG methHnd;
+ DWORDLONG clsHnd;
+ DWORDLONG targetMethodHnd;
+ };
+ struct Agnostic_DelegateCtorArgs
+ {
+ DWORDLONG pMethod;
+ DWORDLONG pArg3;
+ DWORDLONG pArg4;
+ DWORDLONG pArg5;
+ };
+ struct Agnostic_GetDelegateCtorOut
+ {
+ Agnostic_DelegateCtorArgs CtorData;
+ DWORDLONG result;
+ };
+ struct Agnostic_FindCallSiteSig
+ {
+ DWORDLONG module;
+ DWORD methTok;
+ DWORDLONG context;
+ };
+ struct Agnostic_GetNewHelper
+ {
+ Agnostic_CORINFO_RESOLVED_TOKEN ResolvedToken;
+ DWORDLONG callerHandle;
+ };
+ struct Agnostic_GetCastingHelper
+ {
+ Agnostic_CORINFO_RESOLVED_TOKEN ResolvedToken;
+ DWORD fThrowing;
+ };
+ struct Agnostic_GetClassModuleIdForStatics
+ {
+ DWORDLONG Module;
+ DWORDLONG pIndirection;
+ DWORDLONG result;
+ };
+ struct Agnostic_IsCompatibleDelegate
+ {
+ DWORDLONG objCls;
+ DWORDLONG methodParentCls;
+ DWORDLONG method;
+ DWORDLONG delegateCls;
+ };
+ struct Agnostic_GetBBProfileData
+ {
+ DWORD count;
+ DWORD profileBuffer_index;
+ DWORD numRuns;
+ DWORD result;
+ };
+ struct Agnostic_GetProfilingHandle
+ {
+ DWORD bHookFunction;
+ DWORDLONG ProfilerHandle;
+ DWORD bIndirectedHandles;
+ };
+ struct Agnostic_GetTailCallCopyArgsThunk
+ {
+ Agnostic_CORINFO_SIG_INFO Sig;
+ DWORD flags;
+ };
+ struct Agnostic_GetArgClass_Value
+ {
+ DWORDLONG result;
+ DWORD exceptionCode;
+ };
+ struct Agnostic_GetArgType_Value
+ {
+ DWORDLONG vcTypeRet;
+ DWORD result;
+ DWORD exceptionCode;
+ };
+
+ // Agnostic_ConfigIntInfo combines as a single key the name
+ // and defaultValue of a integer config query.
+ // Note: nameIndex is treated as a DWORD index to the name string.
+ struct Agnostic_ConfigIntInfo
+ {
+ DWORD nameIndex;
+ DWORD defaultValue;
+ };
+
+ // SYSTEMV_AMD64_CORINFO_STRUCT_REG_PASSING_DESCRIPTOR
+ struct Agnostic_GetSystemVAmd64PassStructInRegisterDescriptor
+ {
+ DWORD passedInRegisters; // Whether the struct is passable/passed (this includes struct returning) in registers.
+ DWORD eightByteCount; // Number of eightbytes for this struct.
+ DWORD eightByteClassifications[CLR_SYSTEMV_MAX_EIGHTBYTES_COUNT_TO_PASS_IN_REGISTERS]; // The eightbytes type classification.
+ DWORD eightByteSizes[CLR_SYSTEMV_MAX_EIGHTBYTES_COUNT_TO_PASS_IN_REGISTERS]; // The size of the eightbytes (an eightbyte could include padding. This represents the no padding size of the eightbyte).
+ DWORD eightByteOffsets[CLR_SYSTEMV_MAX_EIGHTBYTES_COUNT_TO_PASS_IN_REGISTERS]; // The start offset of the eightbytes (in bytes).
+ DWORD result;
+ };
+
+#pragma pack(pop)
+
+ MethodContext();
+
+private:
+
+ MethodContext(HANDLE hFile);
+ MethodContext(unsigned char *buff, unsigned int totalLen);
+
+ void MethodInitHelper(unsigned char *buff, unsigned int totalLen);
+ void MethodInitHelperFile(HANDLE hFile);
+
+ bool Initialize(int loadedCount, unsigned char* buff, DWORD size);
+ bool Initialize(int loadedCount, HANDLE hFile);
+
+ int dumpMD5HashToBuffer(BYTE *pBuffer, int bufLen, char *buff, int len);
+
+public:
+
+ static bool Initialize(int loadedCount, unsigned char* buff, DWORD size, /* OUT */ MethodContext** ppmc);
+ static bool Initialize(int loadedCount, HANDLE hFile, /* OUT */ MethodContext** ppmc);
+ ~MethodContext();
+ void Destroy();
+
+ bool Equal(MethodContext *other);
+ unsigned int saveToFile(HANDLE hFile);
+ unsigned int calculateFileSize();
+ unsigned int calculateRawFileSize();
+ void dumpToConsole(int mcNumber = -1); // if mcNumber is not -1, display the method context number before the dumped info
+ int dumpStatToBuffer(char *buff, int len);
+ static int dumpStatTitleToBuffer(char *buff, int len);
+ int methodSize;
+
+ int dumpMethodIdentityInfoToBuffer(char *buff, int len);
+ int dumpMethodMD5HashToBuffer(char *buff, int len);
+
+ void recGlobalContext(const MethodContext& other);
+
+ void recEnvironment();
+ void dmpEnvironment(DWORD key, const Agnostic_Environment& value);
+ void repEnvironmentSet();
+ void repEnvironmentUnset();
+ int repEnvironmentGetCount();
+ int repGetTestID();
+
+ void recCompileMethod(CORINFO_METHOD_INFO *info, unsigned flags);
+ void dmpCompileMethod(DWORD key, const Agnostic_CompileMethod& value);
+ void repCompileMethod(CORINFO_METHOD_INFO *info, unsigned *flags);
+
+ void recGetMethodClass(CORINFO_METHOD_HANDLE methodHandle, CORINFO_CLASS_HANDLE classHandle);
+ void dmpGetMethodClass(DWORDLONG key, DWORDLONG value);
+ CORINFO_CLASS_HANDLE repGetMethodClass(CORINFO_METHOD_HANDLE methodHandle);
+
+ void recGetClassAttribs(CORINFO_CLASS_HANDLE classHandle, DWORD attribs);
+ void dmpGetClassAttribs(DWORDLONG key, DWORD value);
+ DWORD repGetClassAttribs(CORINFO_CLASS_HANDLE classHandle);
+
+ void recGetMethodAttribs(CORINFO_METHOD_HANDLE methodHandle, DWORD attribs);
+ void dmpGetMethodAttribs(DWORDLONG key, DWORD value);
+ DWORD repGetMethodAttribs(CORINFO_METHOD_HANDLE methodHandle);
+
+ void recGetVars(CORINFO_METHOD_HANDLE ftn, ULONG32 *cVars, ICorDebugInfo::ILVarInfo **vars, bool *extendOthers);
+ void dmpGetVars(DWORDLONG key, const Agnostic_GetVars& value);
+ void repGetVars(CORINFO_METHOD_HANDLE ftn, ULONG32 *cVars, ICorDebugInfo::ILVarInfo **vars, bool *extendOthers);
+
+ void recGetBoundaries(CORINFO_METHOD_HANDLE ftn, unsigned int *cILOffsets, DWORD **pILOffsets, ICorDebugInfo::BoundaryTypes *implictBoundaries);
+ void dmpGetBoundaries(DWORDLONG key, const Agnostic_GetBoundaries& value);
+ void repGetBoundaries(CORINFO_METHOD_HANDLE ftn, unsigned int *cILOffsets, DWORD **pILOffsets, ICorDebugInfo::BoundaryTypes *implictBoundaries);
+
+ void recInitClass(CORINFO_FIELD_HANDLE field, CORINFO_METHOD_HANDLE method, CORINFO_CONTEXT_HANDLE context, BOOL speculative, CorInfoInitClassResult result);
+ void dmpInitClass(const Agnostic_InitClass& key, DWORD value);
+ CorInfoInitClassResult repInitClass(CORINFO_FIELD_HANDLE field, CORINFO_METHOD_HANDLE method, CORINFO_CONTEXT_HANDLE context, BOOL speculative);
+
+ void recGetMethodName(CORINFO_METHOD_HANDLE ftn, char *methodname, const char **moduleName);
+ void dmpGetMethodName(DLD key, DD value);
+ const char *repGetMethodName(CORINFO_METHOD_HANDLE ftn, const char **moduleName);
+
+ void MethodContext::recGetJitFlags(CORJIT_FLAGS *jitFlags, DWORD sizeInBytes, DWORD result);
+ void MethodContext::dmpGetJitFlags(DWORD key, DD value);
+ DWORD MethodContext::repGetJitFlags(CORJIT_FLAGS *jitFlags, DWORD sizeInBytes);
+
+ void recGetJitTimeLogFilename(LPCWSTR tempFileName);
+ void dmpGetJitTimeLogFilename(DWORD key, DWORD value);
+ LPCWSTR repGetJitTimeLogFilename();
+
+ void recCanInline(CORINFO_METHOD_HANDLE callerHnd, CORINFO_METHOD_HANDLE calleeHnd, DWORD *pRestrictions, CorInfoInline response, DWORD exceptionCode);
+ void dmpCanInline(DLDL key, const Agnostic_CanInline& value);
+ CorInfoInline repCanInline(CORINFO_METHOD_HANDLE callerHnd, CORINFO_METHOD_HANDLE calleeHnd, DWORD* pRestrictions, DWORD *exceptionCode);
+
+ void recResolveToken(CORINFO_RESOLVED_TOKEN * pResolvedToken, DWORD exceptionCode);
+ void dmpResolveToken(const Agnostic_CORINFO_RESOLVED_TOKENin& key, const Agnostic_CORINFO_RESOLVED_TOKENout& value);
+ void repResolveToken(CORINFO_RESOLVED_TOKEN * pResolvedToken, DWORD *exceptionCode);
+
+ void recTryResolveToken(CORINFO_RESOLVED_TOKEN * pResolvedToken, bool success);
+ void dmpTryResolveToken(const Agnostic_CORINFO_RESOLVED_TOKENin& key, const Agnostic_CORINFO_RESOLVED_TOKENout& value);
+ bool repTryResolveToken(CORINFO_RESOLVED_TOKEN * pResolvedToken);
+
+ void recGetCallInfo(CORINFO_RESOLVED_TOKEN *pResolvedToken, CORINFO_RESOLVED_TOKEN *pConstrainedResolvedToken,
+ CORINFO_METHOD_HANDLE callerHandle, CORINFO_CALLINFO_FLAGS flags, CORINFO_CALL_INFO *pResult, DWORD exceptionCode);
+ void dmpGetCallInfo(const Agnostic_GetCallInfo& key, const Agnostic_CORINFO_CALL_INFO& value);
+ void repGetCallInfo(CORINFO_RESOLVED_TOKEN *pResolvedToken, CORINFO_RESOLVED_TOKEN *pConstrainedResolvedToken,
+ CORINFO_METHOD_HANDLE callerHandle, CORINFO_CALLINFO_FLAGS flags, CORINFO_CALL_INFO *pResult, DWORD *exceptionCode);
+ void repGetCallInfoFromMethodHandle(CORINFO_METHOD_HANDLE methodHandle, CORINFO_CALL_INFO *pResult);
+
+ void recGetIntrinsicID(CORINFO_METHOD_HANDLE method, bool* pMustExpand, CorInfoIntrinsics result);
+ void dmpGetIntrinsicID(DWORDLONG key, DD value);
+ CorInfoIntrinsics repGetIntrinsicID(CORINFO_METHOD_HANDLE method, bool* pMustExpand);
+
+ void recGetUnmanagedCallConv(CORINFO_METHOD_HANDLE method, CorInfoUnmanagedCallConv result);
+ void dmpGetUnmanagedCallConv(DWORDLONG key, DWORD result);
+ CorInfoUnmanagedCallConv repGetUnmanagedCallConv(CORINFO_METHOD_HANDLE method);
+
+ void recIsInstantiationOfVerifiedGeneric(CORINFO_METHOD_HANDLE method, CorInfoInstantiationVerification result);
+ void dmpIsInstantiationOfVerifiedGeneric(DWORDLONG key, DWORD value);
+ CorInfoInstantiationVerification repIsInstantiationOfVerifiedGeneric(CORINFO_METHOD_HANDLE method);
+
+ void recAsCorInfoType(CORINFO_CLASS_HANDLE cls, CorInfoType result);
+ void dmpAsCorInfoType(DWORDLONG key, DWORD value);
+ CorInfoType repAsCorInfoType(CORINFO_CLASS_HANDLE cls);
+
+ void recIsValueClass(CORINFO_CLASS_HANDLE cls, BOOL result);
+ void dmpIsValueClass(DWORDLONG key, DWORD value);
+ BOOL repIsValueClass(CORINFO_CLASS_HANDLE cls);
+
+ void recIsStructRequiringStackAllocRetBuf(CORINFO_CLASS_HANDLE cls, BOOL result);
+ void dmpIsStructRequiringStackAllocRetBuf(DWORDLONG key, DWORD value);
+ BOOL repIsStructRequiringStackAllocRetBuf(CORINFO_CLASS_HANDLE cls);
+
+ void recGetClassSize(CORINFO_CLASS_HANDLE cls, unsigned result);
+ void dmpGetClassSize(DWORDLONG key, DWORD val);
+ unsigned repGetClassSize(CORINFO_CLASS_HANDLE cls);
+
+ void recGetClassNumInstanceFields(CORINFO_CLASS_HANDLE cls, unsigned result);
+ void dmpGetClassNumInstanceFields(DWORDLONG key, DWORD value);
+ unsigned repGetClassNumInstanceFields(CORINFO_CLASS_HANDLE cls);
+
+ void recGetNewArrHelper(CORINFO_CLASS_HANDLE arrayCls, CorInfoHelpFunc result);
+ void dmpGetNewArrHelper(DWORDLONG key, DWORD value);
+ CorInfoHelpFunc repGetNewArrHelper(CORINFO_CLASS_HANDLE arrayCls);
+
+ void recGetSharedCCtorHelper(CORINFO_CLASS_HANDLE clsHnd, CorInfoHelpFunc result);
+ void dmpGetSharedCCtorHelper(DWORDLONG key, DWORD value);
+ CorInfoHelpFunc repGetSharedCCtorHelper(CORINFO_CLASS_HANDLE clsHnd);
+
+ void recGetSecurityPrologHelper(CORINFO_METHOD_HANDLE ftn, CorInfoHelpFunc result);
+ void dmpGetSecurityPrologHelper(DWORDLONG key, DWORD value);
+ CorInfoHelpFunc repGetSecurityPrologHelper(CORINFO_METHOD_HANDLE ftn);
+
+ void recGetTypeForBox(CORINFO_CLASS_HANDLE cls, CORINFO_CLASS_HANDLE result);
+ void dmpGetTypeForBox(DWORDLONG key, DWORDLONG value);
+ CORINFO_CLASS_HANDLE repGetTypeForBox(CORINFO_CLASS_HANDLE cls);
+
+ void recGetBoxHelper(CORINFO_CLASS_HANDLE cls, CorInfoHelpFunc result);
+ void dmpGetBoxHelper(DWORDLONG key, DWORD value);
+ CorInfoHelpFunc repGetBoxHelper(CORINFO_CLASS_HANDLE cls);
+
+ void recGetBuiltinClass(CorInfoClassId classId, CORINFO_CLASS_HANDLE result);
+ void dmpGetBuiltinClass(DWORD key, DWORDLONG value);
+ CORINFO_CLASS_HANDLE repGetBuiltinClass(CorInfoClassId classId);
+
+ void recGetTypeForPrimitiveValueClass(CORINFO_CLASS_HANDLE cls, CorInfoType result);
+ void dmpGetTypeForPrimitiveValueClass(DWORDLONG key, DWORD value);
+ CorInfoType repGetTypeForPrimitiveValueClass(CORINFO_CLASS_HANDLE cls);
+
+ void recGetParentType(CORINFO_CLASS_HANDLE cls, CORINFO_CLASS_HANDLE result);
+ void dmpGetParentType(DWORDLONG key, DWORDLONG value);
+ CORINFO_CLASS_HANDLE repGetParentType(CORINFO_CLASS_HANDLE cls);
+
+ void recIsSDArray(CORINFO_CLASS_HANDLE cls, BOOL result);
+ void dmpIsSDArray(DWORDLONG key, DWORD value);
+ BOOL repIsSDArray(CORINFO_CLASS_HANDLE cls);
+
+ void recIsInSIMDModule(CORINFO_CLASS_HANDLE cls, BOOL result);
+ void dmpIsInSIMDModule(DWORDLONG key, DWORD value);
+ BOOL repIsInSIMDModule(CORINFO_CLASS_HANDLE cls);
+
+ void recGetFieldClass(CORINFO_FIELD_HANDLE field, CORINFO_CLASS_HANDLE result);
+ void dmpGetFieldClass(DWORDLONG key, DWORDLONG value);
+ CORINFO_CLASS_HANDLE repGetFieldClass(CORINFO_FIELD_HANDLE field);
+
+ void recGetFieldOffset(CORINFO_FIELD_HANDLE field, unsigned result);
+ void dmpGetFieldOffset(DWORDLONG key, DWORD value);
+ unsigned repGetFieldOffset(CORINFO_FIELD_HANDLE field);
+
+ void recGetLazyStringLiteralHelper(CORINFO_MODULE_HANDLE handle, CorInfoHelpFunc result);
+ void dmpGetLazyStringLiteralHelper(DWORDLONG key, DWORD value);
+ CorInfoHelpFunc repGetLazyStringLiteralHelper(CORINFO_MODULE_HANDLE handle);
+
+ void recGetUnBoxHelper(CORINFO_CLASS_HANDLE cls, CorInfoHelpFunc result);
+ void dmpGetUnBoxHelper(DWORDLONG key, DWORD value);
+ CorInfoHelpFunc repGetUnBoxHelper(CORINFO_CLASS_HANDLE cls);
+
+ void recGetReadyToRunHelper(CORINFO_RESOLVED_TOKEN* pResolvedToken, CORINFO_LOOKUP_KIND* pGenericLookupKind, CorInfoHelpFunc id, CORINFO_CONST_LOOKUP* pLookup, bool result);
+ void dmpGetReadyToRunHelper(DWORDLONG key, DWORD value);
+ bool repGetReadyToRunHelper(CORINFO_RESOLVED_TOKEN* pResolvedToken, CORINFO_LOOKUP_KIND* pGenericLookupKind, CorInfoHelpFunc id, CORINFO_CONST_LOOKUP* pLookup);
+
+ void recGetReadyToRunDelegateCtorHelper(CORINFO_RESOLVED_TOKEN* pTargetMethod, CORINFO_CLASS_HANDLE delegateType, CORINFO_CONST_LOOKUP* pLookup);
+ void dmpGetReadyToRunDelegateCtorHelper(DWORDLONG key, DWORD value);
+ void repGetReadyToRunDelegateCtorHelper(CORINFO_RESOLVED_TOKEN* pTargetMethod, CORINFO_CLASS_HANDLE delegateType, CORINFO_CONST_LOOKUP* pLookup);
+
+ void recGetHelperFtn(CorInfoHelpFunc ftnNum, void **ppIndirection, void *result);
+ void dmpGetHelperFtn(DWORD key, DLDL value);
+ void* repGetHelperFtn(CorInfoHelpFunc ftnNum, void **ppIndirection);
+ bool fndGetHelperFtn(void *functionAddress, CorInfoHelpFunc *pResult);
+
+ void recGetJustMyCodeHandle(CORINFO_METHOD_HANDLE method, CORINFO_JUST_MY_CODE_HANDLE **ppIndirection, CORINFO_JUST_MY_CODE_HANDLE result);
+ void dmpGetJustMyCodeHandle(DWORDLONG key, DLDL value);
+ CORINFO_JUST_MY_CODE_HANDLE repGetJustMyCodeHandle(CORINFO_METHOD_HANDLE method, CORINFO_JUST_MY_CODE_HANDLE **ppIndirection);
+
+ void recGetFunctionEntryPoint(CORINFO_METHOD_HANDLE ftn, CORINFO_CONST_LOOKUP *pResult, CORINFO_ACCESS_FLAGS accessFlags);
+ void dmpGetFunctionEntryPoint(DLD key, DLD value);
+ void repGetFunctionEntryPoint(CORINFO_METHOD_HANDLE ftn, CORINFO_CONST_LOOKUP *pResult, CORINFO_ACCESS_FLAGS accessFlags);
+ bool fndGetFunctionEntryPoint(DLD value, CORINFO_METHOD_HANDLE *pResult);
+
+ void recConstructStringLiteral(CORINFO_MODULE_HANDLE module, mdToken metaTok, void *ppValue, InfoAccessType result);
+ void dmpConstructStringLiteral(DLD key, DLD value);
+ InfoAccessType repConstructStringLiteral(CORINFO_MODULE_HANDLE module, mdToken metaTok, void **ppValue);
+
+ void recEmptyStringLiteral(void **ppValue, InfoAccessType result);
+ void dmpEmptyStringLiteral(DWORD key, DLD value);
+ InfoAccessType repEmptyStringLiteral(void **ppValue);
+
+ void recGetArgType(CORINFO_SIG_INFO* sig, CORINFO_ARG_LIST_HANDLE args, CORINFO_CLASS_HANDLE *vcTypeRet, CorInfoTypeWithMod result, DWORD exception);
+ void dmpGetArgType(const Agnostic_GetArgType& key, const Agnostic_GetArgType_Value& value);
+ CorInfoTypeWithMod repGetArgType(CORINFO_SIG_INFO* sig, CORINFO_ARG_LIST_HANDLE args, CORINFO_CLASS_HANDLE *vcTypeRet, DWORD *exception);
+
+ void recGetArgNext(CORINFO_ARG_LIST_HANDLE args, CORINFO_ARG_LIST_HANDLE result);
+ void dmpGetArgNext(DWORDLONG key, DWORDLONG value);
+ CORINFO_ARG_LIST_HANDLE repGetArgNext(CORINFO_ARG_LIST_HANDLE args);
+
+ void recGetMethodSig(CORINFO_METHOD_HANDLE ftn, CORINFO_SIG_INFO *sig, CORINFO_CLASS_HANDLE memberParent);
+ void dmpGetMethodSig(DLDL key, const Agnostic_CORINFO_SIG_INFO& value);
+ void repGetMethodSig(CORINFO_METHOD_HANDLE ftn, CORINFO_SIG_INFO *sig, CORINFO_CLASS_HANDLE memberParent);
+
+ void recGetArgClass(CORINFO_SIG_INFO* sig, CORINFO_ARG_LIST_HANDLE args, CORINFO_CLASS_HANDLE result, DWORD exceptionCode);
+ void dmpGetArgClass(const Agnostic_GetArgClass& key, const Agnostic_GetArgClass_Value& value);
+ CORINFO_CLASS_HANDLE repGetArgClass(CORINFO_SIG_INFO* sig, CORINFO_ARG_LIST_HANDLE args, DWORD *exceptionCode);
+
+ void recGetMethodInfo(CORINFO_METHOD_HANDLE ftn, CORINFO_METHOD_INFO *info, bool result, DWORD exceptionCode);
+ void dmpGetMethodInfo(DWORDLONG key, const Agnostic_GetMethodInfo& value);
+ bool repGetMethodInfo(CORINFO_METHOD_HANDLE ftn, CORINFO_METHOD_INFO *info, DWORD *exceptionCode);
+
+ void recGetNewHelper(CORINFO_RESOLVED_TOKEN *pResolvedToken, CORINFO_METHOD_HANDLE callerHandle, CorInfoHelpFunc result);
+ void dmpGetNewHelper(const Agnostic_GetNewHelper& key, DWORD value);
+ CorInfoHelpFunc repGetNewHelper(CORINFO_RESOLVED_TOKEN *pResolvedToken, CORINFO_METHOD_HANDLE callerHandle);
+
+ void recEmbedGenericHandle(CORINFO_RESOLVED_TOKEN *pResolvedToken, BOOL fEmbedParent, CORINFO_GENERICHANDLE_RESULT *pResult);
+ void dmpEmbedGenericHandle(const Agnostic_EmbedGenericHandle& key, const Agnostic_CORINFO_GENERICHANDLE_RESULT& value);
+ void repEmbedGenericHandle(CORINFO_RESOLVED_TOKEN *pResolvedToken, BOOL fEmbedParent, CORINFO_GENERICHANDLE_RESULT *pResult);
+
+ void recGetEHinfo(CORINFO_METHOD_HANDLE ftn, unsigned EHnumber, CORINFO_EH_CLAUSE *clause);
+ void dmpGetEHinfo(DLD key, const Agnostic_CORINFO_EH_CLAUSE& value);
+ void repGetEHinfo(CORINFO_METHOD_HANDLE ftn, unsigned EHnumber, CORINFO_EH_CLAUSE *clause);
+
+ void recGetMethodVTableOffset(CORINFO_METHOD_HANDLE method, unsigned *offsetOfIndirection, unsigned* offsetAfterIndirection);
+ void dmpGetMethodVTableOffset(DWORDLONG key, DD value);
+ void repGetMethodVTableOffset(CORINFO_METHOD_HANDLE method, unsigned *offsetOfIndirection, unsigned* offsetAfterIndirection);
+
+ void recGetTokenTypeAsHandle(CORINFO_RESOLVED_TOKEN * pResolvedToken, CORINFO_CLASS_HANDLE result);
+ void dmpGetTokenTypeAsHandle(const Agnostic_CORINFO_RESOLVED_TOKEN& key, DWORDLONG value);
+ CORINFO_CLASS_HANDLE repGetTokenTypeAsHandle(CORINFO_RESOLVED_TOKEN * pResolvedToken);
+
+ void recGetFieldInfo(CORINFO_RESOLVED_TOKEN *pResolvedToken, CORINFO_METHOD_HANDLE callerHandle, CORINFO_ACCESS_FLAGS flags,
+ CORINFO_FIELD_INFO *pResult);
+ void dmpGetFieldInfo(const Agnostic_GetFieldInfo& key, const Agnostic_CORINFO_FIELD_INFO& value);
+ void repGetFieldInfo(CORINFO_RESOLVED_TOKEN *pResolvedToken, CORINFO_METHOD_HANDLE callerHandle, CORINFO_ACCESS_FLAGS flags,
+ CORINFO_FIELD_INFO *pResult);
+
+ void recEmbedMethodHandle(CORINFO_METHOD_HANDLE handle, void **ppIndirection, CORINFO_METHOD_HANDLE result);
+ void dmpEmbedMethodHandle(DWORDLONG key, DLDL value);
+ CORINFO_METHOD_HANDLE repEmbedMethodHandle(CORINFO_METHOD_HANDLE handle, void **ppIndirection);
+
+ void recGetFieldAddress(CORINFO_FIELD_HANDLE field, void **ppIndirection, void *result, CorInfoType cit);
+ void dmpGetFieldAddress(DWORDLONG key, const Agnostic_GetFieldAddress& value);
+ void* repGetFieldAddress(CORINFO_FIELD_HANDLE field, void **ppIndirection);
+
+ void recGetClassGClayout(CORINFO_CLASS_HANDLE cls, BYTE *gcPtrs, unsigned len, unsigned result);
+ void dmpGetClassGClayout(DWORDLONG key, const Agnostic_GetClassGClayout& value);
+ unsigned repGetClassGClayout(CORINFO_CLASS_HANDLE cls, BYTE *gcPtrs);
+
+ void recGetClassAlignmentRequirement(CORINFO_CLASS_HANDLE cls, BOOL fDoubleAlignHint, unsigned result);
+ void dmpGetClassAlignmentRequirement(DLD key, DWORD value);
+ unsigned repGetClassAlignmentRequirement(CORINFO_CLASS_HANDLE cls, BOOL fDoubleAlignHint);
+
+ void recCanAccessClass(CORINFO_RESOLVED_TOKEN *pResolvedToken, CORINFO_METHOD_HANDLE callerHandle,
+ CORINFO_HELPER_DESC *pAccessHelper, CorInfoIsAccessAllowedResult result);
+ void dmpCanAccessClass(const Agnostic_CanAccessClassIn& key, const Agnostic_CanAccessClassOut& value);
+ CorInfoIsAccessAllowedResult repCanAccessClass(CORINFO_RESOLVED_TOKEN *pResolvedToken, CORINFO_METHOD_HANDLE callerHandle,
+ CORINFO_HELPER_DESC *pAccessHelper);
+
+ void recGetCastingHelper(CORINFO_RESOLVED_TOKEN *pResolvedToken, bool fThrowing, CorInfoHelpFunc result);
+ void dmpGetCastingHelper(const Agnostic_GetCastingHelper& key, DWORD value);
+ CorInfoHelpFunc repGetCastingHelper(CORINFO_RESOLVED_TOKEN *pResolvedToken, bool fThrowing);
+
+ void recEmbedModuleHandle(CORINFO_MODULE_HANDLE handle, void **ppIndirection, CORINFO_MODULE_HANDLE result);
+ void dmpEmbedModuleHandle(DWORDLONG key, DLDL value);
+ CORINFO_MODULE_HANDLE repEmbedModuleHandle(CORINFO_MODULE_HANDLE handle, void **ppIndirection);
+
+ void recEmbedClassHandle(CORINFO_CLASS_HANDLE handle, void **ppIndirection, CORINFO_CLASS_HANDLE result);
+ void dmpEmbedClassHandle(DWORDLONG key, DLDL value);
+ CORINFO_CLASS_HANDLE repEmbedClassHandle(CORINFO_CLASS_HANDLE handle, void **ppIndirection);
+
+ void recPInvokeMarshalingRequired(CORINFO_METHOD_HANDLE method, CORINFO_SIG_INFO* callSiteSig, BOOL result);
+ void dmpPInvokeMarshalingRequired(const Agnostic_PInvokeMarshalingRequired& key, DWORD value);
+ BOOL repPInvokeMarshalingRequired(CORINFO_METHOD_HANDLE method, CORINFO_SIG_INFO* callSiteSig);
+
+ void recFindSig(CORINFO_MODULE_HANDLE module, unsigned sigTOK, CORINFO_CONTEXT_HANDLE context, CORINFO_SIG_INFO *sig);
+ void dmpFindSig(const Agnostic_FindSig& key, const Agnostic_CORINFO_SIG_INFO& value);
+ void repFindSig(CORINFO_MODULE_HANDLE module, unsigned sigTOK, CORINFO_CONTEXT_HANDLE context, CORINFO_SIG_INFO *sig);
+
+ void recGetEEInfo(CORINFO_EE_INFO *pEEInfoOut);
+ void dmpGetEEInfo(DWORD key, const Agnostic_CORINFO_EE_INFO& value);
+ void repGetEEInfo(CORINFO_EE_INFO *pEEInfoOut);
+
+ void recGetGSCookie(GSCookie *pCookieVal, GSCookie **ppCookieVal);
+ void dmpGetGSCookie(DWORD key, DLDL value);
+ void repGetGSCookie(GSCookie *pCookieVal, GSCookie **ppCookieVal);
+
+ void recGetClassModuleIdForStatics(CORINFO_CLASS_HANDLE cls, CORINFO_MODULE_HANDLE *pModule, void **ppIndirection, size_t result);
+ void dmpGetClassModuleIdForStatics(DWORDLONG key, const Agnostic_GetClassModuleIdForStatics& value);
+ size_t repGetClassModuleIdForStatics(CORINFO_CLASS_HANDLE cls, CORINFO_MODULE_HANDLE *pModule, void **ppIndirection);
+
+ void recGetThreadTLSIndex(void **ppIndirection, DWORD result);
+ void dmpGetThreadTLSIndex(DWORD key, DLD value);
+ DWORD repGetThreadTLSIndex(void **ppIndirection);
+
+ void recGetInlinedCallFrameVptr(void **ppIndirection, const void * result);
+ void dmpGetInlinedCallFrameVptr(DWORD key, DLDL value);
+ const void * repGetInlinedCallFrameVptr(void **ppIndirection);
+
+ void recGetAddrOfCaptureThreadGlobal(void **ppIndirection, LONG * result);
+ void dmpGetAddrOfCaptureThreadGlobal(DWORD key, DLDL value);
+ LONG * repGetAddrOfCaptureThreadGlobal(void **ppIndirection);
+
+ void recGetClassDomainID(CORINFO_CLASS_HANDLE cls, void **ppIndirection, unsigned result);
+ void dmpGetClassDomainID(DWORDLONG key, DLD value);
+ unsigned repGetClassDomainID(CORINFO_CLASS_HANDLE cls, void **ppIndirection);
+
+ void recGetLocationOfThisType(CORINFO_METHOD_HANDLE context, CORINFO_LOOKUP_KIND *result);
+ void dmpGetLocationOfThisType(DWORDLONG key, const Agnostic_CORINFO_LOOKUP_KIND& value);
+ CORINFO_LOOKUP_KIND repGetLocationOfThisType(CORINFO_METHOD_HANDLE context);
+
+ void recGetDelegateCtor(CORINFO_METHOD_HANDLE methHnd, CORINFO_CLASS_HANDLE clsHnd,
+ CORINFO_METHOD_HANDLE targetMethodHnd, DelegateCtorArgs *pCtorData, CORINFO_METHOD_HANDLE result);
+ void dmpGetDelegateCtor(const Agnostic_GetDelegateCtorIn& key, const Agnostic_GetDelegateCtorOut& value);
+ CORINFO_METHOD_HANDLE repGetDelegateCtor(CORINFO_METHOD_HANDLE methHnd, CORINFO_CLASS_HANDLE clsHnd,
+ CORINFO_METHOD_HANDLE targetMethodHnd, DelegateCtorArgs *pCtorData);
+
+ void recGetFunctionFixedEntryPoint(CORINFO_METHOD_HANDLE ftn, CORINFO_CONST_LOOKUP *pResult);
+ void dmpGetFunctionFixedEntryPoint(DWORDLONG key, const Agnostic_CORINFO_CONST_LOOKUP& value);
+ void repGetFunctionFixedEntryPoint(CORINFO_METHOD_HANDLE ftn, CORINFO_CONST_LOOKUP *pResult);
+
+ void recGetFieldInClass(CORINFO_CLASS_HANDLE clsHnd, INT num, CORINFO_FIELD_HANDLE result);
+ void dmpGetFieldInClass(DLD key, DWORDLONG value);
+ CORINFO_FIELD_HANDLE repGetFieldInClass(CORINFO_CLASS_HANDLE clsHnd, INT num);
+
+ void recGetFieldType(CORINFO_FIELD_HANDLE field, CORINFO_CLASS_HANDLE *structType, CORINFO_CLASS_HANDLE memberParent, CorInfoType result);
+ void dmpGetFieldType(DLDL key, DLD value);
+ CorInfoType repGetFieldType(CORINFO_FIELD_HANDLE field, CORINFO_CLASS_HANDLE *structType, CORINFO_CLASS_HANDLE memberParent);
+
+ void recGetFieldName(CORINFO_FIELD_HANDLE ftn, const char **moduleName, const char* result);
+ void dmpGetFieldName(DWORDLONG key, DD value);
+ const char* repGetFieldName(CORINFO_FIELD_HANDLE ftn, const char **moduleName);
+
+ void recCanInlineTypeCheckWithObjectVTable(CORINFO_CLASS_HANDLE cls, BOOL result);
+ void dmpCanInlineTypeCheckWithObjectVTable(DWORDLONG key, DWORD value);
+ BOOL repCanInlineTypeCheckWithObjectVTable(CORINFO_CLASS_HANDLE cls);
+
+ void recSatisfiesMethodConstraints(CORINFO_CLASS_HANDLE parent, CORINFO_METHOD_HANDLE method, BOOL result);
+ void dmpSatisfiesMethodConstraints(DLDL key, DWORD value);
+ BOOL repSatisfiesMethodConstraints(CORINFO_CLASS_HANDLE parent, CORINFO_METHOD_HANDLE method);
+
+ void recInitConstraintsForVerification(CORINFO_METHOD_HANDLE method, BOOL *pfHasCircularClassConstraints,
+ BOOL *pfHasCircularMethodConstraint);
+ void dmpInitConstraintsForVerification(DWORDLONG key, DD value);
+ void repInitConstraintsForVerification(CORINFO_METHOD_HANDLE method, BOOL *pfHasCircularClassConstraints,
+ BOOL *pfHasCircularMethodConstraint);
+
+ void recIsValidStringRef(CORINFO_MODULE_HANDLE module, unsigned metaTOK, BOOL result);
+ void dmpIsValidStringRef(DLD key, DWORD value);
+ BOOL repIsValidStringRef(CORINFO_MODULE_HANDLE module, unsigned metaTOK);
+
+ void recGetHelperName(CorInfoHelpFunc funcNum, const char* result);
+ void dmpGetHelperName(DWORD key, DWORD value);
+ const char* repGetHelperName(CorInfoHelpFunc funcNum);
+
+ void recCanCast(CORINFO_CLASS_HANDLE child, CORINFO_CLASS_HANDLE parent, BOOL result);
+ void dmpCanCast(DLDL key, DWORD value);
+ BOOL repCanCast(CORINFO_CLASS_HANDLE child, CORINFO_CLASS_HANDLE parent);
+
+ void recGetChildType(CORINFO_CLASS_HANDLE clsHnd, CORINFO_CLASS_HANDLE *clsRet, CorInfoType result);
+ void dmpGetChildType(DWORDLONG key, DLD value);
+ CorInfoType repGetChildType(CORINFO_CLASS_HANDLE clsHnd, CORINFO_CLASS_HANDLE *clsRet);
+
+ void recGetArrayInitializationData(CORINFO_FIELD_HANDLE field, DWORD size, void *result);
+ void dmpGetArrayInitializationData(DLD key, DWORDLONG value);
+ void *repGetArrayInitializationData(CORINFO_FIELD_HANDLE field, DWORD size);
+
+ void recFilterException(struct _EXCEPTION_POINTERS *pExceptionPointers, int result);
+ void dmpFilterException(DWORD key, DWORD value);
+ int repFilterException(struct _EXCEPTION_POINTERS *pExceptionPointers);
+
+ void recHandleException(struct _EXCEPTION_POINTERS *pExceptionPointers);
+ void dmpHandleException(DWORD key, DWORD value);
+
+ void recGetAddressOfPInvokeFixup(CORINFO_METHOD_HANDLE method, void **ppIndirection, void* result);
+ void dmpGetAddressOfPInvokeFixup(DWORDLONG key, DLDL value);
+ void* repGetAddressOfPInvokeFixup(CORINFO_METHOD_HANDLE method, void **ppIndirection);
+
+ void recGetAddressOfPInvokeTarget(CORINFO_METHOD_HANDLE method, CORINFO_CONST_LOOKUP *pLookup);
+ void dmpGetAddressOfPInvokeTarget(DWORDLONG key, DLD value);
+ void repGetAddressOfPInvokeTarget(CORINFO_METHOD_HANDLE method, CORINFO_CONST_LOOKUP *pLookup);
+
+ void recSatisfiesClassConstraints(CORINFO_CLASS_HANDLE cls, BOOL result);
+ void dmpSatisfiesClassConstraints(DWORDLONG key, DWORD value);
+ BOOL repSatisfiesClassConstraints(CORINFO_CLASS_HANDLE cls);
+
+ void recGetMethodHash(CORINFO_METHOD_HANDLE ftn, unsigned result);
+ void dmpGetMethodHash(DWORDLONG key, DWORD value);
+ unsigned repGetMethodHash(CORINFO_METHOD_HANDLE ftn);
+
+ void recCanTailCall(CORINFO_METHOD_HANDLE callerHnd, CORINFO_METHOD_HANDLE declaredCalleeHnd, CORINFO_METHOD_HANDLE exactCalleeHnd,
+ bool fIsTailPrefix, bool result);
+ void dmpCanTailCall(const Agnostic_CanTailCall& key, DWORD value);
+ bool repCanTailCall(CORINFO_METHOD_HANDLE callerHnd, CORINFO_METHOD_HANDLE declaredCalleeHnd, CORINFO_METHOD_HANDLE exactCalleeHnd,
+ bool fIsTailPrefix);
+
+ void recIsCompatibleDelegate(CORINFO_CLASS_HANDLE objCls, CORINFO_CLASS_HANDLE methodParentCls,
+ CORINFO_METHOD_HANDLE method, CORINFO_CLASS_HANDLE delegateCls, BOOL *pfIsOpenDelegate, BOOL result);
+ void dmpIsCompatibleDelegate(const Agnostic_IsCompatibleDelegate& key, DD value);
+ BOOL repIsCompatibleDelegate(CORINFO_CLASS_HANDLE objCls, CORINFO_CLASS_HANDLE methodParentCls,
+ CORINFO_METHOD_HANDLE method, CORINFO_CLASS_HANDLE delegateCls, BOOL *pfIsOpenDelegate);
+
+ void recIsDelegateCreationAllowed(CORINFO_CLASS_HANDLE delegateHnd, CORINFO_METHOD_HANDLE calleeHnd, BOOL result);
+ void dmpIsDelegateCreationAllowed(DLDL key, DWORD value);
+ BOOL repIsDelegateCreationAllowed(CORINFO_CLASS_HANDLE delegateHnd, CORINFO_METHOD_HANDLE calleeHnd);
+
+ void recCanSkipMethodVerification(CORINFO_METHOD_HANDLE ftnHandle, BOOL skip, CorInfoCanSkipVerificationResult result);
+ void dmpCanSkipMethodVerification(DLD key, DWORD value);
+ CorInfoCanSkipVerificationResult repCanSkipMethodVerification(CORINFO_METHOD_HANDLE ftnHandle, BOOL skip);
+
+ void recFindCallSiteSig(CORINFO_MODULE_HANDLE module, unsigned methTOK, CORINFO_CONTEXT_HANDLE context, CORINFO_SIG_INFO *sig);
+ void dmpFindCallSiteSig(const Agnostic_FindCallSiteSig& key, const Agnostic_CORINFO_SIG_INFO& value);
+ void repFindCallSiteSig(CORINFO_MODULE_HANDLE module, unsigned methTOK, CORINFO_CONTEXT_HANDLE context, CORINFO_SIG_INFO *sig);
+
+ void recShouldEnforceCallvirtRestriction(CORINFO_MODULE_HANDLE scope, BOOL result);
+ void dmpShouldEnforceCallvirtRestriction(DWORDLONG key, DWORD value);
+ BOOL repShouldEnforceCallvirtRestriction(CORINFO_MODULE_HANDLE scope);
+
+ void recGetMethodSync(CORINFO_METHOD_HANDLE ftn, void **ppIndirection, void* result);
+ void dmpGetMethodSync(DWORDLONG key, DLDL value);
+ void* repGetMethodSync(CORINFO_METHOD_HANDLE ftn, void **ppIndirection);
+
+ void recGetVarArgsHandle(CORINFO_SIG_INFO *pSig, void **ppIndirection, CORINFO_VARARGS_HANDLE result);
+ void dmpGetVarArgsHandle(const Agnostic_CORINFO_SIG_INFO& key, DLDL value);
+ CORINFO_VARARGS_HANDLE repGetVarArgsHandle(CORINFO_SIG_INFO *pSig, void **ppIndirection);
+
+ void recCanGetVarArgsHandle(CORINFO_SIG_INFO *pSig, bool result);
+ void dmpCanGetVarArgsHandle(const Agnostic_CORINFO_SIG_INFO& key, DWORD value);
+ bool repCanGetVarArgsHandle(CORINFO_SIG_INFO *pSig);
+
+ void recGetFieldThreadLocalStoreID(CORINFO_FIELD_HANDLE field, void **ppIndirection, DWORD result);
+ void dmpGetFieldThreadLocalStoreID(DWORDLONG key, DLD value);
+ DWORD repGetFieldThreadLocalStoreID(CORINFO_FIELD_HANDLE field, void **ppIndirection);
+
+ void recGetBBProfileData(CORINFO_METHOD_HANDLE ftnHnd, ULONG *count, ICorJitInfo::ProfileBuffer **profileBuffer,
+ ULONG *numRuns, HRESULT result);
+ void dmpGetBBProfileData(DWORDLONG key, const Agnostic_GetBBProfileData& value);
+ HRESULT repGetBBProfileData(CORINFO_METHOD_HANDLE ftnHnd, ULONG *count, ICorJitInfo::ProfileBuffer **profileBuffer,
+ ULONG *numRuns);
+
+ void recMergeClasses(CORINFO_CLASS_HANDLE cls1, CORINFO_CLASS_HANDLE cls2, CORINFO_CLASS_HANDLE result);
+ void dmpMergeClasses(DLDL key, DWORDLONG value);
+ CORINFO_CLASS_HANDLE repMergeClasses(CORINFO_CLASS_HANDLE cls1, CORINFO_CLASS_HANDLE cls2);
+
+ void recGetCookieForPInvokeCalliSig(CORINFO_SIG_INFO* szMetaSig, void ** ppIndirection, LPVOID result);
+ void dmpGetCookieForPInvokeCalliSig(const Agnostic_CORINFO_SIG_INFO& key, DLDL value);
+ LPVOID repGetCookieForPInvokeCalliSig(CORINFO_SIG_INFO* szMetaSig, void ** ppIndirection);
+
+ void recCanGetCookieForPInvokeCalliSig(CORINFO_SIG_INFO* szMetaSig, bool result);
+ void dmpCanGetCookieForPInvokeCalliSig(const Agnostic_CORINFO_SIG_INFO& key, DWORD value);
+ bool repCanGetCookieForPInvokeCalliSig(CORINFO_SIG_INFO* szMetaSig);
+
+ void recCanAccessFamily(CORINFO_METHOD_HANDLE hCaller, CORINFO_CLASS_HANDLE hInstanceType, BOOL result);
+ void dmpCanAccessFamily(DLDL key, DWORD value);
+ BOOL repCanAccessFamily(CORINFO_METHOD_HANDLE hCaller, CORINFO_CLASS_HANDLE hInstanceType);
+
+ void recErrorList(const char *error);
+ void dmpErrorList(DWORD key, DWORD value);
+
+ void recGetProfilingHandle(BOOL *pbHookFunction, void **pProfilerHandle, BOOL *pbIndirectedHandles);
+ void dmpGetProfilingHandle(DWORD key, const Agnostic_GetProfilingHandle& value);
+ void repGetProfilingHandle(BOOL *pbHookFunction, void **pProfilerHandle, BOOL *pbIndirectedHandles);
+
+ void recEmbedFieldHandle(CORINFO_FIELD_HANDLE handle, void **ppIndirection, CORINFO_FIELD_HANDLE result);
+ void dmpEmbedFieldHandle(DWORDLONG key, DLDL value);
+ CORINFO_FIELD_HANDLE repEmbedFieldHandle(CORINFO_FIELD_HANDLE handle, void **ppIndirection);
+
+ void recAreTypesEquivalent(CORINFO_CLASS_HANDLE cls1, CORINFO_CLASS_HANDLE cls2, BOOL result);
+ void dmpAreTypesEquivalent(DLDL key, DWORD value);
+ BOOL repAreTypesEquivalent(CORINFO_CLASS_HANDLE cls1, CORINFO_CLASS_HANDLE cls2);
+
+ void recFindNameOfToken(CORINFO_MODULE_HANDLE module, mdToken metaTOK, char * szFQName, size_t FQNameCapacity, size_t result);
+ void dmpFindNameOfToken(DLD key, DLD value);
+ size_t repFindNameOfToken(CORINFO_MODULE_HANDLE module, mdToken metaTOK, char * szFQName, size_t FQNameCapacity);
+
+ void recGetSystemVAmd64PassStructInRegisterDescriptor(CORINFO_CLASS_HANDLE structHnd, SYSTEMV_AMD64_CORINFO_STRUCT_REG_PASSING_DESCRIPTOR* structPassInRegDescPtr, bool result);
+ void dmpGetSystemVAmd64PassStructInRegisterDescriptor(DWORDLONG key, const Agnostic_GetSystemVAmd64PassStructInRegisterDescriptor& value);
+ bool repGetSystemVAmd64PassStructInRegisterDescriptor(CORINFO_CLASS_HANDLE structHnd, SYSTEMV_AMD64_CORINFO_STRUCT_REG_PASSING_DESCRIPTOR* structPassInRegDescPtr);
+
+ void recGetRelocTypeHint(void * target, WORD result);
+ void dmpGetRelocTypeHint(DWORDLONG key, DWORD value);
+ WORD repGetRelocTypeHint(void * target);
+
+ void recIsWriteBarrierHelperRequired(CORINFO_FIELD_HANDLE field, bool result);
+ void dmpIsWriteBarrierHelperRequired(DWORDLONG key, DWORD value);
+ bool repIsWriteBarrierHelperRequired(CORINFO_FIELD_HANDLE field);
+
+ void recIsValidToken(CORINFO_MODULE_HANDLE module, unsigned metaTOK, BOOL result);
+ void dmpIsValidToken(DLD key, DWORD value);
+ BOOL repIsValidToken(CORINFO_MODULE_HANDLE module, unsigned metaTOK);
+
+ void recGetClassName(CORINFO_CLASS_HANDLE cls, const char* result);
+ void dmpGetClassName(DWORDLONG key, DWORD value);
+ const char* repGetClassName(CORINFO_CLASS_HANDLE cls);
+
+ void recAppendClassName(CORINFO_CLASS_HANDLE cls, BOOL fNamespace, BOOL fFullInst, BOOL fAssembly, const WCHAR* result);
+ void dmpAppendClassName(const Agnostic_AppendClassName& key, DWORD value);
+ const WCHAR* repAppendClassName(CORINFO_CLASS_HANDLE cls, BOOL fNamespace, BOOL fFullInst, BOOL fAssembly);
+
+ void recGetTailCallCopyArgsThunk(CORINFO_SIG_INFO *pSig, CorInfoHelperTailCallSpecialHandling flags, void* result);
+ void dmpGetTailCallCopyArgsThunk(const Agnostic_GetTailCallCopyArgsThunk& key, DWORDLONG value);
+ void* repGetTailCallCopyArgsThunk(CORINFO_SIG_INFO *pSig, CorInfoHelperTailCallSpecialHandling flags);
+
+ void recGetMethodDefFromMethod(CORINFO_METHOD_HANDLE hMethod, mdMethodDef result);
+ void dmpGetMethodDefFromMethod(DWORDLONG key, DWORD value);
+ mdMethodDef repGetMethodDefFromMethod(CORINFO_METHOD_HANDLE hMethod);
+
+ void recCheckMethodModifier(CORINFO_METHOD_HANDLE hMethod, LPCSTR modifier, BOOL fOptional, BOOL result);
+ void dmpCheckMethodModifier(const Agnostic_CheckMethodModifier& key, DWORD value);
+ BOOL repCheckMethodModifier(CORINFO_METHOD_HANDLE hMethod, LPCSTR modifier, BOOL fOptional);
+
+ void recGetPInvokeUnmanagedTarget(CORINFO_METHOD_HANDLE method, void **ppIndirection, void* result);
+ void dmpGetPInvokeUnmanagedTarget(DWORDLONG key, DLDL value);
+ void* repGetPInvokeUnmanagedTarget(CORINFO_METHOD_HANDLE method, void **ppIndirection);
+
+ void recGetArrayRank(CORINFO_CLASS_HANDLE cls, unsigned result);
+ void dmpGetArrayRank(DWORDLONG key, DWORD value);
+ unsigned repGetArrayRank(CORINFO_CLASS_HANDLE cls);
+
+ void recIsFieldStatic(CORINFO_FIELD_HANDLE fhld, bool result);
+ void dmpIsFieldStatic(DWORDLONG key, DWORD value);
+ bool repIsFieldStatic(CORINFO_FIELD_HANDLE fhld);
+
+ void recGetIntConfigValue(const wchar_t *name, int defaultValue, int result);
+ void dmpGetIntConfigValue(const Agnostic_ConfigIntInfo& key, int value);
+ int repGetIntConfigValue(const wchar_t *name, int defaultValue);
+
+ void recGetStringConfigValue(const wchar_t *name, const wchar_t *result);
+ void dmpGetStringConfigValue(DWORD nameIndex, DWORD result);
+ const wchar_t *repGetStringConfigValue(const wchar_t *name);
+
+ CompileResult *cr;
+ CompileResult *originalCR;
+ int index;
+
+private:
+
+ #define LWM(map,key,value) LightWeightMap<key, value>* map;
+ #define DENSELWM(map,value) DenseLightWeightMap<value>* map;
+ #include "lwmlist.h"
+
+};
+
+
+// ********************* Please keep this up-to-date to ease adding more ***************
+// Highest packet number: 158
+// *************************************************************************************
+enum mcPackets
+{
+ Packet_AppendClassName = 149, // Added 8/6/2014 - needed for SIMD
+ Packet_AreTypesEquivalent = 1,
+ Packet_AsCorInfoType = 2,
+ Packet_CanAccessClass = 3,
+ Packet_CanAccessFamily = 4,
+ Packet_CanCast = 5,
+ Retired8 = 6,
+ Packet_GetLazyStringLiteralHelper = 147, //Added 12/20/2013 - as a replacement for CanEmbedModuleHandleForHelper
+ Packet_CanGetCookieForPInvokeCalliSig = 7,
+ Packet_CanGetVarArgsHandle = 8,
+ Packet_CanInline = 9,
+ Packet_CanInlineTypeCheckWithObjectVTable = 10,
+ Packet_CanSkipMethodVerification = 11,
+ Packet_CanTailCall = 12,
+ Retired4 = 13,
+ Packet_CheckMethodModifier = 142, //retired as 13 on 2013/07/04
+ Retired3 = 14,
+ Retired5 = 141, //retired as 14 on 2013/07/03
+ Packet_CompileMethod = 143, //retired as 141 on 2013/07/09
+ Packet_ConstructStringLiteral = 15,
+ Packet_EmbedClassHandle = 16,
+ Packet_EmbedFieldHandle = 17,
+ Packet_EmbedGenericHandle = 18,
+ Packet_EmbedMethodHandle = 19,
+ Packet_EmbedModuleHandle = 20,
+ Packet_EmptyStringLiteral = 21,
+ Packet_Environment = 136, //Added 4/3/2013
+ Packet_ErrorList = 22,
+ Packet_FilterException = 134,
+ Packet_FindCallSiteSig = 23,
+ Retired7 = 24,
+ Packet_FindNameOfToken = 145,//Added 7/19/2013 - adjusted members to proper types
+ Packet_GetSystemVAmd64PassStructInRegisterDescriptor = 156, //Added 2/17/2016
+ Packet_FindSig = 25,
+ Packet_GetAddressOfPInvokeFixup = 26,
+ Packet_GetAddressOfPInvokeTarget = 153, //Added 2/3/2016
+ Packet_GetAddrOfCaptureThreadGlobal = 27,
+ Retired1 = 28,
+ Packet_GetArgClass = 139, //retired as 28 on 2013/07/03
+ Packet_GetArgNext = 29,
+ Retired2 = 30,
+ Packet_GetArgType = 140, //retired as 30 on 2013/07/03
+ Packet_GetArrayInitializationData = 31,
+ Packet_GetArrayRank = 32,
+ Packet_GetBBProfileData = 33,
+ Packet_GetBoundaries = 34,
+ Packet_GetBoxHelper = 35,
+ Packet_GetBuiltinClass = 36,
+ Packet_GetCallInfo = 37,
+ Packet_GetCastingHelper = 38,
+ Packet_GetChildType = 39,
+ Packet_GetClassAlignmentRequirement = 40,
+ Packet_GetClassAttribs = 41,
+ Packet_GetClassDomainID = 42,
+ Packet_GetClassGClayout = 43,
+ Packet_GetClassModuleIdForStatics = 44,
+ Packet_GetClassName = 45,
+ Packet_GetClassNumInstanceFields = 46,
+ Packet_GetClassSize = 47,
+ Packet_GetIntConfigValue = 151, //Added 2/12/2015
+ Packet_GetStringConfigValue = 152, // Added 2/12/2015
+ Packet_GetCookieForPInvokeCalliSig = 48,
+ Packet_GetDelegateCtor = 49,
+ Packet_GetEEInfo = 50,
+ Packet_GetEHinfo = 51,
+ Packet_GetFieldAddress = 52,
+ Packet_GetFieldClass = 53,
+ Packet_GetFieldInClass = 54,
+ Packet_GetFieldInfo = 55,
+ Packet_GetFieldName = 56,
+ Packet_GetFieldOffset = 57,
+ Packet_GetFieldThreadLocalStoreID = 58,
+ Packet_GetFieldType = 59,
+ Packet_GetFunctionEntryPoint = 60,
+ Packet_GetFunctionFixedEntryPoint = 61,
+ Packet_GetGSCookie = 62,
+ Packet_GetHelperFtn = 63,
+ Packet_GetHelperName = 64,
+ Packet_GetInlinedCallFrameVptr = 65,
+ Packet_GetIntrinsicID = 66,
+ Packet_GetJitFlags = 154, //Added 2/3/2016
+ Packet_GetJitTimeLogFilename = 67,
+ Packet_GetJustMyCodeHandle = 68,
+ Packet_GetLocationOfThisType = 69,
+ Packet_GetMethodAttribs = 70,
+ Packet_GetMethodClass = 71,
+ Packet_GetMethodDefFromMethod = 72,
+ Packet_GetMethodHash = 73,
+ Packet_GetMethodInfo = 74,
+ Packet_GetMethodName = 75,
+ Packet_GetMethodSig = 76,
+ Packet_GetMethodSync = 77,
+ Packet_GetMethodVTableOffset = 78,
+ Packet_GetNewArrHelper = 79,
+ Packet_GetNewHelper = 80,
+ Packet_GetParentType = 81,
+ Packet_GetPInvokeUnmanagedTarget = 82,
+ Packet_GetProfilingHandle = 83,
+ Packet_GetRelocTypeHint = 84,
+ Packet_GetSecurityPrologHelper = 85,
+ Packet_GetSharedCCtorHelper = 86,
+ Packet_GetTailCallCopyArgsThunk = 87,
+ Packet_GetThreadTLSIndex = 88,
+ Packet_GetTokenTypeAsHandle = 89,
+ Packet_GetTypeForBox = 90,
+ Packet_GetTypeForPrimitiveValueClass = 91,
+ Packet_GetUnBoxHelper = 92,
+ Packet_GetReadyToRunHelper = 150, //Added 10/10/2014
+ Packet_GetReadyToRunDelegateCtorHelper = 157, //Added 3/30/2016
+ Packet_GetUnmanagedCallConv = 94,
+ Packet_GetVarArgsHandle = 95,
+ Packet_GetVars = 96,
+ Packet_HandleException = 135,
+ Packet_InitClass = 97,
+ Packet_InitConstraintsForVerification = 98,
+ Packet_IsCompatibleDelegate = 99,
+ Packet_IsDelegateCreationAllowed = 155,
+ Packet_IsFieldStatic = 137,//Added 4/9/2013 - needed for 4.5.1
+ Packet_IsInSIMDModule = 148,// Added 6/18/2014 - SIMD support
+ Packet_IsInstantiationOfVerifiedGeneric = 100,
+ Packet_IsSDArray = 101,
+ Packet_IsStructRequiringStackAllocRetBuf = 102,
+ Packet_IsValidStringRef = 103,
+ Retired6 = 104,
+ Packet_IsValidToken = 144,//Added 7/19/2013 - adjusted members to proper types
+ Packet_IsValueClass = 105,
+ Packet_IsWriteBarrierHelperRequired = 106,
+ Packet_MergeClasses = 107,
+ Packet_PInvokeMarshalingRequired = 108,
+ Packet_ResolveToken = 109,
+ Packet_TryResolveToken = 158, //Added 4/26/2016
+ Packet_SatisfiesClassConstraints = 110,
+ Packet_SatisfiesMethodConstraints = 111,
+ Packet_ShouldEnforceCallvirtRestriction = 112,
+
+ PacketCR_AddressMap = 113,
+ PacketCR_AllocBBProfileBuffer = 131,
+ PacketCR_AllocGCInfo = 114,
+ PacketCR_AllocMem = 115,
+ PacketCR_AllocUnwindInfo = 132,
+ PacketCR_AssertLog = 138, //Added 6/10/2013 - added to nicely support ilgen
+ PacketCR_CallLog = 116,
+ PacketCR_ClassMustBeLoadedBeforeCodeIsRun = 117,
+ PacketCR_CompileMethod = 118,
+ PacketCR_MessageLog = 119,
+ PacketCR_MethodMustBeLoadedBeforeCodeIsRun = 120,
+ PacketCR_ProcessName = 121,
+ PacketCR_RecordRelocation = 122,
+ PacketCR_ReportFatalError = 123,
+ PacketCR_ReportInliningDecision = 124,
+ PacketCR_ReportTailCallDecision = 125,
+ PacketCR_ReserveUnwindInfo = 133,
+ PacketCR_SetBoundaries = 126,
+ PacketCR_SetEHcount = 127,
+ PacketCR_SetEHinfo = 128,
+ PacketCR_SetMethodAttribs = 129,
+ PacketCR_SetVars = 130,
+ PacketCR_RecordCallSite = 146, //Added 10/28/2013 - to support indirect calls
+};
+
+#endif