[Lldb-commits] [lldb] 9b655c2 - Revert "Fix a problem with "watchpoint triggers before" watchpoint handling."

Jim Ingham via lldb-commits lldb-commits at lists.llvm.org
Mon Mar 20 16:06:05 PDT 2023


Author: Jim Ingham
Date: 2023-03-20T16:05:57-07:00
New Revision: 9b655c2627e31ea62032e175b3a9f2cae8aea653

URL: https://github.com/llvm/llvm-project/commit/9b655c2627e31ea62032e175b3a9f2cae8aea653
DIFF: https://github.com/llvm/llvm-project/commit/9b655c2627e31ea62032e175b3a9f2cae8aea653.diff

LOG: Revert "Fix a problem with "watchpoint triggers before" watchpoint handling."

This reverts commit 8d024a79ea783ed3fbb5691aeaf186ad3f0a4ae9.

I accidentally included some "in progress" work that wasn't supposed to
go with this commit.

Added: 
    

Modified: 
    lldb/include/lldb/Target/Process.h
    lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp
    lldb/source/Target/StopInfo.cpp
    lldb/source/Target/Thread.cpp
    lldb/test/API/commands/watchpoints/step_over_watchpoint/TestStepOverWatchpoint.py
    lldb/test/API/commands/watchpoints/step_over_watchpoint/main.c

Removed: 
    


################################################################################
diff  --git a/lldb/include/lldb/Target/Process.h b/lldb/include/lldb/Target/Process.h
index 6ce38f63cd249..3ffacb52299b9 100644
--- a/lldb/include/lldb/Target/Process.h
+++ b/lldb/include/lldb/Target/Process.h
@@ -311,14 +311,6 @@ class ProcessModID {
       return m_last_natural_stop_event;
     return lldb::EventSP();
   }
-  
-  void SetSafeToCallFunctions(bool safe) {
-    m_safe = safe;
-  }
-  
-  bool GetSafeToCallFunctions() {
-    return m_safe;
-  }
 
 private:
   uint32_t m_stop_id = 0;
@@ -329,7 +321,6 @@ class ProcessModID {
   uint32_t m_running_user_expression = false;
   uint32_t m_running_utility_function = 0;
   lldb::EventSP m_last_natural_stop_event;
-  std::atomic<bool> m_safe = true;
 };
 
 inline bool operator==(const ProcessModID &lhs, const ProcessModID &rhs) {
@@ -468,7 +459,7 @@ class Process : public std::enable_shared_from_this<Process>,
     void SetRestarted(bool new_value) { m_restarted = new_value; }
 
     void SetInterrupted(bool new_value) { m_interrupted = new_value; }
-    
+
     void AddRestartedReason(const char *reason) {
       m_restarted_reasons.push_back(reason);
     }
@@ -1259,14 +1250,6 @@ class Process : public std::enable_shared_from_this<Process>,
                 DiagnosticManager &diagnostic_manager);
 
   static const char *ExecutionResultAsCString(lldb::ExpressionResults result);
-  
-  void SetSafeToCallFunctions(bool safe) {
-    GetModID().SetSafeToCallFunctions(safe);
-  }
-  
-  bool GetSafeToCallFunctions() {
-    return GetModID().GetSafeToCallFunctions();
-  }
 
   void GetStatus(Stream &ostrm);
 

