Made lldb_private::ArchSpec contain much more than just an architecture. It
now, in addition to cpu type/subtype and architecture flavor, contains:
- byte order (big endian, little endian)
- address size in bytes
- llvm::Triple for true target triple support and for more powerful plug-in
selection.
llvm-svn: 125602
diff --git a/lldb/source/Target/ABI.cpp b/lldb/source/Target/ABI.cpp
index 20d35e3..21ac550 100644
--- a/lldb/source/Target/ABI.cpp
+++ b/lldb/source/Target/ABI.cpp
@@ -14,7 +14,7 @@
using namespace lldb_private;
ABI*
-ABI::FindPlugin (const ConstString &triple)
+ABI::FindPlugin (const ArchSpec &arch)
{
std::auto_ptr<ABI> abi_ap;
ABICreateInstance create_callback;
@@ -23,7 +23,7 @@
(create_callback = PluginManager::GetABICreateCallbackAtIndex(idx)) != NULL;
++idx)
{
- abi_ap.reset (create_callback(triple));
+ abi_ap.reset (create_callback(arch));
if (abi_ap.get())
return abi_ap.release();
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp
index 9d58fb0..cf019e6 100644
--- a/lldb/source/Target/Process.cpp
+++ b/lldb/source/Target/Process.cpp
@@ -229,9 +229,6 @@
m_breakpoint_site_list (),
m_dynamic_checkers_ap (),
m_unix_signals (),
- m_target_triple (),
- m_byte_order (lldb::endian::InlHostByteOrder()),
- m_addr_byte_size (0),
m_abi_sp (),
m_process_input_reader (),
m_stdio_communication ("process.stdio"),
@@ -857,15 +854,8 @@
const ABI *
Process::GetABI()
{
- ConstString& triple = m_target_triple;
-
- if (triple.IsEmpty())
- return NULL;
-
if (m_abi_sp.get() == NULL)
- {
- m_abi_sp.reset(ABI::FindPlugin(triple));
- }
+ m_abi_sp.reset(ABI::FindPlugin(m_target.GetArchitecture()));
return m_abi_sp.get();
}
@@ -1317,7 +1307,10 @@
else
{
uint8_t tmp[sizeof(uint64_t)];
- DataExtractor data (tmp, integer_byte_size, GetByteOrder(), GetAddressByteSize());
+ DataExtractor data (tmp,
+ integer_byte_size,
+ m_target.GetArchitecture().GetByteOrder(),
+ m_target.GetArchitecture().GetAddressByteSize());
if (ReadMemory (vm_addr, tmp, integer_byte_size, error) == integer_byte_size)
{
uint32_t offset = 0;
@@ -1509,7 +1502,6 @@
)
{
Error error;
- m_target_triple.Clear();
m_abi_sp.reset();
m_process_input_reader.reset();
@@ -1666,7 +1658,6 @@
Process::Attach (lldb::pid_t attach_pid)
{
- m_target_triple.Clear();
m_abi_sp.reset();
m_process_input_reader.reset();
@@ -1710,7 +1701,6 @@
Error
Process::Attach (const char *process_name, bool wait_for_launch)
{
- m_target_triple.Clear();
m_abi_sp.reset();
m_process_input_reader.reset();
@@ -1756,7 +1746,6 @@
Error
Process::ConnectRemote (const char *remote_url)
{
- m_target_triple.Clear();
m_abi_sp.reset();
m_process_input_reader.reset();
@@ -1975,32 +1964,19 @@
return error;
}
-UnixSignals &
-Process::GetUnixSignals ()
+lldb::ByteOrder
+Process::GetByteOrder () const
{
- return m_unix_signals;
-}
-
-Target &
-Process::GetTarget ()
-{
- return m_target;
-}
-
-const Target &
-Process::GetTarget () const
-{
- return m_target;
+ return m_target.GetArchitecture().GetByteOrder();
}
uint32_t
-Process::GetAddressByteSize()
+Process::GetAddressByteSize () const
{
- if (m_addr_byte_size == 0)
- return m_target.GetArchitecture().GetAddressByteSize();
- return m_addr_byte_size;
+ return m_target.GetArchitecture().GetAddressByteSize();
}
+
bool
Process::ShouldBroadcastEvent (Event *event_ptr)
{
@@ -2111,22 +2087,6 @@
return return_value;
}
-//------------------------------------------------------------------
-// Thread Queries
-//------------------------------------------------------------------
-
-ThreadList &
-Process::GetThreadList ()
-{
- return m_thread_list;
-}
-
-const ThreadList &
-Process::GetThreadList () const
-{
- return m_thread_list;
-}
-
bool
Process::StartPrivateStateThread ()
@@ -2517,30 +2477,6 @@
return false;
}
-Target *
-Process::CalculateTarget ()
-{
- return &m_target;
-}
-
-Process *
-Process::CalculateProcess ()
-{
- return this;
-}
-
-Thread *
-Process::CalculateThread ()
-{
- return NULL;
-}
-
-StackFrame *
-Process::CalculateStackFrame ()
-{
- return NULL;
-}
-
void
Process::CalculateExecutionContext (ExecutionContext &exe_ctx)
{
diff --git a/lldb/source/Target/StackFrame.cpp b/lldb/source/Target/StackFrame.cpp
index 32917b7..7aec5b8 100644
--- a/lldb/source/Target/StackFrame.cpp
+++ b/lldb/source/Target/StackFrame.cpp
@@ -910,7 +910,7 @@
if (show_frame_index)
strm->Printf("frame #%u: ", m_frame_index);
- strm->Printf("0x%0*llx ", m_thread.GetProcess().GetAddressByteSize() * 2, GetFrameCodeAddress().GetLoadAddress(&m_thread.GetProcess().GetTarget()));
+ strm->Printf("0x%0*llx ", m_thread.GetProcess().GetTarget().GetArchitecture().GetAddressByteSize() * 2, GetFrameCodeAddress().GetLoadAddress(&m_thread.GetProcess().GetTarget()));
GetSymbolContext(eSymbolContextEverything);
const bool show_module = true;
const bool show_inline = true;
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index 7a39958..b76f9f6 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -45,7 +45,6 @@
m_breakpoint_list (false),
m_internal_breakpoint_list (true),
m_process_sp(),
- m_triple(),
m_search_filter_sp(),
m_image_search_paths (ImageSearchPathsChanged, this),
m_scratch_ast_context_ap (NULL),
@@ -447,10 +446,9 @@
}
// Now see if we know the target triple, and if so, create our scratch AST context:
- ConstString target_triple;
- if (GetTargetTriple(target_triple))
+ if (m_arch_spec.IsValid())
{
- m_scratch_ast_context_ap.reset (new ClangASTContext(target_triple.GetCString()));
+ m_scratch_ast_context_ap.reset (new ClangASTContext(m_arch_spec.GetTriple().str().c_str()));
}
}
@@ -458,18 +456,6 @@
}
-ModuleList&
-Target::GetImages ()
-{
- return m_images;
-}
-
-ArchSpec
-Target::GetArchitecture () const
-{
- return m_arch_spec;
-}
-
bool
Target::SetArchitecture (const ArchSpec &arch_spec)
{
@@ -492,7 +478,6 @@
ModuleSP executable_sp = GetExecutableModule ();
m_images.Clear();
m_scratch_ast_context_ap.reset();
- m_triple.Clear();
// Need to do something about unsetting breakpoints.
if (executable_sp)
@@ -524,31 +509,6 @@
}
}
-bool
-Target::GetTargetTriple(ConstString &triple)
-{
- triple.Clear();
-
- if (m_triple)
- {
- triple = m_triple;
- }
- else
- {
- Module *exe_module = GetExecutableModule().get();
- if (exe_module)
- {
- ObjectFile *objfile = exe_module->GetObjectFile();
- if (objfile)
- {
- objfile->GetTargetTriple(m_triple);
- triple = m_triple;
- }
- }
- }
- return !triple.IsEmpty();
-}
-
void
Target::ModuleAdded (ModuleSP &module_sp)
{
diff --git a/lldb/source/Target/ThreadPlanStepInRange.cpp b/lldb/source/Target/ThreadPlanStepInRange.cpp
index 2930d3d..28cd8b8 100644
--- a/lldb/source/Target/ThreadPlanStepInRange.cpp
+++ b/lldb/source/Target/ThreadPlanStepInRange.cpp
@@ -21,6 +21,7 @@
#include "lldb/Symbol/Function.h"
#include "lldb/Target/Process.h"
#include "lldb/Target/RegisterContext.h"
+#include "lldb/Target/Target.h"
#include "lldb/Target/Thread.h"
#include "lldb/Target/ThreadPlanStepOut.h"
#include "lldb/Target/ThreadPlanStepThrough.h"
@@ -75,7 +76,8 @@
if (log)
{
StreamString s;
- s.Address (m_thread.GetRegisterContext()->GetPC(), m_thread.GetProcess().GetAddressByteSize());
+ s.Address (m_thread.GetRegisterContext()->GetPC(),
+ m_thread.GetProcess().GetTarget().GetArchitecture().GetAddressByteSize());
log->Printf("ThreadPlanStepInRange reached %s.", s.GetData());
}
diff --git a/lldb/source/Target/ThreadPlanStepInstruction.cpp b/lldb/source/Target/ThreadPlanStepInstruction.cpp
index 5d744c4..de23c22 100644
--- a/lldb/source/Target/ThreadPlanStepInstruction.cpp
+++ b/lldb/source/Target/ThreadPlanStepInstruction.cpp
@@ -123,10 +123,10 @@
StreamString s;
s.PutCString ("Stepped in to: ");
addr_t stop_addr = m_thread.GetStackFrameAtIndex(0)->GetRegisterContext()->GetPC();
- s.Address (stop_addr, m_thread.GetProcess().GetAddressByteSize());
+ s.Address (stop_addr, m_thread.GetProcess().GetTarget().GetArchitecture().GetAddressByteSize());
s.PutCString (" stepping out to: ");
addr_t return_addr = return_frame->GetRegisterContext()->GetPC();
- s.Address (return_addr, m_thread.GetProcess().GetAddressByteSize());
+ s.Address (return_addr, m_thread.GetProcess().GetTarget().GetArchitecture().GetAddressByteSize());
log->Printf("%s.", s.GetData());
}
m_thread.QueueThreadPlanForStepOut(false, NULL, true, m_stop_other_threads, eVoteNo, eVoteNoOpinion, 0);
diff --git a/lldb/source/Target/ThreadPlanStepOverRange.cpp b/lldb/source/Target/ThreadPlanStepOverRange.cpp
index 2d6f030..c7bffb9 100644
--- a/lldb/source/Target/ThreadPlanStepOverRange.cpp
+++ b/lldb/source/Target/ThreadPlanStepOverRange.cpp
@@ -19,6 +19,7 @@
#include "lldb/Core/Stream.h"
#include "lldb/Target/Process.h"
#include "lldb/Target/RegisterContext.h"
+#include "lldb/Target/Target.h"
#include "lldb/Target/Thread.h"
#include "lldb/Target/ThreadPlanStepOut.h"
#include "lldb/Target/ThreadPlanStepThrough.h"
@@ -69,7 +70,8 @@
if (log)
{
StreamString s;
- s.Address (m_thread.GetRegisterContext()->GetPC(), m_thread.GetProcess().GetAddressByteSize());
+ s.Address (m_thread.GetRegisterContext()->GetPC(),
+ m_thread.GetProcess().GetTarget().GetArchitecture().GetAddressByteSize());
log->Printf("ThreadPlanStepOverRange reached %s.", s.GetData());
}