summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/debug/di/process.cpp2
-rw-r--r--src/debug/di/rsmain.cpp4
-rw-r--r--src/debug/di/shimcallback.cpp12
-rw-r--r--src/debug/di/shimpriv.h2
-rw-r--r--src/debug/ee/controller.h18
-rw-r--r--src/debug/ee/debugger.cpp1
-rw-r--r--src/debug/inc/dbgipcevents.h5
-rw-r--r--src/debug/shared/dbgtransportsession.cpp6
-rw-r--r--src/inc/cordebug.idl8
-rw-r--r--src/pal/prebuilt/inc/cordebug.h12
10 files changed, 36 insertions, 34 deletions
diff --git a/src/debug/di/process.cpp b/src/debug/di/process.cpp
index a5116f711f..cad2c9bdcc 100644
--- a/src/debug/di/process.cpp
+++ b/src/debug/di/process.cpp
@@ -4922,7 +4922,7 @@ void CordbProcess::RawDispatchEvent(
{
PUBLIC_CALLBACK_IN_THIS_SCOPE(this, pLockHolder, pEvent);
- pCallback4->DataBreakpoint(static_cast<ICorDebugProcess*>(this), pThread);
+ pCallback4->DataBreakpoint(static_cast<ICorDebugProcess*>(this), pThread, reinterpret_cast<BYTE*>(&(pEvent->DataBreakpointData.context)), sizeof(CONTEXT));
}
break;
}
diff --git a/src/debug/di/rsmain.cpp b/src/debug/di/rsmain.cpp
index 8f26de0aea..750cb1d8ee 100644
--- a/src/debug/di/rsmain.cpp
+++ b/src/debug/di/rsmain.cpp
@@ -870,7 +870,7 @@ namespace
virtual ULONG STDMETHODCALLTYPE Release();
COM_METHOD BeforeGarbageCollection(ICorDebugProcess* pProcess);
COM_METHOD AfterGarbageCollection(ICorDebugProcess* pProcess);
- COM_METHOD DataBreakpoint(ICorDebugProcess* pProcess, ICorDebugThread* pThread);
+ COM_METHOD DataBreakpoint(ICorDebugProcess* pProcess, ICorDebugThread* pThread, BYTE* pContext, ULONG32 contextSize);
private:
// not implemented
DefaultManagedCallback4(const DefaultManagedCallback4&);
@@ -944,7 +944,7 @@ namespace
}
HRESULT
- DefaultManagedCallback4::DataBreakpoint(ICorDebugProcess* pProcess, ICorDebugThread* pThread)
+ DefaultManagedCallback4::DataBreakpoint(ICorDebugProcess* pProcess, ICorDebugThread* pThread, BYTE* pContext, ULONG32 contextSize)
{
//
// Just ignore and continue the process.
diff --git a/src/debug/di/shimcallback.cpp b/src/debug/di/shimcallback.cpp
index 1af6e04c0f..84ee3454d5 100644
--- a/src/debug/di/shimcallback.cpp
+++ b/src/debug/di/shimcallback.cpp
@@ -1384,7 +1384,7 @@ HRESULT ShimProxyCallback::AfterGarbageCollection(ICorDebugProcess* pProcess)
// input:
// pProcess - process in which the notification occurred
// Return value: S_OK
-HRESULT ShimProxyCallback::DataBreakpoint(ICorDebugProcess* pProcess, ICorDebugThread* pThread)
+HRESULT ShimProxyCallback::DataBreakpoint(ICorDebugProcess* pProcess, ICorDebugThread* pThread, BYTE* pContext, ULONG32 contextSize)
{
m_pShim->PreDispatchEvent();
class DataBreakpointEvent : public ManagedEvent
@@ -1392,23 +1392,27 @@ HRESULT ShimProxyCallback::DataBreakpoint(ICorDebugProcess* pProcess, ICorDebugT
// callbacks parameters. These are strong references
RSExtSmartPtr<ICorDebugProcess> m_pProcess;
RSExtSmartPtr<ICorDebugThread> m_pThread;
+ BYTE* m_pContext;
+ ULONG32 m_contextSize;
public:
// Ctor
- DataBreakpointEvent(ICorDebugProcess* pProcess, ICorDebugThread* pThread) :
+ DataBreakpointEvent(ICorDebugProcess* pProcess, ICorDebugThread* pThread, BYTE* pContext, ULONG32 contextSize) :
ManagedEvent()
{
this->m_pProcess.Assign(pProcess);
this->m_pThread.Assign(pThread);
+ this->m_pContext = pContext;
+ this->m_contextSize = contextSize;
}
HRESULT Dispatch(DispatchArgs args)
{
- return args.GetCallback4()->DataBreakpoint(m_pProcess, m_pThread);
+ return args.GetCallback4()->DataBreakpoint(m_pProcess, m_pThread, m_pContext, m_contextSize);
}
}; // end class AfterGarbageCollectionEvent
- m_pShim->GetManagedEventQueue()->QueueEvent(new DataBreakpointEvent(pProcess, pThread));
+ m_pShim->GetManagedEventQueue()->QueueEvent(new DataBreakpointEvent(pProcess, pThread, pContext, contextSize));
return S_OK;
}
diff --git a/src/debug/di/shimpriv.h b/src/debug/di/shimpriv.h
index 97cbeb75eb..4c9eb7ab86 100644
--- a/src/debug/di/shimpriv.h
+++ b/src/debug/di/shimpriv.h
@@ -222,7 +222,7 @@ public:
COM_METHOD ShimProxyCallback::AfterGarbageCollection(ICorDebugProcess* pProcess);
// Implementation of ICorDebugManagedCallback4::DataBreakpoint
- COM_METHOD ShimProxyCallback::DataBreakpoint(ICorDebugProcess* pProcess, ICorDebugThread* pThread);
+ COM_METHOD ShimProxyCallback::DataBreakpoint(ICorDebugProcess* pProcess, ICorDebugThread* pThread, BYTE* pContext, ULONG32 contextSize);
};
diff --git a/src/debug/ee/controller.h b/src/debug/ee/controller.h
index 1e002bc155..7643b3612e 100644
--- a/src/debug/ee/controller.h
+++ b/src/debug/ee/controller.h
@@ -1793,20 +1793,6 @@ public:
Thread *thread,
TRIGGER_WHY tyWhy)
{
-#ifdef FEATURE_PAL
- #error Not supported
-#endif // FEATURE_PAL
-#if defined(_TARGET_X86_) || defined(_TARGET_AMD64_)
- CONTEXT *context = g_pEEInterface->GetThreadFilterContext(thread);
- context->Dr0 = this->m_context.Dr0;
- context->Dr1 = this->m_context.Dr1;
- context->Dr2 = this->m_context.Dr2;
- context->Dr3 = this->m_context.Dr3;
- context->Dr6 = this->m_context.Dr6;
- context->Dr7 = this->m_context.Dr7;
-#else // defined(_TARGET_X86_) || defined(_TARGET_AMD64_)
- #error Not supported
-#endif // defined(_TARGET_X86_) || defined(_TARGET_AMD64_)
return TPR_TRIGGER;
}
@@ -1822,9 +1808,7 @@ public:
LOG((LF_CORDB, LL_INFO10000, "DDBP::SE: in DebuggerDataBreakpoint's SendEvent\n"));
- CONTEXT *context = g_pEEInterface->GetThreadFilterContext(thread);
-
- g_pDebugger->SendDataBreakpoint(thread, context, this);
+ g_pDebugger->SendDataBreakpoint(thread, &m_context, this);
Delete();
diff --git a/src/debug/ee/debugger.cpp b/src/debug/ee/debugger.cpp
index 8f8b664db7..c6fb4192e5 100644
--- a/src/debug/ee/debugger.cpp
+++ b/src/debug/ee/debugger.cpp
@@ -6112,6 +6112,7 @@ void Debugger::SendDataBreakpoint(Thread *thread, CONTEXT *context,
// Send a breakpoint event to the Right Side
DebuggerIPCEvent* ipce = m_pRCThread->GetIPCEventSendBuffer();
+ memcpy(&(ipce->DataBreakpointData.context), context, sizeof(CONTEXT));
InitIPCEvent(ipce,
DB_IPCE_DATA_BREAKPOINT,
thread,
diff --git a/src/debug/inc/dbgipcevents.h b/src/debug/inc/dbgipcevents.h
index 279cd8f1d4..e9669f043f 100644
--- a/src/debug/inc/dbgipcevents.h
+++ b/src/debug/inc/dbgipcevents.h
@@ -2012,6 +2012,11 @@ struct MSLAYOUT DebuggerIPCEvent
struct MSLAYOUT
{
+ CONTEXT context;
+ } DataBreakpointData;
+
+ struct MSLAYOUT
+ {
LSPTR_STEPPER stepperToken;
VMPTR_Thread vmThreadToken;
FramePointer frameToken;
diff --git a/src/debug/shared/dbgtransportsession.cpp b/src/debug/shared/dbgtransportsession.cpp
index e9d77cb49a..f526f91a81 100644
--- a/src/debug/shared/dbgtransportsession.cpp
+++ b/src/debug/shared/dbgtransportsession.cpp
@@ -2201,10 +2201,12 @@ DWORD DbgTransportSession::GetEventSize(DebuggerIPCEvent *pEvent)
case DB_IPCE_ATTACHING:
case DB_IPCE_GET_NGEN_COMPILER_FLAGS:
case DB_IPCE_DETACH_FROM_PROCESS:
- case DB_IPCE_CONTROL_C_EVENT_RESULT:
- case DB_IPCE_DATA_BREAKPOINT:
+ case DB_IPCE_CONTROL_C_EVENT_RESULT:
cbAdditionalSize = 0;
break;
+ case DB_IPCE_DATA_BREAKPOINT:
+ cbAdditionalSize = sizeof(pEvent->DataBreakpointData);
+ break;
case DB_IPCE_BREAKPOINT:
cbAdditionalSize = sizeof(pEvent->BreakpointData);
diff --git a/src/inc/cordebug.idl b/src/inc/cordebug.idl
index 254a7dbc33..ce1bf4a49e 100644
--- a/src/inc/cordebug.idl
+++ b/src/inc/cordebug.idl
@@ -1385,13 +1385,15 @@ interface ICorDebugManagedCallback4 : IUnknown
// Callback indicating a data breakpoint is hit
//
// Parameters
- // pProcess - the process that hits the data breakpoint
- // pThread - the thread that hits the data breakpoint
+ // pProcess - the process that hits the data breakpoint
+ // pThread - the thread that hits the data breakpoint
+ // pContext - a pointer to the CONTEXT structure
+ // contextSize - the size of the CONTEXT structure
//
// Returns
// S_OK - on success
//
- HRESULT DataBreakpoint([in] ICorDebugProcess* pProcess, [in] ICorDebugThread* pThread);
+ HRESULT DataBreakpoint([in] ICorDebugProcess* pProcess, [in] ICorDebugThread* pThread, [in] BYTE* pContext, [in] ULONG32 contextSize);
}
#pragma warning(disable:28718) /* disable warning 28718 for interface ICorDebugManagedCallback2 */
diff --git a/src/pal/prebuilt/inc/cordebug.h b/src/pal/prebuilt/inc/cordebug.h
index 1b53577b2b..a9742571a7 100644
--- a/src/pal/prebuilt/inc/cordebug.h
+++ b/src/pal/prebuilt/inc/cordebug.h
@@ -3788,7 +3788,9 @@ EXTERN_C const IID IID_ICorDebugManagedCallback4;
virtual HRESULT STDMETHODCALLTYPE DataBreakpoint(
/* [in] */ ICorDebugProcess *pProcess,
- /* [in] */ ICorDebugThread *pThread) = 0;
+ /* [in] */ ICorDebugThread *pThread,
+ /* [in] */ BYTE *pContext,
+ /* [in] */ ULONG32 contextSize) = 0;
};
@@ -3822,7 +3824,9 @@ EXTERN_C const IID IID_ICorDebugManagedCallback4;
HRESULT ( STDMETHODCALLTYPE *DataBreakpoint )(
ICorDebugManagedCallback4 * This,
/* [in] */ ICorDebugProcess *pProcess,
- /* [in] */ ICorDebugThread *pThread);
+ /* [in] */ ICorDebugThread *pThread,
+ /* [in] */ BYTE *pContext,
+ /* [in] */ ULONG32 contextSize);
END_INTERFACE
} ICorDebugManagedCallback4Vtbl;
@@ -3853,8 +3857,8 @@ EXTERN_C const IID IID_ICorDebugManagedCallback4;
#define ICorDebugManagedCallback4_AfterGarbageCollection(This,pProcess) \
( (This)->lpVtbl -> AfterGarbageCollection(This,pProcess) )
-#define ICorDebugManagedCallback4_DataBreakpoint(This,pProcess,pThread) \
- ( (This)->lpVtbl -> DataBreakpoint(This,pProcess,pThread) )
+#define ICorDebugManagedCallback4_DataBreakpoint(This,pProcess,pThread,pContext,contextSize) \
+ ( (This)->lpVtbl -> DataBreakpoint(This,pProcess,pThread,pContext,contextSize) )
#endif /* COBJMACROS */