summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Au <andrewau@microsoft.com>2018-05-09 09:40:47 -0700
committerAndrew Au <cshung@gmail.com>2018-11-06 18:34:47 -0800
commit1df9f792fa4a421014354063f8a63eca925c20e7 (patch)
tree2fa2bb4e121b70746eb1b2b093be21ef237d7f50
parent6a67567b0e75d396e3e088494465c6b1276b0c35 (diff)
downloadcoreclr-1df9f792fa4a421014354063f8a63eca925c20e7.tar.gz
coreclr-1df9f792fa4a421014354063f8a63eca925c20e7.tar.bz2
coreclr-1df9f792fa4a421014354063f8a63eca925c20e7.zip
Saving progress - works towards gc events
-rw-r--r--src/debug/di/process.cpp20
-rw-r--r--src/debug/di/rsmain.cpp98
-rw-r--r--src/debug/di/rspriv.h4
-rw-r--r--src/debug/di/shimcallback.cpp39
-rw-r--r--src/debug/di/shimevents.cpp9
-rw-r--r--src/debug/di/shimpriv.h13
-rw-r--r--src/debug/ee/debugger.cpp37
-rw-r--r--src/debug/ee/debugger.h3
-rw-r--r--src/debug/inc/dbgipceventtypes.h3
-rw-r--r--src/inc/cordebug.idl12
-rw-r--r--src/pal/prebuilt/idl/cordebug_i.cpp15
-rw-r--r--src/pal/prebuilt/inc/cordebug.h337
-rw-r--r--src/vm/dbginterface.h3
-rw-r--r--src/vm/debugdebugger.cpp1
-rw-r--r--src/vm/gcenv.ee.cpp5
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()