[lldb/Plugin] Add breakpoint setting support to ScriptedProcesses.
authorMed Ismail Bennani <medismail.bennani@gmail.com>
Sat, 4 Mar 2023 05:40:51 +0000 (21:40 -0800)
committerMed Ismail Bennani <medismail.bennani@gmail.com>
Mon, 6 Mar 2023 21:14:15 +0000 (13:14 -0800)
This patch adds support for breakpoint setting to Scripted Processes.

For now, Scripted Processes only support setting software breakpoints.

When doing interactive scripted process debugging, it makes use of the
memory writing capability to write the trap opcodes in the memory of the
driving process. However the real process' target doesn't keep track of
the breakpoints that got added by the scripted process. This is a design
that we might need to change in the future, since we'll probably need to
do some book keeping to handle breakpoints that were set by different
scripted processes.

Differential Revision: https://reviews.llvm.org/D145296

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp
lldb/source/Plugins/Process/scripted/ScriptedProcess.h

index 79365f9b6975871e2fd1b18315b06ec1aaacf086..c5a68271c75f010acc29bf41beadb6b111f8ffe1 100644 (file)
@@ -267,6 +267,20 @@ size_t ScriptedProcess::DoWriteMemory(lldb::addr_t vm_addr, const void *buf,
   return bytes_written;
 }
 
+Status ScriptedProcess::EnableBreakpointSite(BreakpointSite *bp_site) {
+  assert(bp_site != nullptr);
+
+  if (bp_site->IsEnabled()) {
+    return {};
+  }
+
+  if (bp_site->HardwareRequired()) {
+    return Status("Scripted Processes don't support hardware breakpoints");
+  }
+
+  return EnableSoftwareBreakpoint(bp_site);
+}
+
 ArchSpec ScriptedProcess::GetArchitecture() {
   return GetTarget().GetArchitecture();
 }
index 728c96a904e4bf8746402380a7d1d77633ce848b..73b28a3f39fd0ceaf27440cad9f60a05f9c50c5a 100644 (file)
@@ -72,6 +72,8 @@ public:
   size_t DoWriteMemory(lldb::addr_t vm_addr, const void *buf, size_t size,
                        Status &error) override;
 
+  Status EnableBreakpointSite(BreakpointSite *bp_site) override;
+
   ArchSpec GetArchitecture();
 
   Status