hrev44768 adds 1 changeset to branch 'master' old head: ca0d271159445d49707998406c66e97c9d9e61c9 new head: 35cadd6f3cda83bfd58be558ce287157acc9174e ---------------------------------------------------------------------------- 35cadd6: Add watchpoint support in DebuggerInterface. [ Rene Gollent <anevilyak@xxxxxxxxx> ] ---------------------------------------------------------------------------- Revision: hrev44768 Commit: 35cadd6f3cda83bfd58be558ce287157acc9174e URL: http://cgit.haiku-os.org/haiku/commit/?id=35cadd6 Author: Rene Gollent <anevilyak@xxxxxxxxx> Date: Mon Nov 5 18:15:46 2012 UTC ---------------------------------------------------------------------------- 2 files changed, 40 insertions(+), 2 deletions(-) .../debugger_interface/DebuggerInterface.cpp | 36 +++++++++++++++++++- .../debugger_interface/DebuggerInterface.h | 6 +++- ---------------------------------------------------------------------------- diff --git a/src/apps/debugger/debugger_interface/DebuggerInterface.cpp b/src/apps/debugger/debugger_interface/DebuggerInterface.cpp index 2504389..8a47162 100644 --- a/src/apps/debugger/debugger_interface/DebuggerInterface.cpp +++ b/src/apps/debugger/debugger_interface/DebuggerInterface.cpp @@ -1,6 +1,6 @@ /* * Copyright 2009-2012, Ingo Weinhold, ingo_weinhold@xxxxxxx - * Copyright 2010, Rene Gollent, rene@xxxxxxxxxxxx + * Copyright 2010-2012, Rene Gollent, rene@xxxxxxxxxxxx * Distributed under the terms of the MIT License. */ @@ -426,6 +426,40 @@ DebuggerInterface::UninstallBreakpoint(target_addr_t address) status_t +DebuggerInterface::InstallWatchpoint(target_addr_t address, uint32 type, + int32 length) +{ + DebugContextGetter contextGetter(fDebugContextPool); + + debug_nub_set_watchpoint message; + message.reply_port = contextGetter.Context()->reply_port; + message.address = (void*)(addr_t)address; + message.type = type; + message.length = length; + + debug_nub_set_watchpoint_reply reply; + + status_t error = send_debug_message(contextGetter.Context(), + B_DEBUG_MESSAGE_SET_WATCHPOINT, &message, sizeof(message), &reply, + sizeof(reply)); + return error == B_OK ? reply.error : error; +} + + +status_t +DebuggerInterface::UninstallWatchpoint(target_addr_t address) +{ + DebugContextGetter contextGetter(fDebugContextPool); + + debug_nub_clear_watchpoint message; + message.address = (void*)(addr_t)address; + + return write_port(fNubPort, B_DEBUG_MESSAGE_CLEAR_WATCHPOINT, + &message, sizeof(message)); +} + + +status_t DebuggerInterface::GetThreadInfos(BObjectList<ThreadInfo>& infos) { thread_info threadInfo; diff --git a/src/apps/debugger/debugger_interface/DebuggerInterface.h b/src/apps/debugger/debugger_interface/DebuggerInterface.h index c700034..bdf9b2c 100644 --- a/src/apps/debugger/debugger_interface/DebuggerInterface.h +++ b/src/apps/debugger/debugger_interface/DebuggerInterface.h @@ -1,6 +1,6 @@ /* * Copyright 2009, Ingo Weinhold, ingo_weinhold@xxxxxxx - * Copyright 2010, Rene Gollent, rene@xxxxxxxxxxxx + * Copyright 2010-2012, Rene Gollent, rene@xxxxxxxxxxxx * Distributed under the terms of the MIT License. */ #ifndef DEBUGGER_INTERFACE_H @@ -48,6 +48,10 @@ public: virtual status_t InstallBreakpoint(target_addr_t address); virtual status_t UninstallBreakpoint(target_addr_t address); + virtual status_t InstallWatchpoint(target_addr_t address, + uint32 type, int32 length); + virtual status_t UninstallWatchpoint(target_addr_t address); + virtual status_t GetThreadInfos(BObjectList<ThreadInfo>& infos); virtual status_t GetImageInfos(BObjectList<ImageInfo>& infos); virtual status_t GetSymbolInfos(team_id team, image_id image,