[Lldb-commits] [lldb] r295345 - NPL: Fix single step workaround

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Thu Feb 16 10:12:05 PST 2017


Author: labath
Date: Thu Feb 16 12:12:04 2017
New Revision: 295345

URL: http://llvm.org/viewvc/llvm-project?rev=295345&view=rev
Log:
NPL: Fix single step workaround

While refactoring the code in r293046 I made a very basic error -
relying on destructor side-effects of a copyable object. Fix that and
make the object non-copyable.

This fixes the tests on the platforms that need this workaround, but
unfortunately we don't have a way to make a more platform-agnostic test
right now.

Modified:
    lldb/trunk/source/Plugins/Process/Linux/NativeThreadLinux.h
    lldb/trunk/source/Plugins/Process/Linux/SingleStepCheck.cpp
    lldb/trunk/source/Plugins/Process/Linux/SingleStepCheck.h

Modified: lldb/trunk/source/Plugins/Process/Linux/NativeThreadLinux.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/NativeThreadLinux.h?rev=295345&r1=295344&r2=295345&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/Linux/NativeThreadLinux.h (original)
+++ lldb/trunk/source/Plugins/Process/Linux/NativeThreadLinux.h Thu Feb 16 12:12:04 2017
@@ -102,7 +102,7 @@ private:
   std::string m_stop_description;
   using WatchpointIndexMap = std::map<lldb::addr_t, uint32_t>;
   WatchpointIndexMap m_watchpoint_index_map;
-  llvm::Optional<SingleStepWorkaround> m_step_workaround;
+  std::unique_ptr<SingleStepWorkaround> m_step_workaround;
 };
 
 typedef std::shared_ptr<NativeThreadLinux> NativeThreadLinuxSP;

Modified: lldb/trunk/source/Plugins/Process/Linux/SingleStepCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/SingleStepCheck.cpp?rev=295345&r1=295344&r2=295345&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/Linux/SingleStepCheck.cpp (original)
+++ lldb/trunk/source/Plugins/Process/Linux/SingleStepCheck.cpp Thu Feb 16 12:12:04 2017
@@ -139,13 +139,13 @@ bool WorkaroundNeeded() {
 
 } // end anonymous namespace
 
-llvm::Optional<SingleStepWorkaround> SingleStepWorkaround::Get(::pid_t tid) {
+std::unique_ptr<SingleStepWorkaround> SingleStepWorkaround::Get(::pid_t tid) {
   Log *log = ProcessPOSIXLog::GetLogIfAllCategoriesSet(POSIX_LOG_THREAD);
 
   static bool workaround_needed = WorkaroundNeeded();
   if (!workaround_needed) {
     LLDB_LOG(log, "workaround for thread {0} not needed", tid);
-    return llvm::None;
+    return nullptr;
   }
 
   cpu_set_t original_set;
@@ -153,7 +153,7 @@ llvm::Optional<SingleStepWorkaround> Sin
     // This should really not fail. But, just in case...
     LLDB_LOG(log, "Unable to get cpu affinity for thread {0}: {1}", tid,
              Error(errno, eErrorTypePOSIX));
-    return llvm::None;
+    return nullptr;
   }
 
   cpu_set_t set;
@@ -168,7 +168,7 @@ llvm::Optional<SingleStepWorkaround> Sin
   }
 
   LLDB_LOG(log, "workaround for thread {0} prepared", tid);
-  return SingleStepWorkaround(tid, original_set);
+  return llvm::make_unique<SingleStepWorkaround>(tid, original_set);
 }
 
 SingleStepWorkaround::~SingleStepWorkaround() {

Modified: lldb/trunk/source/Plugins/Process/Linux/SingleStepCheck.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/SingleStepCheck.h?rev=295345&r1=295344&r2=295345&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/Linux/SingleStepCheck.h (original)
+++ lldb/trunk/source/Plugins/Process/Linux/SingleStepCheck.h Thu Feb 16 12:12:04 2017
@@ -10,8 +10,8 @@
 #ifndef liblldb_SingleStepCheck_H_
 #define liblldb_SingleStepCheck_H_
 
-#include "sched.h"
-#include "llvm/ADT/Optional.h"
+#include <memory>
+#include <sched.h>
 #include <sys/types.h>
 
 namespace lldb_private {
@@ -32,18 +32,21 @@ class SingleStepWorkaround {
   ::pid_t m_tid;
   cpu_set_t m_original_set;
 
+  SingleStepWorkaround(const SingleStepWorkaround &) = delete;
+  void operator=(const SingleStepWorkaround &) = delete;
+
 public:
   SingleStepWorkaround(::pid_t tid, cpu_set_t original_set)
       : m_tid(tid), m_original_set(original_set) {}
   ~SingleStepWorkaround();
 
-  static llvm::Optional<SingleStepWorkaround> Get(::pid_t tid);
+  static std::unique_ptr<SingleStepWorkaround> Get(::pid_t tid);
 };
 #else
 class SingleStepWorkaround {
 public:
-  static llvm::Optional<SingleStepWorkaround> Get(::pid_t tid) {
-    return llvm::None;
+  static std::unique_ptr<SingleStepWorkaround> Get(::pid_t tid) {
+    return nullptr;
   }
 };
 #endif




More information about the lldb-commits mailing list