Module: wine Branch: master Commit: a679f965c8154c46338bbef9a3a0ab3ec7e785a4 URL: https://source.winehq.org/git/wine.git/?a=commit;h=a679f965c8154c46338bbef9a...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Jul 5 13:21:37 2019 +0200
kernel32: Reimplement DebugBreakProcess on top of DbgUiIssueRemoteBreakin.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernel32/debugger.c | 18 ++++++------------ dlls/kernel32/tests/debugger.c | 3 +-- include/wine/server_protocol.h | 19 +------------------ server/debugger.c | 14 -------------- server/protocol.def | 8 -------- server/request.h | 6 ------ server/trace.c | 13 ------------- 7 files changed, 8 insertions(+), 73 deletions(-)
diff --git a/dlls/kernel32/debugger.c b/dlls/kernel32/debugger.c index e2ee1fd..d439475 100644 --- a/dlls/kernel32/debugger.c +++ b/dlls/kernel32/debugger.c @@ -407,21 +407,15 @@ void WINAPI DebugBreak(void) * * True if successful. */ -BOOL WINAPI DebugBreakProcess(HANDLE hProc) +BOOL WINAPI DebugBreakProcess(HANDLE process) { - BOOL ret, self; + NTSTATUS status;
- TRACE("(%p)\n", hProc); + TRACE("(%p)\n", process);
- SERVER_START_REQ( debug_break ) - { - req->handle = wine_server_obj_handle( hProc ); - ret = !wine_server_call_err( req ); - self = ret && reply->self; - } - SERVER_END_REQ; - if (self) DbgBreakPoint(); - return ret; + status = DbgUiIssueRemoteBreakin(process); + if (status) SetLastError(RtlNtStatusToDosError(status)); + return !status; }
diff --git a/dlls/kernel32/tests/debugger.c b/dlls/kernel32/tests/debugger.c index 3f73f2e..691e1c0 100644 --- a/dlls/kernel32/tests/debugger.c +++ b/dlls/kernel32/tests/debugger.c @@ -988,7 +988,6 @@ static void test_debug_children(char *name, DWORD flag, BOOL debug_child)
/* a new thread, which executes DbgDebugBreak, is created */ next_event(&ctx, 2000); - todo_wine ok(ctx.ev.dwDebugEventCode == CREATE_THREAD_DEBUG_EVENT, "dwDebugEventCode = %d\n", ctx.ev.dwDebugEventCode); last_thread = ctx.ev.dwThreadId;
@@ -999,7 +998,7 @@ static void test_debug_children(char *name, DWORD flag, BOOL debug_child) ok(ctx.ev.dwThreadId == last_thread, "unexpected thread\n"); ok(ctx.ev.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_BREAKPOINT, "ExceptionCode = %x\n", ctx.ev.u.Exception.ExceptionRecord.ExceptionCode); - todo_wine + todo_wine_if(sizeof(void*) == 4) ok(ctx.ev.u.Exception.ExceptionRecord.ExceptionAddress == pDbgBreakPoint, "ExceptionAddres != DbgBreakPoint\n");
ret = SetEvent(event_attach); diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index f67b09a..d26f27c 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -2552,20 +2552,6 @@ struct debug_process_reply
-struct debug_break_request -{ - struct request_header __header; - obj_handle_t handle; -}; -struct debug_break_reply -{ - struct reply_header __header; - int self; - char __pad_12[4]; -}; - - - struct set_debugger_kill_on_exit_request { struct request_header __header; @@ -5901,7 +5887,6 @@ enum request REQ_get_exception_status, REQ_continue_debug_event, REQ_debug_process, - REQ_debug_break, REQ_set_debugger_kill_on_exit, REQ_read_process_memory, REQ_write_process_memory, @@ -6206,7 +6191,6 @@ union generic_request struct get_exception_status_request get_exception_status_request; struct continue_debug_event_request continue_debug_event_request; struct debug_process_request debug_process_request; - struct debug_break_request debug_break_request; struct set_debugger_kill_on_exit_request set_debugger_kill_on_exit_request; struct read_process_memory_request read_process_memory_request; struct write_process_memory_request write_process_memory_request; @@ -6509,7 +6493,6 @@ union generic_reply struct get_exception_status_reply get_exception_status_reply; struct continue_debug_event_reply continue_debug_event_reply; struct debug_process_reply debug_process_reply; - struct debug_break_reply debug_break_reply; struct set_debugger_kill_on_exit_reply set_debugger_kill_on_exit_reply; struct read_process_memory_reply read_process_memory_reply; struct write_process_memory_reply write_process_memory_reply; @@ -6708,6 +6691,6 @@ union generic_reply struct resume_process_reply resume_process_reply; };
-#define SERVER_PROTOCOL_VERSION 586 +#define SERVER_PROTOCOL_VERSION 587
#endif /* __WINE_WINE_SERVER_PROTOCOL_H */ diff --git a/server/debugger.c b/server/debugger.c index 38fe788..7c64cbb 100644 --- a/server/debugger.c +++ b/server/debugger.c @@ -714,20 +714,6 @@ DECL_HANDLER(get_exception_status) } }
-/* simulate a breakpoint in a process */ -DECL_HANDLER(debug_break) -{ - struct process *process; - - reply->self = 0; - if ((process = get_process_from_handle( req->handle, PROCESS_SET_INFORMATION /*FIXME*/ ))) - { - if (process != current->process) break_process( process ); - else reply->self = 1; - release_object( process ); - } -} - /* set debugger kill on exit flag */ DECL_HANDLER(set_debugger_kill_on_exit) { diff --git a/server/protocol.def b/server/protocol.def index 58a7545..b80a6d6 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -1940,14 +1940,6 @@ enum char_info_mode @END
-/* Simulate a breakpoint in a process */ -@REQ(debug_break) - obj_handle_t handle; /* process handle */ -@REPLY - int self; /* was it the caller itself? */ -@END - - /* Set debugger kill on exit flag */ @REQ(set_debugger_kill_on_exit) int kill_on_exit; /* 0=detach/1=kill debuggee when debugger dies */ diff --git a/server/request.h b/server/request.h index 1858b41..57f8937 100644 --- a/server/request.h +++ b/server/request.h @@ -213,7 +213,6 @@ DECL_HANDLER(queue_exception_event); DECL_HANDLER(get_exception_status); DECL_HANDLER(continue_debug_event); DECL_HANDLER(debug_process); -DECL_HANDLER(debug_break); DECL_HANDLER(set_debugger_kill_on_exit); DECL_HANDLER(read_process_memory); DECL_HANDLER(write_process_memory); @@ -517,7 +516,6 @@ static const req_handler req_handlers[REQ_NB_REQUESTS] = (req_handler)req_get_exception_status, (req_handler)req_continue_debug_event, (req_handler)req_debug_process, - (req_handler)req_debug_break, (req_handler)req_set_debugger_kill_on_exit, (req_handler)req_read_process_memory, (req_handler)req_write_process_memory, @@ -1376,10 +1374,6 @@ C_ASSERT( sizeof(struct continue_debug_event_request) == 24 ); C_ASSERT( FIELD_OFFSET(struct debug_process_request, pid) == 12 ); C_ASSERT( FIELD_OFFSET(struct debug_process_request, attach) == 16 ); C_ASSERT( sizeof(struct debug_process_request) == 24 ); -C_ASSERT( FIELD_OFFSET(struct debug_break_request, handle) == 12 ); -C_ASSERT( sizeof(struct debug_break_request) == 16 ); -C_ASSERT( FIELD_OFFSET(struct debug_break_reply, self) == 8 ); -C_ASSERT( sizeof(struct debug_break_reply) == 16 ); C_ASSERT( FIELD_OFFSET(struct set_debugger_kill_on_exit_request, kill_on_exit) == 12 ); C_ASSERT( sizeof(struct set_debugger_kill_on_exit_request) == 16 ); C_ASSERT( FIELD_OFFSET(struct read_process_memory_request, handle) == 12 ); diff --git a/server/trace.c b/server/trace.c index d4a35e4..af87a5d 100644 --- a/server/trace.c +++ b/server/trace.c @@ -2447,16 +2447,6 @@ static void dump_debug_process_request( const struct debug_process_request *req fprintf( stderr, ", attach=%d", req->attach ); }
-static void dump_debug_break_request( const struct debug_break_request *req ) -{ - fprintf( stderr, " handle=%04x", req->handle ); -} - -static void dump_debug_break_reply( const struct debug_break_reply *req ) -{ - fprintf( stderr, " self=%d", req->self ); -} - static void dump_set_debugger_kill_on_exit_request( const struct set_debugger_kill_on_exit_request *req ) { fprintf( stderr, " kill_on_exit=%d", req->kill_on_exit ); @@ -4708,7 +4698,6 @@ static const dump_func req_dumpers[REQ_NB_REQUESTS] = { (dump_func)dump_get_exception_status_request, (dump_func)dump_continue_debug_event_request, (dump_func)dump_debug_process_request, - (dump_func)dump_debug_break_request, (dump_func)dump_set_debugger_kill_on_exit_request, (dump_func)dump_read_process_memory_request, (dump_func)dump_write_process_memory_request, @@ -5009,7 +4998,6 @@ static const dump_func reply_dumpers[REQ_NB_REQUESTS] = { (dump_func)dump_get_exception_status_reply, NULL, NULL, - (dump_func)dump_debug_break_reply, NULL, (dump_func)dump_read_process_memory_reply, NULL, @@ -5310,7 +5298,6 @@ static const char * const req_names[REQ_NB_REQUESTS] = { "get_exception_status", "continue_debug_event", "debug_process", - "debug_break", "set_debugger_kill_on_exit", "read_process_memory", "write_process_memory",