[Lldb-commits] [lldb] r201706 - FreeBSD hardware watchpoint implementation

Ed Maste emaste at freebsd.org
Wed Feb 19 10:34:07 PST 2014


Author: emaste
Date: Wed Feb 19 12:34:06 2014
New Revision: 201706

URL: http://llvm.org/viewvc/llvm-project?rev=201706&view=rev
Log:
FreeBSD hardware watchpoint implementation

Implement x86_64 debug register read/write in support of hardware
watchpoints. Hoist LinuxThread::TraceNotify code back into
POSIXThread::TraceNotify()

Patch by John Wolfe.

We still need to rework this later to avoid the #ifdef FreeBSD.

llvm-reviews.chandlerc.com/D2572
llvm.org/pr16706

Modified:
    lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp
    lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.h
    lldb/trunk/source/Plugins/Process/Linux/LinuxThread.cpp
    lldb/trunk/source/Plugins/Process/Linux/LinuxThread.h
    lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.cpp
    lldb/trunk/source/Plugins/Process/POSIX/RegisterContextFreeBSD_i386.cpp
    lldb/trunk/source/Plugins/Process/POSIX/RegisterContextFreeBSD_x86_64.cpp
    lldb/trunk/source/Plugins/Process/POSIX/RegisterContextPOSIX.h
    lldb/trunk/source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp
    lldb/trunk/test/functionalities/thread/concurrent_events/TestConcurrentEvents.py
    lldb/trunk/test/functionalities/watchpoint/hello_watchpoint/TestMyFirstWatchpoint.py
    lldb/trunk/test/functionalities/watchpoint/multiple_threads/TestWatchpointMultipleThreads.py
    lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/TestWatchpointCommands.py
    lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandLLDB.py
    lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandPython.py
    lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/condition/TestWatchpointConditionCmd.py
    lldb/trunk/test/functionalities/watchpoint/watchpoint_events/TestWatchpointEvents.py
    lldb/trunk/test/python_api/watchpoint/TestSetWatchpoint.py
    lldb/trunk/test/python_api/watchpoint/TestWatchpointIgnoreCount.py
    lldb/trunk/test/python_api/watchpoint/TestWatchpointIter.py
    lldb/trunk/test/python_api/watchpoint/condition/TestWatchpointConditionAPI.py
    lldb/trunk/test/python_api/watchpoint/watchlocation/TestSetWatchlocation.py
    lldb/trunk/test/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py

Modified: lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp (original)
+++ lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp Wed Feb 19 12:34:06 2014
@@ -101,8 +101,8 @@ PtraceWrapper(int req, lldb::pid_t pid,
         log->Printf("ptrace() failed; errno=%d (%s)", errno, str);
     }
 
-#ifdef __amd64__
     if (log) {
+#ifdef __amd64__
         if (req == PT_GETREGS) {
             struct reg *r = (struct reg *) addr;
 
@@ -111,8 +111,15 @@ PtraceWrapper(int req, lldb::pid_t pid,
             log->Printf("PT_GETREGS: bp=0x%lx", r->r_rbp);
             log->Printf("PT_GETREGS: ax=0x%lx", r->r_rax);
         }
-    }
 #endif
+        if (req == PT_GETDBREGS || req == PT_SETDBREGS) {
+            struct dbreg *r = (struct dbreg *) addr;
+            char setget = (req == PT_GETDBREGS) ? 'G' : 'S';
+
+            for (int i = 0; i <= 7; i++)
+                log->Printf("PT_%cETDBREGS: dr[%d]=0x%lx", setget, i, r->dr[i]);
+        }
+    }
      
     return result;
 }
@@ -348,6 +355,82 @@ WriteRegOperation::Execute(ProcessMonito
 }
 
 //------------------------------------------------------------------------------
