X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Finc%2Fcorinfo.h;h=c3af9f8b781ed95a2fe02f86059f712d83697b9a;hb=7d6fa13ce85654174b882c9e934c000dfd2222fe;hp=68eec6b57e3efc389f1fa07459b32d51073972f7;hpb=86e45c8f293405fc3d7a248dde6d2574b4977f06;p=platform%2Fupstream%2Fcoreclr.git diff --git a/src/inc/corinfo.h b/src/inc/corinfo.h index 68eec6b..c3af9f8 100644 --- a/src/inc/corinfo.h +++ b/src/inc/corinfo.h @@ -210,14 +210,18 @@ TODO: Talk about initializing strutures before use ////////////////////////////////////////////////////////////////////////////////////////////////////////// #if !defined(SELECTANY) +#if defined(__GNUC__) + #define SELECTANY extern __attribute__((weak)) +#else #define SELECTANY extern __declspec(selectany) #endif +#endif -SELECTANY const GUID JITEEVersionIdentifier = { /* 09F7AAE2-07DF-4433-B8C5-BA864CCABDA3 */ - 0x9f7aae2, - 0x7df, - 0x4433, - {0xb8, 0xc5, 0xba, 0x86, 0x4c, 0xca, 0xbd, 0xa3} +SELECTANY const GUID JITEEVersionIdentifier = { /* d609bed1-7831-49fc-bd49-b6f054dd4d46 */ + 0xd609bed1, + 0x7831, + 0x49fc, + {0xbd, 0x49, 0xb6, 0xf0, 0x54, 0xdd, 0x4d, 0x46} }; ////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -326,7 +330,7 @@ struct SYSTEMV_AMD64_CORINFO_STRUCT_REG_PASSING_DESCRIPTOR // returns true if we the eightbyte at index slotIndex is of SSE type. // // Follows the rules of the AMD64 System V ABI specification at www.x86-64.org/documentation/abi.pdf. - // Please reffer to it for definitions/examples. + // Please refer to it for definitions/examples. // bool IsSseSlot(unsigned slotIndex) const { @@ -396,7 +400,10 @@ enum CorInfoHelpFunc CORINFO_HELP_NEW_CROSSCONTEXT, // cross context new object CORINFO_HELP_NEWFAST, CORINFO_HELP_NEWSFAST, // allocator for small, non-finalizer, non-array object + CORINFO_HELP_NEWSFAST_FINALIZE, // allocator for small, finalizable, non-array object CORINFO_HELP_NEWSFAST_ALIGN8, // allocator for small, non-finalizer, non-array object, 8 byte aligned + CORINFO_HELP_NEWSFAST_ALIGN8_VC,// allocator for small, value class, 8 byte aligned + CORINFO_HELP_NEWSFAST_ALIGN8_FINALIZE, // allocator for small, finalizable, non-array object, 8 byte aligned CORINFO_HELP_NEW_MDARR, // multi-dim array helper (with or without lower bounds - dimensions passed in as vararg) CORINFO_HELP_NEW_MDARR_NONVARARG,// multi-dim array helper (with or without lower bounds - dimensions passed in as unmanaged array) CORINFO_HELP_NEWARR_1_DIRECT, // helper for any one dimensional array creation @@ -825,7 +832,7 @@ enum CorInfoFlag CORINFO_FLG_INTRINSIC = 0x00400000, // This method MAY have an intrinsic ID CORINFO_FLG_CONSTRUCTOR = 0x00800000, // This method is an instance or type initializer CORINFO_FLG_AGGRESSIVE_OPT = 0x01000000, // The method may contain hot code and should be aggressively optimized if possible -// CORINFO_FLG_UNUSED = 0x02000000, + CORINFO_FLG_DISABLE_TIER0_FOR_LOOPS = 0x02000000, // Indicates that tier 0 JIT should not be used for a method that contains a loop CORINFO_FLG_NOSECURITYWRAP = 0x04000000, // The method requires no security checks CORINFO_FLG_DONT_INLINE = 0x10000000, // The method should not be inlined CORINFO_FLG_DONT_INLINE_CALLER = 0x20000000, // The method should not be inlined, nor should its callers. It cannot be tail called. @@ -857,6 +864,8 @@ enum CorInfoMethodRuntimeFlags CORINFO_FLG_BAD_INLINEE = 0x00000001, // The method is not suitable for inlining CORINFO_FLG_VERIFIABLE = 0x00000002, // The method has verifiable code CORINFO_FLG_UNVERIFIABLE = 0x00000004, // The method has unverifiable code + CORINFO_FLG_SWITCHED_TO_MIN_OPT = 0x00000008, // The JIT decided to switch to MinOpt for this method, when it was not requested + CORINFO_FLG_SWITCHED_TO_OPTIMIZED = 0x00000010, // The JIT decided to switch to tier 1 for this method, when a different tier was requested }; @@ -1690,7 +1699,7 @@ struct CORINFO_CALL_INFO CORINFO_CONST_LOOKUP instParamLookup; // Used by Ready-to-Run - BOOL secureDelegateInvoke; + BOOL wrapperDelegateInvoke; }; //---------------------------------------------------------------------------- @@ -1804,6 +1813,8 @@ struct CORINFO_EE_INFO unsigned offsetOfCalleeSavedFP; unsigned offsetOfCallTarget; unsigned offsetOfReturnAddress; + // This offset is used only for ARM + unsigned offsetOfSPAfterProlog; } inlinedCallFrameInfo; @@ -1815,8 +1826,8 @@ struct CORINFO_EE_INFO unsigned offsetOfDelegateInstance; unsigned offsetOfDelegateFirstTarget; - // Secure delegate offsets - unsigned offsetOfSecureDelegateIndirectCell; + // Wrapper delegate offsets + unsigned offsetOfWrapperDelegateIndirectCell; // Remoting offsets unsigned offsetOfTransparentProxyRP; @@ -2447,7 +2458,8 @@ public: // returns the "NEW" helper optimized for "newCls." virtual CorInfoHelpFunc getNewHelper( CORINFO_RESOLVED_TOKEN * pResolvedToken, - CORINFO_METHOD_HANDLE callerHandle + CORINFO_METHOD_HANDLE callerHandle, + bool * pHasSideEffects = NULL /* OUT */ ) = 0; // returns the newArr (1-Dim array) helper optimized for "arrayCls." @@ -2588,12 +2600,22 @@ public: CORINFO_CLASS_HANDLE cls2 ) = 0; - // returns is the intersection of cls1 and cls2. + // Returns the intersection of cls1 and cls2. virtual CORINFO_CLASS_HANDLE mergeClasses( CORINFO_CLASS_HANDLE cls1, CORINFO_CLASS_HANDLE cls2 ) = 0; + // Returns true if cls2 is known to be a more specific type + // than cls1 (a subtype or more restrictive shared type) + // for purposes of jit type tracking. This is a hint to the + // jit for optimization; it does not have correctness + // implications. + virtual BOOL isMoreSpecificType( + CORINFO_CLASS_HANDLE cls1, + CORINFO_CLASS_HANDLE cls2 + ) = 0; + // 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. @@ -2894,12 +2916,14 @@ public: ) = 0; // Return method name as in metadata, or nullptr if there is none, - // and optionally return the class and namespace names as in metadata. + // and optionally return the class, enclosing class, and namespace names + // as in metadata. // Suitable for non-debugging use. virtual const char* getMethodNameFromMetadata( - CORINFO_METHOD_HANDLE ftn, /* IN */ - const char **className, /* OUT */ - const char **namespaceName /* OUT */ + CORINFO_METHOD_HANDLE ftn, /* IN */ + const char **className, /* OUT */ + const char **namespaceName, /* OUT */ + const char **enclosingClassName /* OUT */ ) = 0; // this function is for debugging only. It returns a value that