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/Plugins/ObjectFile/ELF/ObjectFileELF.cpp b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
index e02f49c..a16e486 100644
--- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -1043,40 +1043,28 @@
 }
 
 bool
-ObjectFileELF::GetTargetTriple(ConstString &target_triple)
+ObjectFileELF::GetArchitecture (ArchSpec &arch)
 {
-    static ConstString g_target_triple;
-
-    if (g_target_triple)
-    {
-        target_triple = g_target_triple;
-        return true;
-    }
-
-    std::string triple;
     switch (m_header.e_machine)
     {
     default:
         assert(false && "Unexpected machine type.");
         break;
-    case EM_SPARC:  triple.assign("sparc-"); break;
-    case EM_386:    triple.assign("i386-"); break;
-    case EM_68K:    triple.assign("68k-"); break;
-    case EM_88K:    triple.assign("88k-"); break;
-    case EM_860:    triple.assign("i860-"); break;
-    case EM_MIPS:   triple.assign("mips-"); break;
-    case EM_PPC:    triple.assign("powerpc-"); break;
-    case EM_PPC64:  triple.assign("powerpc64-"); break;
-    case EM_ARM:    triple.assign("arm-"); break;
-    case EM_X86_64: triple.assign("x86_64-"); break;
+    case EM_SPARC:  arch.GetTriple().setArchName("sparc"); break;
+    case EM_386:    arch.GetTriple().setArchName("i386"); break;
+    case EM_68K:    arch.GetTriple().setArchName("68k"); break;
+    case EM_88K:    arch.GetTriple().setArchName("88k"); break;
+    case EM_860:    arch.GetTriple().setArchName("i860"); break;
+    case EM_MIPS:   arch.GetTriple().setArchName("mips"); break;
+    case EM_PPC:    arch.GetTriple().setArchName("powerpc"); break;
+    case EM_PPC64:  arch.GetTriple().setArchName("powerpc64"); break;
+    case EM_ARM:    arch.GetTriple().setArchName("arm"); break;
+    case EM_X86_64: arch.GetTriple().setArchName("x86_64"); break;
     }
     // TODO: determine if there is a vendor in the ELF? Default to "linux" for now
-    triple += "linux-";
+    arch.GetTriple().setOSName ("linux");
     // TODO: determine if there is an OS in the ELF? Default to "gnu" for now
-    triple += "gnu";
-    g_target_triple.SetCString(triple.c_str());
-    target_triple = g_target_triple;
-
+    arch.GetTriple().setVendorName("gnu");
     return true;
 }
 
diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h
index ef13ca4..ad97165 100644
--- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h
+++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h
@@ -105,7 +105,7 @@
     Dump(lldb_private::Stream *s);
 
     virtual bool
-    GetTargetTriple(lldb_private::ConstString &target_triple);
+    GetArchitecture (lldb_private::ArchSpec &arch);
 
     virtual bool
     GetUUID(lldb_private::UUID* uuid);
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
index bfd6eb8..ac536c5 100644
--- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -1436,15 +1436,11 @@
 }
 
 bool
-ObjectFileMachO::GetTargetTriple (ConstString &target_triple)
+ObjectFileMachO::GetArchitecture (ArchSpec &arch)
 {
     lldb_private::Mutex::Locker locker(m_mutex);
-    std::string triple(GetModule()->GetArchitecture().AsCString());
-    triple += "-apple-darwin";
-    target_triple.SetCString(triple.c_str());
-    if (target_triple)
-        return true;
-    return false;
+    arch.SetMachOArch(m_header.cputype, m_header.cpusubtype);
+    return true;
 }
 
 
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h
index 46d628e..c20ff1e 100644
--- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h
+++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h
@@ -83,7 +83,7 @@
     Dump (lldb_private::Stream *s);
 
     virtual bool
-    GetTargetTriple (lldb_private::ConstString &target_triple);
+    GetArchitecture (lldb_private::ArchSpec &arch);
 
     virtual bool
     GetUUID (lldb_private::UUID* uuid);