+/// @class ReadDebugRegOperation
+/// @brief Implements ProcessMonitor::ReadDebugRegisterValue.
+class ReadDebugRegOperation : public Operation
+{
+public:
+    ReadDebugRegOperation(lldb::tid_t tid, unsigned offset, unsigned size,
+                          RegisterValue &value, bool &result)
+        : m_tid(tid), m_offset(offset), m_size(size),
+          m_value(value), m_result(result)
+        { }
+
+    void Execute(ProcessMonitor *monitor);
+
+private:
+    lldb::tid_t m_tid;
+    unsigned m_offset;
+    unsigned m_size;
+    RegisterValue &m_value;
+    bool &m_result;
+};
+
+void
+ReadDebugRegOperation::Execute(ProcessMonitor *monitor)
+{
+    struct dbreg regs;
+    int rc;
+
+    if ((rc = PTRACE(PT_GETDBREGS, m_tid, (caddr_t)&regs, 0)) < 0) {
+        m_result = false;
+    } else {
+        if (m_size == sizeof(uintptr_t))
+            m_value = *(uintptr_t *)(((caddr_t)&regs) + m_offset);
+        else
+            memcpy(&m_value, (((caddr_t)&regs) + m_offset), m_size);
+        m_result = true;
+    }
+}
+
+//------------------------------------------------------------------------------
+/// @class WriteDebugRegOperation
+/// @brief Implements ProcessMonitor::WriteDebugRegisterValue.
+class WriteDebugRegOperation : public Operation
+{
+public:
+    WriteDebugRegOperation(lldb::tid_t tid, unsigned offset,
+                           const RegisterValue &value, bool &result)
+        : m_tid(tid), m_offset(offset),
+          m_value(value), m_result(result)
+        { }
+
+    void Execute(ProcessMonitor *monitor);
+
+private:
+    lldb::tid_t m_tid;
+    unsigned m_offset;
+    const RegisterValue &m_value;
+    bool &m_result;
+};
+
+void
+WriteDebugRegOperation::Execute(ProcessMonitor *monitor)
+{
+    struct dbreg regs;
+
+    if (PTRACE(PT_GETDBREGS, m_tid, (caddr_t)&regs, 0) < 0) {
+        m_result = false;
+        return;
+    }
+    *(uintptr_t *)(((caddr_t)&regs) + m_offset) = (uintptr_t)m_value.GetAsUInt64();
+    if (PTRACE(PT_SETDBREGS, m_tid, (caddr_t)&regs, 0) < 0)
+        m_result = false;
+    else
+        m_result = true;
+}
+
+//------------------------------------------------------------------------------
 /// @class ReadGPROperation
 /// @brief Implements ProcessMonitor::ReadGPR.
 class ReadGPROperation : public Operation
