summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Process/Utility/DynamicRegisterInfo.cpp
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/Process/Utility/DynamicRegisterInfo.cpp
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/Process/Utility/DynamicRegisterInfo.cpp')
-rw-r--r--lldb/source/Plugins/Process/Utility/DynamicRegisterInfo.cpp35
1 files changed, 19 insertions, 16 deletions
diff --git a/lldb/source/Plugins/Process/Utility/DynamicRegisterInfo.cpp b/lldb/source/Plugins/Process/Utility/DynamicRegisterInfo.cpp
index c39bece7b6d..0c95d66cef9 100644
--- a/lldb/source/Plugins/Process/Utility/DynamicRegisterInfo.cpp
+++ b/lldb/source/Plugins/Process/Utility/DynamicRegisterInfo.cpp
@@ -33,7 +33,7 @@ DynamicRegisterInfo::DynamicRegisterInfo () :
{
}
-DynamicRegisterInfo::DynamicRegisterInfo (const lldb_private::PythonDataDictionary &dict) :
+DynamicRegisterInfo::DynamicRegisterInfo (const lldb_private::PythonDictionary &dict) :
m_regs (),
m_sets (),
m_set_reg_nums (),
@@ -49,16 +49,19 @@ DynamicRegisterInfo::~DynamicRegisterInfo ()
size_t
-DynamicRegisterInfo::SetRegisterInfo (const lldb_private::PythonDataDictionary &dict)
+DynamicRegisterInfo::SetRegisterInfo (const lldb_private::PythonDictionary &dict)
{
#ifndef LLDB_DISABLE_PYTHON
- PythonDataArray sets (dict.GetItemForKey("sets").GetArrayObject());
+ PythonList sets (dict.GetItemForKey("sets"));
if (sets)
{
const uint32_t num_sets = sets.GetSize();
for (uint32_t i=0; i<num_sets; ++i)
{
- ConstString set_name (sets.GetItemAtIndex(i).GetStringObject().GetString());
+ PythonString py_set_name(sets.GetItemAtIndex(i));
+ ConstString set_name;
+ if (py_set_name)
+ set_name.SetCString(py_set_name.GetString());
if (set_name)
{
RegisterSet new_set = { set_name.AsCString(), NULL, 0, NULL };
@@ -72,23 +75,23 @@ DynamicRegisterInfo::SetRegisterInfo (const lldb_private::PythonDataDictionary &
}
m_set_reg_nums.resize(m_sets.size());
}
- PythonDataArray regs (dict.GetItemForKey("registers").GetArrayObject());
+ PythonList regs (dict.GetItemForKey("registers"));
if (regs)
{
const uint32_t num_regs = regs.GetSize();
- PythonDataString name_pystr("name");
- PythonDataString altname_pystr("alt-name");
- PythonDataString bitsize_pystr("bitsize");
- PythonDataString offset_pystr("offset");
- PythonDataString encoding_pystr("encoding");
- PythonDataString format_pystr("format");
- PythonDataString set_pystr("set");
- PythonDataString gcc_pystr("gcc");
- PythonDataString dwarf_pystr("dwarf");
- PythonDataString generic_pystr("generic");
+ PythonString name_pystr("name");
+ PythonString altname_pystr("alt-name");
+ PythonString bitsize_pystr("bitsize");
+ PythonString offset_pystr("offset");
+ PythonString encoding_pystr("encoding");
+ PythonString format_pystr("format");
+ PythonString set_pystr("set");
+ PythonString gcc_pystr("gcc");
+ PythonString dwarf_pystr("dwarf");
+ PythonString generic_pystr("generic");
for (uint32_t i=0; i<num_regs; ++i)
{
- PythonDataDictionary reg_info_dict(regs.GetItemAtIndex(i).GetDictionaryObject());
+ PythonDictionary reg_info_dict(regs.GetItemAtIndex(i));
if (reg_info_dict)
{
// { 'name':'rcx' , 'bitsize' : 64, 'offset' : 16, 'encoding':'uint' , 'format':'hex' , 'set': 0, 'gcc' : 2, 'dwarf' : 2, 'generic':'arg4', 'alt-name':'arg4', },
OpenPOWER on IntegriCloud