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());
     }