@@ -1175,7 +1258,7 @@ ProcessMonitor::MonitorSIGTRAP(ProcessMo
     case 0:
     case TRAP_TRACE:
         if (log)
-            log->Printf ("ProcessMonitor::%s() received trace event, tid = %" PRIu64, __FUNCTION__, tid);
+            log->Printf ("ProcessMonitor::%s() received trace event, tid = %" PRIu64 "  : si_code = %d", __FUNCTION__, tid, info->si_code);
         message = ProcessMessage::Trace(tid);
         break;
 
@@ -1462,6 +1545,28 @@ ProcessMonitor::WriteRegisterValue(lldb:
     DoOperation(&op);
     return result;
 }
+
+bool
+ProcessMonitor::ReadDebugRegisterValue(lldb::tid_t tid, unsigned offset,
+                                       const char *reg_name, unsigned size,
+                                       lldb_private::RegisterValue &value)
+{
+    bool result;
+    ReadDebugRegOperation op(tid, offset, size, value, result);
+    DoOperation(&op);
+    return result;
+}
+
+bool
+ProcessMonitor::WriteDebugRegisterValue(lldb::tid_t tid, unsigned offset,
+                                        const char *reg_name,
+                                        const lldb_private::RegisterValue &value)
+{
+    bool result;
+    WriteDebugRegOperation op(tid, offset, value, result);
+    DoOperation(&op);
+    return result;
+}
 
 bool
 ProcessMonitor::ReadGPR(lldb::tid_t tid, void *buf, size_t buf_size)

Modified: lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.h?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.h (original)
+++ lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.h Wed Feb 19 12:34:06 2014
@@ -116,6 +116,23 @@ public:
     WriteRegisterValue(lldb::tid_t tid, unsigned offset, const char *reg_name,
                        const lldb_private::RegisterValue &value);
 
+    /// Reads the contents from the debug register identified by the given
+    /// (architecture dependent) offset.
+    ///
+    /// This method is provided for use by RegisterContextFreeBSD derivatives.
+    bool
+    ReadDebugRegisterValue(lldb::tid_t tid, unsigned offset,
+                           const char *reg_name, unsigned size,
+                           lldb_private::RegisterValue &value);
+
+    /// Writes the given value to the debug register identified by the given
+    /// (architecture dependent) offset.
+    ///
+    /// This method is provided for use by RegisterContextFreeBSD derivatives.
+    bool
+    WriteDebugRegisterValue(lldb::tid_t tid, unsigned offset,
+                            const char *reg_name,
+                            const lldb_private::RegisterValue &value);
     /// Reads all general purpose registers into the specified buffer.
     bool
     ReadGPR(lldb::tid_t tid, void *buf, size_t buf_size);

Modified: lldb/trunk/source/Plugins/Process/Linux/LinuxThread.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/LinuxThread.cpp?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/Linux/LinuxThread.cpp (original)
+++ lldb/trunk/source/Plugins/Process/Linux/LinuxThread.cpp Wed Feb 19 12:34:06 2014
@@ -40,24 +40,3 @@ LinuxThread::RefreshStateAfterStop()
 
     POSIXThread::RefreshStateAfterStop();
 }
-
-void
-LinuxThread::TraceNotify(const ProcessMessage &message)
-{
-    POSIXBreakpointProtocol* reg_ctx = GetPOSIXBreakpointProtocol();
-    if (reg_ctx)
-    {
-        uint32_t num_hw_wps = reg_ctx->NumSupportedHardwareWatchpoints();
-        uint32_t wp_idx;
-        for (wp_idx = 0; wp_idx < num_hw_wps; wp_idx++)
-        {
-            if (reg_ctx->IsWatchpointHit(wp_idx))
-            {
-                WatchNotify(message);
-                return;
-            }
-        }
-    }
-    
-    POSIXThread::TraceNotify (message);
-}

Modified: lldb/trunk/source/Plugins/Process/Linux/LinuxThread.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/LinuxThread.h?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/Linux/LinuxThread.h (original)
+++ lldb/trunk/source/Plugins/Process/Linux/LinuxThread.h Wed Feb 19 12:34:06 2014
@@ -34,10 +34,6 @@ public:
     // POSIXThread override
     virtual void
     RefreshStateAfterStop();
-
-protected:
-    virtual void
-    TraceNotify(const ProcessMessage &message);
 };
 
 #endif // #ifndef liblldb_LinuxThread_H_

Modified: lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.cpp?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.cpp (original)
+++ lldb/trunk/source/Plugins/Process/POSIX/POSIXThread.cpp Wed Feb 19 12:34:06 2014
@@ -65,7 +65,16 @@ POSIXThread::POSIXThread(Process &proces
         lldb::WatchpointSP wp = wp_list.GetByIndex(wp_idx);
         if (wp.get() && wp->IsEnabled())
         {
-            assert(EnableHardwareWatchpoint(wp.get()));
+            // This watchpoint as been enabled; obviously this "new" thread
+            // has been created since that watchpoint was enabled.  Since
+            // the POSIXBreakpointProtocol has yet to be initialized, its
+            // m_watchpoints_initialized member will be FALSE.  Attempting to
+            // read the debug status register to determine if a watchpoint
+            // has been hit would result in the zeroing of that register.
+            // Since the active debug registers would have been cloned when
+            // this thread was created, simply force the m_watchpoints_initized
+            // member to TRUE and avoid resetting dr6 and dr7.
+            GetPOSIXBreakpointProtocol()->ForceWatchpointsInitialized();
         }
     }
 }
