From: Omair Javaid Date: Wed, 12 Aug 2015 11:30:21 +0000 (+0000) Subject: Fix LLGS to enable read type watchpoints X-Git-Tag: studio-1.4~190 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cf8eb9da4d0e4a7d66e79c1ea6de623d82666496;p=platform%2Fupstream%2Fllvm.git Fix LLGS to enable read type watchpoints http://reviews.llvm.org/D11902 llvm-svn: 244741 --- diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp index a7390f5..2ce8220 100644 --- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp +++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp @@ -1018,6 +1018,9 @@ NativeRegisterContextLinux_x86_64::SetHardwareWatchpointWithIndex( if (wp_index >= NumSupportedHardwareWatchpoints()) return Error ("Watchpoint index out of range"); + if (watch_flags == 0x2) + return Error ("Read watchpoints currently unsupported on x86_64 architecture"); + if (watch_flags != 0x1 && watch_flags != 0x3) return Error ("Invalid read/write bits for watchpoint"); diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp index 3a7ad34..1ce9ba6 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp @@ -2227,6 +2227,7 @@ GDBRemoteCommunicationServerLLGS::Handle_Z (StringExtractorGDBRemote &packet) bool want_breakpoint = true; bool want_hardware = false; + uint32_t watch_flags = 0; const GDBStoppointType stoppoint_type = GDBStoppointType(packet.GetS32 (eStoppointInvalid)); @@ -2237,10 +2238,13 @@ GDBRemoteCommunicationServerLLGS::Handle_Z (StringExtractorGDBRemote &packet) case eBreakpointHardware: want_hardware = true; want_breakpoint = true; break; case eWatchpointWrite: + watch_flags = 1; want_hardware = true; want_breakpoint = false; break; case eWatchpointRead: + watch_flags = 2; want_hardware = true; want_breakpoint = false; break; case eWatchpointReadWrite: + watch_flags = 3; want_hardware = true; want_breakpoint = false; break; case eStoppointInvalid: return SendIllFormedResponse(packet, "Z packet had invalid software/hardware specifier"); @@ -2280,11 +2284,6 @@ GDBRemoteCommunicationServerLLGS::Handle_Z (StringExtractorGDBRemote &packet) } else { - uint32_t watch_flags = - stoppoint_type == eWatchpointWrite - ? 0x1 // Write - : 0x3; // ReadWrite - // Try to set the watchpoint. const Error error = m_debugged_process_sp->SetWatchpoint ( addr, size, watch_flags, want_hardware);