[Lldb-commits] [lldb] r217300 - Implement ASan history threads in SB API

Kuba Brecka kuba.brecka at gmail.com
Fri Sep 5 18:33:13 PDT 2014


Author: kuba.brecka
Date: Fri Sep  5 20:33:13 2014
New Revision: 217300

URL: http://llvm.org/viewvc/llvm-project?rev=217300&view=rev
Log:
Implement ASan history threads in SB API

Reviewed at
http://reviews.llvm.org/D5219
and
http://lists.cs.uiuc.edu/pipermail/lldb-commits/Week-of-Mon-20140901/012809.html


Modified:
    lldb/trunk/include/lldb/API/SBProcess.h
    lldb/trunk/include/lldb/Target/Process.h
    lldb/trunk/scripts/Python/interface/SBProcess.i
    lldb/trunk/source/API/SBProcess.cpp
    lldb/trunk/source/Target/Process.cpp
    lldb/trunk/test/functionalities/asan/TestAsan.py

Modified: lldb/trunk/include/lldb/API/SBProcess.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBProcess.h?rev=217300&r1=217299&r2=217300&view=diff
==============================================================================
--- lldb/trunk/include/lldb/API/SBProcess.h (original)
+++ lldb/trunk/include/lldb/API/SBProcess.h Fri Sep  5 20:33:13 2014
@@ -316,6 +316,9 @@ public:
     //------------------------------------------------------------------
     const char *
     GetExtendedBacktraceTypeAtIndex (uint32_t idx);
+    
+    lldb::SBThreadCollection
+    GetHistoryThreads (addr_t addr);
 
 protected:
     friend class SBAddress;

Modified: lldb/trunk/include/lldb/Target/Process.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Process.h?rev=217300&r1=217299&r2=217300&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/Process.h (original)
+++ lldb/trunk/include/lldb/Target/Process.h Fri Sep  5 20:33:13 2014
@@ -2922,6 +2922,9 @@ public:
         Error return_error ("Sending an event is not supported for this process.");
         return return_error;
     }
+    
+    lldb::ThreadCollectionSP
+    GetHistoryThreads(lldb::addr_t addr);
 
 protected:
 

Modified: lldb/trunk/scripts/Python/interface/SBProcess.i
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/Python/interface/SBProcess.i?rev=217300&r1=217299&r2=217300&view=diff
==============================================================================
--- lldb/trunk/scripts/Python/interface/SBProcess.i (original)
+++ lldb/trunk/scripts/Python/interface/SBProcess.i Fri Sep  5 20:33:13 2014
@@ -389,6 +389,9 @@ public:
     const char *
     GetExtendedBacktraceTypeAtIndex (uint32_t idx);
 
+    lldb::SBThreadCollection
+    GetHistoryThreads (addr_t addr);
+
     %pythoncode %{
         def __get_is_alive__(self):
             '''Returns "True" if the process is currently alive, "False" otherwise'''

Modified: lldb/trunk/source/API/SBProcess.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBProcess.cpp?rev=217300&r1=217299&r2=217300&view=diff
==============================================================================
--- lldb/trunk/source/API/SBProcess.cpp (original)
+++ lldb/trunk/source/API/SBProcess.cpp Fri Sep  5 20:33:13 2014
@@ -38,6 +38,7 @@
 #include "lldb/API/SBEvent.h"
 #include "lldb/API/SBFileSpec.h"
 #include "lldb/API/SBThread.h"
+#include "lldb/API/SBThreadCollection.h"
 #include "lldb/API/SBStream.h"
 #include "lldb/API/SBStringList.h"
 #include "lldb/API/SBUnixSignals.h"
@@ -1381,3 +1382,15 @@ SBProcess::GetExtendedBacktraceTypeAtInd
     }
     return NULL;
 }
+
+SBThreadCollection
+SBProcess::GetHistoryThreads (addr_t addr)
+{
+    ProcessSP process_sp(GetSP());
+    SBThreadCollection threads;
+    if (process_sp)
+    {
+        threads = SBThreadCollection(process_sp->GetHistoryThreads(addr));
+    }
+    return threads;
+}

Modified: lldb/trunk/source/Target/Process.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Process.cpp?rev=217300&r1=217299&r2=217300&view=diff
==============================================================================
--- lldb/trunk/source/Target/Process.cpp (original)
+++ lldb/trunk/source/Target/Process.cpp Fri Sep  5 20:33:13 2014
@@ -32,6 +32,7 @@
 #include "lldb/Target/ABI.h"
 #include "lldb/Target/DynamicLoader.h"
 #include "lldb/Target/JITLoader.h"
+#include "lldb/Target/MemoryHistory.h"
 #include "lldb/Target/OperatingSystem.h"
 #include "lldb/Target/LanguageRuntime.h"
 #include "lldb/Target/CPPLanguageRuntime.h"
@@ -6022,3 +6023,19 @@ Process::ModulesDidLoad (ModuleList &mod
 
   GetJITLoaders().ModulesDidLoad (module_list);
 }
+
+ThreadCollectionSP
+Process::GetHistoryThreads(lldb::addr_t addr)
+{
+    ThreadCollectionSP threads;
+    
+    const MemoryHistorySP &memory_history = MemoryHistory::FindPlugin(shared_from_this());
+    
+    if (! memory_history.get()) {
+        return threads;
+    }
+    
+    threads.reset(new ThreadCollection(memory_history->GetHistoryThreads(addr)));
+    
+    return threads;
+}

Modified: lldb/trunk/test/functionalities/asan/TestAsan.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/asan/TestAsan.py?rev=217300&r1=217299&r2=217300&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/asan/TestAsan.py (original)
+++ lldb/trunk/test/functionalities/asan/TestAsan.py Fri Sep  5 20:33:13 2014
@@ -70,6 +70,24 @@ class AsanTestCase(TestBase):
                 'Memory allocated at', 'a.out`f1', 'main.c:%d' % self.line_malloc,
                 'Memory deallocated at', 'a.out`f2', 'main.c:%d' % self.line_free])
 
+        # do the same using SB API
+        process = self.dbg.GetSelectedTarget().process
+        val = process.GetSelectedThread().GetSelectedFrame().EvaluateExpression("pointer")
+        addr = val.GetValueAsUnsigned()
+        threads = process.GetHistoryThreads(addr);
+        self.assertEqual(threads.GetSize(), 2)
+        
+        history_thread = threads.GetThreadAtIndex(0)
+        self.assertTrue(history_thread.num_frames >= 2)
+        self.assertEqual(history_thread.frames[1].GetLineEntry().GetFileSpec().GetFilename(), "main.c")
+        self.assertEqual(history_thread.frames[1].GetLineEntry().GetLine(), self.line_malloc)
+        
+        history_thread = threads.GetThreadAtIndex(1)
+        self.assertTrue(history_thread.num_frames >= 2)
+        self.assertEqual(history_thread.frames[1].GetLineEntry().GetFileSpec().GetFilename(), "main.c")
+        self.assertEqual(history_thread.frames[1].GetLineEntry().GetLine(), self.line_free)
+
+        # now let's break when an ASan report occurs and try the API then
         self.runCmd("breakpoint set -n __asan_report_error")
 
         self.runCmd("continue")





More information about the lldb-commits mailing list