@@ -509,6 +518,21 @@ POSIXThread::WatchNotify(const ProcessMe
 void
 POSIXThread::TraceNotify(const ProcessMessage &message)
 {
+    POSIXBreakpointProtocol* reg_ctx = GetPOSIXBreakpointProtocol();
+    if (reg_ctx)
+    {
+        uint32_t num_hw_wps = reg_ctx->NumSupportedHardwareWatchpoints();
+        uint32_t wp_idx;
+        for (wp_idx = 0; wp_idx < num_hw_wps; wp_idx++)
+        {
+            if (reg_ctx->IsWatchpointHit(wp_idx))
+            {
+                WatchNotify(message);
+                return;
+            }
+        }
+    }
+
     SetStopInfo (StopInfo::CreateStopReasonToTrace(*this));
 }
 

Modified: lldb/trunk/source/Plugins/Process/POSIX/RegisterContextFreeBSD_i386.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/RegisterContextFreeBSD_i386.cpp?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/POSIX/RegisterContextFreeBSD_i386.cpp (original)
+++ lldb/trunk/source/Plugins/Process/POSIX/RegisterContextFreeBSD_i386.cpp Wed Feb 19 12:34:06 2014
@@ -37,8 +37,18 @@ struct GPR
     uint32_t gs;
 };
 
-#define DR_SIZE 0
-#define DR_OFFSET(reg_index) 0
+struct dbreg {
+    uint32_t  dr[8];     /* debug registers */
+                         /* Index 0-3: debug address registers */
+                         /* Index 4-5: reserved */
+                         /* Index 6: debug status */
+                         /* Index 7: debug control */
+};
+
+
+#define DR_SIZE sizeof(uint32_t)
+#define DR_OFFSET(reg_index) \
+    (LLVM_EXTENSION offsetof(dbreg, dr[reg_index]))
 
 //---------------------------------------------------------------------------
 // Include RegisterInfos_i386 to declare our g_register_infos_i386 structure.

Modified: lldb/trunk/source/Plugins/Process/POSIX/RegisterContextFreeBSD_x86_64.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/RegisterContextFreeBSD_x86_64.cpp?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/POSIX/RegisterContextFreeBSD_x86_64.cpp (original)
+++ lldb/trunk/source/Plugins/Process/POSIX/RegisterContextFreeBSD_x86_64.cpp Wed Feb 19 12:34:06 2014
@@ -46,8 +46,19 @@ typedef struct _GPR
     uint64_t ss;
 } GPR;
 
-#define DR_SIZE 0
-#define DR_OFFSET(reg_index) 0
+struct dbreg {
+       uint64_t  dr[16];  /* debug registers */
+                          /* Index 0-3: debug address registers */
+                          /* Index 4-5: reserved */
+                          /* Index 6: debug status */
+                          /* Index 7: debug control */
+                          /* Index 8-15: reserved */
+};
+
+#define DR_SIZE sizeof(uint64_t)
+#define DR_OFFSET(reg_index) \
+    (LLVM_EXTENSION offsetof(dbreg, dr[reg_index]))
+
 
 //---------------------------------------------------------------------------
 // Include RegisterInfos_x86_64 to declare our g_register_infos_x86_64 structure.

Modified: lldb/trunk/source/Plugins/Process/POSIX/RegisterContextPOSIX.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/RegisterContextPOSIX.h?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/POSIX/RegisterContextPOSIX.h (original)
+++ lldb/trunk/source/Plugins/Process/POSIX/RegisterContextPOSIX.h Wed Feb 19 12:34:06 2014
@@ -66,6 +66,10 @@ public:
     virtual uint32_t
     NumSupportedHardwareWatchpoints () = 0;
 
+    // Force m_watchpoints_initialized to TRUE
+    void
+    ForceWatchpointsInitialized () {m_watchpoints_initialized = true;}
+
 protected:
     bool m_watchpoints_initialized;
 };

