Module: wine Branch: master Commit: 1414adfa4644f2cb3b0754aa6a4a54274a9c0310 URL: https://gitlab.winehq.org/wine/wine/-/commit/1414adfa4644f2cb3b0754aa6a4a542...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Jan 23 15:53:58 2024 +0100
ntdll: Move the process breakpoint to the CPU backends.
---
dlls/ntdll/loader.c | 30 ++++-------------------------- dlls/ntdll/ntdll_misc.h | 1 + dlls/ntdll/process.c | 13 +------------ dlls/ntdll/signal_arm.c | 16 ++++++++++++++++ dlls/ntdll/signal_arm64.c | 18 ++++++++++++++++++ dlls/ntdll/signal_arm64ec.c | 17 +++++++++++++++++ dlls/ntdll/signal_i386.c | 17 +++++++++++++++++ dlls/ntdll/signal_x86_64.c | 17 +++++++++++++++++ 8 files changed, 91 insertions(+), 38 deletions(-)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index 59624bc70f8..021f7941969 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -4076,30 +4076,6 @@ PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE hModule) return ret; }
-/*********************************************************************** - * process_breakpoint - * - * Trigger a debug breakpoint if the process is being debugged. - */ -static void process_breakpoint(void) -{ - DWORD_PTR port = 0; - - NtQueryInformationProcess( GetCurrentProcess(), ProcessDebugPort, &port, sizeof(port), NULL ); - if (!port) return; - - __TRY - { - DbgBreakPoint(); - } - __EXCEPT_ALL - { - /* do nothing */ - } - __ENDTRY -} - - /*********************************************************************** * load_global_options */ @@ -4270,7 +4246,7 @@ void loader_init( CONTEXT *context, void **entry ) { static int attach_done; NTSTATUS status; - ULONG_PTR cookie; + ULONG_PTR cookie, port = 0; WINE_MODREF *wm;
if (process_detaching) NtTerminateThread( GetCurrentThread(), 0 ); @@ -4380,7 +4356,9 @@ void loader_init( CONTEXT *context, void **entry ) release_address_space(); if (wm->ldr.TlsIndex == -1) call_tls_callbacks( wm->ldr.DllBase, DLL_PROCESS_ATTACH ); if (wm->ldr.ActivationContext) RtlDeactivateActivationContext( 0, cookie ); - process_breakpoint(); + + NtQueryInformationProcess( GetCurrentProcess(), ProcessDebugPort, &port, sizeof(port), NULL ); + if (port) process_breakpoint(); } else { diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h index da49c14e682..299363d7363 100644 --- a/dlls/ntdll/ntdll_misc.h +++ b/dlls/ntdll/ntdll_misc.h @@ -54,6 +54,7 @@ extern EXCEPTION_DISPOSITION WINAPI user_callback_handler( EXCEPTION_RECORD *rec CONTEXT *context, void *dispatch ); extern void DECLSPEC_NORETURN raise_status( NTSTATUS status, EXCEPTION_RECORD *rec ); extern LONG WINAPI call_unhandled_exception_filter( PEXCEPTION_POINTERS eptr ); +extern void WINAPI process_breakpoint(void);
extern void WINAPI LdrInitializeThunk(CONTEXT*,ULONG_PTR,ULONG_PTR,ULONG_PTR); extern NTSTATUS WINAPI KiUserExceptionDispatcher(EXCEPTION_RECORD*,CONTEXT*); diff --git a/dlls/ntdll/process.c b/dlls/ntdll/process.c index 02e31ea7f4b..87090781bbd 100644 --- a/dlls/ntdll/process.c +++ b/dlls/ntdll/process.c @@ -708,18 +708,7 @@ NTSTATUS WINAPI DbgUiConvertStateChangeStructure( DBGUI_WAIT_STATE_CHANGE *state void WINAPI DbgUiRemoteBreakin( void *arg ) { TRACE( "\n" ); - if (NtCurrentTeb()->Peb->BeingDebugged) - { - __TRY - { - DbgBreakPoint(); - } - __EXCEPT_ALL - { - /* do nothing */ - } - __ENDTRY - } + if (NtCurrentTeb()->Peb->BeingDebugged) process_breakpoint(); RtlExitUserThread( STATUS_SUCCESS ); }
diff --git a/dlls/ntdll/signal_arm.c b/dlls/ntdll/signal_arm.c index 428742b116b..0ce63932919 100644 --- a/dlls/ntdll/signal_arm.c +++ b/dlls/ntdll/signal_arm.c @@ -1616,6 +1616,22 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, ULONG_PTR unk2, ULONG_PTR unk3 NtContinue( context, TRUE ); }
+/*********************************************************************** + * process_breakpoint + */ +void WINAPI process_breakpoint(void) +{ + __TRY + { + DbgBreakPoint(); + } + __EXCEPT_ALL + { + /* do nothing */ + } + __ENDTRY +} + /********************************************************************** * DbgBreakPoint (NTDLL.@) */ diff --git a/dlls/ntdll/signal_arm64.c b/dlls/ntdll/signal_arm64.c index 2d150528610..34cbffbd3cc 100644 --- a/dlls/ntdll/signal_arm64.c +++ b/dlls/ntdll/signal_arm64.c @@ -1585,6 +1585,24 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, ULONG_PTR unk2, ULONG_PTR unk3 NtContinue( context, TRUE ); }
+ +/*********************************************************************** + * process_breakpoint + */ +void WINAPI process_breakpoint(void) +{ + __TRY + { + DbgBreakPoint(); + } + __EXCEPT_ALL + { + /* do nothing */ + } + __ENDTRY +} + + /********************************************************************** * DbgBreakPoint (NTDLL.@) */ diff --git a/dlls/ntdll/signal_arm64ec.c b/dlls/ntdll/signal_arm64ec.c index a54a5eeaceb..f45381c89c0 100644 --- a/dlls/ntdll/signal_arm64ec.c +++ b/dlls/ntdll/signal_arm64ec.c @@ -2001,6 +2001,23 @@ void WINAPI LdrInitializeThunk( CONTEXT *arm_context, ULONG_PTR unk2, ULONG_PTR }
+/*********************************************************************** + * process_breakpoint + */ +void WINAPI process_breakpoint(void) +{ + __TRY + { + DbgBreakPoint(); + } + __EXCEPT_ALL + { + /* do nothing */ + } + __ENDTRY +} + + /********************************************************************** * DbgBreakPoint (NTDLL.@) */ diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c index 865faa93ea9..95efec5122c 100644 --- a/dlls/ntdll/signal_i386.c +++ b/dlls/ntdll/signal_i386.c @@ -629,6 +629,23 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, ULONG_PTR unk2, ULONG_PTR unk3 }
+/*********************************************************************** + * process_breakpoint + */ +void WINAPI process_breakpoint(void) +{ + __TRY + { + DbgBreakPoint(); + } + __EXCEPT_ALL + { + /* do nothing */ + } + __ENDTRY +} + + /********************************************************************** * DbgBreakPoint (NTDLL.@) */ diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c index b253c0b4f17..fbab26a7bf4 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c @@ -1725,6 +1725,23 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, ULONG_PTR unk2, ULONG_PTR unk3 }
+/*********************************************************************** + * process_breakpoint + */ +void WINAPI process_breakpoint(void) +{ + __TRY + { + DbgBreakPoint(); + } + __EXCEPT_ALL + { + /* do nothing */ + } + __ENDTRY +} + + /********************************************************************** * DbgBreakPoint (NTDLL.@) */