diff options
author | Andrew Au <andrewau@microsoft.com> | 2018-05-09 09:40:47 -0700 |
---|---|---|
committer | Andrew Au <cshung@gmail.com> | 2018-11-06 18:34:47 -0800 |
commit | 1df9f792fa4a421014354063f8a63eca925c20e7 (patch) | |
tree | 2fa2bb4e121b70746eb1b2b093be21ef237d7f50 | |
parent | 6a67567b0e75d396e3e088494465c6b1276b0c35 (diff) | |
download | coreclr-1df9f792fa4a421014354063f8a63eca925c20e7.tar.gz coreclr-1df9f792fa4a421014354063f8a63eca925c20e7.tar.bz2 coreclr-1df9f792fa4a421014354063f8a63eca925c20e7.zip |
Saving progress - works towards gc events
-rw-r--r-- | src/debug/di/process.cpp | 20 | ||||
-rw-r--r-- | src/debug/di/rsmain.cpp | 98 | ||||
-rw-r--r-- | src/debug/di/rspriv.h | 4 | ||||
-rw-r--r-- | src/debug/di/shimcallback.cpp | 39 | ||||
-rw-r--r-- | src/debug/di/shimevents.cpp | 9 | ||||
-rw-r--r-- | src/debug/di/shimpriv.h | 13 | ||||
-rw-r--r-- | src/debug/ee/debugger.cpp | 37 | ||||
-rw-r--r-- | src/debug/ee/debugger.h | 3 | ||||
-rw-r--r-- | src/debug/inc/dbgipceventtypes.h | 3 | ||||
-rw-r--r-- | src/inc/cordebug.idl | 12 | ||||
-rw-r--r-- | src/pal/prebuilt/idl/cordebug_i.cpp | 15 | ||||
-rw-r--r-- | src/pal/prebuilt/inc/cordebug.h | 337 | ||||
-rw-r--r-- | src/vm/dbginterface.h | 3 | ||||
-rw-r--r-- | src/vm/debugdebugger.cpp | 1 | ||||
-rw-r--r-- | src/vm/gcenv.ee.cpp | 5 |
15 files changed, 410 insertions, 189 deletions
diff --git a/src/debug/di/process.cpp b/src/debug/di/process.cpp index c09f4a25c6..a49addcd17 100644 --- a/src/debug/di/process.cpp +++ b/src/debug/di/process.cpp @@ -4725,6 +4725,7 @@ void CordbProcess::DispatchRCEvent() _ASSERTE(m_cordb->m_managedCallback != NULL); _ASSERTE(m_cordb->m_managedCallback2 != NULL); _ASSERTE(m_cordb->m_managedCallback3 != NULL); + _ASSERTE(m_cordb->m_managedCallback4 != NULL); // Bump up the stop count. Either we'll dispatch a managed event, @@ -4795,7 +4796,7 @@ void CordbProcess::DispatchRCEvent() m_pDBGLastIPCEventType = pEvent->GetDebugCookie(); #endif - ManagedEvent::DispatchArgs args(m_cordb->m_managedCallback, m_cordb->m_managedCallback2, m_cordb->m_managedCallback3); + ManagedEvent::DispatchArgs args(m_cordb->m_managedCallback, m_cordb->m_managedCallback2, m_cordb->m_managedCallback3, m_cordb->m_managedCallback4); { // Release lock around the dispatch of the event @@ -4910,7 +4911,8 @@ void CordbProcess::RawDispatchEvent( RSLockHolder * pLockHolder, ICorDebugManagedCallback * pCallback1, ICorDebugManagedCallback2 * pCallback2, - ICorDebugManagedCallback3 * pCallback3) + ICorDebugManagedCallback3 * pCallback3, + ICorDebugManagedCallback4 * pCallback4) { CONTRACTL { @@ -5015,6 +5017,15 @@ void CordbProcess::RawDispatchEvent( } break; + case DB_IPCE_SOME_WORK: + { + { + PUBLIC_CALLBACK_IN_THIS_SCOPE(this, pLockHolder, pEvent); + pCallback4->SomeWork(pThread, pAppDomain); + } + break; + } + case DB_IPCE_DATA_BREAKPOINT: { _ASSERTE(pThread != NULL); @@ -10470,9 +10481,12 @@ void CordbProcess::HandleRCEvent( RSExtSmartPtr<ICorDebugManagedCallback3> pCallback3; pCallback->QueryInterface(IID_ICorDebugManagedCallback3, reinterpret_cast<void **> (&pCallback3)); + RSExtSmartPtr<ICorDebugManagedCallback4> pCallback4; + pCallback->QueryInterface(IID_ICorDebugManagedCallback4, reinterpret_cast<void **> (&pCallback4)); + // Dispatch directly. May not necessarily dispatch an event. // Toggles the lock to dispatch callbacks. - RawDispatchEvent(pManagedEvent, pLockHolder, pCallback, pCallback2, pCallback3); + RawDispatchEvent(pManagedEvent, pLockHolder, pCallback, pCallback2, pCallback3, pCallback4); } // diff --git a/src/debug/di/rsmain.cpp b/src/debug/di/rsmain.cpp index 75a6ad00db..39ac60d0c2 100644 --- a/src/debug/di/rsmain.cpp +++ b/src/debug/di/rsmain.cpp @@ -852,6 +852,84 @@ namespace pAppDomain->Continue(false); return S_OK; } + + // + // DefaultManagedCallback4 + // + // In the event that the debugger is of an older version than the Right Side & Left Side, the Right Side may issue + // new callbacks that the debugger is not expecting. In this case, we need to provide a default behavior for those + // new callbacks, if for nothing else than to force the debugger to Continue(). + // + class DefaultManagedCallback4 : public ICorDebugManagedCallback4 + { + public: + DefaultManagedCallback4(ICorDebug* pDebug); + virtual ~DefaultManagedCallback4() { } + virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void** pInterface); + virtual ULONG STDMETHODCALLTYPE AddRef(); + virtual ULONG STDMETHODCALLTYPE Release(); + COM_METHOD SomeWork(ICorDebugThread * pThread, ICorDebugAppDomain * pAppDomain); + private: + // not implemented + DefaultManagedCallback4(const DefaultManagedCallback4&); + DefaultManagedCallback4& operator=(const DefaultManagedCallback4&); + + ICorDebug* m_pDebug; + LONG m_refCount; + }; + + DefaultManagedCallback4::DefaultManagedCallback4(ICorDebug* pDebug) : m_pDebug(pDebug), m_refCount(0) + { + } + + HRESULT + DefaultManagedCallback4::QueryInterface(REFIID iid, void** pInterface) + { + if (IID_ICorDebugManagedCallback4 == iid) + { + *pInterface = static_cast<ICorDebugManagedCallback4*>(this); + } + else if (IID_IUnknown == iid) + { + *pInterface = static_cast<IUnknown*>(this); + } + else + { + *pInterface = NULL; + return E_NOINTERFACE; + } + + this->AddRef(); + return S_OK; + } + + ULONG + DefaultManagedCallback4::AddRef() + { + return InterlockedIncrement(&m_refCount); + } + + ULONG + DefaultManagedCallback4::Release() + { + ULONG ulRef = InterlockedDecrement(&m_refCount); + if (0 == ulRef) + { + delete this; + } + + return ulRef; + } + + HRESULT + DefaultManagedCallback4::SomeWork(ICorDebugThread * pThread, ICorDebugAppDomain * pAppDomain) + { + // + // Just ignore and continue the process. + // + pAppDomain->Continue(false); + return S_OK; + } } /* ------------------------------------------------------------------------- * @@ -1055,6 +1133,7 @@ HRESULT Cordb::Terminate() m_managedCallback.Clear(); m_managedCallback2.Clear(); m_managedCallback3.Clear(); + m_managedCallback4.Clear(); m_unmanagedCallback.Clear(); // The Shell may still have outstanding references, so we don't want to shutdown logging yet. @@ -1209,7 +1288,7 @@ void Cordb::AddProcess(CordbProcess* process) // can have another debuggee. STRESS_LOG1(LF_CORDB, LL_INFO10, "Cordb::AddProcess %08x...\n", process); - if ((m_managedCallback == NULL) || (m_managedCallback2 == NULL) || (m_managedCallback3 == NULL)) + if ((m_managedCallback == NULL) || (m_managedCallback2 == NULL) || (m_managedCallback3 == NULL) || (m_managedCallback4 == NULL)) { ThrowHR(E_FAIL); } @@ -1352,6 +1431,7 @@ HRESULT Cordb::SetManagedHandler(ICorDebugManagedCallback *pCallback) m_managedCallback.Clear(); m_managedCallback2.Clear(); m_managedCallback3.Clear(); + m_managedCallback4.Clear(); // For SxS, V2.0 debuggers must implement ManagedCallback2 to handle v2.0 debug events. // For Single-CLR, A v1.0 debugger may actually geta V2.0 debuggee. @@ -1376,7 +1456,6 @@ HRESULT Cordb::SetManagedHandler(ICorDebugManagedCallback *pCallback) } } - pCallback->QueryInterface(IID_ICorDebugManagedCallback3, (void **)&m_managedCallback3); if (m_managedCallback3 == NULL) { @@ -1388,6 +1467,17 @@ HRESULT Cordb::SetManagedHandler(ICorDebugManagedCallback *pCallback) return E_OUTOFMEMORY; } + pCallback->QueryInterface(IID_ICorDebugManagedCallback4, (void **)&m_managedCallback4); + if (m_managedCallback4 == NULL) + { + m_managedCallback4.Assign(new (nothrow) DefaultManagedCallback4(this)); + } + + if (m_managedCallback4 == NULL) + { + return E_OUTOFMEMORY; + } + m_managedCallback.Assign(pCallback); return S_OK; } @@ -1567,7 +1657,7 @@ HRESULT Cordb::CreateProcessCommon(ICorDebugRemoteTarget * pRemoteTarget, #endif // FEATURE_INTEROP_DEBUGGING // Must have a managed-callback by now. - if ((m_managedCallback == NULL) || (m_managedCallback2 == NULL) || (m_managedCallback3 == NULL)) + if ((m_managedCallback == NULL) || (m_managedCallback2 == NULL) || (m_managedCallback3 == NULL) || (m_managedCallback4 == NULL)) { ThrowHR(E_FAIL); } @@ -1702,7 +1792,7 @@ HRESULT Cordb::DebugActiveProcessCommon(ICorDebugRemoteTarget * pRemoteTarget, } // Must have a managed-callback by now. - if ((m_managedCallback == NULL) || (m_managedCallback2 == NULL) || (m_managedCallback3 == NULL)) + if ((m_managedCallback == NULL) || (m_managedCallback2 == NULL) || (m_managedCallback3 == NULL) || (m_managedCallback4 == NULL)) { ThrowHR(E_FAIL); } diff --git a/src/debug/di/rspriv.h b/src/debug/di/rspriv.h index 8ba99bc81f..950013af08 100644 --- a/src/debug/di/rspriv.h +++ b/src/debug/di/rspriv.h @@ -2332,6 +2332,7 @@ public: RSExtSmartPtr<ICorDebugManagedCallback> m_managedCallback; RSExtSmartPtr<ICorDebugManagedCallback2> m_managedCallback2; RSExtSmartPtr<ICorDebugManagedCallback3> m_managedCallback3; + RSExtSmartPtr<ICorDebugManagedCallback4> m_managedCallback4; RSExtSmartPtr<ICorDebugUnmanagedCallback> m_unmanagedCallback; CordbRCEventThread* m_rcEventThread; @@ -3337,7 +3338,8 @@ public: RSLockHolder * pLockHolder, ICorDebugManagedCallback * pCallback1, ICorDebugManagedCallback2 * pCallback2, - ICorDebugManagedCallback3 * pCallback3); + ICorDebugManagedCallback3 * pCallback3, + ICorDebugManagedCallback4 * pCallback4); void MarkAllThreadsDirty(); diff --git a/src/debug/di/shimcallback.cpp b/src/debug/di/shimcallback.cpp index e5c74bdb6f..35e9f38462 100644 --- a/src/debug/di/shimcallback.cpp +++ b/src/debug/di/shimcallback.cpp @@ -58,6 +58,10 @@ HRESULT ShimProxyCallback::QueryInterface(REFIID riid, void **ppInterface) { *ppInterface = static_cast<ICorDebugManagedCallback3*>(this); } + else if (riid == IID_ICorDebugManagedCallback4) + { + *ppInterface = static_cast<ICorDebugManagedCallback4*>(this); + } else if (riid == IID_IUnknown) { *ppInterface = static_cast<IUnknown*>(static_cast<ICorDebugManagedCallback*>(this)); @@ -1313,4 +1317,39 @@ HRESULT ShimProxyCallback::CustomNotification(ICorDebugThread * pThread, ICorDeb return S_OK; } +// Implementation of ICorDebugManagedCallback4::SomeWork +// Arguments: +// input: +// pThread - thread on which the notification occurred +// pAppDomain - appDomain in which the notification occurred +// Return value: S_OK +HRESULT ShimProxyCallback::SomeWork(ICorDebugThread * pThread, ICorDebugAppDomain * pAppDomain) +{ + m_pShim->PreDispatchEvent(); + class SomeWorkEvent : public ManagedEvent + { + // callbacks parameters. These are strong references + RSExtSmartPtr<ICorDebugAppDomain > m_pAppDomain; + RSExtSmartPtr<ICorDebugThread > m_pThread; + + public: + // Ctor + SomeWorkEvent(ICorDebugThread * pThread, ICorDebugAppDomain * pAppDomain) : + ManagedEvent(pThread) + { + this->m_pAppDomain.Assign(pAppDomain); + this->m_pThread.Assign(pThread); + } + + HRESULT Dispatch(DispatchArgs args) + { + return args.GetCallback4()->SomeWork(m_pThread, m_pAppDomain); + } + }; // end class SomeWorkEvent + + m_pShim->GetManagedEventQueue()->QueueEvent(new SomeWorkEvent(pThread, pAppDomain)); + return S_OK; +} + + diff --git a/src/debug/di/shimevents.cpp b/src/debug/di/shimevents.cpp index e54b1bd7f2..15f43163a0 100644 --- a/src/debug/di/shimevents.cpp +++ b/src/debug/di/shimevents.cpp @@ -51,11 +51,12 @@ void * ManagedEvent::GetDebugCookie() // We'll have a lot of derived classes of ManagedEvent, and so encapsulating the arguments // for the Dispatch() function lets us juggle them around easily without hitting every signature. //--------------------------------------------------------------------------------------- -ManagedEvent::DispatchArgs::DispatchArgs(ICorDebugManagedCallback * pCallback1, ICorDebugManagedCallback2 * pCallback2, ICorDebugManagedCallback3 * pCallback3) +ManagedEvent::DispatchArgs::DispatchArgs(ICorDebugManagedCallback * pCallback1, ICorDebugManagedCallback2 * pCallback2, ICorDebugManagedCallback3 * pCallback3, ICorDebugManagedCallback4 * pCallback4) { m_pCallback1 = pCallback1; m_pCallback2 = pCallback2; m_pCallback3 = pCallback3; + m_pCallback4 = pCallback4; } @@ -77,6 +78,12 @@ ICorDebugManagedCallback3 * ManagedEvent::DispatchArgs::GetCallback3() return m_pCallback3; } +// trivial accessor to get callback 3 +ICorDebugManagedCallback4 * ManagedEvent::DispatchArgs::GetCallback4() +{ + return m_pCallback4; +} + // Returns OS Thread Id that this event occurred on, 0 if no thread affinity. DWORD ManagedEvent::GetOSTid() { diff --git a/src/debug/di/shimpriv.h b/src/debug/di/shimpriv.h index 9c83301009..acd3ef5e09 100644 --- a/src/debug/di/shimpriv.h +++ b/src/debug/di/shimpriv.h @@ -61,7 +61,8 @@ typedef SHash<DuplicateCreationEventsHashTableTraits> DuplicateCreationEventsHas class ShimProxyCallback : public ICorDebugManagedCallback, public ICorDebugManagedCallback2, - public ICorDebugManagedCallback3 + public ICorDebugManagedCallback3, + public ICorDebugManagedCallback4 { ShimProcess * m_pShim; // weak reference LONG m_cRef; @@ -210,6 +211,12 @@ public: // Implementation of ICorDebugManagedCallback3::CustomNotification COM_METHOD CustomNotification(ICorDebugThread * pThread, ICorDebugAppDomain * pAppDomain); + /// + /// Implementation of ICorDebugManagedCallback4 + /// + + // Implementation of ICorDebugManagedCallback4::SomeWork + COM_METHOD SomeWork(ICorDebugThread * pThread, ICorDebugAppDomain * pAppDomain); }; @@ -233,17 +240,19 @@ public: class DispatchArgs { public: - DispatchArgs(ICorDebugManagedCallback * pCallback1, ICorDebugManagedCallback2 * pCallback2, ICorDebugManagedCallback3 * pCallback3); + DispatchArgs(ICorDebugManagedCallback * pCallback1, ICorDebugManagedCallback2 * pCallback2, ICorDebugManagedCallback3 * pCallback3, ICorDebugManagedCallback4 * pCallback4); ICorDebugManagedCallback * GetCallback1(); ICorDebugManagedCallback2 * GetCallback2(); ICorDebugManagedCallback3 * GetCallback3(); + ICorDebugManagedCallback4 * GetCallback4(); protected: ICorDebugManagedCallback * m_pCallback1; ICorDebugManagedCallback2 * m_pCallback2; ICorDebugManagedCallback3 * m_pCallback3; + ICorDebugManagedCallback4 * m_pCallback4; }; // Returns: value of callback from end-user diff --git a/src/debug/ee/debugger.cpp b/src/debug/ee/debugger.cpp index 1198e0ee91..19789fcae1 100644 --- a/src/debug/ee/debugger.cpp +++ b/src/debug/ee/debugger.cpp @@ -5988,6 +5988,43 @@ bool Debugger::ThreadsAtUnsafePlaces(void) return (m_threadsAtUnsafePlaces != 0); } +void Debugger::SomeWork() +{ + CONTRACTL + { + NOTHROW; + GC_NOTRIGGER; + } + CONTRACTL_END; + + // DebuggerLockHolder lockHolder(this); + Thread* pThread = GetThread(); + + SENDIPCEVENT_BEGIN(this, pThread) + + if (CORDBUnrecoverableError(this)) + return; + + // Send an event to the Right Side + DebuggerIPCEvent* ipce = m_pRCThread->GetIPCEventSendBuffer(); + InitIPCEvent(ipce, + DB_IPCE_SOME_WORK, + pThread, + pThread->GetDomain()); + + m_pRCThread->SendIPCEvent(); + + DebuggerIPCEvent* ipce2 = m_pRCThread->GetIPCEventSendBuffer(); + InitIPCEvent(ipce2, + DB_IPCE_SYNC_COMPLETE, + pThread, + pThread->GetDomain()); + + m_pRCThread->SendIPCEvent(); + + SENDIPCEVENT_END; +} + void Debugger::SendDataBreakpoint(Thread *thread, CONTEXT *context, DebuggerDataBreakpoint *breakpoint) { diff --git a/src/debug/ee/debugger.h b/src/debug/ee/debugger.h index 2f85f2a7c1..0b1cbacc69 100644 --- a/src/debug/ee/debugger.h +++ b/src/debug/ee/debugger.h @@ -2951,6 +2951,9 @@ private: public: DWORD m_defines; DWORD m_mdDataStructureVersion; +#ifndef DACCESS_COMPILE + virtual void SomeWork(); +#endif }; diff --git a/src/debug/inc/dbgipceventtypes.h b/src/debug/inc/dbgipceventtypes.h index 85422bb43f..49bf1568c3 100644 --- a/src/debug/inc/dbgipceventtypes.h +++ b/src/debug/inc/dbgipceventtypes.h @@ -91,7 +91,8 @@ IPC_EVENT_TYPE1(DB_IPCE_METADATA_UPDATE ,0x015D) IPC_EVENT_TYPE1(DB_IPCE_RESOLVE_UPDATE_METADATA_1_RESULT,0x015E) IPC_EVENT_TYPE1(DB_IPCE_RESOLVE_UPDATE_METADATA_2_RESULT,0x015F) IPC_EVENT_TYPE1(DB_IPCE_DATA_BREAKPOINT ,0x0160) -IPC_EVENT_TYPE0(DB_IPCE_RUNTIME_LAST ,0x0161) // The last event from runtime +IPC_EVENT_TYPE1(DB_IPCE_SOME_WORK , 0x0161) +IPC_EVENT_TYPE0(DB_IPCE_RUNTIME_LAST ,0x0162) // The last event from runtime diff --git a/src/inc/cordebug.idl b/src/inc/cordebug.idl index fea48d7943..cbe778814a 100644 --- a/src/inc/cordebug.idl +++ b/src/inc/cordebug.idl @@ -1350,6 +1350,18 @@ interface ICorDebugManagedCallback3 : IUnknown HRESULT CustomNotification([in] ICorDebugThread * pThread, [in] ICorDebugAppDomain * pAppDomain); } +[ + object, + local, + uuid(322911AE-16A5-49BA-84A3-ED69678138A3), + pointer_default(unique) +] + +interface ICorDebugManagedCallback4 : IUnknown +{ + HRESULT SomeWork([in] ICorDebugThread * pThread, [in] ICorDebugAppDomain * pAppDomain); +} + #pragma warning(disable:28718) /* disable warning 28718 for interface ICorDebugManagedCallback2 */ diff --git a/src/pal/prebuilt/idl/cordebug_i.cpp b/src/pal/prebuilt/idl/cordebug_i.cpp index 923f78b4d4..26dcc003c1 100644 --- a/src/pal/prebuilt/idl/cordebug_i.cpp +++ b/src/pal/prebuilt/idl/cordebug_i.cpp @@ -5,11 +5,11 @@ /* link this file in with the server and any clients */ - /* File created by MIDL compiler version 8.00.0603 */ -/* at Fri Sep 23 15:43:16 2016 + /* File created by MIDL compiler version 8.01.0622 */ +/* at Mon Jan 18 19:14:07 2038 */ -/* Compiler settings for cordebug.idl: - Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.00.0603 +/* Compiler settings for C:/Dev/coreclr/src/inc/cordebug.idl: + Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.01.0622 protocol : dce , ms_ext, c_ext, robust error checks: allocation ref bounds_check enum stub_data VC __declspec() decoration level: @@ -63,9 +63,9 @@ typedef IID CLSID; #endif // CLSID_DEFINED #define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ - const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} + EXTERN_C __declspec(selectany) const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} -#endif !_MIDL_USE_GUIDDEF_ +#endif // !_MIDL_USE_GUIDDEF_ MIDL_DEFINE_GUID(IID, IID_ICorDebugDataTarget,0xFE06DC28,0x49FB,0x4636,0xA4,0xA3,0xE8,0x0D,0xB4,0xAE,0x11,0x6C); @@ -118,6 +118,9 @@ MIDL_DEFINE_GUID(IID, IID_ICorDebugManagedCallback,0x3d6f5f60,0x7538,0x11d3,0x8d MIDL_DEFINE_GUID(IID, IID_ICorDebugManagedCallback3,0x264EA0FC,0x2591,0x49AA,0x86,0x8E,0x83,0x5E,0x65,0x15,0x32,0x3F); +MIDL_DEFINE_GUID(IID, IID_ICorDebugManagedCallback4,0x322911AE,0x16A5,0x49BA,0x84,0xA3,0xED,0x69,0x67,0x81,0x38,0xA3); + + MIDL_DEFINE_GUID(IID, IID_ICorDebugManagedCallback2,0x250E5EEA,0xDB5C,0x4C76,0xB6,0xF3,0x8C,0x46,0xF1,0x2E,0x32,0x03); diff --git a/src/pal/prebuilt/inc/cordebug.h b/src/pal/prebuilt/inc/cordebug.h index 2cfadf65a1..66eaf204ff 100644 --- a/src/pal/prebuilt/inc/cordebug.h +++ b/src/pal/prebuilt/inc/cordebug.h @@ -6,7 +6,7 @@ /* File created by MIDL compiler version 8.01.0622 */ /* at Mon Jan 18 19:14:07 2038 */ -/* Compiler settings for C:/coreclr/src/inc/cordebug.idl: +/* Compiler settings for C:/Dev/coreclr/src/inc/cordebug.idl: Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.01.0622 protocol : dce , ms_ext, c_ext, robust error checks: allocation ref bounds_check enum stub_data @@ -164,6 +164,13 @@ typedef interface ICorDebugManagedCallback3 ICorDebugManagedCallback3; #endif /* __ICorDebugManagedCallback3_FWD_DEFINED__ */ +#ifndef __ICorDebugManagedCallback4_FWD_DEFINED__ +#define __ICorDebugManagedCallback4_FWD_DEFINED__ +typedef interface ICorDebugManagedCallback4 ICorDebugManagedCallback4; + +#endif /* __ICorDebugManagedCallback4_FWD_DEFINED__ */ + + #ifndef __ICorDebugManagedCallback2_FWD_DEFINED__ #define __ICorDebugManagedCallback2_FWD_DEFINED__ typedef interface ICorDebugManagedCallback2 ICorDebugManagedCallback2; @@ -353,13 +360,6 @@ typedef interface ICorDebugProcess8 ICorDebugProcess8; #endif /* __ICorDebugProcess8_FWD_DEFINED__ */ -#ifndef __ICorDebugProcess9_FWD_DEFINED__ -#define __ICorDebugProcess9_FWD_DEFINED__ -typedef interface ICorDebugProcess9 ICorDebugProcess9; - -#endif /* __ICorDebugProcess9_FWD_DEFINED__ */ - - #ifndef __ICorDebugModuleDebugEvent_FWD_DEFINED__ #define __ICorDebugModuleDebugEvent_FWD_DEFINED__ typedef interface ICorDebugModuleDebugEvent ICorDebugModuleDebugEvent; @@ -588,7 +588,7 @@ typedef interface ICorDebugFunction3 ICorDebugFunction3; #define __ICorDebugFunction4_FWD_DEFINED__ typedef interface ICorDebugFunction4 ICorDebugFunction4; -#endif /* __ICorDebugFunction4_FWD_DEFINED__ */ +#endif /* __ICorDebugFunction4_FWD_DEFINED__ */ #ifndef __ICorDebugCode_FWD_DEFINED__ @@ -3758,14 +3758,96 @@ EXTERN_C const IID IID_ICorDebugManagedCallback3; #endif /* __ICorDebugManagedCallback3_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0017 */ +#ifndef __ICorDebugManagedCallback4_INTERFACE_DEFINED__ +#define __ICorDebugManagedCallback4_INTERFACE_DEFINED__ + +/* interface ICorDebugManagedCallback4 */ +/* [unique][uuid][local][object] */ + + +EXTERN_C const IID IID_ICorDebugManagedCallback4; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("322911AE-16A5-49BA-84A3-ED69678138A3") + ICorDebugManagedCallback4 : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE SomeWork( + /* [in] */ ICorDebugThread *pThread, + /* [in] */ ICorDebugAppDomain *pAppDomain) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICorDebugManagedCallback4Vtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICorDebugManagedCallback4 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICorDebugManagedCallback4 * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICorDebugManagedCallback4 * This); + + HRESULT ( STDMETHODCALLTYPE *SomeWork )( + ICorDebugManagedCallback4 * This, + /* [in] */ ICorDebugThread *pThread, + /* [in] */ ICorDebugAppDomain *pAppDomain); + + END_INTERFACE + } ICorDebugManagedCallback4Vtbl; + + interface ICorDebugManagedCallback4 + { + CONST_VTBL struct ICorDebugManagedCallback4Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICorDebugManagedCallback4_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICorDebugManagedCallback4_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICorDebugManagedCallback4_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICorDebugManagedCallback4_SomeWork(This,pThread,pAppDomain) \ + ( (This)->lpVtbl -> SomeWork(This,pThread,pAppDomain) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICorDebugManagedCallback4_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_cordebug_0000_0018 */ /* [local] */ #pragma warning(disable:28718) -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0017_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0017_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0018_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0018_v0_0_s_ifspec; #ifndef __ICorDebugManagedCallback2_INTERFACE_DEFINED__ #define __ICorDebugManagedCallback2_INTERFACE_DEFINED__ @@ -3980,14 +4062,14 @@ EXTERN_C const IID IID_ICorDebugManagedCallback2; #endif /* __ICorDebugManagedCallback2_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0018 */ +/* interface __MIDL_itf_cordebug_0000_0019 */ /* [local] */ #pragma warning(pop) -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0018_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0018_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0019_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0019_v0_0_s_ifspec; #ifndef __ICorDebugUnmanagedCallback_INTERFACE_DEFINED__ #define __ICorDebugUnmanagedCallback_INTERFACE_DEFINED__ @@ -4071,7 +4153,7 @@ EXTERN_C const IID IID_ICorDebugUnmanagedCallback; #endif /* __ICorDebugUnmanagedCallback_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0019 */ +/* interface __MIDL_itf_cordebug_0000_0020 */ /* [local] */ typedef @@ -4091,8 +4173,8 @@ enum CorDebugHandleType #pragma warning(disable:28718) -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0019_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0019_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0020_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0020_v0_0_s_ifspec; #ifndef __ICorDebug_INTERFACE_DEFINED__ #define __ICorDebug_INTERFACE_DEFINED__ @@ -4280,14 +4362,14 @@ EXTERN_C const IID IID_ICorDebug; #endif /* __ICorDebug_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0020 */ +/* interface __MIDL_itf_cordebug_0000_0021 */ /* [local] */ #pragma warning(pop) -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0020_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0020_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0021_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0021_v0_0_s_ifspec; #ifndef __ICorDebugRemoteTarget_INTERFACE_DEFINED__ #define __ICorDebugRemoteTarget_INTERFACE_DEFINED__ @@ -4499,7 +4581,7 @@ EXTERN_C const IID IID_ICorDebugRemote; #endif /* __ICorDebugRemote_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0022 */ +/* interface __MIDL_itf_cordebug_0000_0023 */ /* [local] */ typedef struct _COR_VERSION @@ -4512,8 +4594,8 @@ typedef struct _COR_VERSION -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0022_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0022_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0023_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0023_v0_0_s_ifspec; #ifndef __ICorDebug2_INTERFACE_DEFINED__ #define __ICorDebug2_INTERFACE_DEFINED__ @@ -4675,7 +4757,7 @@ EXTERN_C const IID IID_ICorDebug2; #endif /* __ICorDebug2_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0023 */ +/* interface __MIDL_itf_cordebug_0000_0024 */ /* [local] */ typedef @@ -4687,8 +4769,8 @@ enum CorDebugThreadState -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0023_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0023_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0024_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0024_v0_0_s_ifspec; #ifndef __ICorDebugController_INTERFACE_DEFINED__ #define __ICorDebugController_INTERFACE_DEFINED__ @@ -4870,15 +4952,15 @@ EXTERN_C const IID IID_ICorDebugController; #endif /* __ICorDebugController_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0024 */ +/* interface __MIDL_itf_cordebug_0000_0025 */ /* [local] */ #pragma warning(push) #pragma warning(disable:28718) -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0024_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0024_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0025_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0025_v0_0_s_ifspec; #ifndef __ICorDebugAppDomain_INTERFACE_DEFINED__ #define __ICorDebugAppDomain_INTERFACE_DEFINED__ @@ -5130,14 +5212,14 @@ EXTERN_C const IID IID_ICorDebugAppDomain; #endif /* __ICorDebugAppDomain_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0025 */ +/* interface __MIDL_itf_cordebug_0000_0026 */ /* [local] */ #pragma warning(pop) -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0025_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0025_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0026_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0026_v0_0_s_ifspec; #ifndef __ICorDebugAppDomain2_INTERFACE_DEFINED__ #define __ICorDebugAppDomain2_INTERFACE_DEFINED__ @@ -5635,15 +5717,15 @@ EXTERN_C const IID IID_ICorDebugAppDomain4; #endif /* __ICorDebugAppDomain4_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0029 */ +/* interface __MIDL_itf_cordebug_0000_0030 */ /* [local] */ #pragma warning(push) #pragma warning(disable:28718) -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0029_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0029_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0030_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0030_v0_0_s_ifspec; #ifndef __ICorDebugAssembly_INTERFACE_DEFINED__ #define __ICorDebugAssembly_INTERFACE_DEFINED__ @@ -5773,14 +5855,14 @@ EXTERN_C const IID IID_ICorDebugAssembly; #endif /* __ICorDebugAssembly_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0030 */ +/* interface __MIDL_itf_cordebug_0000_0031 */ /* [local] */ #pragma warning(pop) -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0030_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0030_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0031_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0031_v0_0_s_ifspec; #ifndef __ICorDebugAssembly2_INTERFACE_DEFINED__ #define __ICorDebugAssembly2_INTERFACE_DEFINED__ @@ -5952,7 +6034,7 @@ EXTERN_C const IID IID_ICorDebugAssembly3; #endif /* __ICorDebugAssembly3_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0032 */ +/* interface __MIDL_itf_cordebug_0000_0033 */ /* [local] */ #ifndef _DEF_COR_TYPEID_ @@ -5973,8 +6055,8 @@ typedef struct _COR_HEAPOBJECT -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0032_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0032_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0033_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0033_v0_0_s_ifspec; #ifndef __ICorDebugHeapEnum_INTERFACE_DEFINED__ #define __ICorDebugHeapEnum_INTERFACE_DEFINED__ @@ -6088,7 +6170,7 @@ EXTERN_C const IID IID_ICorDebugHeapEnum; #endif /* __ICorDebugHeapEnum_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0033 */ +/* interface __MIDL_itf_cordebug_0000_0034 */ /* [local] */ typedef @@ -6126,8 +6208,8 @@ typedef struct _COR_HEAPINFO -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0033_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0033_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0034_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0034_v0_0_s_ifspec; #ifndef __ICorDebugHeapSegmentEnum_INTERFACE_DEFINED__ #define __ICorDebugHeapSegmentEnum_INTERFACE_DEFINED__ @@ -6241,7 +6323,7 @@ EXTERN_C const IID IID_ICorDebugHeapSegmentEnum; #endif /* __ICorDebugHeapSegmentEnum_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0034 */ +/* interface __MIDL_itf_cordebug_0000_0035 */ /* [local] */ typedef @@ -6277,8 +6359,8 @@ typedef struct COR_GC_REFERENCE #endif // _DEF_COR_GC_REFERENCE_ -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0034_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0034_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0035_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0035_v0_0_s_ifspec; #ifndef __ICorDebugGCReferenceEnum_INTERFACE_DEFINED__ #define __ICorDebugGCReferenceEnum_INTERFACE_DEFINED__ @@ -6392,7 +6474,7 @@ EXTERN_C const IID IID_ICorDebugGCReferenceEnum; #endif /* __ICorDebugGCReferenceEnum_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0035 */ +/* interface __MIDL_itf_cordebug_0000_0036 */ /* [local] */ #ifndef _DEF_COR_ARRAY_LAYOUT_ @@ -6437,8 +6519,8 @@ typedef struct COR_FIELD #pragma warning(disable:28718) -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0035_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0035_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0036_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0036_v0_0_s_ifspec; #ifndef __ICorDebugProcess_INTERFACE_DEFINED__ #define __ICorDebugProcess_INTERFACE_DEFINED__ @@ -6788,14 +6870,14 @@ EXTERN_C const IID IID_ICorDebugProcess; #endif /* __ICorDebugProcess_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0036 */ +/* interface __MIDL_itf_cordebug_0000_0037 */ /* [local] */ #pragma warning(pop) -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0036_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0036_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0037_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0037_v0_0_s_ifspec; #ifndef __ICorDebugProcess2_INTERFACE_DEFINED__ #define __ICorDebugProcess2_INTERFACE_DEFINED__ @@ -7239,7 +7321,7 @@ EXTERN_C const IID IID_ICorDebugProcess5; #endif /* __ICorDebugProcess5_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0039 */ +/* interface __MIDL_itf_cordebug_0000_0040 */ /* [local] */ typedef @@ -7275,8 +7357,8 @@ enum CorDebugStateChange -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0039_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0039_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0040_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0040_v0_0_s_ifspec; #ifndef __ICorDebugDebugEvent_INTERFACE_DEFINED__ #define __ICorDebugDebugEvent_INTERFACE_DEFINED__ @@ -7368,7 +7450,7 @@ EXTERN_C const IID IID_ICorDebugDebugEvent; #endif /* __ICorDebugDebugEvent_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0040 */ +/* interface __MIDL_itf_cordebug_0000_0041 */ /* [local] */ typedef @@ -7390,8 +7472,8 @@ enum CorDebugCodeInvokePurpose -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0040_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0040_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0041_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0041_v0_0_s_ifspec; #ifndef __ICorDebugProcess6_INTERFACE_DEFINED__ #define __ICorDebugProcess6_INTERFACE_DEFINED__ @@ -7539,7 +7621,7 @@ EXTERN_C const IID IID_ICorDebugProcess6; #endif /* __ICorDebugProcess6_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0041 */ +/* interface __MIDL_itf_cordebug_0000_0042 */ /* [local] */ typedef @@ -7551,8 +7633,8 @@ enum WriteableMetadataUpdateMode -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0041_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0041_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0042_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0042_v0_0_s_ifspec; #ifndef __ICorDebugProcess7_INTERFACE_DEFINED__ #define __ICorDebugProcess7_INTERFACE_DEFINED__ @@ -7714,88 +7796,6 @@ EXTERN_C const IID IID_ICorDebugProcess8; #endif /* __ICorDebugProcess8_INTERFACE_DEFINED__ */ -#ifndef __ICorDebugProcess9_INTERFACE_DEFINED__ -#define __ICorDebugProcess9_INTERFACE_DEFINED__ - -/* interface ICorDebugProcess9 */ -/* [unique][uuid][local][object] */ - - -EXTERN_C const IID IID_ICorDebugProcess9; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("CB54E392-C6DD-47BE-9C60-A99F3ECE3A98") - ICorDebugProcess9 : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE CreateBreakpoint( - /* [in] */ CORDB_ADDRESS address, - /* [out] */ ICorDebugValueBreakpoint **ppBreakpoint) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ICorDebugProcess9Vtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ICorDebugProcess9 * This, - /* [in] */ REFIID riid, - /* [annotation][iid_is][out] */ - _COM_Outptr_ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ICorDebugProcess9 * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ICorDebugProcess9 * This); - - HRESULT ( STDMETHODCALLTYPE *CreateBreakpoint )( - ICorDebugProcess9 * This, - /* [in] */ CORDB_ADDRESS address, - /* [out] */ ICorDebugValueBreakpoint **ppBreakpoint); - - END_INTERFACE - } ICorDebugProcess9Vtbl; - - interface ICorDebugProcess9 - { - CONST_VTBL struct ICorDebugProcess9Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ICorDebugProcess9_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ICorDebugProcess9_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ICorDebugProcess9_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ICorDebugProcess9_CreateBreakpoint(This,address,ppBreakpoint) \ - ( (This)->lpVtbl -> CreateBreakpoint(This,address,ppBreakpoint) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ICorDebugProcess9_INTERFACE_DEFINED__ */ - - #ifndef __ICorDebugModuleDebugEvent_INTERFACE_DEFINED__ #define __ICorDebugModuleDebugEvent_INTERFACE_DEFINED__ @@ -12213,7 +12213,7 @@ EXTERN_C const IID IID_ICorDebugFunction3; -#endif /* __ICorDebugFunction3_INTERFACE_DEFINED__ */ +#endif /* __ICorDebugFunction3_INTERFACE_DEFINED__ */ #ifndef __ICorDebugFunction4_INTERFACE_DEFINED__ @@ -12237,7 +12237,7 @@ EXTERN_C const IID IID_ICorDebugFunction4; }; -#else /* C style interface */ +#else /* C style interface */ typedef struct ICorDebugFunction4Vtbl { @@ -12272,29 +12272,28 @@ EXTERN_C const IID IID_ICorDebugFunction4; #ifdef COBJMACROS -#define ICorDebugFunction4_QueryInterface(This,riid,ppvObject) \ +#define ICorDebugFunction4_QueryInterface(This,riid,ppvObject) \ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) -#define ICorDebugFunction4_AddRef(This) \ +#define ICorDebugFunction4_AddRef(This) \ ( (This)->lpVtbl -> AddRef(This) ) -#define ICorDebugFunction4_Release(This) \ +#define ICorDebugFunction4_Release(This) \ ( (This)->lpVtbl -> Release(This) ) -#define ICorDebugFunction4_CreateNativeBreakpoint(This,ppBreakpoint) \ +#define ICorDebugFunction4_CreateNativeBreakpoint(This,ppBreakpoint) \ ( (This)->lpVtbl -> CreateNativeBreakpoint(This,ppBreakpoint) ) #endif /* COBJMACROS */ -#endif /* C style interface */ - +#endif /* C style interface */ -#endif /* __ICorDebugFunction4_INTERFACE_DEFINED__ */ +#endif /* __ICorDebugFunction4_INTERFACE_DEFINED__ */ #ifndef __ICorDebugCode_INTERFACE_DEFINED__ @@ -14700,15 +14699,15 @@ EXTERN_C const IID IID_ICorDebugBoxValue; #endif /* __ICorDebugBoxValue_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0097 */ +/* interface __MIDL_itf_cordebug_0000_0098 */ /* [local] */ #pragma warning(push) #pragma warning(disable:28718) -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0097_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0097_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0098_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0098_v0_0_s_ifspec; #ifndef __ICorDebugStringValue_INTERFACE_DEFINED__ #define __ICorDebugStringValue_INTERFACE_DEFINED__ @@ -14848,14 +14847,14 @@ EXTERN_C const IID IID_ICorDebugStringValue; #endif /* __ICorDebugStringValue_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0098 */ +/* interface __MIDL_itf_cordebug_0000_0099 */ /* [local] */ #pragma warning(pop) -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0098_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0098_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0099_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0099_v0_0_s_ifspec; #ifndef __ICorDebugArrayValue_INTERFACE_DEFINED__ #define __ICorDebugArrayValue_INTERFACE_DEFINED__ @@ -17630,15 +17629,15 @@ EXTERN_C const IID IID_ICorDebugBlockingObjectEnum; #endif /* __ICorDebugBlockingObjectEnum_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0122 */ +/* interface __MIDL_itf_cordebug_0000_0123 */ /* [local] */ #pragma warning(push) #pragma warning(disable:28718) -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0122_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0122_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0123_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0123_v0_0_s_ifspec; #ifndef __ICorDebugMDA_INTERFACE_DEFINED__ #define __ICorDebugMDA_INTERFACE_DEFINED__ @@ -17778,7 +17777,7 @@ EXTERN_C const IID IID_ICorDebugMDA; #endif /* __ICorDebugMDA_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0123 */ +/* interface __MIDL_itf_cordebug_0000_0124 */ /* [local] */ #pragma warning(pop) @@ -17786,8 +17785,8 @@ EXTERN_C const IID IID_ICorDebugMDA; #pragma warning(disable:28718) -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0123_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0123_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0124_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0124_v0_0_s_ifspec; #ifndef __ICorDebugEditAndContinueErrorInfo_INTERFACE_DEFINED__ #define __ICorDebugEditAndContinueErrorInfo_INTERFACE_DEFINED__ @@ -17903,14 +17902,14 @@ EXTERN_C const IID IID_ICorDebugEditAndContinueErrorInfo; #endif /* __ICorDebugEditAndContinueErrorInfo_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_cordebug_0000_0124 */ +/* interface __MIDL_itf_cordebug_0000_0125 */ /* [local] */ #pragma warning(pop) -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0124_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0124_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0125_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0125_v0_0_s_ifspec; #ifndef __ICorDebugEditAndContinueSnapshot_INTERFACE_DEFINED__ #define __ICorDebugEditAndContinueSnapshot_INTERFACE_DEFINED__ diff --git a/src/vm/dbginterface.h b/src/vm/dbginterface.h index cea4c88230..71af1b45b6 100644 --- a/src/vm/dbginterface.h +++ b/src/vm/dbginterface.h @@ -408,6 +408,9 @@ public: virtual void EnumMemoryRegions(CLRDataEnumMemoryFlags flags) = 0; virtual void EnumMemoryRegionsIfFuncEvalFrame(CLRDataEnumMemoryFlags flags, Frame * pFrame) = 0; #endif +#ifndef DACCESS_COMPILE + virtual void SomeWork() = 0; +#endif }; #ifndef DACCESS_COMPILE diff --git a/src/vm/debugdebugger.cpp b/src/vm/debugdebugger.cpp index daadc91a0a..ab05d63456 100644 --- a/src/vm/debugdebugger.cpp +++ b/src/vm/debugdebugger.cpp @@ -99,7 +99,6 @@ UINT_PTR FindMostRecentUserCodeOnStack(void) return address; } - // This does a user break, triggered by System.Diagnostics.Debugger.Break, or the IL opcode for break. // // Notes: diff --git a/src/vm/gcenv.ee.cpp b/src/vm/gcenv.ee.cpp index 34645b302c..41814d86ab 100644 --- a/src/vm/gcenv.ee.cpp +++ b/src/vm/gcenv.ee.cpp @@ -20,6 +20,9 @@ void GCToEEInterface::SuspendEE(SUSPEND_REASON reason) _ASSERTE(reason == SUSPEND_FOR_GC || reason == SUSPEND_FOR_GC_PREP); + // TODO, between the time when the debug event is sent and the EE is suspended, there is a small window that the data breakpoint could have already hit + g_pDebugInterface->SomeWork(); + ThreadSuspend::SuspendEE((ThreadSuspend::SUSPEND_REASON)reason); } @@ -727,7 +730,7 @@ void GCToEEInterface::DiagGCStart(int gen, bool isInduced) END_PIN_PROFILER(); } -#endif // GC_PROFILING +#endif // GC_PROFILING } void GCToEEInterface::DiagUpdateGenerationBounds() |