Modified: lldb/trunk/source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp (original)
+++ lldb/trunk/source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp Wed Feb 19 12:34:06 2014
@@ -109,6 +109,15 @@ RegisterContextPOSIXProcessMonitor_x86_6
                                                         RegisterValue &value)
 {
     ProcessMonitor &monitor = GetMonitor();
+
+#if defined(__FreeBSD__)
+    if (reg >= m_reg_info.first_dr)
+        return monitor.ReadDebugRegisterValue(m_thread.GetID(),
+                                              GetRegisterOffset(reg),
+                                              GetRegisterName(reg),
+                                              GetRegisterSize(reg),
+                                              value);
+#endif
     return monitor.ReadRegisterValue(m_thread.GetID(),
                                      GetRegisterOffset(reg),
                                      GetRegisterName(reg),
@@ -164,6 +173,13 @@ RegisterContextPOSIXProcessMonitor_x86_6
     }
 
     ProcessMonitor &monitor = GetMonitor();
+#if defined(__FreeBSD__)
+    if (reg >= m_reg_info.first_dr)
+        return monitor.WriteDebugRegisterValue(m_thread.GetID(),
+                                               GetRegisterOffset(reg_to_write),
+                                               GetRegisterName(reg_to_write),
+                                               value_to_write);
+#endif
     return monitor.WriteRegisterValue(m_thread.GetID(),
                                       GetRegisterOffset(reg_to_write),
                                       GetRegisterName(reg_to_write),

Modified: lldb/trunk/test/functionalities/thread/concurrent_events/TestConcurrentEvents.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/thread/concurrent_events/TestConcurrentEvents.py?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/thread/concurrent_events/TestConcurrentEvents.py (original)
+++ lldb/trunk/test/functionalities/thread/concurrent_events/TestConcurrentEvents.py Wed Feb 19 12:34:06 2014
@@ -86,7 +86,6 @@ class ConcurrentEventsTestCase(TestBase)
     ## Tests for concurrent watchpoint and breakpoint
     #
     @dwarf_test
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
     def test_watch_break_dwarf(self):
@@ -94,7 +93,6 @@ class ConcurrentEventsTestCase(TestBase)
         self.buildDwarf(dictionary=self.getBuildFlags())
         self.do_thread_actions(num_breakpoint_threads=1, num_watchpoint_threads=1)
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
@@ -103,7 +101,6 @@ class ConcurrentEventsTestCase(TestBase)
         self.buildDwarf(dictionary=self.getBuildFlags())
         self.do_thread_actions(num_breakpoint_threads=1, num_delay_watchpoint_threads=1)
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
@@ -115,7 +112,6 @@ class ConcurrentEventsTestCase(TestBase)
     #
     ## Tests for concurrent signal and watchpoint
     #
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
@@ -124,7 +120,6 @@ class ConcurrentEventsTestCase(TestBase)
         self.buildDwarf(dictionary=self.getBuildFlags())
         self.do_thread_actions(num_signal_threads=1, num_watchpoint_threads=1)
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
@@ -133,7 +128,6 @@ class ConcurrentEventsTestCase(TestBase)
         self.buildDwarf(dictionary=self.getBuildFlags())
         self.do_thread_actions(num_delay_signal_threads=1, num_watchpoint_threads=1)
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
@@ -179,7 +173,6 @@ class ConcurrentEventsTestCase(TestBase)
         self.buildDwarf(dictionary=self.getBuildFlags())
         self.do_thread_actions(num_breakpoint_threads=2, num_delay_signal_threads=1)
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
@@ -188,7 +181,6 @@ class ConcurrentEventsTestCase(TestBase)
         self.buildDwarf(dictionary=self.getBuildFlags())
         self.do_thread_actions(num_breakpoint_threads=2, num_watchpoint_threads=1)
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
@@ -202,7 +194,6 @@ class ConcurrentEventsTestCase(TestBase)
     #
     ## Tests for multiple watchpoint threads
     #
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
@@ -211,7 +202,6 @@ class ConcurrentEventsTestCase(TestBase)
         self.buildDwarf(dictionary=self.getBuildFlags())
         self.do_thread_actions(num_watchpoint_threads=2)
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
@@ -221,7 +211,6 @@ class ConcurrentEventsTestCase(TestBase)
         self.do_thread_actions(num_watchpoint_threads=1,
                                num_delay_watchpoint_threads=1)
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
@@ -230,7 +219,6 @@ class ConcurrentEventsTestCase(TestBase)
         self.buildDwarf(dictionary=self.getBuildFlags())
         self.do_thread_actions(num_watchpoint_threads=2, num_breakpoint_threads=1)
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
@@ -239,7 +227,6 @@ class ConcurrentEventsTestCase(TestBase)
         self.buildDwarf(dictionary=self.getBuildFlags())
         self.do_thread_actions(num_watchpoint_threads=2, num_delay_breakpoint_threads=1)
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
@@ -250,7 +237,6 @@ class ConcurrentEventsTestCase(TestBase)
                                num_delay_watchpoint_threads=1,
                                num_breakpoint_threads=1)
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
@@ -282,7 +268,6 @@ class ConcurrentEventsTestCase(TestBase)
                                num_watchpoint_threads=5,
                                num_breakpoint_threads=5)
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
@@ -302,7 +287,6 @@ class ConcurrentEventsTestCase(TestBase)
         self.buildDwarf(dictionary=self.getBuildFlags())
         self.do_thread_actions(num_crash_threads=1, num_breakpoint_threads=1)
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
@@ -317,7 +301,6 @@ class ConcurrentEventsTestCase(TestBase)
         self.buildDwarf(dictionary=self.getBuildFlags())
         self.do_thread_actions(num_crash_threads=1, num_signal_threads=1)
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs
@@ -329,7 +312,6 @@ class ConcurrentEventsTestCase(TestBase)
                                num_signal_threads=1,
                                num_watchpoint_threads=1)
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     @skipIfRemoteDueToDeadlock
     @skipIfLinux # llvm.org/pr16714 - LLDB sometimes crashes when setting watchpoints in multithreaded programs

