summaryrefslogtreecommitdiffstats
path: root/lldb/source
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source')
-rw-r--r--lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp4
-rw-r--r--lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.h2
-rw-r--r--lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp28
-rw-r--r--lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h4
-rw-r--r--lldb/source/Target/Process.cpp8
5 files changed, 28 insertions, 18 deletions
diff --git a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
index 8ed106ab065..bba4ef8c438 100644
--- a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
+++ b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
@@ -428,8 +428,10 @@ ProcessKDP::DoAttachToProcessWithName (const char *process_name, const ProcessAt
void
-ProcessKDP::DidAttach ()
+ProcessKDP::DidAttach (ArchSpec &process_arch)
{
+ Process::DidAttach(process_arch);
+
Log *log (ProcessKDPLog::GetLogIfAllCategoriesSet (KDP_LOG_PROCESS));
if (log)
log->Printf ("ProcessKDP::DidAttach()");
diff --git a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.h b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.h
index 7021aa9a65e..f6432bbe5aa 100644
--- a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.h
+++ b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.h
@@ -105,7 +105,7 @@ public:
DoAttachToProcessWithName (const char *process_name, const lldb_private::ProcessAttachInfo &attach_info);
virtual void
- DidAttach ();
+ DidAttach (lldb_private::ArchSpec &process_arch);
lldb::addr_t
GetImageInfoAddress();
diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
index 69138159c31..1b04f429156 100644
--- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -1011,7 +1011,7 @@ ProcessGDBRemote::ConnectToDebugserver (const char *connect_url)
}
void
-ProcessGDBRemote::DidLaunchOrAttach ()
+ProcessGDBRemote::DidLaunchOrAttach (ArchSpec& process_arch)
{
Log *log (ProcessGDBRemoteLog::GetLogIfAllCategoriesSet (GDBR_LOG_PROCESS));
if (log)
@@ -1022,16 +1022,17 @@ ProcessGDBRemote::DidLaunchOrAttach ()
// See if the GDB server supports the qHostInfo information
- ArchSpec gdb_remote_arch = m_gdb_comm.GetHostArchitecture();
// See if the GDB server supports the qProcessInfo packet, if so
// prefer that over the Host information as it will be more specific
// to our process.
if (m_gdb_comm.GetProcessArchitecture().IsValid())
- gdb_remote_arch = m_gdb_comm.GetProcessArchitecture();
+ process_arch = m_gdb_comm.GetProcessArchitecture();
+ else
+ process_arch = m_gdb_comm.GetHostArchitecture();
- if (gdb_remote_arch.IsValid())
+ if (process_arch.IsValid())
{
ArchSpec &target_arch = GetTarget().GetArchitecture();
@@ -1044,15 +1045,15 @@ ProcessGDBRemote::DidLaunchOrAttach ()
// it has, so we really need to take the remote host architecture as our
// defacto architecture in this case.
- if (gdb_remote_arch.GetMachine() == llvm::Triple::arm &&
- gdb_remote_arch.GetTriple().getVendor() == llvm::Triple::Apple)
+ if (process_arch.GetMachine() == llvm::Triple::arm &&
+ process_arch.GetTriple().getVendor() == llvm::Triple::Apple)
{
- target_arch = gdb_remote_arch;
+ target_arch = process_arch;
}
else
{
// Fill in what is missing in the triple
- const llvm::Triple &remote_triple = gdb_remote_arch.GetTriple();
+ const llvm::Triple &remote_triple = process_arch.GetTriple();
llvm::Triple &target_triple = target_arch.GetTriple();
if (target_triple.getVendorName().size() == 0)
{
@@ -1072,7 +1073,7 @@ ProcessGDBRemote::DidLaunchOrAttach ()
{
// The target doesn't have a valid architecture yet, set it from
// the architecture we got from the remote GDB server
- target_arch = gdb_remote_arch;
+ target_arch = process_arch;
}
}
}
@@ -1081,7 +1082,8 @@ ProcessGDBRemote::DidLaunchOrAttach ()
void
ProcessGDBRemote::DidLaunch ()
{
- DidLaunchOrAttach ();
+ ArchSpec process_arch;
+ DidLaunchOrAttach (process_arch);
}
UnixSignals&
@@ -1199,9 +1201,11 @@ ProcessGDBRemote::SetExitStatus (int exit_status, const char *cstr)
}
void
-ProcessGDBRemote::DidAttach ()
+ProcessGDBRemote::DidAttach (ArchSpec &process_arch)
{
- DidLaunchOrAttach ();
+ // If you can figure out what the architecture is, fill it in here.
+ process_arch.Clear();
+ DidLaunchOrAttach (process_arch);
}
diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h
index baee872bb73..39395af2ee5 100644
--- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h
+++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h
@@ -117,7 +117,7 @@ public:
const lldb_private::ProcessAttachInfo &attach_info);
virtual void
- DidAttach ();
+ DidAttach (lldb_private::ArchSpec &process_arch);
//------------------------------------------------------------------
// PluginInterface protocol
@@ -389,7 +389,7 @@ protected:
UpdateThreadIDList ();
void
- DidLaunchOrAttach ();
+ DidLaunchOrAttach (lldb_private::ArchSpec& process_arch);
lldb_private::Error
ConnectToDebugserver (const char *host_port);
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp
index cdbbe8df129..b4e88bd453f 100644
--- a/lldb/source/Target/Process.cpp
+++ b/lldb/source/Target/Process.cpp
@@ -3063,7 +3063,11 @@ Process::CompleteAttach ()
{
// Let the process subclass figure out at much as it can about the process
// before we go looking for a dynamic loader plug-in.
- DidAttach();
+ ArchSpec process_arch;
+ DidAttach(process_arch);
+
+ if (process_arch.IsValid())
+ m_target.SetArchitecture(process_arch);
// We just attached. If we have a platform, ask it for the process architecture, and if it isn't
// the same as the one we've already set, switch architectures.
@@ -3082,7 +3086,7 @@ Process::CompleteAttach ()
m_target.SetArchitecture(platform_arch);
}
}
- else
+ else if (!process_arch.IsValid())
{
ProcessInstanceInfo process_info;
platform_sp->GetProcessInfo (GetID(), process_info);
OpenPOWER on IntegriCloud