diff  --git a/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp b/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp
index 458d44f6feb33..aae15b2ef4624 100644
--- a/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp
+++ b/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp
@@ -795,19 +795,6 @@ StopInfoSP StopInfoMachException::CreateStopReasonWithMachException(
   case 9:  // EXC_RPC_ALERT
   case 10: // EXC_CRASH
     break;
-  case 12: // EXC_GUARD
-    {
-      // Some EXC_GUARD exceptions are fatal, and the process will go away
-      // the next time you allow it to run.  When we get one of those 
-      // exceptions we have to make sure SafeToCallFunctions returns false to
-      // prevent us or other agents running the process.  This has to be set
-      // on the process because even the threads that didn't get the exception
-      // can't run.
-      ProcessSP process_sp(thread.GetProcess());
-      if (process_sp)
-        process_sp->SetSafeToCallFunctions(false);
-      
-    }
   }
 
   return StopInfoSP(new StopInfoMachException(thread, exc_type, exc_data_count,

diff  --git a/lldb/source/Target/StopInfo.cpp b/lldb/source/Target/StopInfo.cpp
index ebc355c90d0ab..9fdb29f9e4273 100644
--- a/lldb/source/Target/StopInfo.cpp
+++ b/lldb/source/Target/StopInfo.cpp
@@ -831,11 +831,6 @@ class StopInfoWatchpoint : public StopInfo {
           = std::static_pointer_cast<StopInfoWatchpoint>(shared_from_this());
       ThreadPlanSP step_over_wp_sp(new ThreadPlanStepOverWatchpoint(
           *(thread_sp.get()), me_as_siwp_sp, wp_sp));
-      // When this plan is done we want to stop, so set this as a Controlling
-      // plan.    
-      step_over_wp_sp->SetIsControllingPlan(true);
-      step_over_wp_sp->SetOkayToDiscard(false);
-
       Status error;
       error = thread_sp->QueueThreadPlan(step_over_wp_sp, false);
       // If we couldn't push the thread plan, just stop here:

diff  --git a/lldb/source/Target/Thread.cpp b/lldb/source/Target/Thread.cpp
index df8bff5102b83..d620f746339e7 100644
--- a/lldb/source/Target/Thread.cpp
+++ b/lldb/source/Target/Thread.cpp
@@ -1664,9 +1664,6 @@ addr_t Thread::GetThreadLocalData(const ModuleSP module,
 bool Thread::SafeToCallFunctions() {
   Process *process = GetProcess().get();
   if (process) {
-    if (!process->SafeToCallFunctions())
-      return false;
-
     DynamicLoader *loader = GetProcess()->GetDynamicLoader();
     if (loader && loader->IsFullyInitialized() == false)
       return false;

diff  --git a/lldb/test/API/commands/watchpoints/step_over_watchpoint/TestStepOverWatchpoint.py b/lldb/test/API/commands/watchpoints/step_over_watchpoint/TestStepOverWatchpoint.py
index 52fc899b13e61..7d54156aebb5b 100644
--- a/lldb/test/API/commands/watchpoints/step_over_watchpoint/TestStepOverWatchpoint.py
+++ b/lldb/test/API/commands/watchpoints/step_over_watchpoint/TestStepOverWatchpoint.py
@@ -11,11 +11,36 @@
 class TestStepOverWatchpoint(TestBase):
     NO_DEBUG_INFO_TESTCASE = True
 
-    def get_to_start(self, bkpt_text):
+    @expectedFailureAll(
+        oslist=["freebsd", "linux"],
+        archs=[
+            'aarch64',
+            'arm'],
+        bugnumber="llvm.org/pr26031")
+    # Read-write watchpoints not supported on SystemZ
+    @expectedFailureAll(archs=['s390x'])
+    @expectedFailureAll(
+        oslist=["ios", "watchos", "tvos", "bridgeos", "macosx"],
+        archs=['aarch64', 'arm'],
+        bugnumber="<rdar://problem/34027183>")
+    @add_test_categories(["basic_process"])
+    def test(self):
         """Test stepping over watchpoints."""
         self.build()
-        target, process, thread, bkpt = lldbutil.run_to_source_breakpoint(self, bkpt_text,
-                                                                       lldb.SBFileSpec("main.c"))
+        target = self.createTestTarget()
+
+        lldbutil.run_break_set_by_symbol(self, 'main')
+
+        process = target.LaunchSimple(None, None,
+                                      self.get_process_working_directory())
+        self.assertTrue(process.IsValid(), PROCESS_IS_VALID)
+        self.assertState(process.GetState(), lldb.eStateStopped,
+                         PROCESS_STOPPED)
+
+        thread = lldbutil.get_stopped_thread(process,
+                                             lldb.eStopReasonBreakpoint)
+        self.assertTrue(thread.IsValid(), "Failed to get thread.")
+
         frame = thread.GetFrameAtIndex(0)
         self.assertTrue(frame.IsValid(), "Failed to get frame.")
 
@@ -30,45 +55,14 @@ def get_to_start(self, bkpt_text):
         self.assertSuccess(error, "Error while setting watchpoint")
         self.assertTrue(read_watchpoint, "Failed to set read watchpoint.")
 
-        # Disable the breakpoint we hit so we don't muddy the waters with
-        # stepping off from the breakpoint:
-        bkpt.SetEnabled(False)
-        
-        return (target, process, thread, read_watchpoint)
-    
-    @expectedFailureAll(
-        oslist=["freebsd", "linux"],
-        archs=[
-            'aarch64',
-            'arm'],
-        bugnumber="llvm.org/pr26031")
-    # Read-write watchpoints not supported on SystemZ
-    @expectedFailureAll(archs=['s390x'])
-    @add_test_categories(["basic_process"])
-    def test_step_over(self):
-        target, process, thread, wp = self.get_to_start("Set a breakpoint here")
-    
         thread.StepOver()
         self.assertStopReason(thread.GetStopReason(), lldb.eStopReasonWatchpoint,
                         STOPPED_DUE_TO_WATCHPOINT)
         self.assertEquals(thread.GetStopDescription(20), 'watchpoint 1')
 
-    @expectedFailureAll(
-        oslist=["freebsd", "linux"],
-        archs=[
-            'aarch64',
-            'arm'],
-        bugnumber="llvm.org/pr26031")
-    # Read-write watchpoints not supported on SystemZ
-    @expectedFailureAll(archs=['s390x'])
-    @expectedFailureAll(
-        oslist=["ios", "watchos", "tvos", "bridgeos", "macosx"],
-        archs=['aarch64', 'arm'],
-        bugnumber="<rdar://problem/34027183>")
-    @add_test_categories(["basic_process"])
-    def test_step_instruction(self):
-        target, process, thread, wp = self.get_to_start("Set breakpoint after call")
-
+        process.Continue()
+        self.assertState(process.GetState(), lldb.eStateStopped,
+                         PROCESS_STOPPED)
         self.assertEquals(thread.GetStopDescription(20), 'step over')
 
         self.step_inst_for_watchpoint(1)

diff  --git a/lldb/test/API/commands/watchpoints/step_over_watchpoint/main.c b/lldb/test/API/commands/watchpoints/step_over_watchpoint/main.c
index e48d43cb7a974..2d87d9a2f73fe 100644
--- a/lldb/test/API/commands/watchpoints/step_over_watchpoint/main.c
+++ b/lldb/test/API/commands/watchpoints/step_over_watchpoint/main.c
@@ -11,8 +11,8 @@ void watch_write() {
 }
 
 int main() {
-    watch_read(); // Set a breakpoint here
-    g_temp = g_watch_me_read; // Set breakpoint after call
+    watch_read();
+    g_temp = g_watch_me_read;
     watch_write();
     g_watch_me_write = g_temp;
     return 0;


        


More information about the lldb-commits mailing list