Revert "[lldb] [gdb-remote client] Remove breakpoints throughout vfork"
authorMichał Górny <mgorny@moritz.systems>
Wed, 1 Sep 2021 06:53:11 +0000 (08:53 +0200)
committerMichał Górny <mgorny@moritz.systems>
Wed, 1 Sep 2021 06:53:35 +0000 (08:53 +0200)
This reverts commit 199344d832c1bed1d75b1db2c1493e5a3e5c5544.
It caused regressions on arm, as reported by lldb-arm-ubuntu buildbot.

lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h
lldb/test/Shell/Subprocess/vfork-follow-parent-softbp.test [deleted file]

index aa5b676..f81e2ac 100644 (file)
@@ -265,8 +265,7 @@ ProcessGDBRemote::ProcessGDBRemote(lldb::TargetSP target_sp,
       m_waiting_for_attach(false), m_destroy_tried_resuming(false),
       m_command_sp(), m_breakpoint_pc_offset(0),
       m_initial_tid(LLDB_INVALID_THREAD_ID), m_replay_mode(false),
-      m_allow_flash_writes(false), m_erased_flash_ranges(),
-      m_vfork_in_progress(false) {
+      m_allow_flash_writes(false), m_erased_flash_ranges() {
   m_async_broadcaster.SetEventName(eBroadcastBitAsyncThreadShouldExit,
                                    "async thread should exit");
   m_async_broadcaster.SetEventName(eBroadcastBitAsyncContinue,
@@ -5535,13 +5534,6 @@ void ProcessGDBRemote::DidFork(lldb::pid_t child_pid, lldb::tid_t child_tid) {
 void ProcessGDBRemote::DidVFork(lldb::pid_t child_pid, lldb::tid_t child_tid) {
   Log *log(ProcessGDBRemoteLog::GetLogIfAllCategoriesSet(GDBR_LOG_PROCESS));
 
-  assert(!m_vfork_in_progress);
-  m_vfork_in_progress = true;
-
-  // Disable all software breakpoints for the duration of vfork.
-  if (m_gdb_comm.SupportsGDBStoppointPacket(eBreakpointSoftware))
-    DidForkSwitchSoftwareBreakpoints(false);
-
   LLDB_LOG(log, "Detaching forked child {0}", child_pid);
   Status error = m_gdb_comm.Detach(false, child_pid);
   if (error.Fail()) {
@@ -5551,12 +5543,3 @@ void ProcessGDBRemote::DidVFork(lldb::pid_t child_pid, lldb::tid_t child_tid) {
       return;
   }
 }
-
-void ProcessGDBRemote::DidVForkDone() {
-  assert(m_vfork_in_progress);
-  m_vfork_in_progress = false;
-
-  // Reenable all software breakpoints that were enabled before vfork.
-  if (m_gdb_comm.SupportsGDBStoppointPacket(eBreakpointSoftware))
-    DidForkSwitchSoftwareBreakpoints(true);
-}
index ae5fce1..70b3ca1 100644 (file)
@@ -232,7 +232,6 @@ public:
 
   void DidFork(lldb::pid_t child_pid, lldb::tid_t child_tid) override;
   void DidVFork(lldb::pid_t child_pid, lldb::tid_t child_tid) override;
-  void DidVForkDone() override;
 
 protected:
   friend class ThreadGDBRemote;
@@ -297,8 +296,6 @@ protected:
   using FlashRange = FlashRangeVector::Entry;
   FlashRangeVector m_erased_flash_ranges;
 
-  bool m_vfork_in_progress;
-
   // Accessors
   bool IsRunning(lldb::StateType state) {
     return state == lldb::eStateRunning || IsStepping(state);
diff --git a/lldb/test/Shell/Subprocess/vfork-follow-parent-softbp.test b/lldb/test/Shell/Subprocess/vfork-follow-parent-softbp.test
deleted file mode 100644 (file)
index f158d1a..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# REQUIRES: native
-# UNSUPPORTED: system-darwin
-# UNSUPPORTED: system-windows
-# RUN: %clangxx_host %p/Inputs/fork.cpp -DTEST_FORK=vfork -o %t
-# RUN: %lldb -b -s %s %t | FileCheck %s
-b parent_func
-b child_func
-process launch
-# CHECK-NOT: function run in parent
-# CHECK: stop reason = breakpoint
-continue
-# CHECK: function run in parent
-# CHECK: child exited: 0