[Lldb-commits] x86_32 linux support

Stephen Wilson wilsons at start.ca
Fri Feb 25 16:25:55 PST 2011

On Fri, Feb 25, 2011 at 02:52:51AM +0100, Marco Minutoli wrote:
> Hi everybody,
> as suggested by Stephen I had a look at the user_32.h Linux header and
> I fixed the UserArea structure.
> In the attachment the revised patch. As ever comments and suggestions
> are welcome :).

This looks good.  Only two small issues:  the patch for
RegisterContextLinux_i386.h contains the old and new versions of your
patch (the latter is protected behind an #ifndef).   Also, I think we
need the following patch for LinuxThread.cpp:  Use a register context
according to the host instead of the process target so we can debug and
test lldb using 32-bit binaries on 64-bit systems.

I have not been able to test your patch much yet -- another issue has
crept into the linux builds that I need to track down first... but with
those changes I think the patches can go in.   

Thanks again!

diff --git a/source/Plugins/Process/Linux/LinuxThread.cpp b/source/Plugins/Process/Linux/LinuxThread.cpp
index 397d31b..15bc9e3 100644
--- a/source/Plugins/Process/Linux/LinuxThread.cpp
+++ b/source/Plugins/Process/Linux/LinuxThread.cpp
@@ -12,6 +12,7 @@
 // C++ Includes
 // Other libraries and framework includes
+#include "lldb/Host/Host.h"
 #include "lldb/Target/Process.h"
 #include "lldb/Target/StopInfo.h"
 #include "lldb/Target/Target.h"
@@ -19,6 +20,7 @@
 #include "LinuxThread.h"
 #include "ProcessLinux.h"
 #include "ProcessMonitor.h"
+#include "RegisterContextLinux_i386.h"
 #include "RegisterContextLinux_x86_64.h"
 #include "UnwindLLDB.h"
@@ -59,11 +61,9 @@ LinuxThread::GetInfo()
-    ProcessLinux &process = static_cast<ProcessLinux&>(GetProcess());
     if (!m_reg_context_sp)
-        ArchSpec arch = process.GetTarget().GetArchitecture();
+        ArchSpec arch = Host::GetArchitecture();
         switch (arch.GetCore())
@@ -71,6 +71,12 @@ LinuxThread::GetRegisterContext()
             assert(false && "CPU type not supported!");
+        case ArchSpec::eCore_x86_32_i386:
+        case ArchSpec::eCore_x86_32_i486:
+        case ArchSpec::eCore_x86_32_i486sx:
+            m_reg_context_sp.reset(new RegisterContextLinux_i386(*this, 0));
+            break;
         case ArchSpec::eCore_x86_64_x86_64:
             m_reg_context_sp.reset(new RegisterContextLinux_x86_64(*this, 0));

More information about the lldb-commits mailing list