Modified: lldb/trunk/test/functionalities/watchpoint/hello_watchpoint/TestMyFirstWatchpoint.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/watchpoint/hello_watchpoint/TestMyFirstWatchpoint.py?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/watchpoint/hello_watchpoint/TestMyFirstWatchpoint.py (original)
+++ lldb/trunk/test/functionalities/watchpoint/hello_watchpoint/TestMyFirstWatchpoint.py Wed Feb 19 12:34:06 2014
@@ -22,7 +22,6 @@ class HelloWatchpointTestCase(TestBase):
         self.setTearDownCleanup(dictionary=self.d)
         self.hello_watchpoint()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     def test_hello_watchpoint_with_dwarf_using_watchpoint_set(self):
         """Test a simple sequence of watchpoint creation and watchpoint hit."""

Modified: lldb/trunk/test/functionalities/watchpoint/multiple_threads/TestWatchpointMultipleThreads.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/watchpoint/multiple_threads/TestWatchpointMultipleThreads.py?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/watchpoint/multiple_threads/TestWatchpointMultipleThreads.py (original)
+++ lldb/trunk/test/functionalities/watchpoint/multiple_threads/TestWatchpointMultipleThreads.py Wed Feb 19 12:34:06 2014
@@ -21,7 +21,6 @@ class WatchpointForMultipleThreadsTestCa
         self.setTearDownCleanup(dictionary=self.d)
         self.hello_multiple_threads()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @skipIfGcc # causes intermittent gcc debian buildbot failures, skip until we can investigate
     @dwarf_test
     def test_watchpoint_multiple_threads_with_dwarf(self):
@@ -38,7 +37,6 @@ class WatchpointForMultipleThreadsTestCa
         self.setTearDownCleanup(dictionary=self.d)
         self.hello_multiple_threads_wp_set_and_then_delete()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @skipIfGcc # causes intermittent gcc debian buildbot failures, skip until we can investigate 
     @dwarf_test
     def test_watchpoint_multiple_threads_wp_set_and_then_delete_with_dwarf(self):

