diff options
Diffstat (limited to 'src/debug/di/rspriv.h')
-rw-r--r-- | src/debug/di/rspriv.h | 86 |
1 files changed, 81 insertions, 5 deletions
diff --git a/src/debug/di/rspriv.h b/src/debug/di/rspriv.h index 853767804a..18920add5d 100644 --- a/src/debug/di/rspriv.h +++ b/src/debug/di/rspriv.h @@ -85,6 +85,7 @@ class CordbJITILFrame; class CordbInternalFrame; class CordbContext; class CordbThread; +class CordbVariableHome; #ifdef FEATURE_INTEROP_DEBUGGING class CordbUnmanagedThread; @@ -176,7 +177,7 @@ private: USHORT m_usPort; }; -#define forDbi (*(forDbiWorker *)NULL) +extern forDbiWorker forDbi; // for dbi we just default to new, but we need to have these defined for both dac and dbi inline void * operator new(size_t lenBytes, const forDbiWorker &) @@ -1586,7 +1587,7 @@ template< typename ElemType, typename ElemPublicType, typename EnumInterfaceType, ElemPublicType (*GetPublicType)(ElemType)> -class CordbEnumerator : public CordbBase, EnumInterfaceType +class CordbEnumerator : public CordbBase, public EnumInterfaceType { private: // the list of items being enumerated over @@ -1680,6 +1681,11 @@ typedef CordbEnumerator<RsGuidToTypeMapping, ICorDebugGuidToTypeEnum, GuidToTypeMappingConvert > CordbGuidToTypeEnumerator; +typedef CordbEnumerator<RSSmartPtr<CordbVariableHome>, + ICorDebugVariableHome*, + ICorDebugVariableHomeEnum, + QueryInterfaceConvert<RSSmartPtr<CordbVariableHome>, ICorDebugVariableHome> > CordbVariableHomeEnumerator; + // ---------------------------------------------------------------------------- // Hash table for CordbBase objects. // - Uses Internal AddRef/Release (not external) @@ -2920,7 +2926,7 @@ class CordbProcess : public ICorDebugProcess4, public ICorDebugProcess5, public ICorDebugProcess7, - public ICorDebugProcess8, + public ICorDebugProcess8, public IDacDbiInterface::IAllocator, public IDacDbiInterface::IMetaDataLookup, public IProcessShimHooks @@ -4696,7 +4702,7 @@ public: // See definition of ICorDebugType for further invariants on types. // -class CordbType : public CordbBase, public ICorDebugType +class CordbType : public CordbBase, public ICorDebugType, public ICorDebugType2 { public: CordbType(CordbAppDomain *appdomain, CorElementType ty, unsigned int rank); @@ -4736,6 +4742,11 @@ public: COM_METHOD GetRank(ULONG32 *pnRank); //----------------------------------------------------------- + // ICorDebugType2 + //----------------------------------------------------------- + COM_METHOD GetTypeID(COR_TYPEID *pId); + + //----------------------------------------------------------- // Non-COM members //----------------------------------------------------------- @@ -5812,7 +5823,10 @@ private: * code, including an optional set of mappings from IL to offsets in the native Code. * ------------------------------------------------------------------------- */ -class CordbNativeCode : public CordbCode, public ICorDebugCode2, public ICorDebugCode3 +class CordbNativeCode : public CordbCode, + public ICorDebugCode2, + public ICorDebugCode3, + public ICorDebugCode4 { public: CordbNativeCode(CordbFunction * pFunction, @@ -5853,6 +5867,11 @@ public: //----------------------------------------------------------- + // ICorDebugCode4 + //----------------------------------------------------------- + COM_METHOD EnumerateVariableHomes(ICorDebugVariableHomeEnum **ppEnum); + + //----------------------------------------------------------- // Internal members //----------------------------------------------------------- @@ -8539,6 +8558,63 @@ private: typedef enum {kUnboxed, kBoxed} BoxedValue; #define EMPTY_BUFFER TargetBuffer(PTR_TO_CORDB_ADDRESS((void *)NULL), 0) +/* ------------------------------------------------------------------------- * + * Variable Home class + * ------------------------------------------------------------------------- */ +class CordbVariableHome : public CordbBase, public ICorDebugVariableHome +{ +public: + CordbVariableHome(CordbNativeCode *pCode, + const ICorDebugInfo::NativeVarInfo nativeVarInfo, + BOOL isLoc, + ULONG index); + ~CordbVariableHome(); + virtual void Neuter(); + +#ifdef _DEBUG + virtual const char * DbgGetName() { return "CordbVariableHome"; } +#endif + + //----------------------------------------------------------- + // IUnknown + //----------------------------------------------------------- + ULONG STDMETHODCALLTYPE AddRef() + { + return (BaseAddRef()); + } + ULONG STDMETHODCALLTYPE Release() + { + return (BaseRelease()); + } + + COM_METHOD QueryInterface(REFIID riid, void **ppInterface); + + //----------------------------------------------------------- + // ICorDebugVariableHome + //----------------------------------------------------------- + + COM_METHOD GetCode(ICorDebugCode **ppCode); + + COM_METHOD GetSlotIndex(ULONG32 *pSlotIndex); + + COM_METHOD GetArgumentIndex(ULONG32* pArgumentIndex); + + COM_METHOD GetLiveRange(ULONG32* pStartOffset, + ULONG32 *pEndOffset); + + COM_METHOD GetLocationType(VariableLocationType *pLocationType); + + COM_METHOD GetRegister(CorDebugRegister *pRegister); + + COM_METHOD GetOffset(LONG *pOffset); +private: + RSSmartPtr<CordbNativeCode> m_pCode; + ICorDebugInfo::NativeVarInfo m_nativeVarInfo; + BOOL m_isLocal; + ULONG m_index; +}; + + // for an inheritance graph of the ICDValue types, // See file:./ICorDebugValueTypes.vsd for a diagram of the types. /* ------------------------------------------------------------------------- * * Value class |