diff --git a/src/coreclr/ToolBox/superpmi/superpmi-shared/icorjitinfoimpl.h b/src/coreclr/ToolBox/superpmi/superpmi-shared/icorjitinfoimpl.h index 9693846a6f3b9..0c0e42cfa27a4 100644 --- a/src/coreclr/ToolBox/superpmi/superpmi-shared/icorjitinfoimpl.h +++ b/src/coreclr/ToolBox/superpmi/superpmi-shared/icorjitinfoimpl.h @@ -1,719 +1,10 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -// DO NOT EDIT THIS FILE! IT IS AUTOGENERATED -// To regenerate run the gen script in src/coreclr/tools/Common/JitInterface/ThunkGenerator -// and follow the instructions in docs/project/updating-jitinterface.md - #ifndef _ICorJitInfoImpl #define _ICorJitInfoImpl -// ICorJitInfoImpl: declare for implementation all the members of the ICorJitInfo interface (which are -// specified as pure virtual methods). This is done once, here, and all implementations share it, -// to avoid duplicated declarations. This file is #include'd within all the ICorJitInfo implementation -// classes. -// -// NOTE: this file is in exactly the same order, with exactly the same whitespace, as the ICorJitInfo -// interface declaration (with the "virtual" and "= 0" syntax removed). This is to make it easy to compare -// against the interface declaration. - -/**********************************************************************************/ -// clang-format off -/**********************************************************************************/ - -public: - -DWORD getMethodAttribs( - CORINFO_METHOD_HANDLE ftn); - -void setMethodAttribs( - CORINFO_METHOD_HANDLE ftn, - CorInfoMethodRuntimeFlags attribs); - -void getMethodSig( - CORINFO_METHOD_HANDLE ftn, - CORINFO_SIG_INFO* sig, - CORINFO_CLASS_HANDLE memberParent); - -bool getMethodInfo( - CORINFO_METHOD_HANDLE ftn, - CORINFO_METHOD_INFO* info); - -CorInfoInline canInline( - CORINFO_METHOD_HANDLE callerHnd, - CORINFO_METHOD_HANDLE calleeHnd, - DWORD* pRestrictions); - -void reportInliningDecision( - CORINFO_METHOD_HANDLE inlinerHnd, - CORINFO_METHOD_HANDLE inlineeHnd, - CorInfoInline inlineResult, - const char* reason); - -bool canTailCall( - CORINFO_METHOD_HANDLE callerHnd, - CORINFO_METHOD_HANDLE declaredCalleeHnd, - CORINFO_METHOD_HANDLE exactCalleeHnd, - bool fIsTailPrefix); - -void reportTailCallDecision( - CORINFO_METHOD_HANDLE callerHnd, - CORINFO_METHOD_HANDLE calleeHnd, - bool fIsTailPrefix, - CorInfoTailCall tailCallResult, - const char* reason); - -void getEHinfo( - CORINFO_METHOD_HANDLE ftn, - unsigned EHnumber, - CORINFO_EH_CLAUSE* clause); - -CORINFO_CLASS_HANDLE getMethodClass( - CORINFO_METHOD_HANDLE method); - -CORINFO_MODULE_HANDLE getMethodModule( - CORINFO_METHOD_HANDLE method); - -void getMethodVTableOffset( - CORINFO_METHOD_HANDLE method, - unsigned* offsetOfIndirection, - unsigned* offsetAfterIndirection, - bool* isRelative); - -bool resolveVirtualMethod( - CORINFO_DEVIRTUALIZATION_INFO* info); - -CORINFO_METHOD_HANDLE getUnboxedEntry( - CORINFO_METHOD_HANDLE ftn, - bool* requiresInstMethodTableArg); - -CORINFO_CLASS_HANDLE getDefaultEqualityComparerClass( - CORINFO_CLASS_HANDLE elemType); - -void expandRawHandleIntrinsic( - CORINFO_RESOLVED_TOKEN* pResolvedToken, - CORINFO_GENERICHANDLE_RESULT* pResult); - -CorInfoIntrinsics getIntrinsicID( - CORINFO_METHOD_HANDLE method, - bool* pMustExpand); - -bool isIntrinsicType( - CORINFO_CLASS_HANDLE classHnd); - -CorInfoUnmanagedCallConv getUnmanagedCallConv( - CORINFO_METHOD_HANDLE method); - -bool pInvokeMarshalingRequired( - CORINFO_METHOD_HANDLE method, - CORINFO_SIG_INFO* callSiteSig); - -bool satisfiesMethodConstraints( - CORINFO_CLASS_HANDLE parent, - CORINFO_METHOD_HANDLE method); - -bool isCompatibleDelegate( - CORINFO_CLASS_HANDLE objCls, - CORINFO_CLASS_HANDLE methodParentCls, - CORINFO_METHOD_HANDLE method, - CORINFO_CLASS_HANDLE delegateCls, - bool* pfIsOpenDelegate); - -void methodMustBeLoadedBeforeCodeIsRun( - CORINFO_METHOD_HANDLE method); - -CORINFO_METHOD_HANDLE mapMethodDeclToMethodImpl( - CORINFO_METHOD_HANDLE method); - -void getGSCookie( - GSCookie* pCookieVal, - GSCookie** ppCookieVal); - -void setPatchpointInfo( - PatchpointInfo* patchpointInfo); - -PatchpointInfo* getOSRInfo( - unsigned* ilOffset); - -void resolveToken( - CORINFO_RESOLVED_TOKEN* pResolvedToken); - -bool tryResolveToken( - CORINFO_RESOLVED_TOKEN* pResolvedToken); - -void findSig( - CORINFO_MODULE_HANDLE module, - unsigned sigTOK, - CORINFO_CONTEXT_HANDLE context, - CORINFO_SIG_INFO* sig); - -void findCallSiteSig( - CORINFO_MODULE_HANDLE module, - unsigned methTOK, - CORINFO_CONTEXT_HANDLE context, - CORINFO_SIG_INFO* sig); - -CORINFO_CLASS_HANDLE getTokenTypeAsHandle( - CORINFO_RESOLVED_TOKEN* pResolvedToken); - -bool isValidToken( - CORINFO_MODULE_HANDLE module, - unsigned metaTOK); - -bool isValidStringRef( - CORINFO_MODULE_HANDLE module, - unsigned metaTOK); - -LPCWSTR getStringLiteral( - CORINFO_MODULE_HANDLE module, - unsigned metaTOK, - int* length); - -CorInfoType asCorInfoType( - CORINFO_CLASS_HANDLE cls); - -const char* getClassName( - CORINFO_CLASS_HANDLE cls); - -const char* getClassNameFromMetadata( - CORINFO_CLASS_HANDLE cls, - const char** namespaceName); - -CORINFO_CLASS_HANDLE getTypeInstantiationArgument( - CORINFO_CLASS_HANDLE cls, - unsigned index); - -int appendClassName( - WCHAR** ppBuf, - int* pnBufLen, - CORINFO_CLASS_HANDLE cls, - bool fNamespace, - bool fFullInst, - bool fAssembly); - -bool isValueClass( - CORINFO_CLASS_HANDLE cls); - -CorInfoInlineTypeCheck canInlineTypeCheck( - CORINFO_CLASS_HANDLE cls, - CorInfoInlineTypeCheckSource source); - -DWORD getClassAttribs( - CORINFO_CLASS_HANDLE cls); - -bool isStructRequiringStackAllocRetBuf( - CORINFO_CLASS_HANDLE cls); - -CORINFO_MODULE_HANDLE getClassModule( - CORINFO_CLASS_HANDLE cls); - -CORINFO_ASSEMBLY_HANDLE getModuleAssembly( - CORINFO_MODULE_HANDLE mod); - -const char* getAssemblyName( - CORINFO_ASSEMBLY_HANDLE assem); - -void* LongLifetimeMalloc( - size_t sz); - -void LongLifetimeFree( - void* obj); - -size_t getClassModuleIdForStatics( - CORINFO_CLASS_HANDLE cls, - CORINFO_MODULE_HANDLE* pModule, - void** ppIndirection); - -unsigned getClassSize( - CORINFO_CLASS_HANDLE cls); - -unsigned getHeapClassSize( - CORINFO_CLASS_HANDLE cls); - -bool canAllocateOnStack( - CORINFO_CLASS_HANDLE cls); - -unsigned getClassAlignmentRequirement( - CORINFO_CLASS_HANDLE cls, - bool fDoubleAlignHint); - -unsigned getClassGClayout( - CORINFO_CLASS_HANDLE cls, - BYTE* gcPtrs); - -unsigned getClassNumInstanceFields( - CORINFO_CLASS_HANDLE cls); - -CORINFO_FIELD_HANDLE getFieldInClass( - CORINFO_CLASS_HANDLE clsHnd, - INT num); - -bool checkMethodModifier( - CORINFO_METHOD_HANDLE hMethod, - LPCSTR modifier, - bool fOptional); - -CorInfoHelpFunc getNewHelper( - CORINFO_RESOLVED_TOKEN* pResolvedToken, - CORINFO_METHOD_HANDLE callerHandle, - bool* pHasSideEffects); - -CorInfoHelpFunc getNewArrHelper( - CORINFO_CLASS_HANDLE arrayCls); - -CorInfoHelpFunc getCastingHelper( - CORINFO_RESOLVED_TOKEN* pResolvedToken, - bool fThrowing); - -CorInfoHelpFunc getSharedCCtorHelper( - CORINFO_CLASS_HANDLE clsHnd); - -CORINFO_CLASS_HANDLE getTypeForBox( - CORINFO_CLASS_HANDLE cls); - -CorInfoHelpFunc getBoxHelper( - CORINFO_CLASS_HANDLE cls); - -CorInfoHelpFunc getUnBoxHelper( - CORINFO_CLASS_HANDLE cls); - -bool getReadyToRunHelper( - CORINFO_RESOLVED_TOKEN* pResolvedToken, - CORINFO_LOOKUP_KIND* pGenericLookupKind, - CorInfoHelpFunc id, - CORINFO_CONST_LOOKUP* pLookup); - -void getReadyToRunDelegateCtorHelper( - CORINFO_RESOLVED_TOKEN* pTargetMethod, - CORINFO_CLASS_HANDLE delegateType, - CORINFO_LOOKUP* pLookup); - -const char* getHelperName( - CorInfoHelpFunc helpFunc); - -CorInfoInitClassResult initClass( - CORINFO_FIELD_HANDLE field, - CORINFO_METHOD_HANDLE method, - CORINFO_CONTEXT_HANDLE context); - -void classMustBeLoadedBeforeCodeIsRun( - CORINFO_CLASS_HANDLE cls); - -CORINFO_CLASS_HANDLE getBuiltinClass( - CorInfoClassId classId); - -CorInfoType getTypeForPrimitiveValueClass( - CORINFO_CLASS_HANDLE cls); - -CorInfoType getTypeForPrimitiveNumericClass( - CORINFO_CLASS_HANDLE cls); - -bool canCast( - CORINFO_CLASS_HANDLE child, - CORINFO_CLASS_HANDLE parent); - -bool areTypesEquivalent( - CORINFO_CLASS_HANDLE cls1, - CORINFO_CLASS_HANDLE cls2); - -TypeCompareState compareTypesForCast( - CORINFO_CLASS_HANDLE fromClass, - CORINFO_CLASS_HANDLE toClass); - -TypeCompareState compareTypesForEquality( - CORINFO_CLASS_HANDLE cls1, - CORINFO_CLASS_HANDLE cls2); - -CORINFO_CLASS_HANDLE mergeClasses( - CORINFO_CLASS_HANDLE cls1, - CORINFO_CLASS_HANDLE cls2); - -bool isMoreSpecificType( - CORINFO_CLASS_HANDLE cls1, - CORINFO_CLASS_HANDLE cls2); - -CORINFO_CLASS_HANDLE getParentType( - CORINFO_CLASS_HANDLE cls); - -CorInfoType getChildType( - CORINFO_CLASS_HANDLE clsHnd, - CORINFO_CLASS_HANDLE* clsRet); - -bool satisfiesClassConstraints( - CORINFO_CLASS_HANDLE cls); - -bool isSDArray( - CORINFO_CLASS_HANDLE cls); - -unsigned getArrayRank( - CORINFO_CLASS_HANDLE cls); - -void* getArrayInitializationData( - CORINFO_FIELD_HANDLE field, - DWORD size); - -CorInfoIsAccessAllowedResult canAccessClass( - CORINFO_RESOLVED_TOKEN* pResolvedToken, - CORINFO_METHOD_HANDLE callerHandle, - CORINFO_HELPER_DESC* pAccessHelper); - -const char* getFieldName( - CORINFO_FIELD_HANDLE ftn, - const char** moduleName); - -CORINFO_CLASS_HANDLE getFieldClass( - CORINFO_FIELD_HANDLE field); - -CorInfoType getFieldType( - CORINFO_FIELD_HANDLE field, - CORINFO_CLASS_HANDLE* structType, - CORINFO_CLASS_HANDLE memberParent); - -unsigned getFieldOffset( - CORINFO_FIELD_HANDLE field); - -void getFieldInfo( - CORINFO_RESOLVED_TOKEN* pResolvedToken, - CORINFO_METHOD_HANDLE callerHandle, - CORINFO_ACCESS_FLAGS flags, - CORINFO_FIELD_INFO* pResult); - -bool isFieldStatic( - CORINFO_FIELD_HANDLE fldHnd); - -void getBoundaries( - CORINFO_METHOD_HANDLE ftn, - unsigned int* cILOffsets, - DWORD** pILOffsets, - ICorDebugInfo::BoundaryTypes* implictBoundaries); - -void setBoundaries( - CORINFO_METHOD_HANDLE ftn, - ULONG32 cMap, - ICorDebugInfo::OffsetMapping* pMap); - -void getVars( - CORINFO_METHOD_HANDLE ftn, - ULONG32* cVars, - ICorDebugInfo::ILVarInfo** vars, - bool* extendOthers); - -void setVars( - CORINFO_METHOD_HANDLE ftn, - ULONG32 cVars, - ICorDebugInfo::NativeVarInfo* vars); - -void* allocateArray( - size_t cBytes); - -void freeArray( - void* array); - -CORINFO_ARG_LIST_HANDLE getArgNext( - CORINFO_ARG_LIST_HANDLE args); - -CorInfoTypeWithMod getArgType( - CORINFO_SIG_INFO* sig, - CORINFO_ARG_LIST_HANDLE args, - CORINFO_CLASS_HANDLE* vcTypeRet); - -CORINFO_CLASS_HANDLE getArgClass( - CORINFO_SIG_INFO* sig, - CORINFO_ARG_LIST_HANDLE args); - -CorInfoHFAElemType getHFAType( - CORINFO_CLASS_HANDLE hClass); - -HRESULT GetErrorHRESULT( - struct _EXCEPTION_POINTERS* pExceptionPointers); - -ULONG GetErrorMessage( - LPWSTR buffer, - ULONG bufferLength); - -int FilterException( - struct _EXCEPTION_POINTERS* pExceptionPointers); - -void HandleException( - struct _EXCEPTION_POINTERS* pExceptionPointers); - -void ThrowExceptionForJitResult( - HRESULT result); - -void ThrowExceptionForHelper( - const CORINFO_HELPER_DESC* throwHelper); - -bool runWithErrorTrap( - ICorJitInfo::errorTrapFunction function, - void* parameter); - -void getEEInfo( - CORINFO_EE_INFO* pEEInfoOut); - -LPCWSTR getJitTimeLogFilename(); - -mdMethodDef getMethodDefFromMethod( - CORINFO_METHOD_HANDLE hMethod); - -const char* getMethodName( - CORINFO_METHOD_HANDLE ftn, - const char** moduleName); - -const char* getMethodNameFromMetadata( - CORINFO_METHOD_HANDLE ftn, - const char** className, - const char** namespaceName, - const char** enclosingClassName); - -unsigned getMethodHash( - CORINFO_METHOD_HANDLE ftn); - -size_t findNameOfToken( - CORINFO_MODULE_HANDLE moduleHandle, - mdToken token, - char* szFQName, - size_t FQNameCapacity); - -bool getSystemVAmd64PassStructInRegisterDescriptor( - CORINFO_CLASS_HANDLE structHnd, - SYSTEMV_AMD64_CORINFO_STRUCT_REG_PASSING_DESCRIPTOR* structPassInRegDescPtr); - -DWORD getThreadTLSIndex( - void** ppIndirection); - -const void* getInlinedCallFrameVptr( - void** ppIndirection); - -LONG* getAddrOfCaptureThreadGlobal( - void** ppIndirection); - -void* getHelperFtn( - CorInfoHelpFunc ftnNum, - void** ppIndirection); - -void getFunctionEntryPoint( - CORINFO_METHOD_HANDLE ftn, - CORINFO_CONST_LOOKUP* pResult, - CORINFO_ACCESS_FLAGS accessFlags); - -void getFunctionFixedEntryPoint( - CORINFO_METHOD_HANDLE ftn, - CORINFO_CONST_LOOKUP* pResult); - -void* getMethodSync( - CORINFO_METHOD_HANDLE ftn, - void** ppIndirection); - -CorInfoHelpFunc getLazyStringLiteralHelper( - CORINFO_MODULE_HANDLE handle); - -CORINFO_MODULE_HANDLE embedModuleHandle( - CORINFO_MODULE_HANDLE handle, - void** ppIndirection); - -CORINFO_CLASS_HANDLE embedClassHandle( - CORINFO_CLASS_HANDLE handle, - void** ppIndirection); - -CORINFO_METHOD_HANDLE embedMethodHandle( - CORINFO_METHOD_HANDLE handle, - void** ppIndirection); - -CORINFO_FIELD_HANDLE embedFieldHandle( - CORINFO_FIELD_HANDLE handle, - void** ppIndirection); - -void embedGenericHandle( - CORINFO_RESOLVED_TOKEN* pResolvedToken, - bool fEmbedParent, - CORINFO_GENERICHANDLE_RESULT* pResult); - -void getLocationOfThisType( - CORINFO_METHOD_HANDLE context, - CORINFO_LOOKUP_KIND* pLookupKind); - -void getAddressOfPInvokeTarget( - CORINFO_METHOD_HANDLE method, - CORINFO_CONST_LOOKUP* pLookup); - -LPVOID GetCookieForPInvokeCalliSig( - CORINFO_SIG_INFO* szMetaSig, - void** ppIndirection); - -bool canGetCookieForPInvokeCalliSig( - CORINFO_SIG_INFO* szMetaSig); - -CORINFO_JUST_MY_CODE_HANDLE getJustMyCodeHandle( - CORINFO_METHOD_HANDLE method, - CORINFO_JUST_MY_CODE_HANDLE** ppIndirection); - -void GetProfilingHandle( - bool* pbHookFunction, - void** pProfilerHandle, - bool* pbIndirectedHandles); - -void getCallInfo( - CORINFO_RESOLVED_TOKEN* pResolvedToken, - CORINFO_RESOLVED_TOKEN* pConstrainedResolvedToken, - CORINFO_METHOD_HANDLE callerHandle, - CORINFO_CALLINFO_FLAGS flags, - CORINFO_CALL_INFO* pResult); - -bool canAccessFamily( - CORINFO_METHOD_HANDLE hCaller, - CORINFO_CLASS_HANDLE hInstanceType); - -bool isRIDClassDomainID( - CORINFO_CLASS_HANDLE cls); - -unsigned getClassDomainID( - CORINFO_CLASS_HANDLE cls, - void** ppIndirection); - -void* getFieldAddress( - CORINFO_FIELD_HANDLE field, - void** ppIndirection); - -CORINFO_CLASS_HANDLE getStaticFieldCurrentClass( - CORINFO_FIELD_HANDLE field, - bool* pIsSpeculative); - -CORINFO_VARARGS_HANDLE getVarArgsHandle( - CORINFO_SIG_INFO* pSig, - void** ppIndirection); - -bool canGetVarArgsHandle( - CORINFO_SIG_INFO* pSig); - -InfoAccessType constructStringLiteral( - CORINFO_MODULE_HANDLE module, - mdToken metaTok, - void** ppValue); - -InfoAccessType emptyStringLiteral( - void** ppValue); - -DWORD getFieldThreadLocalStoreID( - CORINFO_FIELD_HANDLE field, - void** ppIndirection); - -void setOverride( - ICorDynamicInfo* pOverride, - CORINFO_METHOD_HANDLE currentMethod); - -void addActiveDependency( - CORINFO_MODULE_HANDLE moduleFrom, - CORINFO_MODULE_HANDLE moduleTo); - -CORINFO_METHOD_HANDLE GetDelegateCtor( - CORINFO_METHOD_HANDLE methHnd, - CORINFO_CLASS_HANDLE clsHnd, - CORINFO_METHOD_HANDLE targetMethodHnd, - DelegateCtorArgs* pCtorData); - -void MethodCompileComplete( - CORINFO_METHOD_HANDLE methHnd); - -bool getTailCallHelpers( - CORINFO_RESOLVED_TOKEN* callToken, - CORINFO_SIG_INFO* sig, - CORINFO_GET_TAILCALL_HELPERS_FLAGS flags, - CORINFO_TAILCALL_HELPERS* pResult); - -bool convertPInvokeCalliToCall( - CORINFO_RESOLVED_TOKEN* pResolvedToken, - bool mustConvert); - -bool notifyInstructionSetUsage( - CORINFO_InstructionSet instructionSet, - bool supportEnabled); - -void allocMem( - ULONG hotCodeSize, - ULONG coldCodeSize, - ULONG roDataSize, - ULONG xcptnsCount, - CorJitAllocMemFlag flag, - void** hotCodeBlock, - void** coldCodeBlock, - void** roDataBlock); - -void reserveUnwindInfo( - bool isFunclet, - bool isColdCode, - ULONG unwindSize); - -void allocUnwindInfo( - BYTE* pHotCode, - BYTE* pColdCode, - ULONG startOffset, - ULONG endOffset, - ULONG unwindSize, - BYTE* pUnwindBlock, - CorJitFuncKind funcKind); - -void* allocGCInfo( - size_t size); - -void setEHcount( - unsigned cEH); - -void setEHinfo( - unsigned EHnumber, - const CORINFO_EH_CLAUSE* clause); - -bool logMsg( - unsigned level, - const char* fmt, - va_list args); - -int doAssert( - const char* szFile, - int iLine, - const char* szExpr); - -void reportFatalError( - CorJitResult result); - -HRESULT allocMethodBlockCounts( - UINT32 count, - ICorJitInfo::BlockCounts** pBlockCounts); - -HRESULT getMethodBlockCounts( - CORINFO_METHOD_HANDLE ftnHnd, - UINT32* pCount, - ICorJitInfo::BlockCounts** pBlockCounts, - UINT32* pNumRuns); - -CORINFO_CLASS_HANDLE getLikelyClass( - CORINFO_METHOD_HANDLE ftnHnd, - CORINFO_CLASS_HANDLE baseHnd, - UINT32 ilOffset, - UINT32* pLikelihood, - UINT32* pNumberOfClasses); - -void recordCallSite( - ULONG instrOffset, - CORINFO_SIG_INFO* callSig, - CORINFO_METHOD_HANDLE methodHandle); - -void recordRelocation( - void* location, - void* target, - WORD fRelocType, - WORD slotNum, - INT32 addlDelta); - -WORD getRelocTypeHint( - void* target); - -DWORD getExpectedTargetArchitecture(); - -DWORD getJitFlags( - CORJIT_FLAGS* flags, - DWORD sizeInBytes); +// This file uses the autogenerated icorjitinfoimpl.h header to define the various methods. +#include "icorjitinfoimpl_generated.h" #endif // _ICorJitInfoImpl -/**********************************************************************************/ -// clang-format on -/**********************************************************************************/ diff --git a/src/coreclr/inc/icorjitinfoimpl_generated.h b/src/coreclr/inc/icorjitinfoimpl_generated.h new file mode 100644 index 0000000000000..18bfd92a2c2fc --- /dev/null +++ b/src/coreclr/inc/icorjitinfoimpl_generated.h @@ -0,0 +1,716 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +// DO NOT EDIT THIS FILE! IT IS AUTOGENERATED +// To regenerate run the gen script in src/coreclr/tools/Common/JitInterface/ThunkGenerator +// and follow the instructions in docs/project/updating-jitinterface.md + + +// ICorJitInfoImpl: declare for implementation all the members of the ICorJitInfo interface (which are +// specified as pure virtual methods). This is done once, here, and all implementations share it, +// to avoid duplicated declarations. This file is #include'd within all the ICorJitInfo implementation +// classes. +// +// NOTE: this file is in exactly the same order, with exactly the same whitespace, as the ICorJitInfo +// interface declaration (with the "virtual" and "= 0" syntax removed). This is to make it easy to compare +// against the interface declaration. + +/**********************************************************************************/ +// clang-format off +/**********************************************************************************/ + +public: + +DWORD getMethodAttribs( + CORINFO_METHOD_HANDLE ftn) override; + +void setMethodAttribs( + CORINFO_METHOD_HANDLE ftn, + CorInfoMethodRuntimeFlags attribs) override; + +void getMethodSig( + CORINFO_METHOD_HANDLE ftn, + CORINFO_SIG_INFO* sig, + CORINFO_CLASS_HANDLE memberParent) override; + +bool getMethodInfo( + CORINFO_METHOD_HANDLE ftn, + CORINFO_METHOD_INFO* info) override; + +CorInfoInline canInline( + CORINFO_METHOD_HANDLE callerHnd, + CORINFO_METHOD_HANDLE calleeHnd, + DWORD* pRestrictions) override; + +void reportInliningDecision( + CORINFO_METHOD_HANDLE inlinerHnd, + CORINFO_METHOD_HANDLE inlineeHnd, + CorInfoInline inlineResult, + const char* reason) override; + +bool canTailCall( + CORINFO_METHOD_HANDLE callerHnd, + CORINFO_METHOD_HANDLE declaredCalleeHnd, + CORINFO_METHOD_HANDLE exactCalleeHnd, + bool fIsTailPrefix) override; + +void reportTailCallDecision( + CORINFO_METHOD_HANDLE callerHnd, + CORINFO_METHOD_HANDLE calleeHnd, + bool fIsTailPrefix, + CorInfoTailCall tailCallResult, + const char* reason) override; + +void getEHinfo( + CORINFO_METHOD_HANDLE ftn, + unsigned EHnumber, + CORINFO_EH_CLAUSE* clause) override; + +CORINFO_CLASS_HANDLE getMethodClass( + CORINFO_METHOD_HANDLE method) override; + +CORINFO_MODULE_HANDLE getMethodModule( + CORINFO_METHOD_HANDLE method) override; + +void getMethodVTableOffset( + CORINFO_METHOD_HANDLE method, + unsigned* offsetOfIndirection, + unsigned* offsetAfterIndirection, + bool* isRelative) override; + +bool resolveVirtualMethod( + CORINFO_DEVIRTUALIZATION_INFO* info) override; + +CORINFO_METHOD_HANDLE getUnboxedEntry( + CORINFO_METHOD_HANDLE ftn, + bool* requiresInstMethodTableArg) override; + +CORINFO_CLASS_HANDLE getDefaultEqualityComparerClass( + CORINFO_CLASS_HANDLE elemType) override; + +void expandRawHandleIntrinsic( + CORINFO_RESOLVED_TOKEN* pResolvedToken, + CORINFO_GENERICHANDLE_RESULT* pResult) override; + +CorInfoIntrinsics getIntrinsicID( + CORINFO_METHOD_HANDLE method, + bool* pMustExpand) override; + +bool isIntrinsicType( + CORINFO_CLASS_HANDLE classHnd) override; + +CorInfoUnmanagedCallConv getUnmanagedCallConv( + CORINFO_METHOD_HANDLE method) override; + +bool pInvokeMarshalingRequired( + CORINFO_METHOD_HANDLE method, + CORINFO_SIG_INFO* callSiteSig) override; + +bool satisfiesMethodConstraints( + CORINFO_CLASS_HANDLE parent, + CORINFO_METHOD_HANDLE method) override; + +bool isCompatibleDelegate( + CORINFO_CLASS_HANDLE objCls, + CORINFO_CLASS_HANDLE methodParentCls, + CORINFO_METHOD_HANDLE method, + CORINFO_CLASS_HANDLE delegateCls, + bool* pfIsOpenDelegate) override; + +void methodMustBeLoadedBeforeCodeIsRun( + CORINFO_METHOD_HANDLE method) override; + +CORINFO_METHOD_HANDLE mapMethodDeclToMethodImpl( + CORINFO_METHOD_HANDLE method) override; + +void getGSCookie( + GSCookie* pCookieVal, + GSCookie** ppCookieVal) override; + +void setPatchpointInfo( + PatchpointInfo* patchpointInfo) override; + +PatchpointInfo* getOSRInfo( + unsigned* ilOffset) override; + +void resolveToken( + CORINFO_RESOLVED_TOKEN* pResolvedToken) override; + +bool tryResolveToken( + CORINFO_RESOLVED_TOKEN* pResolvedToken) override; + +void findSig( + CORINFO_MODULE_HANDLE module, + unsigned sigTOK, + CORINFO_CONTEXT_HANDLE context, + CORINFO_SIG_INFO* sig) override; + +void findCallSiteSig( + CORINFO_MODULE_HANDLE module, + unsigned methTOK, + CORINFO_CONTEXT_HANDLE context, + CORINFO_SIG_INFO* sig) override; + +CORINFO_CLASS_HANDLE getTokenTypeAsHandle( + CORINFO_RESOLVED_TOKEN* pResolvedToken) override; + +bool isValidToken( + CORINFO_MODULE_HANDLE module, + unsigned metaTOK) override; + +bool isValidStringRef( + CORINFO_MODULE_HANDLE module, + unsigned metaTOK) override; + +LPCWSTR getStringLiteral( + CORINFO_MODULE_HANDLE module, + unsigned metaTOK, + int* length) override; + +CorInfoType asCorInfoType( + CORINFO_CLASS_HANDLE cls) override; + +const char* getClassName( + CORINFO_CLASS_HANDLE cls) override; + +const char* getClassNameFromMetadata( + CORINFO_CLASS_HANDLE cls, + const char** namespaceName) override; + +CORINFO_CLASS_HANDLE getTypeInstantiationArgument( + CORINFO_CLASS_HANDLE cls, + unsigned index) override; + +int appendClassName( + WCHAR** ppBuf, + int* pnBufLen, + CORINFO_CLASS_HANDLE cls, + bool fNamespace, + bool fFullInst, + bool fAssembly) override; + +bool isValueClass( + CORINFO_CLASS_HANDLE cls) override; + +CorInfoInlineTypeCheck canInlineTypeCheck( + CORINFO_CLASS_HANDLE cls, + CorInfoInlineTypeCheckSource source) override; + +DWORD getClassAttribs( + CORINFO_CLASS_HANDLE cls) override; + +bool isStructRequiringStackAllocRetBuf( + CORINFO_CLASS_HANDLE cls) override; + +CORINFO_MODULE_HANDLE getClassModule( + CORINFO_CLASS_HANDLE cls) override; + +CORINFO_ASSEMBLY_HANDLE getModuleAssembly( + CORINFO_MODULE_HANDLE mod) override; + +const char* getAssemblyName( + CORINFO_ASSEMBLY_HANDLE assem) override; + +void* LongLifetimeMalloc( + size_t sz) override; + +void LongLifetimeFree( + void* obj) override; + +size_t getClassModuleIdForStatics( + CORINFO_CLASS_HANDLE cls, + CORINFO_MODULE_HANDLE* pModule, + void** ppIndirection) override; + +unsigned getClassSize( + CORINFO_CLASS_HANDLE cls) override; + +unsigned getHeapClassSize( + CORINFO_CLASS_HANDLE cls) override; + +bool canAllocateOnStack( + CORINFO_CLASS_HANDLE cls) override; + +unsigned getClassAlignmentRequirement( + CORINFO_CLASS_HANDLE cls, + bool fDoubleAlignHint) override; + +unsigned getClassGClayout( + CORINFO_CLASS_HANDLE cls, + BYTE* gcPtrs) override; + +unsigned getClassNumInstanceFields( + CORINFO_CLASS_HANDLE cls) override; + +CORINFO_FIELD_HANDLE getFieldInClass( + CORINFO_CLASS_HANDLE clsHnd, + INT num) override; + +bool checkMethodModifier( + CORINFO_METHOD_HANDLE hMethod, + LPCSTR modifier, + bool fOptional) override; + +CorInfoHelpFunc getNewHelper( + CORINFO_RESOLVED_TOKEN* pResolvedToken, + CORINFO_METHOD_HANDLE callerHandle, + bool* pHasSideEffects) override; + +CorInfoHelpFunc getNewArrHelper( + CORINFO_CLASS_HANDLE arrayCls) override; + +CorInfoHelpFunc getCastingHelper( + CORINFO_RESOLVED_TOKEN* pResolvedToken, + bool fThrowing) override; + +CorInfoHelpFunc getSharedCCtorHelper( + CORINFO_CLASS_HANDLE clsHnd) override; + +CORINFO_CLASS_HANDLE getTypeForBox( + CORINFO_CLASS_HANDLE cls) override; + +CorInfoHelpFunc getBoxHelper( + CORINFO_CLASS_HANDLE cls) override; + +CorInfoHelpFunc getUnBoxHelper( + CORINFO_CLASS_HANDLE cls) override; + +bool getReadyToRunHelper( + CORINFO_RESOLVED_TOKEN* pResolvedToken, + CORINFO_LOOKUP_KIND* pGenericLookupKind, + CorInfoHelpFunc id, + CORINFO_CONST_LOOKUP* pLookup) override; + +void getReadyToRunDelegateCtorHelper( + CORINFO_RESOLVED_TOKEN* pTargetMethod, + CORINFO_CLASS_HANDLE delegateType, + CORINFO_LOOKUP* pLookup) override; + +const char* getHelperName( + CorInfoHelpFunc helpFunc) override; + +CorInfoInitClassResult initClass( + CORINFO_FIELD_HANDLE field, + CORINFO_METHOD_HANDLE method, + CORINFO_CONTEXT_HANDLE context) override; + +void classMustBeLoadedBeforeCodeIsRun( + CORINFO_CLASS_HANDLE cls) override; + +CORINFO_CLASS_HANDLE getBuiltinClass( + CorInfoClassId classId) override; + +CorInfoType getTypeForPrimitiveValueClass( + CORINFO_CLASS_HANDLE cls) override; + +CorInfoType getTypeForPrimitiveNumericClass( + CORINFO_CLASS_HANDLE cls) override; + +bool canCast( + CORINFO_CLASS_HANDLE child, + CORINFO_CLASS_HANDLE parent) override; + +bool areTypesEquivalent( + CORINFO_CLASS_HANDLE cls1, + CORINFO_CLASS_HANDLE cls2) override; + +TypeCompareState compareTypesForCast( + CORINFO_CLASS_HANDLE fromClass, + CORINFO_CLASS_HANDLE toClass) override; + +TypeCompareState compareTypesForEquality( + CORINFO_CLASS_HANDLE cls1, + CORINFO_CLASS_HANDLE cls2) override; + +CORINFO_CLASS_HANDLE mergeClasses( + CORINFO_CLASS_HANDLE cls1, + CORINFO_CLASS_HANDLE cls2) override; + +bool isMoreSpecificType( + CORINFO_CLASS_HANDLE cls1, + CORINFO_CLASS_HANDLE cls2) override; + +CORINFO_CLASS_HANDLE getParentType( + CORINFO_CLASS_HANDLE cls) override; + +CorInfoType getChildType( + CORINFO_CLASS_HANDLE clsHnd, + CORINFO_CLASS_HANDLE* clsRet) override; + +bool satisfiesClassConstraints( + CORINFO_CLASS_HANDLE cls) override; + +bool isSDArray( + CORINFO_CLASS_HANDLE cls) override; + +unsigned getArrayRank( + CORINFO_CLASS_HANDLE cls) override; + +void* getArrayInitializationData( + CORINFO_FIELD_HANDLE field, + DWORD size) override; + +CorInfoIsAccessAllowedResult canAccessClass( + CORINFO_RESOLVED_TOKEN* pResolvedToken, + CORINFO_METHOD_HANDLE callerHandle, + CORINFO_HELPER_DESC* pAccessHelper) override; + +const char* getFieldName( + CORINFO_FIELD_HANDLE ftn, + const char** moduleName) override; + +CORINFO_CLASS_HANDLE getFieldClass( + CORINFO_FIELD_HANDLE field) override; + +CorInfoType getFieldType( + CORINFO_FIELD_HANDLE field, + CORINFO_CLASS_HANDLE* structType, + CORINFO_CLASS_HANDLE memberParent) override; + +unsigned getFieldOffset( + CORINFO_FIELD_HANDLE field) override; + +void getFieldInfo( + CORINFO_RESOLVED_TOKEN* pResolvedToken, + CORINFO_METHOD_HANDLE callerHandle, + CORINFO_ACCESS_FLAGS flags, + CORINFO_FIELD_INFO* pResult) override; + +bool isFieldStatic( + CORINFO_FIELD_HANDLE fldHnd) override; + +void getBoundaries( + CORINFO_METHOD_HANDLE ftn, + unsigned int* cILOffsets, + DWORD** pILOffsets, + ICorDebugInfo::BoundaryTypes* implictBoundaries) override; + +void setBoundaries( + CORINFO_METHOD_HANDLE ftn, + ULONG32 cMap, + ICorDebugInfo::OffsetMapping* pMap) override; + +void getVars( + CORINFO_METHOD_HANDLE ftn, + ULONG32* cVars, + ICorDebugInfo::ILVarInfo** vars, + bool* extendOthers) override; + +void setVars( + CORINFO_METHOD_HANDLE ftn, + ULONG32 cVars, + ICorDebugInfo::NativeVarInfo* vars) override; + +void* allocateArray( + size_t cBytes) override; + +void freeArray( + void* array) override; + +CORINFO_ARG_LIST_HANDLE getArgNext( + CORINFO_ARG_LIST_HANDLE args) override; + +CorInfoTypeWithMod getArgType( + CORINFO_SIG_INFO* sig, + CORINFO_ARG_LIST_HANDLE args, + CORINFO_CLASS_HANDLE* vcTypeRet) override; + +CORINFO_CLASS_HANDLE getArgClass( + CORINFO_SIG_INFO* sig, + CORINFO_ARG_LIST_HANDLE args) override; + +CorInfoHFAElemType getHFAType( + CORINFO_CLASS_HANDLE hClass) override; + +HRESULT GetErrorHRESULT( + struct _EXCEPTION_POINTERS* pExceptionPointers) override; + +ULONG GetErrorMessage( + LPWSTR buffer, + ULONG bufferLength) override; + +int FilterException( + struct _EXCEPTION_POINTERS* pExceptionPointers) override; + +void HandleException( + struct _EXCEPTION_POINTERS* pExceptionPointers) override; + +void ThrowExceptionForJitResult( + HRESULT result) override; + +void ThrowExceptionForHelper( + const CORINFO_HELPER_DESC* throwHelper) override; + +bool runWithErrorTrap( + ICorJitInfo::errorTrapFunction function, + void* parameter) override; + +void getEEInfo( + CORINFO_EE_INFO* pEEInfoOut) override; + +LPCWSTR getJitTimeLogFilename() override; + +mdMethodDef getMethodDefFromMethod( + CORINFO_METHOD_HANDLE hMethod) override; + +const char* getMethodName( + CORINFO_METHOD_HANDLE ftn, + const char** moduleName) override; + +const char* getMethodNameFromMetadata( + CORINFO_METHOD_HANDLE ftn, + const char** className, + const char** namespaceName, + const char** enclosingClassName) override; + +unsigned getMethodHash( + CORINFO_METHOD_HANDLE ftn) override; + +size_t findNameOfToken( + CORINFO_MODULE_HANDLE moduleHandle, + mdToken token, + char* szFQName, + size_t FQNameCapacity) override; + +bool getSystemVAmd64PassStructInRegisterDescriptor( + CORINFO_CLASS_HANDLE structHnd, + SYSTEMV_AMD64_CORINFO_STRUCT_REG_PASSING_DESCRIPTOR* structPassInRegDescPtr) override; + +DWORD getThreadTLSIndex( + void** ppIndirection) override; + +const void* getInlinedCallFrameVptr( + void** ppIndirection) override; + +LONG* getAddrOfCaptureThreadGlobal( + void** ppIndirection) override; + +void* getHelperFtn( + CorInfoHelpFunc ftnNum, + void** ppIndirection) override; + +void getFunctionEntryPoint( + CORINFO_METHOD_HANDLE ftn, + CORINFO_CONST_LOOKUP* pResult, + CORINFO_ACCESS_FLAGS accessFlags) override; + +void getFunctionFixedEntryPoint( + CORINFO_METHOD_HANDLE ftn, + CORINFO_CONST_LOOKUP* pResult) override; + +void* getMethodSync( + CORINFO_METHOD_HANDLE ftn, + void** ppIndirection) override; + +CorInfoHelpFunc getLazyStringLiteralHelper( + CORINFO_MODULE_HANDLE handle) override; + +CORINFO_MODULE_HANDLE embedModuleHandle( + CORINFO_MODULE_HANDLE handle, + void** ppIndirection) override; + +CORINFO_CLASS_HANDLE embedClassHandle( + CORINFO_CLASS_HANDLE handle, + void** ppIndirection) override; + +CORINFO_METHOD_HANDLE embedMethodHandle( + CORINFO_METHOD_HANDLE handle, + void** ppIndirection) override; + +CORINFO_FIELD_HANDLE embedFieldHandle( + CORINFO_FIELD_HANDLE handle, + void** ppIndirection) override; + +void embedGenericHandle( + CORINFO_RESOLVED_TOKEN* pResolvedToken, + bool fEmbedParent, + CORINFO_GENERICHANDLE_RESULT* pResult) override; + +void getLocationOfThisType( + CORINFO_METHOD_HANDLE context, + CORINFO_LOOKUP_KIND* pLookupKind) override; + +void getAddressOfPInvokeTarget( + CORINFO_METHOD_HANDLE method, + CORINFO_CONST_LOOKUP* pLookup) override; + +LPVOID GetCookieForPInvokeCalliSig( + CORINFO_SIG_INFO* szMetaSig, + void** ppIndirection) override; + +bool canGetCookieForPInvokeCalliSig( + CORINFO_SIG_INFO* szMetaSig) override; + +CORINFO_JUST_MY_CODE_HANDLE getJustMyCodeHandle( + CORINFO_METHOD_HANDLE method, + CORINFO_JUST_MY_CODE_HANDLE** ppIndirection) override; + +void GetProfilingHandle( + bool* pbHookFunction, + void** pProfilerHandle, + bool* pbIndirectedHandles) override; + +void getCallInfo( + CORINFO_RESOLVED_TOKEN* pResolvedToken, + CORINFO_RESOLVED_TOKEN* pConstrainedResolvedToken, + CORINFO_METHOD_HANDLE callerHandle, + CORINFO_CALLINFO_FLAGS flags, + CORINFO_CALL_INFO* pResult) override; + +bool canAccessFamily( + CORINFO_METHOD_HANDLE hCaller, + CORINFO_CLASS_HANDLE hInstanceType) override; + +bool isRIDClassDomainID( + CORINFO_CLASS_HANDLE cls) override; + +unsigned getClassDomainID( + CORINFO_CLASS_HANDLE cls, + void** ppIndirection) override; + +void* getFieldAddress( + CORINFO_FIELD_HANDLE field, + void** ppIndirection) override; + +CORINFO_CLASS_HANDLE getStaticFieldCurrentClass( + CORINFO_FIELD_HANDLE field, + bool* pIsSpeculative) override; + +CORINFO_VARARGS_HANDLE getVarArgsHandle( + CORINFO_SIG_INFO* pSig, + void** ppIndirection) override; + +bool canGetVarArgsHandle( + CORINFO_SIG_INFO* pSig) override; + +InfoAccessType constructStringLiteral( + CORINFO_MODULE_HANDLE module, + mdToken metaTok, + void** ppValue) override; + +InfoAccessType emptyStringLiteral( + void** ppValue) override; + +DWORD getFieldThreadLocalStoreID( + CORINFO_FIELD_HANDLE field, + void** ppIndirection) override; + +void setOverride( + ICorDynamicInfo* pOverride, + CORINFO_METHOD_HANDLE currentMethod) override; + +void addActiveDependency( + CORINFO_MODULE_HANDLE moduleFrom, + CORINFO_MODULE_HANDLE moduleTo) override; + +CORINFO_METHOD_HANDLE GetDelegateCtor( + CORINFO_METHOD_HANDLE methHnd, + CORINFO_CLASS_HANDLE clsHnd, + CORINFO_METHOD_HANDLE targetMethodHnd, + DelegateCtorArgs* pCtorData) override; + +void MethodCompileComplete( + CORINFO_METHOD_HANDLE methHnd) override; + +bool getTailCallHelpers( + CORINFO_RESOLVED_TOKEN* callToken, + CORINFO_SIG_INFO* sig, + CORINFO_GET_TAILCALL_HELPERS_FLAGS flags, + CORINFO_TAILCALL_HELPERS* pResult) override; + +bool convertPInvokeCalliToCall( + CORINFO_RESOLVED_TOKEN* pResolvedToken, + bool mustConvert) override; + +bool notifyInstructionSetUsage( + CORINFO_InstructionSet instructionSet, + bool supportEnabled) override; + +void allocMem( + ULONG hotCodeSize, + ULONG coldCodeSize, + ULONG roDataSize, + ULONG xcptnsCount, + CorJitAllocMemFlag flag, + void** hotCodeBlock, + void** coldCodeBlock, + void** roDataBlock) override; + +void reserveUnwindInfo( + bool isFunclet, + bool isColdCode, + ULONG unwindSize) override; + +void allocUnwindInfo( + BYTE* pHotCode, + BYTE* pColdCode, + ULONG startOffset, + ULONG endOffset, + ULONG unwindSize, + BYTE* pUnwindBlock, + CorJitFuncKind funcKind) override; + +void* allocGCInfo( + size_t size) override; + +void setEHcount( + unsigned cEH) override; + +void setEHinfo( + unsigned EHnumber, + const CORINFO_EH_CLAUSE* clause) override; + +bool logMsg( + unsigned level, + const char* fmt, + va_list args) override; + +int doAssert( + const char* szFile, + int iLine, + const char* szExpr) override; + +void reportFatalError( + CorJitResult result) override; + +HRESULT allocMethodBlockCounts( + UINT32 count, + ICorJitInfo::BlockCounts** pBlockCounts) override; + +HRESULT getMethodBlockCounts( + CORINFO_METHOD_HANDLE ftnHnd, + UINT32* pCount, + ICorJitInfo::BlockCounts** pBlockCounts, + UINT32* pNumRuns) override; + +CORINFO_CLASS_HANDLE getLikelyClass( + CORINFO_METHOD_HANDLE ftnHnd, + CORINFO_CLASS_HANDLE baseHnd, + UINT32 ilOffset, + UINT32* pLikelihood, + UINT32* pNumberOfClasses) override; + +void recordCallSite( + ULONG instrOffset, + CORINFO_SIG_INFO* callSig, + CORINFO_METHOD_HANDLE methodHandle) override; + +void recordRelocation( + void* location, + void* target, + WORD fRelocType, + WORD slotNum, + INT32 addlDelta) override; + +WORD getRelocTypeHint( + void* target) override; + +DWORD getExpectedTargetArchitecture() override; + +DWORD getJitFlags( + CORJIT_FLAGS* flags, + DWORD sizeInBytes) override; + +/**********************************************************************************/ +// clang-format on +/**********************************************************************************/ diff --git a/src/coreclr/tools/Common/JitInterface/ThunkGenerator/Program.cs b/src/coreclr/tools/Common/JitInterface/ThunkGenerator/Program.cs index f8b9a16a2bec2..7c1d13e0273bd 100644 --- a/src/coreclr/tools/Common/JitInterface/ThunkGenerator/Program.cs +++ b/src/coreclr/tools/Common/JitInterface/ThunkGenerator/Program.cs @@ -552,8 +552,6 @@ static void SPMI_ICorJitInfoImpl(TextWriter tw, IEnumerable functi { WriteAutogeneratedHeader(tw); tw.Write(@" -#ifndef _ICorJitInfoImpl -#define _ICorJitInfoImpl // ICorJitInfoImpl: declare for implementation all the members of the ICorJitInfo interface (which are // specified as pure virtual methods). This is done once, here, and all implementations share it, @@ -587,11 +585,10 @@ static void SPMI_ICorJitInfoImpl(TextWriter tw, IEnumerable functi } tw.Write(Environment.NewLine + " " + param.Type.NativeTypeName2 + " " + param.Name); } - tw.WriteLine(");"); + tw.WriteLine(") override;"); } tw.Write(@" -#endif // _ICorJitInfoImpl /**********************************************************************************/ // clang-format on /**********************************************************************************/ diff --git a/src/coreclr/tools/Common/JitInterface/ThunkGenerator/gen.bat b/src/coreclr/tools/Common/JitInterface/ThunkGenerator/gen.bat index 658335d69302a..c775755558de9 100644 --- a/src/coreclr/tools/Common/JitInterface/ThunkGenerator/gen.bat +++ b/src/coreclr/tools/Common/JitInterface/ThunkGenerator/gen.bat @@ -1,4 +1,4 @@ pushd %~dp0 -call ..\..\..\..\..\..\..\dotnet.cmd run -- ThunkInput.txt ..\CorInfoBase.cs ..\..\..\aot\jitinterface\jitinterface.h ..\..\..\..\jit\ICorJitInfo_API_names.h ..\..\..\..\jit\ICorJitInfo_API_wrapper.hpp ..\..\..\..\ToolBox\superpmi\superpmi-shared\icorjitinfoimpl.h ..\..\..\..\ToolBox\superpmi\superpmi-shim-counter\icorjitinfo.cpp ..\..\..\..\ToolBox\superpmi\superpmi-shim-simple\icorjitinfo.cpp -call ..\..\..\..\..\..\..\dotnet.cmd run -- InstructionSetGenerator InstructionSetDesc.txt ..\..\Internal\Runtime\ReadyToRunInstructionSet.cs ..\..\Internal\Runtime\ReadyToRunInstructionSetHelper.cs ..\CorInfoInstructionSet.cs ..\..\..\..\inc\corinfoinstructionset.h ..\..\..\..\inc\readytoruninstructionset.h +call ..\..\..\..\..\..\dotnet.cmd run -- ThunkInput.txt ..\CorInfoBase.cs ..\..\..\aot\jitinterface\jitinterface.h ..\..\..\..\jit\ICorJitInfo_API_names.h ..\..\..\..\jit\ICorJitInfo_API_wrapper.hpp ..\..\..\..\inc\icorjitinfoimpl_generated.h ..\..\..\..\ToolBox\superpmi\superpmi-shim-counter\icorjitinfo.cpp ..\..\..\..\ToolBox\superpmi\superpmi-shim-simple\icorjitinfo.cpp +call ..\..\..\..\..\..\dotnet.cmd run -- InstructionSetGenerator InstructionSetDesc.txt ..\..\Internal\Runtime\ReadyToRunInstructionSet.cs ..\..\Internal\Runtime\ReadyToRunInstructionSetHelper.cs ..\CorInfoInstructionSet.cs ..\..\..\..\inc\corinfoinstructionset.h ..\..\..\..\inc\readytoruninstructionset.h popd diff --git a/src/coreclr/tools/Common/JitInterface/ThunkGenerator/gen.sh b/src/coreclr/tools/Common/JitInterface/ThunkGenerator/gen.sh index 9701090e74719..7dc71bd378d85 100755 --- a/src/coreclr/tools/Common/JitInterface/ThunkGenerator/gen.sh +++ b/src/coreclr/tools/Common/JitInterface/ThunkGenerator/gen.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash cd "$(dirname ${BASH_SOURCE[0]})" -../../../../../../../dotnet.sh run -- ThunkInput.txt ../CorInfoBase.cs ../../../aot/jitinterface/jitinterface.h ../../../../jit/ICorJitInfo_API_names.h ../../../../jit/ICorJitInfo_API_wrapper.hpp ../../../../ToolBox/superpmi/superpmi-shared/icorjitinfoimpl.h ../../../../ToolBox/superpmi/superpmi-shim-counter/icorjitinfo.cpp ../../../../ToolBox/superpmi/superpmi-shim-simple/icorjitinfo.cpp -../../../../../../../dotnet.sh run -- InstructionSetGenerator InstructionSetDesc.txt ../../Internal/Runtime/ReadyToRunInstructionSet.cs ../../Internal/Runtime/ReadyToRunInstructionSetHelper.cs ../CorInfoInstructionSet.cs ../../../../inc/corinfoinstructionset.h ../../../../inc/readytoruninstructionset.h +../../../../../../dotnet.sh run -- ThunkInput.txt ../CorInfoBase.cs ../../../aot/jitinterface/jitinterface.h ../../../../jit/ICorJitInfo_API_names.h ../../../../jit/ICorJitInfo_API_wrapper.hpp ../../../../inc/icorjitinfoimpl_generated.h ../../../../ToolBox/superpmi/superpmi-shim-counter/icorjitinfo.cpp ../../../../ToolBox/superpmi/superpmi-shim-simple/icorjitinfo.cpp +../../../../../../dotnet.sh run -- InstructionSetGenerator InstructionSetDesc.txt ../../Internal/Runtime/ReadyToRunInstructionSet.cs ../../Internal/Runtime/ReadyToRunInstructionSetHelper.cs ../CorInfoInstructionSet.cs ../../../../inc/corinfoinstructionset.h ../../../../inc/readytoruninstructionset.h diff --git a/src/coreclr/vm/jitinterface.cpp b/src/coreclr/vm/jitinterface.cpp index 8e95aaa372622..579259d000c6e 100644 --- a/src/coreclr/vm/jitinterface.cpp +++ b/src/coreclr/vm/jitinterface.cpp @@ -181,6 +181,16 @@ BOOL ModifyCheckForDynamicMethod(DynamicResolver *pResolver, /*****************************************************************************/ +void CEEInfo::setOverride(ICorDynamicInfo *pOverride, CORINFO_METHOD_HANDLE currentMethod) +{ + LIMITED_METHOD_CONTRACT; + m_pOverride = pOverride; + m_pMethodBeingCompiled = (MethodDesc *)currentMethod; // method being compiled + + m_hMethodForSecurity_Key = NULL; + m_pMethodForSecurity_Value = NULL; +} + // Initialize from data we passed across to the JIT void CEEInfo::GetTypeContext(const CORINFO_SIG_INST *info, SigTypeContext *pTypeContext) { diff --git a/src/coreclr/vm/jitinterface.h b/src/coreclr/vm/jitinterface.h index 6ae9aa76c921c..78edf6f3a1d63 100644 --- a/src/coreclr/vm/jitinterface.h +++ b/src/coreclr/vm/jitinterface.h @@ -420,296 +420,29 @@ class CEEInfo : public ICorJitInfo BOOL ContextIsInstantiated(CORINFO_CONTEXT_HANDLE context); public: - // ICorClassInfo stuff - CorInfoType asCorInfoType (CORINFO_CLASS_HANDLE cls); - // This normalizes EE type information into the form expected by the JIT. - // - // If typeHnd contains exact type information, then *clsRet will contain - // the normalized CORINFO_CLASS_HANDLE information on return. - static CorInfoType asCorInfoType (CorElementType cet, - TypeHandle typeHnd = TypeHandle() /* optional in */, - CORINFO_CLASS_HANDLE *clsRet = NULL /* optional out */ ); - - CORINFO_MODULE_HANDLE getClassModule(CORINFO_CLASS_HANDLE clsHnd); - CORINFO_ASSEMBLY_HANDLE getModuleAssembly(CORINFO_MODULE_HANDLE mod); - const char* getAssemblyName(CORINFO_ASSEMBLY_HANDLE assem); - void* LongLifetimeMalloc(size_t sz); - void LongLifetimeFree(void* obj); - size_t getClassModuleIdForStatics(CORINFO_CLASS_HANDLE clsHnd, CORINFO_MODULE_HANDLE *pModuleHandle, void **ppIndirection); - const char* getClassName (CORINFO_CLASS_HANDLE cls); - const char* getClassNameFromMetadata (CORINFO_CLASS_HANDLE cls, const char** namespaceName); - CORINFO_CLASS_HANDLE getTypeInstantiationArgument(CORINFO_CLASS_HANDLE cls, unsigned index); - const char* getHelperName(CorInfoHelpFunc ftnNum); - int appendClassName(__deref_inout_ecount(*pnBufLen) WCHAR** ppBuf, - int* pnBufLen, - CORINFO_CLASS_HANDLE cls, - bool fNamespace, - bool fFullInst, - bool fAssembly); - bool isValueClass (CORINFO_CLASS_HANDLE cls); - CorInfoInlineTypeCheck canInlineTypeCheck (CORINFO_CLASS_HANDLE cls, CorInfoInlineTypeCheckSource source); - - DWORD getClassAttribs (CORINFO_CLASS_HANDLE cls); - - // Internal version without JIT-EE transition +#include "icorjitinfoimpl_generated.h" DWORD getClassAttribsInternal (CORINFO_CLASS_HANDLE cls); - bool isStructRequiringStackAllocRetBuf(CORINFO_CLASS_HANDLE cls); - - unsigned getClassSize (CORINFO_CLASS_HANDLE cls); - unsigned getHeapClassSize(CORINFO_CLASS_HANDLE cls); - bool canAllocateOnStack(CORINFO_CLASS_HANDLE cls); - unsigned getClassAlignmentRequirement(CORINFO_CLASS_HANDLE cls, bool fDoubleAlignHint); static unsigned getClassAlignmentRequirementStatic(TypeHandle clsHnd); - // Used for HFA's on IA64...and later for type based disambiguation - CORINFO_FIELD_HANDLE getFieldInClass(CORINFO_CLASS_HANDLE clsHnd, INT num); - - mdMethodDef getMethodDefFromMethod(CORINFO_METHOD_HANDLE hMethod); - bool checkMethodModifier(CORINFO_METHOD_HANDLE hMethod, LPCSTR modifier, bool fOptional); - - unsigned getClassGClayout (CORINFO_CLASS_HANDLE cls, BYTE* gcPtrs); /* really GCType* gcPtrs */ static unsigned getClassGClayoutStatic(TypeHandle th, BYTE* gcPtrs); - unsigned getClassNumInstanceFields(CORINFO_CLASS_HANDLE cls); - - // returns the enregister info for a struct based on type of fields, alignment, etc. - bool getSystemVAmd64PassStructInRegisterDescriptor( - /*IN*/ CORINFO_CLASS_HANDLE _structHnd, - /*OUT*/ SYSTEMV_AMD64_CORINFO_STRUCT_REG_PASSING_DESCRIPTOR* structPassInRegDescPtr); - - // Check Visibility rules. - // For Protected (family access) members, type of the instance is also - // considered when checking visibility rules. - - - CorInfoHelpFunc getNewHelper(CORINFO_RESOLVED_TOKEN * pResolvedToken, CORINFO_METHOD_HANDLE callerHandle, bool * pHasSideEffects); static CorInfoHelpFunc getNewHelperStatic(MethodTable * pMT, bool * pHasSideEffects); - - CorInfoHelpFunc getNewArrHelper(CORINFO_CLASS_HANDLE arrayCls); static CorInfoHelpFunc getNewArrHelperStatic(TypeHandle clsHnd); - - CorInfoHelpFunc getCastingHelper(CORINFO_RESOLVED_TOKEN * pResolvedToken, bool fThrowing); static CorInfoHelpFunc getCastingHelperStatic(TypeHandle clsHnd, bool fThrowing, bool * pfClassMustBeRestored); - CorInfoHelpFunc getSharedCCtorHelper(CORINFO_CLASS_HANDLE clsHnd); - CORINFO_CLASS_HANDLE getTypeForBox(CORINFO_CLASS_HANDLE cls); - CorInfoHelpFunc getBoxHelper(CORINFO_CLASS_HANDLE cls); - CorInfoHelpFunc getUnBoxHelper(CORINFO_CLASS_HANDLE cls); - - bool getReadyToRunHelper( - CORINFO_RESOLVED_TOKEN * pResolvedToken, - CORINFO_LOOKUP_KIND * pGenericLookupKind, - CorInfoHelpFunc id, - CORINFO_CONST_LOOKUP * pLookup - ); - - void getReadyToRunDelegateCtorHelper( - CORINFO_RESOLVED_TOKEN * pTargetMethod, - CORINFO_CLASS_HANDLE delegateType, - CORINFO_LOOKUP * pLookup - ); - - CorInfoInitClassResult initClass( - CORINFO_FIELD_HANDLE field, - CORINFO_METHOD_HANDLE method, - CORINFO_CONTEXT_HANDLE context); - - void classMustBeLoadedBeforeCodeIsRun (CORINFO_CLASS_HANDLE cls); - void methodMustBeLoadedBeforeCodeIsRun (CORINFO_METHOD_HANDLE meth); - CORINFO_METHOD_HANDLE mapMethodDeclToMethodImpl(CORINFO_METHOD_HANDLE methHnd); - CORINFO_CLASS_HANDLE getBuiltinClass(CorInfoClassId classId); - void getGSCookie(GSCookie * pCookieVal, GSCookie ** ppCookieVal); - - void setPatchpointInfo(PatchpointInfo* patchpointInfo); - PatchpointInfo* getOSRInfo(unsigned* ilOffset); - - // "System.Int32" ==> CORINFO_TYPE_INT.. - CorInfoType getTypeForPrimitiveValueClass( - CORINFO_CLASS_HANDLE cls - ); - - // "System.Int32" ==> CORINFO_TYPE_INT.. - // "System.UInt32" ==> CORINFO_TYPE_UINT.. - CorInfoType getTypeForPrimitiveNumericClass( - CORINFO_CLASS_HANDLE cls - ); - - // TRUE if child is a subtype of parent - // if parent is an interface, then does child implement / extend parent - bool canCast( - CORINFO_CLASS_HANDLE child, - CORINFO_CLASS_HANDLE parent - ); - - // TRUE if cls1 and cls2 are considered equivalent types. - bool areTypesEquivalent( - CORINFO_CLASS_HANDLE cls1, - CORINFO_CLASS_HANDLE cls2 - ); - - // See if a cast from fromClass to toClass will succeed, fail, or needs - // to be resolved at runtime. - TypeCompareState compareTypesForCast( - CORINFO_CLASS_HANDLE fromClass, - CORINFO_CLASS_HANDLE toClass - ); - - // See if types represented by cls1 and cls2 compare equal, not - // equal, or the comparison needs to be resolved at runtime. - TypeCompareState compareTypesForEquality( - CORINFO_CLASS_HANDLE cls1, - CORINFO_CLASS_HANDLE cls2 - ); - - // returns is the intersection of cls1 and cls2. - CORINFO_CLASS_HANDLE mergeClasses( - CORINFO_CLASS_HANDLE cls1, - CORINFO_CLASS_HANDLE cls2 - ); - - // Returns true if cls2 is known to be a more specific type - // than cls1 (a subtype or more restrictive shared type). - bool isMoreSpecificType( - CORINFO_CLASS_HANDLE cls1, - CORINFO_CLASS_HANDLE cls2 - ); - - // Given a class handle, returns the Parent type. - // For COMObjectType, it returns Class Handle of System.Object. - // Returns 0 if System.Object is passed in. - CORINFO_CLASS_HANDLE getParentType ( - CORINFO_CLASS_HANDLE cls - ); - - // Returns the CorInfoType of the "child type". If the child type is - // not a primitive type, *clsRet will be set. - // Given an Array of Type Foo, returns Foo. - // Given BYREF Foo, returns Foo - CorInfoType getChildType ( - CORINFO_CLASS_HANDLE clsHnd, - CORINFO_CLASS_HANDLE *clsRet - ); - - // Check constraints on type arguments of this class and parent classes - bool satisfiesClassConstraints( - CORINFO_CLASS_HANDLE cls - ); - - // Check if this is a single dimensional array type - bool isSDArray( - CORINFO_CLASS_HANDLE cls - ); - - // Get the number of dimensions in an array - unsigned getArrayRank( - CORINFO_CLASS_HANDLE cls - ); - - // Get static field data for an array - void * getArrayInitializationData( - CORINFO_FIELD_HANDLE field, - DWORD size - ); - - // Check Visibility rules. - CorInfoIsAccessAllowedResult canAccessClass( - CORINFO_RESOLVED_TOKEN * pResolvedToken, - CORINFO_METHOD_HANDLE callerHandle, - CORINFO_HELPER_DESC *pAccessHelper /* If canAccessClass returns something other - than ALLOWED, then this is filled in. */ - ); - // Returns that compilation flags that are shared between JIT and NGen static CORJIT_FLAGS GetBaseCompileFlags(MethodDesc * ftn); - // Resolve metadata token into runtime method handles. - void resolveToken(/* IN, OUT */ CORINFO_RESOLVED_TOKEN * pResolvedToken); - - // Attempt to resolve a metadata token into a runtime method handle. Returns true - // if resolution succeeded and false otherwise. - bool tryResolveToken(/* IN, OUT */ CORINFO_RESOLVED_TOKEN * pResolvedToken); - - void getFieldInfo (CORINFO_RESOLVED_TOKEN * pResolvedToken, - CORINFO_METHOD_HANDLE callerHandle, - CORINFO_ACCESS_FLAGS flags, - CORINFO_FIELD_INFO *pResult - ); static CorInfoHelpFunc getSharedStaticsHelper(FieldDesc * pField, MethodTable * pFieldMT); - bool isFieldStatic(CORINFO_FIELD_HANDLE fldHnd); - - // Given a signature token sigTOK, use class/method instantiation in context to instantiate any type variables in the signature and return a new signature - void findSig(CORINFO_MODULE_HANDLE scopeHnd, unsigned sigTOK, CORINFO_CONTEXT_HANDLE context, CORINFO_SIG_INFO* sig); - void findCallSiteSig(CORINFO_MODULE_HANDLE scopeHnd, unsigned methTOK, CORINFO_CONTEXT_HANDLE context, CORINFO_SIG_INFO* sig); - CORINFO_CLASS_HANDLE getTokenTypeAsHandle(CORINFO_RESOLVED_TOKEN * pResolvedToken); - - size_t findNameOfToken (CORINFO_MODULE_HANDLE module, mdToken metaTOK, - __out_ecount (FQNameCapacity) char * szFQName, size_t FQNameCapacity); - - // Checks if the given metadata token is valid - bool isValidToken ( - CORINFO_MODULE_HANDLE module, - mdToken metaTOK); - - // Checks if the given metadata token is valid StringRef - bool isValidStringRef ( - CORINFO_MODULE_HANDLE module, - mdToken metaTOK); - - // Get string length and content (can be null) for given metaTOK - LPCWSTR getStringLiteral ( - CORINFO_MODULE_HANDLE module, - mdToken metaTOK, - int* length); - static size_t findNameOfToken (Module* module, mdToken metaTOK, __out_ecount (FQNameCapacity) char * szFQName, size_t FQNameCapacity); - // ICorMethodInfo stuff - const char* getMethodName (CORINFO_METHOD_HANDLE ftnHnd, const char** scopeName); - const char* getMethodNameFromMetadata (CORINFO_METHOD_HANDLE ftnHnd, const char** className, const char** namespaceName, const char **enclosingClassName); - unsigned getMethodHash (CORINFO_METHOD_HANDLE ftnHnd); - - DWORD getMethodAttribs (CORINFO_METHOD_HANDLE ftnHnd); - // Internal version without JIT-EE transition DWORD getMethodAttribsInternal (CORINFO_METHOD_HANDLE ftnHnd); - void setMethodAttribs (CORINFO_METHOD_HANDLE ftnHnd, CorInfoMethodRuntimeFlags attribs); - - bool getMethodInfo ( - CORINFO_METHOD_HANDLE ftnHnd, - CORINFO_METHOD_INFO* methInfo); - - CorInfoInline canInline ( - CORINFO_METHOD_HANDLE callerHnd, - CORINFO_METHOD_HANDLE calleeHnd, - DWORD* pRestrictions); - - void reportInliningDecision (CORINFO_METHOD_HANDLE inlinerHnd, - CORINFO_METHOD_HANDLE inlineeHnd, - CorInfoInline inlineResult, - const char * reason); - - bool canTailCall ( - CORINFO_METHOD_HANDLE callerHnd, - CORINFO_METHOD_HANDLE declaredCalleeHnd, - CORINFO_METHOD_HANDLE exactCalleeHnd, - bool fIsTailPrefix); - - void reportTailCallDecision (CORINFO_METHOD_HANDLE callerHnd, - CORINFO_METHOD_HANDLE calleeHnd, - bool fIsTailPrefix, - CorInfoTailCall tailCallResult, - const char * reason); - // Given a method descriptor ftnHnd, extract signature information into sigInfo // Obtain (representative) instantiation information from ftnHnd's owner class //@GENERICSVER: added explicit owner parameter - void getMethodSig ( - CORINFO_METHOD_HANDLE ftnHnd, - CORINFO_SIG_INFO* sigInfo, - CORINFO_CLASS_HANDLE owner = NULL - ); // Internal version without JIT-EE transition void getMethodSigInternal ( CORINFO_METHOD_HANDLE ftnHnd, @@ -718,149 +451,14 @@ class CEEInfo : public ICorJitInfo SignatureKind signatureKind = SK_NOT_CALLSITE ); - void getEHinfo( - CORINFO_METHOD_HANDLE ftn, - unsigned EHnumber, - CORINFO_EH_CLAUSE* clause); - - CORINFO_CLASS_HANDLE getMethodClass (CORINFO_METHOD_HANDLE methodHnd); - CORINFO_MODULE_HANDLE getMethodModule (CORINFO_METHOD_HANDLE methodHnd); - - void getMethodVTableOffset ( - CORINFO_METHOD_HANDLE methodHnd, - unsigned * pOffsetOfIndirection, - unsigned * pOffsetAfterIndirection, - bool * isRelative); - - bool resolveVirtualMethod(CORINFO_DEVIRTUALIZATION_INFO * info); bool resolveVirtualMethodHelper(CORINFO_DEVIRTUALIZATION_INFO * info); - CORINFO_METHOD_HANDLE getUnboxedEntry( - CORINFO_METHOD_HANDLE ftn, - bool* requiresInstMethodTableArg - ); - - CORINFO_CLASS_HANDLE getDefaultEqualityComparerClass( - CORINFO_CLASS_HANDLE elemType - ); - CORINFO_CLASS_HANDLE getDefaultEqualityComparerClassHelper( CORINFO_CLASS_HANDLE elemType ); - void expandRawHandleIntrinsic( - CORINFO_RESOLVED_TOKEN * pResolvedToken, - CORINFO_GENERICHANDLE_RESULT * pResult); - - CorInfoIntrinsics getIntrinsicID(CORINFO_METHOD_HANDLE method, - bool * pMustExpand = NULL); - - bool isIntrinsicType(CORINFO_CLASS_HANDLE classHnd); - - CorInfoUnmanagedCallConv getUnmanagedCallConv(CORINFO_METHOD_HANDLE method); - bool pInvokeMarshalingRequired(CORINFO_METHOD_HANDLE method, CORINFO_SIG_INFO* callSiteSig); - - // Generate a cookie based on the signature that would needs to be passed - // to the above generic stub - LPVOID GetCookieForPInvokeCalliSig(CORINFO_SIG_INFO* szMetaSig, void ** ppIndirection); - bool canGetCookieForPInvokeCalliSig(CORINFO_SIG_INFO* szMetaSig); - - // Check constraints on method type arguments (only). - // The parent class should be checked separately using satisfiesClassConstraints(parent). - bool satisfiesMethodConstraints( - CORINFO_CLASS_HANDLE parent, // the exact parent of the method - CORINFO_METHOD_HANDLE method - ); - - // Given a Delegate type and a method, check if the method signature - // is Compatible with the Invoke method of the delegate. - //@GENERICSVER: new (suitable for generics) - bool isCompatibleDelegate( - CORINFO_CLASS_HANDLE objCls, - CORINFO_CLASS_HANDLE methodParentCls, - CORINFO_METHOD_HANDLE method, - CORINFO_CLASS_HANDLE delegateCls, - bool* pfIsOpenDelegate); - - // ICorFieldInfo stuff - const char* getFieldName (CORINFO_FIELD_HANDLE field, - const char** scopeName); - - CORINFO_CLASS_HANDLE getFieldClass (CORINFO_FIELD_HANDLE field); - - //@GENERICSVER: added owner parameter - CorInfoType getFieldType (CORINFO_FIELD_HANDLE field, CORINFO_CLASS_HANDLE* structType = NULL,CORINFO_CLASS_HANDLE owner = NULL); - // Internal version without JIT-EE transition CorInfoType getFieldTypeInternal (CORINFO_FIELD_HANDLE field, CORINFO_CLASS_HANDLE* structType = NULL,CORINFO_CLASS_HANDLE owner = NULL); - unsigned getFieldOffset (CORINFO_FIELD_HANDLE field); - - void* getFieldAddress(CORINFO_FIELD_HANDLE field, void **ppIndirection); - - CORINFO_CLASS_HANDLE getStaticFieldCurrentClass(CORINFO_FIELD_HANDLE field, bool* pIsSpeculative); - - // ICorDebugInfo stuff - void * allocateArray(size_t cBytes); - void freeArray(void *array); - void getBoundaries(CORINFO_METHOD_HANDLE ftn, - unsigned int *cILOffsets, DWORD **pILOffsets, - ICorDebugInfo::BoundaryTypes *implictBoundaries); - void setBoundaries(CORINFO_METHOD_HANDLE ftn, - ULONG32 cMap, ICorDebugInfo::OffsetMapping *pMap); - void getVars(CORINFO_METHOD_HANDLE ftn, ULONG32 *cVars, - ICorDebugInfo::ILVarInfo **vars, bool *extendOthers); - void setVars(CORINFO_METHOD_HANDLE ftn, ULONG32 cVars, - ICorDebugInfo::NativeVarInfo *vars); - - // ICorArgInfo stuff - - CorInfoTypeWithMod getArgType ( - CORINFO_SIG_INFO* sig, - CORINFO_ARG_LIST_HANDLE args, - CORINFO_CLASS_HANDLE *vcTypeRet - ); - - CORINFO_CLASS_HANDLE getArgClass ( - CORINFO_SIG_INFO* sig, - CORINFO_ARG_LIST_HANDLE args - ); - - CorInfoHFAElemType getHFAType ( - CORINFO_CLASS_HANDLE hClass - ); - - CORINFO_ARG_LIST_HANDLE getArgNext ( - CORINFO_ARG_LIST_HANDLE args - ); - - // ICorErrorInfo stuff - - HRESULT GetErrorHRESULT(struct _EXCEPTION_POINTERS *pExceptionPointers); - ULONG GetErrorMessage(__out_ecount(bufferLength) LPWSTR buffer, - ULONG bufferLength); - int FilterException(struct _EXCEPTION_POINTERS *pExceptionPointers); - void HandleException(struct _EXCEPTION_POINTERS *pExceptionPointers); - void ThrowExceptionForJitResult(HRESULT result); - void ThrowExceptionForHelper(const CORINFO_HELPER_DESC * throwHelper); - - // ICorStaticInfo stuff - void getEEInfo(CORINFO_EE_INFO *pEEInfoOut); - - LPCWSTR getJitTimeLogFilename(); - - //ICorDynamicInfo stuff - DWORD getFieldThreadLocalStoreID (CORINFO_FIELD_HANDLE field, void **ppIndirection); - - // Stub dispatch stuff - void getCallInfo( - CORINFO_RESOLVED_TOKEN * pResolvedToken, - CORINFO_RESOLVED_TOKEN * pConstrainedResolvedToken, - CORINFO_METHOD_HANDLE callerHandle, - CORINFO_CALLINFO_FLAGS flags, - CORINFO_CALL_INFO *pResult /*out */); - bool canAccessFamily(CORINFO_METHOD_HANDLE hCaller, - CORINFO_CLASS_HANDLE hInstanceType); - protected: static void getEHinfoHelper( @@ -876,30 +474,7 @@ class CEEInfo : public ICorJitInfo public: - bool isRIDClassDomainID(CORINFO_CLASS_HANDLE cls); - unsigned getClassDomainID (CORINFO_CLASS_HANDLE cls, void **ppIndirection); - CORINFO_VARARGS_HANDLE getVarArgsHandle(CORINFO_SIG_INFO *sig, void **ppIndirection); - bool canGetVarArgsHandle(CORINFO_SIG_INFO *sig); void* getAddressOfPInvokeFixup(CORINFO_METHOD_HANDLE method, void **ppIndirection); - void getAddressOfPInvokeTarget(CORINFO_METHOD_HANDLE method, CORINFO_CONST_LOOKUP *pLookup); - CORINFO_JUST_MY_CODE_HANDLE getJustMyCodeHandle(CORINFO_METHOD_HANDLE method, CORINFO_JUST_MY_CODE_HANDLE **ppIndirection); - - void GetProfilingHandle( - bool *pbHookFunction, - void **pProfilerHandle, - bool *pbIndirectedHandles - ); - - InfoAccessType constructStringLiteral(CORINFO_MODULE_HANDLE scopeHnd, mdToken metaTok, void **ppValue); - InfoAccessType emptyStringLiteral(void ** ppValue); - void* getMethodSync(CORINFO_METHOD_HANDLE ftnHnd, void **ppIndirection); - - DWORD getThreadTLSIndex(void **ppIndirection); - const void * getInlinedCallFrameVptr(void **ppIndirection); - - LONG * getAddrOfCaptureThreadGlobal(void **ppIndirection); - void* getHelperFtn(CorInfoHelpFunc ftnNum, /* IN */ - void ** ppIndirection); /* OUT */ bool getTailCallHelpersInternal( CORINFO_RESOLVED_TOKEN* callToken, @@ -907,55 +482,6 @@ class CEEInfo : public ICorJitInfo CORINFO_GET_TAILCALL_HELPERS_FLAGS flags, CORINFO_TAILCALL_HELPERS* pResult); - bool getTailCallHelpers( - CORINFO_RESOLVED_TOKEN* callToken, - CORINFO_SIG_INFO* sig, - CORINFO_GET_TAILCALL_HELPERS_FLAGS flags, - CORINFO_TAILCALL_HELPERS* pResult); - - bool convertPInvokeCalliToCall(CORINFO_RESOLVED_TOKEN * pResolvedToken, - bool fMustConvert); - - bool notifyInstructionSetUsage(CORINFO_InstructionSet instructionSet, - bool supportEnabled); - - void getFunctionEntryPoint(CORINFO_METHOD_HANDLE ftn, /* IN */ - CORINFO_CONST_LOOKUP * pResult, /* OUT */ - CORINFO_ACCESS_FLAGS accessFlags = CORINFO_ACCESS_ANY); - - void getFunctionFixedEntryPoint(CORINFO_METHOD_HANDLE ftn, - CORINFO_CONST_LOOKUP * pResult); - - // get slow lazy string literal helper to use (CORINFO_HELP_STRCNS*). - // Returns CORINFO_HELP_UNDEF if lazy string literal helper cannot be used. - CorInfoHelpFunc getLazyStringLiteralHelper(CORINFO_MODULE_HANDLE handle); - - CORINFO_MODULE_HANDLE embedModuleHandle(CORINFO_MODULE_HANDLE handle, - void **ppIndirection); - CORINFO_CLASS_HANDLE embedClassHandle(CORINFO_CLASS_HANDLE handle, - void **ppIndirection); - CORINFO_FIELD_HANDLE embedFieldHandle(CORINFO_FIELD_HANDLE handle, - void **ppIndirection); - CORINFO_METHOD_HANDLE embedMethodHandle(CORINFO_METHOD_HANDLE handle, - void **ppIndirection); - - void embedGenericHandle(CORINFO_RESOLVED_TOKEN * pResolvedToken, - bool fEmbedParent, - CORINFO_GENERICHANDLE_RESULT *pResult); - - void getLocationOfThisType(CORINFO_METHOD_HANDLE context, CORINFO_LOOKUP_KIND* pLookupKind); - - - void setOverride(ICorDynamicInfo *pOverride, CORINFO_METHOD_HANDLE currentMethod) - { - LIMITED_METHOD_CONTRACT; - m_pOverride = pOverride; - m_pMethodBeingCompiled = (MethodDesc *)currentMethod; // method being compiled - - m_hMethodForSecurity_Key = NULL; - m_pMethodForSecurity_Value = NULL; - } - // Returns whether we are generating code for NGen image. bool IsCompilingForNGen() { @@ -964,103 +490,13 @@ class CEEInfo : public ICorJitInfo return this != m_pOverride; } - void addActiveDependency(CORINFO_MODULE_HANDLE moduleFrom, CORINFO_MODULE_HANDLE moduleTo); - CORINFO_METHOD_HANDLE GetDelegateCtor( - CORINFO_METHOD_HANDLE methHnd, - CORINFO_CLASS_HANDLE clsHnd, - CORINFO_METHOD_HANDLE targetMethodHnd, - DelegateCtorArgs * pCtorData); - - void MethodCompileComplete( - CORINFO_METHOD_HANDLE methHnd); - - // - // ICorJitInfo stuff - none of this should be called on this class + // This normalizes EE type information into the form expected by the JIT. // - - void allocMem ( - ULONG hotCodeSize, /* IN */ - ULONG coldCodeSize, /* IN */ - ULONG roDataSize, /* IN */ - ULONG xcptnsCount, /* IN */ - CorJitAllocMemFlag flag, /* IN */ - void ** hotCodeBlock, /* OUT */ - void ** coldCodeBlock, /* OUT */ - void ** roDataBlock /* OUT */ - ); - - void reserveUnwindInfo ( - bool isFunclet, /* IN */ - bool isColdCode, /* IN */ - ULONG unwindSize /* IN */ - ); - - void allocUnwindInfo ( - BYTE * pHotCode, /* IN */ - BYTE * pColdCode, /* IN */ - ULONG startOffset, /* IN */ - ULONG endOffset, /* IN */ - ULONG unwindSize, /* IN */ - BYTE * pUnwindBlock, /* IN */ - CorJitFuncKind funcKind /* IN */ - ); - - void * allocGCInfo ( - size_t size /* IN */ - ); - - void setEHcount ( - unsigned cEH /* IN */ - ); - - void setEHinfo ( - unsigned EHnumber, /* IN */ - const CORINFO_EH_CLAUSE *clause /* IN */ - ); - - bool logMsg(unsigned level, const char* fmt, va_list args); - - int doAssert(const char* szFile, int iLine, const char* szExpr); - - void reportFatalError(CorJitResult result); - - HRESULT allocMethodBlockCounts ( - UINT32 count, // the count of tuples - BlockCounts ** pBlockCounts // pointer to array of tuples - ); - - HRESULT getMethodBlockCounts( - CORINFO_METHOD_HANDLE ftnHnd, - UINT32 * pCount, // pointer to the count of tuples - BlockCounts ** pBlockCounts, // pointer to array of tuples - UINT32 * pNumRuns - ); - - CORINFO_CLASS_HANDLE getLikelyClass( - CORINFO_METHOD_HANDLE ftnHnd, - CORINFO_CLASS_HANDLE baseHnd, - UINT32 ilOffset, - UINT32 * pLikelihood, - UINT32 * pNumberOfClasses - ); - - void recordCallSite( - ULONG instrOffset, /* IN */ - CORINFO_SIG_INFO * callSig, /* IN */ - CORINFO_METHOD_HANDLE methodHandle /* IN */ - ); - - void recordRelocation( - void * location, /* IN */ - void * target, /* IN */ - WORD fRelocType, /* IN */ - WORD slotNum = 0, /* IN */ - INT32 addlDelta = 0 /* IN */ - ); - - WORD getRelocTypeHint(void * target); - - DWORD getExpectedTargetArchitecture(); + // If typeHnd contains exact type information, then *clsRet will contain + // the normalized CORINFO_CLASS_HANDLE information on return. + static CorInfoType asCorInfoType (CorElementType cet, + TypeHandle typeHnd = TypeHandle() /* optional in */, + CORINFO_CLASS_HANDLE *clsRet = NULL /* optional out */ ); CEEInfo(MethodDesc * fd = NULL, bool fVerifyOnly = false, bool fAllowInlining = true) : m_pOverride(NULL), @@ -1087,10 +523,6 @@ class CEEInfo : public ICorJitInfo void setJitFlags(const CORJIT_FLAGS& jitFlags); - DWORD getJitFlags(CORJIT_FLAGS* jitFlags, DWORD sizeInBytes); - - bool runWithErrorTrap(void (*function)(void*), void* param); - private: // Shrinking these buffers drastically reduces the amount of stack space // required for each instance of the interpreter, and thereby reduces SOs. @@ -1205,9 +637,9 @@ class CEEJitInfo : public CEEInfo void ** hotCodeBlock, /* OUT */ void ** coldCodeBlock, /* OUT */ void ** roDataBlock /* OUT */ - ); + ) override final; - void reserveUnwindInfo(bool isFunclet, bool isColdCode, ULONG unwindSize); + void reserveUnwindInfo(bool isFunclet, bool isColdCode, ULONG unwindSize) override final; void allocUnwindInfo ( BYTE * pHotCode, /* IN */ @@ -1217,34 +649,34 @@ class CEEJitInfo : public CEEInfo ULONG unwindSize, /* IN */ BYTE * pUnwindBlock, /* IN */ CorJitFuncKind funcKind /* IN */ - ); + ) override final; - void * allocGCInfo (size_t size); + void * allocGCInfo (size_t size) override final; - void setEHcount (unsigned cEH); + void setEHcount (unsigned cEH) override final; void setEHinfo ( unsigned EHnumber, - const CORINFO_EH_CLAUSE* clause); + const CORINFO_EH_CLAUSE* clause) override final; void getEHinfo( CORINFO_METHOD_HANDLE ftn, /* IN */ unsigned EHnumber, /* IN */ CORINFO_EH_CLAUSE* clause /* OUT */ - ); + ) override final; HRESULT allocMethodBlockCounts ( UINT32 count, // the count of tuples ICorJitInfo::BlockCounts ** pBlockCounts // pointer to array of tuples - ); + ) override final; HRESULT getMethodBlockCounts( CORINFO_METHOD_HANDLE ftnHnd, UINT32 * pCount, // pointer to the count of tuples BlockCounts ** pBlockCounts, // pointer to array of tuples UINT32 * pNumRuns - ); + ) override final; CORINFO_CLASS_HANDLE getLikelyClass( CORINFO_METHOD_HANDLE ftnHnd, @@ -1252,24 +684,24 @@ class CEEJitInfo : public CEEInfo UINT32 ilOffset, UINT32 * pLikelihood, UINT32 * pNumberOfClasses - ); + ) override final; void recordCallSite( ULONG instrOffset, /* IN */ CORINFO_SIG_INFO * callSig, /* IN */ CORINFO_METHOD_HANDLE methodHandle /* IN */ - ); + ) override final; void recordRelocation( void *location, void *target, WORD fRelocType, WORD slot, - INT32 addlDelta); + INT32 addlDelta) override final; - WORD getRelocTypeHint(void * target); + WORD getRelocTypeHint(void * target) override final; - DWORD getExpectedTargetArchitecture(); + DWORD getExpectedTargetArchitecture() override final; CodeHeader* GetCodeHeader() { @@ -1453,17 +885,17 @@ class CEEJitInfo : public CEEInfo // ICorDebugInfo stuff. void setBoundaries(CORINFO_METHOD_HANDLE ftn, - ULONG32 cMap, ICorDebugInfo::OffsetMapping *pMap); + ULONG32 cMap, ICorDebugInfo::OffsetMapping *pMap) override final; void setVars(CORINFO_METHOD_HANDLE ftn, ULONG32 cVars, - ICorDebugInfo::NativeVarInfo *vars); + ICorDebugInfo::NativeVarInfo *vars) override final; void CompressDebugInfo(); - void* getHelperFtn(CorInfoHelpFunc ftnNum, /* IN */ - void ** ppIndirection); /* OUT */ + void* getHelperFtn(CorInfoHelpFunc ftnNum, /* IN */ + void ** ppIndirection) override final; /* OUT */ static PCODE getHelperFtnStatic(CorInfoHelpFunc ftnNum); // Override active dependency to talk to loader - void addActiveDependency(CORINFO_MODULE_HANDLE moduleFrom, CORINFO_MODULE_HANDLE moduleTo); + void addActiveDependency(CORINFO_MODULE_HANDLE moduleFrom, CORINFO_MODULE_HANDLE moduleTo) override final; // Override of CEEInfo::GetProfilingHandle. The first time this is called for a // method desc, it calls through to CEEInfo::GetProfilingHandle and caches the @@ -1474,18 +906,18 @@ class CEEJitInfo : public CEEInfo bool *pbHookFunction, void **pProfilerHandle, bool *pbIndirectedHandles - ); + ) override final; - InfoAccessType constructStringLiteral(CORINFO_MODULE_HANDLE scopeHnd, mdToken metaTok, void **ppValue); - InfoAccessType emptyStringLiteral(void ** ppValue); - void* getFieldAddress(CORINFO_FIELD_HANDLE field, void **ppIndirection); - CORINFO_CLASS_HANDLE getStaticFieldCurrentClass(CORINFO_FIELD_HANDLE field, bool* pIsSpeculative); - void* getMethodSync(CORINFO_METHOD_HANDLE ftnHnd, void **ppIndirection); + InfoAccessType constructStringLiteral(CORINFO_MODULE_HANDLE scopeHnd, mdToken metaTok, void **ppValue) override final; + InfoAccessType emptyStringLiteral(void ** ppValue) override final; + void* getFieldAddress(CORINFO_FIELD_HANDLE field, void **ppIndirection) override final; + CORINFO_CLASS_HANDLE getStaticFieldCurrentClass(CORINFO_FIELD_HANDLE field, bool* pIsSpeculative) override final; + void* getMethodSync(CORINFO_METHOD_HANDLE ftnHnd, void **ppIndirection) override final; void BackoutJitData(EEJitManager * jitMgr); - void setPatchpointInfo(PatchpointInfo* patchpointInfo); - PatchpointInfo* getOSRInfo(unsigned* ilOffset); + void setPatchpointInfo(PatchpointInfo* patchpointInfo) override final; + PatchpointInfo* getOSRInfo(unsigned* ilOffset) override final; protected : EEJitManager* m_jitManager; // responsible for allocating memory diff --git a/src/coreclr/zap/zapinfo.h b/src/coreclr/zap/zapinfo.h index 8514cce6ccb29..bf3ddf0fc366b 100644 --- a/src/coreclr/zap/zapinfo.h +++ b/src/coreclr/zap/zapinfo.h @@ -266,459 +266,15 @@ class ZapInfo ULONG GetNumFixups(); // ICorJitInfo - - virtual void allocMem ( - ULONG hotCodeSize, /* IN */ - ULONG coldCodeSize, /* IN */ - ULONG roDataSize, /* IN */ - ULONG xcptnsCount, /* IN */ - CorJitAllocMemFlag flag, /* IN */ - void ** hotCodeBlock, /* OUT */ - void ** coldCodeBlock, /* OUT */ - void ** roDataBlock /* OUT */ - ); - - void reserveUnwindInfo( - bool isFunclet, /* IN */ - bool isColdCode, /* IN */ - ULONG unwindSize /* IN */ - ); - - void allocUnwindInfo ( - BYTE * pHotCode, /* IN */ - BYTE * pColdCode, /* IN */ - ULONG startOffset, /* IN */ - ULONG endOffset, /* IN */ - ULONG unwindSize, /* IN */ - BYTE * pUnwindBlock, /* IN */ - CorJitFuncKind funcKind /* IN */ - ); - - void * allocGCInfo(size_t size); - void setEHcount(unsigned cEH); - void setEHinfo(unsigned EHnumber, const CORINFO_EH_CLAUSE *clause); +#include "icorjitinfoimpl_generated.h" int canHandleException(struct _EXCEPTION_POINTERS *pExceptionPointers); - bool logMsg(unsigned level, const char *fmt, va_list args); - int doAssert(const char* szFile, int iLine, const char* szExpr); - void reportFatalError(CorJitResult result); - - HRESULT allocMethodBlockCounts ( - UINT32 count, - ICorJitInfo::BlockCounts ** pBlockCounts); - - HRESULT getMethodBlockCounts ( - CORINFO_METHOD_HANDLE ftnHnd, - UINT32 * pCount, - ICorJitInfo::BlockCounts ** pBlockCounts, - UINT32 * pNumRuns); - - CORINFO_CLASS_HANDLE getLikelyClass( - CORINFO_METHOD_HANDLE ftnHnd, - CORINFO_CLASS_HANDLE baseHnd, - UINT32 ilOffset, - UINT32 * pLikelihood, - UINT32 * pNumberOfClasses); - - DWORD getJitFlags(CORJIT_FLAGS* jitFlags, DWORD sizeInBytes); - - bool runWithErrorTrap(void (*function)(void*), void* param); - - // ICorDynamicInfo - - DWORD getThreadTLSIndex(void **ppIndirection); - const void * getInlinedCallFrameVptr(void **ppIndirection); - LONG * getAddrOfCaptureThreadGlobal(void **ppIndirection); - - // get slow lazy string literal helper to use (CORINFO_HELP_STRCNS*). - // Returns CORINFO_HELP_UNDEF if lazy string literal helper cannot be used. - CorInfoHelpFunc getLazyStringLiteralHelper(CORINFO_MODULE_HANDLE handle); - - CORINFO_MODULE_HANDLE - embedModuleHandle(CORINFO_MODULE_HANDLE handle, - void **ppIndirection); - CORINFO_CLASS_HANDLE - embedClassHandle(CORINFO_CLASS_HANDLE handle, - void **ppIndirection); - CORINFO_FIELD_HANDLE - embedFieldHandle(CORINFO_FIELD_HANDLE handle, - void **ppIndirection); - CORINFO_METHOD_HANDLE - embedMethodHandle(CORINFO_METHOD_HANDLE handle, - void **ppIndirection); - void - embedGenericHandle(CORINFO_RESOLVED_TOKEN * pResolvedToken, - bool fEmbedParent, - CORINFO_GENERICHANDLE_RESULT *pResult); - - void getLocationOfThisType(CORINFO_METHOD_HANDLE context, CORINFO_LOOKUP_KIND* pLookupKind); - - - void * getHelperFtn (CorInfoHelpFunc ftnNum, - void** ppIndirection); - - virtual bool getTailCallHelpers( - CORINFO_RESOLVED_TOKEN* callToken, - CORINFO_SIG_INFO* sig, - CORINFO_GET_TAILCALL_HELPERS_FLAGS flags, - CORINFO_TAILCALL_HELPERS* pResult); - - bool convertPInvokeCalliToCall( - CORINFO_RESOLVED_TOKEN * pResolvedToken, - bool fMustConvert); - - bool notifyInstructionSetUsage(CORINFO_InstructionSet instructionSet, bool supportEnabled); - - void getFunctionEntryPoint( - CORINFO_METHOD_HANDLE ftn, /* IN */ - CORINFO_CONST_LOOKUP * pResult, /* OUT */ - CORINFO_ACCESS_FLAGS accessFlags = CORINFO_ACCESS_ANY); - - void getFunctionFixedEntryPoint( - CORINFO_METHOD_HANDLE ftn, - CORINFO_CONST_LOOKUP * pResult); - - - void * getMethodSync(CORINFO_METHOD_HANDLE ftn, - void **ppIndirection); void * getAddressOfPInvokeFixup(CORINFO_METHOD_HANDLE method, void **ppIndirection); - void getAddressOfPInvokeTarget(CORINFO_METHOD_HANDLE method, - CORINFO_CONST_LOOKUP *pLookup); - CORINFO_JUST_MY_CODE_HANDLE getJustMyCodeHandle( - CORINFO_METHOD_HANDLE method, - CORINFO_JUST_MY_CODE_HANDLE **ppIndirection); - - ZapImport * GetProfilingHandleImport(); - - void GetProfilingHandle( - bool *pbHookFunction, - void **pProfilerHandle, - bool *pbIndirectedHandles - ); - - void getCallInfo( - // Token info - CORINFO_RESOLVED_TOKEN * pResolvedToken, - //Generics info - CORINFO_RESOLVED_TOKEN * pConstrainedResolvedToken, - //Security info - CORINFO_METHOD_HANDLE callerHandle, - //Jit info - CORINFO_CALLINFO_FLAGS flags, - //out params - CORINFO_CALL_INFO *pResult); - - bool canAccessFamily(CORINFO_METHOD_HANDLE hCaller, - CORINFO_CLASS_HANDLE hInstanceType); - - - bool isRIDClassDomainID(CORINFO_CLASS_HANDLE cls); - - unsigned getClassDomainID(CORINFO_CLASS_HANDLE cls, - void **ppIndirection); - - void * getFieldAddress(CORINFO_FIELD_HANDLE field, - void **ppIndirection); - CORINFO_CLASS_HANDLE getStaticFieldCurrentClass(CORINFO_FIELD_HANDLE field, - bool* pIsSpeculative); - - DWORD getFieldThreadLocalStoreID (CORINFO_FIELD_HANDLE field, - void **ppIndirection); - CORINFO_VARARGS_HANDLE getVarArgsHandle(CORINFO_SIG_INFO *sig, - void **ppIndirection); - bool canGetVarArgsHandle(CORINFO_SIG_INFO *sig); - - InfoAccessType constructStringLiteral(CORINFO_MODULE_HANDLE module, - unsigned metaTok, void **ppIndirection); - - InfoAccessType emptyStringLiteral(void **ppIndirection); - - void setOverride(ICorDynamicInfo *pOverride, CORINFO_METHOD_HANDLE currentMethod); - - void addActiveDependency(CORINFO_MODULE_HANDLE moduleFrom, CORINFO_MODULE_HANDLE moduleTo); - - void recordCallSite(ULONG instrOffset, CORINFO_SIG_INFO *callSig, CORINFO_METHOD_HANDLE methodHandle); - - // Relocations - - void recordRelocation(void *location, void *target, - WORD fRelocType, WORD slotNum, INT32 addlDelta); - - WORD getRelocTypeHint(void * target); - - DWORD getExpectedTargetArchitecture(); - - // ICorJitInfo delegate ctor optimization - CORINFO_METHOD_HANDLE GetDelegateCtor( - CORINFO_METHOD_HANDLE methHnd, - CORINFO_CLASS_HANDLE clsHnd, - CORINFO_METHOD_HANDLE targetMethodHnd, - DelegateCtorArgs * pCtorData); - - void MethodCompileComplete( - CORINFO_METHOD_HANDLE methHnd); - - // ICorStaticInfo - - void getEEInfo(CORINFO_EE_INFO *pEEInfoOut); - - LPCWSTR getJitTimeLogFilename(); + ZapImport * GetProfilingHandleImport(); - // ICorArgInfo - CORINFO_ARG_LIST_HANDLE getArgNext(CORINFO_ARG_LIST_HANDLE args); - CorInfoTypeWithMod getArgType(CORINFO_SIG_INFO* sig, - CORINFO_ARG_LIST_HANDLE args, - CORINFO_CLASS_HANDLE *vcTypeRet); - CORINFO_CLASS_HANDLE getArgClass(CORINFO_SIG_INFO* sig, - CORINFO_ARG_LIST_HANDLE args); - CorInfoHFAElemType getHFAType(CORINFO_CLASS_HANDLE hClass); - // ICorDebugInfo - - void getBoundaries(CORINFO_METHOD_HANDLE ftn, unsigned int *cILOffsets, - DWORD **pILOffsets, ICorDebugInfo::BoundaryTypes *implicitBoundaries); - void setBoundaries(CORINFO_METHOD_HANDLE ftn, ULONG32 cMap, - ICorDebugInfo::OffsetMapping *pMap); - void getVars(CORINFO_METHOD_HANDLE ftn, ULONG32 *cVars, - ICorDebugInfo::ILVarInfo **vars, bool *extendOthers); - void setVars(CORINFO_METHOD_HANDLE ftn, ULONG32 cVars, - ICorDebugInfo::NativeVarInfo*vars); - void * allocateArray(size_t cBytes); - void freeArray(void *array); - - // ICorFieldInfo - - const char* getFieldName(CORINFO_FIELD_HANDLE ftn, const char **moduleName); - CORINFO_CLASS_HANDLE getFieldClass(CORINFO_FIELD_HANDLE field); - - CorInfoType getFieldType(CORINFO_FIELD_HANDLE field, - CORINFO_CLASS_HANDLE *structType, - CORINFO_CLASS_HANDLE memberParent); - - unsigned getFieldOffset(CORINFO_FIELD_HANDLE field); - - void getFieldInfo (CORINFO_RESOLVED_TOKEN * pResolvedToken, - CORINFO_METHOD_HANDLE callerHandle, - CORINFO_ACCESS_FLAGS flags, - CORINFO_FIELD_INFO *pResult); - - bool isFieldStatic(CORINFO_FIELD_HANDLE fldHnd); - - // ICorClassInfo - - CorInfoType asCorInfoType(CORINFO_CLASS_HANDLE cls); - const char* getClassName(CORINFO_CLASS_HANDLE cls); - const char* getClassNameFromMetadata(CORINFO_CLASS_HANDLE cls, const char** namespaceName); - CORINFO_CLASS_HANDLE getTypeInstantiationArgument(CORINFO_CLASS_HANDLE cls, unsigned index); - const char* getHelperName(CorInfoHelpFunc ftnNum); - int appendClassName(__deref_inout_ecount(*pnBufLen) WCHAR** ppBuf, int* pnBufLen, - CORINFO_CLASS_HANDLE cls, - bool fNamespace, - bool fFullInst, - bool fAssembly); - bool isValueClass(CORINFO_CLASS_HANDLE clsHnd); - CorInfoInlineTypeCheck canInlineTypeCheck(CORINFO_CLASS_HANDLE cls, CorInfoInlineTypeCheckSource source); - DWORD getClassAttribs(CORINFO_CLASS_HANDLE cls); - bool isStructRequiringStackAllocRetBuf(CORINFO_CLASS_HANDLE cls); - CORINFO_MODULE_HANDLE getClassModule(CORINFO_CLASS_HANDLE cls); - CORINFO_ASSEMBLY_HANDLE getModuleAssembly(CORINFO_MODULE_HANDLE mod); - const char* getAssemblyName(CORINFO_ASSEMBLY_HANDLE assem); - void* LongLifetimeMalloc(size_t sz); - void LongLifetimeFree(void* obj); - size_t getClassModuleIdForStatics(CORINFO_CLASS_HANDLE cls, CORINFO_MODULE_HANDLE *pModule, void **ppIndirection); - - unsigned getClassSize(CORINFO_CLASS_HANDLE cls); - unsigned getHeapClassSize(CORINFO_CLASS_HANDLE cls); - bool canAllocateOnStack(CORINFO_CLASS_HANDLE cls); - unsigned getClassAlignmentRequirement(CORINFO_CLASS_HANDLE cls, bool fDoubleAlignHint); - - CORINFO_FIELD_HANDLE getFieldInClass(CORINFO_CLASS_HANDLE clsHnd, INT num); - - mdMethodDef getMethodDefFromMethod(CORINFO_METHOD_HANDLE hMethod); - bool checkMethodModifier(CORINFO_METHOD_HANDLE hMethod, LPCSTR modifier, bool fOptional); - - unsigned getClassGClayout(CORINFO_CLASS_HANDLE cls, BYTE *gcPtrs); - - bool getSystemVAmd64PassStructInRegisterDescriptor( - /*IN*/ CORINFO_CLASS_HANDLE _structHnd, - /*OUT*/ SYSTEMV_AMD64_CORINFO_STRUCT_REG_PASSING_DESCRIPTOR* structPassInRegDescPtr); - - unsigned getClassNumInstanceFields(CORINFO_CLASS_HANDLE cls); - - CorInfoHelpFunc getNewHelper(CORINFO_RESOLVED_TOKEN * pResolvedToken, CORINFO_METHOD_HANDLE callerHandle, bool * pHasSideEffects); - CorInfoHelpFunc getCastingHelper(CORINFO_RESOLVED_TOKEN * pResolvedToken, bool fThrowing); - CorInfoHelpFunc getNewArrHelper(CORINFO_CLASS_HANDLE arrayCls); - CorInfoHelpFunc getSharedCCtorHelper(CORINFO_CLASS_HANDLE clsHnd); - CORINFO_CLASS_HANDLE getTypeForBox(CORINFO_CLASS_HANDLE cls); - CorInfoHelpFunc getBoxHelper(CORINFO_CLASS_HANDLE cls); - CorInfoHelpFunc getUnBoxHelper(CORINFO_CLASS_HANDLE cls); - - bool getReadyToRunHelper( - CORINFO_RESOLVED_TOKEN * pResolvedToken, - CORINFO_LOOKUP_KIND * pGenericLookupKind, - CorInfoHelpFunc id, - CORINFO_CONST_LOOKUP * pLookup - ); - - void getReadyToRunDelegateCtorHelper( - CORINFO_RESOLVED_TOKEN * pTargetMethod, - CORINFO_CLASS_HANDLE delegateType, - CORINFO_LOOKUP * pLookup - ); - - CorInfoInitClassResult initClass( - CORINFO_FIELD_HANDLE field, - CORINFO_METHOD_HANDLE method, - CORINFO_CONTEXT_HANDLE context); - - void classMustBeLoadedBeforeCodeIsRun(CORINFO_CLASS_HANDLE cls); - void methodMustBeLoadedBeforeCodeIsRun(CORINFO_METHOD_HANDLE meth); - CORINFO_METHOD_HANDLE mapMethodDeclToMethodImpl(CORINFO_METHOD_HANDLE methHnd); - CORINFO_CLASS_HANDLE getBuiltinClass(CorInfoClassId classId); - CorInfoType getTypeForPrimitiveValueClass(CORINFO_CLASS_HANDLE cls); - CorInfoType getTypeForPrimitiveNumericClass(CORINFO_CLASS_HANDLE cls); - bool canCast(CORINFO_CLASS_HANDLE child, CORINFO_CLASS_HANDLE parent); - bool areTypesEquivalent(CORINFO_CLASS_HANDLE cls1, CORINFO_CLASS_HANDLE cls2); - TypeCompareState compareTypesForCast(CORINFO_CLASS_HANDLE fromClass, CORINFO_CLASS_HANDLE toClass); - TypeCompareState compareTypesForEquality(CORINFO_CLASS_HANDLE cls1, CORINFO_CLASS_HANDLE cls2); - - CORINFO_CLASS_HANDLE mergeClasses(CORINFO_CLASS_HANDLE cls1, - CORINFO_CLASS_HANDLE cls2); - bool isMoreSpecificType(CORINFO_CLASS_HANDLE cls1, - CORINFO_CLASS_HANDLE cls2); - - CORINFO_CLASS_HANDLE getParentType(CORINFO_CLASS_HANDLE cls); - CorInfoType getChildType (CORINFO_CLASS_HANDLE clsHnd, - CORINFO_CLASS_HANDLE *clsRet); - bool satisfiesClassConstraints(CORINFO_CLASS_HANDLE cls); - - bool isSDArray (CORINFO_CLASS_HANDLE cls); - unsigned getArrayRank(CORINFO_CLASS_HANDLE cls); - void * getArrayInitializationData(CORINFO_FIELD_HANDLE field, DWORD size); - CorInfoIsAccessAllowedResult canAccessClass(CORINFO_RESOLVED_TOKEN * pResolvedToken, - CORINFO_METHOD_HANDLE callerHandle, - CORINFO_HELPER_DESC *throwHelper); - - // ICorModuleInfo - - void resolveToken(CORINFO_RESOLVED_TOKEN * pResolvedToken); - bool tryResolveToken(CORINFO_RESOLVED_TOKEN * pResolvedToken); - - void findSig(CORINFO_MODULE_HANDLE module, unsigned sigTOK, - CORINFO_CONTEXT_HANDLE context, - CORINFO_SIG_INFO *sig); - void findCallSiteSig(CORINFO_MODULE_HANDLE module, - unsigned methTOK, - CORINFO_CONTEXT_HANDLE context, - CORINFO_SIG_INFO *sig); - CORINFO_CLASS_HANDLE getTokenTypeAsHandle(CORINFO_RESOLVED_TOKEN * pResolvedToken); - size_t findNameOfToken(CORINFO_MODULE_HANDLE module, - unsigned metaTOK, - __out_ecount (FQNameCapacity) char * szFQName, - size_t FQNameCapacity); - bool isValidToken(CORINFO_MODULE_HANDLE module, - unsigned metaTOK); - bool isValidStringRef(CORINFO_MODULE_HANDLE module, - unsigned metaTOK); - LPCWSTR getStringLiteral(CORINFO_MODULE_HANDLE module, - unsigned metaTOK, - int* length); - - - // ICorMethodInfo - - const char* getMethodName(CORINFO_METHOD_HANDLE ftn, - const char **moduleName); - const char* getMethodNameFromMetadata(CORINFO_METHOD_HANDLE ftn, - const char **className, - const char **namespaceName, - const char **enclosingClassName); - - unsigned getMethodHash(CORINFO_METHOD_HANDLE ftn); - DWORD getMethodAttribs(CORINFO_METHOD_HANDLE ftn); - void setMethodAttribs(CORINFO_METHOD_HANDLE ftn, CorInfoMethodRuntimeFlags attribs); - - void getMethodSig(CORINFO_METHOD_HANDLE ftn, CORINFO_SIG_INFO *sig, CORINFO_CLASS_HANDLE memberParent); - - bool getMethodInfo(CORINFO_METHOD_HANDLE ftn, - CORINFO_METHOD_INFO* info); - - CorInfoInline canInline(CORINFO_METHOD_HANDLE caller, - CORINFO_METHOD_HANDLE callee, - DWORD* pRestrictions); - - void reportInliningDecision (CORINFO_METHOD_HANDLE inlinerHnd, - CORINFO_METHOD_HANDLE inlineeHnd, - CorInfoInline inlineResult, - const char * reason); - - bool canTailCall(CORINFO_METHOD_HANDLE caller, - CORINFO_METHOD_HANDLE declaredCallee, - CORINFO_METHOD_HANDLE exactCallee, - bool fIsTailPrefix); - - void reportTailCallDecision (CORINFO_METHOD_HANDLE callerHnd, - CORINFO_METHOD_HANDLE calleeHnd, - bool fIsTailPrefix, - CorInfoTailCall tailCallResult, - const char * reason); - - void getEHinfo(CORINFO_METHOD_HANDLE ftn, - unsigned EHnumber, CORINFO_EH_CLAUSE* clause); - CORINFO_CLASS_HANDLE getMethodClass(CORINFO_METHOD_HANDLE method); - CORINFO_MODULE_HANDLE getMethodModule(CORINFO_METHOD_HANDLE method); - - void getMethodVTableOffset(CORINFO_METHOD_HANDLE method, - unsigned * pOffsetOfIndirection, - unsigned * pOffsetAfterIndirection, - bool * isRelative); - - bool resolveVirtualMethod(CORINFO_DEVIRTUALIZATION_INFO * info); - - CORINFO_METHOD_HANDLE getUnboxedEntry( - CORINFO_METHOD_HANDLE ftn, - bool* requiresInstMethodTableArg); - - CORINFO_CLASS_HANDLE getDefaultEqualityComparerClass( - CORINFO_CLASS_HANDLE elemType); - - void expandRawHandleIntrinsic( - CORINFO_RESOLVED_TOKEN * pResolvedToken, - CORINFO_GENERICHANDLE_RESULT * pResult); - - CorInfoIntrinsics getIntrinsicID(CORINFO_METHOD_HANDLE method, - bool * pMustExpand = NULL); - bool isIntrinsicType(CORINFO_CLASS_HANDLE classHnd); - CorInfoUnmanagedCallConv getUnmanagedCallConv(CORINFO_METHOD_HANDLE method); - bool pInvokeMarshalingRequired(CORINFO_METHOD_HANDLE method, CORINFO_SIG_INFO* sig); - LPVOID GetCookieForPInvokeCalliSig(CORINFO_SIG_INFO* szMetaSig, - void ** ppIndirecton); - bool canGetCookieForPInvokeCalliSig(CORINFO_SIG_INFO* szMetaSig); - bool satisfiesMethodConstraints(CORINFO_CLASS_HANDLE parent, - CORINFO_METHOD_HANDLE method); - - bool isCompatibleDelegate(CORINFO_CLASS_HANDLE objCls, - CORINFO_CLASS_HANDLE methodParentCls, - CORINFO_METHOD_HANDLE method, - CORINFO_CLASS_HANDLE delegateCls, - bool* pfIsOpenDelegate); - - void getGSCookie(GSCookie * pCookieVal, - GSCookie** ppCookieVal); - - void setPatchpointInfo(PatchpointInfo * patchpointInfo); - PatchpointInfo * getOSRInfo(unsigned * ilOffset); - - // ICorErrorInfo - - HRESULT GetErrorHRESULT(struct _EXCEPTION_POINTERS *pExceptionPointers); - ULONG GetErrorMessage(__in_ecount(bufferLength) LPWSTR buffer, ULONG bufferLength); - int FilterException(struct _EXCEPTION_POINTERS *pExceptionPointers); - void HandleException(struct _EXCEPTION_POINTERS *pExceptionPointers); - void ThrowExceptionForJitResult(HRESULT result); - void ThrowExceptionForHelper(const CORINFO_HELPER_DESC * throwHelper); }; #endif // __ZAPINFO_H__