Modified: lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/TestWatchpointCommands.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/TestWatchpointCommands.py?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/TestWatchpointCommands.py (original)
+++ lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/TestWatchpointCommands.py Wed Feb 19 12:34:06 2014
@@ -34,7 +34,6 @@ class WatchpointCommandsTestCase(TestBas
         self.setTearDownCleanup(dictionary=self.d)
         self.normal_read_write_watchpoint()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     def test_rw_watchpoint_with_dwarf(self):
         """Test read_write watchpoint and expect to stop two times."""
@@ -50,7 +49,6 @@ class WatchpointCommandsTestCase(TestBas
         self.setTearDownCleanup(dictionary=self.d)
         self.delete_read_write_watchpoint()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     def test_rw_watchpoint_delete_with_dwarf(self):
         """Test delete watchpoint and expect not to stop for watchpoint."""
@@ -66,7 +64,6 @@ class WatchpointCommandsTestCase(TestBas
         self.setTearDownCleanup(dictionary=self.d)
         self.ignore_read_write_watchpoint()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     def test_rw_watchpoint_set_ignore_count_with_dwarf(self):
         """Test watchpoint ignore count and expect to not to stop at all."""
@@ -82,7 +79,6 @@ class WatchpointCommandsTestCase(TestBas
         self.setTearDownCleanup(dictionary=self.d)
         self.read_write_watchpoint_disable_after_first_stop()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     def test_rw_disable_after_first_stop__with_dwarf(self):
         """Test read_write watchpoint but disable it after the first stop."""
@@ -98,7 +94,6 @@ class WatchpointCommandsTestCase(TestBas
         self.setTearDownCleanup(dictionary=self.d)
         self.read_write_watchpoint_disable_then_enable()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     def test_rw_disable_then_enable_with_dwarf(self):
         """Test read_write watchpoint, disable initially, then enable it."""

Modified: lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandLLDB.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandLLDB.py?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandLLDB.py (original)
+++ lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandLLDB.py Wed Feb 19 12:34:06 2014
@@ -33,7 +33,6 @@ class WatchpointLLDBCommandTestCase(Test
         self.setTearDownCleanup(dictionary=self.d)
         self.watchpoint_command()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     def test_watchpoint_command_with_dwarf(self):
         """Test 'watchpoint command'."""
@@ -49,7 +48,6 @@ class WatchpointLLDBCommandTestCase(Test
         self.setTearDownCleanup(dictionary=self.d)
         self.watchpoint_command_can_disable_a_watchpoint()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     def test_watchpoint_command_can_disable_a_watchpoint_with_dwarf(self):
         """Test that 'watchpoint command' action can disable a watchpoint after it is triggered."""

Modified: lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandPython.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandPython.py?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandPython.py (original)
+++ lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandPython.py Wed Feb 19 12:34:06 2014
@@ -33,7 +33,6 @@ class WatchpointPythonCommandTestCase(Te
         self.setTearDownCleanup(dictionary=self.d)
         self.watchpoint_command()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     def test_watchpoint_command_with_dwarf(self):
         """Test 'watchpoint command'."""

Modified: lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/condition/TestWatchpointConditionCmd.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/condition/TestWatchpointConditionCmd.py?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/condition/TestWatchpointConditionCmd.py (original)
+++ lldb/trunk/test/functionalities/watchpoint/watchpoint_commands/condition/TestWatchpointConditionCmd.py Wed Feb 19 12:34:06 2014
@@ -33,7 +33,6 @@ class WatchpointConditionCmdTestCase(Tes
         self.setTearDownCleanup(dictionary=self.d)
         self.watchpoint_condition()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     def test_watchpoint_cond_with_dwarf(self):
         """Test watchpoint condition."""

Modified: lldb/trunk/test/functionalities/watchpoint/watchpoint_events/TestWatchpointEvents.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/watchpoint/watchpoint_events/TestWatchpointEvents.py?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/watchpoint/watchpoint_events/TestWatchpointEvents.py (original)
+++ lldb/trunk/test/functionalities/watchpoint/watchpoint_events/TestWatchpointEvents.py Wed Feb 19 12:34:06 2014
@@ -18,7 +18,6 @@ class TestWatchpointEvents (TestBase):
         self.buildDsym()
         self.step_over_stepping()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @python_api_test
     @dwarf_test
     def test_with_dwarf_and_python_api(self):

Modified: lldb/trunk/test/python_api/watchpoint/TestSetWatchpoint.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/watchpoint/TestSetWatchpoint.py?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/test/python_api/watchpoint/TestSetWatchpoint.py (original)
+++ lldb/trunk/test/python_api/watchpoint/TestSetWatchpoint.py Wed Feb 19 12:34:06 2014
@@ -28,7 +28,6 @@ class SetWatchpointAPITestCase(TestBase)
         self.buildDsym()
         self.do_set_watchpoint()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @python_api_test
     @dwarf_test
     def test_watch_val_with_dwarf(self):

Modified: lldb/trunk/test/python_api/watchpoint/TestWatchpointIgnoreCount.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/watchpoint/TestWatchpointIgnoreCount.py?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/test/python_api/watchpoint/TestWatchpointIgnoreCount.py (original)
+++ lldb/trunk/test/python_api/watchpoint/TestWatchpointIgnoreCount.py Wed Feb 19 12:34:06 2014
@@ -28,7 +28,6 @@ class WatchpointIgnoreCountTestCase(Test
         self.buildDsym()
         self.do_watchpoint_ignore_count()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @python_api_test
     @dwarf_test
     def test_set_watch_ignore_count_with_dwarf(self):

Modified: lldb/trunk/test/python_api/watchpoint/TestWatchpointIter.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/watchpoint/TestWatchpointIter.py?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/test/python_api/watchpoint/TestWatchpointIter.py (original)
+++ lldb/trunk/test/python_api/watchpoint/TestWatchpointIter.py Wed Feb 19 12:34:06 2014
@@ -28,7 +28,6 @@ class WatchpointIteratorTestCase(TestBas
         self.buildDsym()
         self.do_watchpoint_iter()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @python_api_test
     @dwarf_test
     def test_watch_iter_with_dwarf(self):

Modified: lldb/trunk/test/python_api/watchpoint/condition/TestWatchpointConditionAPI.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/watchpoint/condition/TestWatchpointConditionAPI.py?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/test/python_api/watchpoint/condition/TestWatchpointConditionAPI.py (original)
+++ lldb/trunk/test/python_api/watchpoint/condition/TestWatchpointConditionAPI.py Wed Feb 19 12:34:06 2014
@@ -33,7 +33,6 @@ class WatchpointConditionAPITestCase(Tes
         self.setTearDownCleanup(dictionary=self.d)
         self.watchpoint_condition_api()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @dwarf_test
     def test_watchpoint_cond_api_with_dwarf(self):
         """Test watchpoint condition API."""

Modified: lldb/trunk/test/python_api/watchpoint/watchlocation/TestSetWatchlocation.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/watchpoint/watchlocation/TestSetWatchlocation.py?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/test/python_api/watchpoint/watchlocation/TestSetWatchlocation.py (original)
+++ lldb/trunk/test/python_api/watchpoint/watchlocation/TestSetWatchlocation.py Wed Feb 19 12:34:06 2014
@@ -30,7 +30,6 @@ class SetWatchlocationAPITestCase(TestBa
         self.buildDsym()
         self.do_set_watchlocation()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @skipIfLinux # Sometimes passes, sometimes not.
     @python_api_test
     @dwarf_test

Modified: lldb/trunk/test/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py?rev=201706&r1=201705&r2=201706&view=diff
==============================================================================
--- lldb/trunk/test/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py (original)
+++ lldb/trunk/test/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py Wed Feb 19 12:34:06 2014
@@ -30,7 +30,6 @@ class TargetWatchAddressAPITestCase(Test
         self.buildDsym()
         self.do_set_watchaddress()
 
-    @expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints fail on FreeBSD
     @python_api_test
     @dwarf_test
     def test_watch_address_with_dwarf(self):





More information about the lldb-commits mailing list