summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.h
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2013-01-18 23:41:08 +0000
committerGreg Clayton <gclayton@apple.com>2013-01-18 23:41:08 +0000
commita4d8747d0f52e12b905b1dd61b117605021b14db (patch)
treefcad3a3fbeddb9594377b956508d1e548461995c /lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.h
parent162b22c155876b2e63468fbb10865a1063114da7 (diff)
downloadbcm5719-llvm-a4d8747d0f52e12b905b1dd61b117605021b14db.tar.gz
bcm5719-llvm-a4d8747d0f52e12b905b1dd61b117605021b14db.zip
<rdar://problem/13010007>
Added the ability for OS plug-ins to lazily populate the thread this. The python OS plug-in classes can now implement the following method: class OperatingSystemPlugin: def create_thread(self, tid, context): # Return a dictionary for a new thread to create it on demand This will add a new thread to the thread list if it doesn't already exist. The example code in lldb/examples/python/operating_system.py has been updated to show how this call us used. Cleaned up the code in PythonDataObjects.cpp/h: - renamed all classes that started with PythonData* to be Python*. - renamed PythonArray to PythonList. Cleaned up the code to use inheritance where - Centralized the code that does ref counting in the PythonObject class to a single function. - Made the "bool PythonObject::Reset(PyObject *)" function be virtual so each subclass can correctly check to ensure a PyObject is of the right type before adopting the object. - Cleaned up all APIs and added new constructors for the Python* classes to they can all construct form: - PyObject * - const PythonObject & - const lldb::ScriptInterpreterObjectSP & Cleaned up code in ScriptInterpreterPython: - Made calling python functions safer by templatizing the production of value formats. Python specifies the value formats based on built in C types (long, long long, etc), and code often uses typedefs for uint32_t, uint64_t, etc when passing arguments down to python. We will now always produce correct value formats as the templatized code will "do the right thing" all the time. - Fixed issues with the ScriptInterpreterPython::Locker where entering the session and leaving the session had a bunch of issues that could cause the "lldb" module globals lldb.debugger, lldb.target, lldb.process, lldb.thread, and lldb.frame to not be initialized. llvm-svn: 172873
Diffstat (limited to 'lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.h')
-rw-r--r--lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.h16
1 files changed, 14 insertions, 2 deletions
diff --git a/lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.h b/lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.h
index d89a7abe3a2..27cff90872f 100644
--- a/lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.h
+++ b/lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.h
@@ -78,19 +78,31 @@ public:
virtual lldb::StopInfoSP
CreateThreadStopReason (lldb_private::Thread *thread);
+ //------------------------------------------------------------------
+ // Method for lazy creation of threads on demand
+ //------------------------------------------------------------------
+ virtual lldb::ThreadSP
+ CreateThread (lldb::tid_t tid, lldb::addr_t context);
+
protected:
bool IsValid() const
{
- return m_python_object != NULL;
+ return m_python_object_sp && m_python_object_sp->GetObject() != NULL;
}
+
+ lldb::ThreadSP
+ CreateThreadFromThreadInfo (lldb_private::PythonDictionary &thread_dict,
+ lldb_private::ThreadList *old_thread_list_ptr,
+ bool *did_create_ptr);
+
DynamicRegisterInfo *
GetDynamicRegisterInfo ();
lldb::ValueObjectSP m_thread_list_valobj_sp;
std::auto_ptr<DynamicRegisterInfo> m_register_info_ap;
lldb_private::ScriptInterpreter *m_interpreter;
- void* m_python_object;
+ lldb::ScriptInterpreterObjectSP m_python_object_sp;
};
OpenPOWER on IntegriCloud