Modified the ArchSpec to take an optional "Platform *" when setting the triple.
This allows you to have a platform selected, then specify a triple using
"i386" and have the remaining triple items (vendor, os, and environment) set
automatically.

Many interpreter commands take the "--arch" option to specify an architecture
triple, so now the command options needed to be able to get to the current
platform, so the Options class now take a reference to the interpreter on
construction.

Modified the build LLVM building in the Xcode project to use the new
Xcode project level user definitions:

LLVM_BUILD_DIR - a path to the llvm build directory
LLVM_SOURCE_DIR - a path to the llvm sources for the llvm that will be used to build lldb
LLVM_CONFIGURATION - the configuration that lldb is built for (Release, 
Release+Asserts, Debug, Debug+Asserts).

I also changed the LLVM build to not check if "lldb/llvm" is a symlink and
then assume it is a real llvm build directory versus the unzipped llvm.zip
package, so now you can actually have a "lldb/llvm" directory in your lldb
sources.




git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@129112 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp b/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp
index 2855786..4f71a1b 100644
--- a/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp
+++ b/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp
@@ -150,27 +150,26 @@
         }
     }
 
-    int numTokens = EDNumTokens(m_inst);
+    int numTokens = -1;
+    
+    if (!raw)
+        numTokens = EDNumTokens(m_inst);
 
     int currentOpIndex = -1;
 
-    std::auto_ptr<RegisterReaderArg> rra;
-    
-    if (!raw)
+    bool printTokenized = false;
+
+    if (numTokens != -1 && !raw)
     {
         addr_t base_addr = LLDB_INVALID_ADDRESS;
+        
+        RegisterReaderArg rra(base_addr + EDInstByteSize(m_inst), m_disassembler);
+        
         if (exe_ctx && exe_ctx->target && !exe_ctx->target->GetSectionLoadList().IsEmpty())
             base_addr = GetAddress().GetLoadAddress (exe_ctx->target);
         if (base_addr == LLDB_INVALID_ADDRESS)
             base_addr = GetAddress().GetFileAddress ();
-        
-        rra.reset(new RegisterReaderArg(base_addr + EDInstByteSize(m_inst), m_disassembler));
-    }
-
-    bool printTokenized = false;
-
-    if (numTokens != -1)
-    {
+                    
         printTokenized = true;
 
         // Handle the opcode column.
@@ -246,7 +245,7 @@
                                 {
                                     uint64_t operand_value;
 
-                                    if (!EDEvaluateOperand(&operand_value, operand, IPRegisterReader, rra.get()))
+                                    if (!EDEvaluateOperand(&operand_value, operand, IPRegisterReader, &rra))
                                     {
                                         if (EDInstIsBranch(m_inst))
                                         {
@@ -327,7 +326,7 @@
         if (EDGetInstString(&str, m_inst))
             return;
         else
-            s->PutCString(str);
+            s->Write(str, strlen(str) - 1);
     }
 }
 
diff --git a/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp b/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp
index 786a2ce..83c5825 100644
--- a/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp
+++ b/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp
@@ -207,7 +207,7 @@
     {
         arch = Target::GetDefaultArchitecture ();
         if (!arch.IsValid())
-            arch.SetTriple (LLDB_ARCH_DEFAULT);
+            arch.SetTriple (LLDB_ARCH_DEFAULT, NULL);
     }
     else
         arch = m_module->GetArchitecture();
diff --git a/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp b/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
index 3a46f0d..63cb4ac 100644
--- a/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
+++ b/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
@@ -142,6 +142,7 @@
 {
     const uint8_t *trap_opcode = NULL;
     uint32_t trap_opcode_size = 0;
+    bool bp_is_thumb = false;
         
     llvm::Triple::ArchType machine = target.GetArchitecture().GetMachine();
     switch (machine)
@@ -154,22 +155,26 @@
             trap_opcode_size = sizeof(g_i386_breakpoint_opcode);
         }
         break;
-        
+
+    case llvm::Triple::thumb:
+        bp_is_thumb = true; // Fall through...
     case llvm::Triple::arm:
         {
             static const uint8_t g_arm_breakpoint_opcode[] = { 0xFE, 0xDE, 0xFF, 0xE7 };
             static const uint8_t g_thumb_breakpooint_opcode[] = { 0xFE, 0xDE };
 
-            lldb::BreakpointLocationSP bp_loc_sp (bp_site->GetOwnerAtIndex (0));
-            if (bp_loc_sp)
+            // Auto detect arm/thumb if it wasn't explicitly specified
+            if (!bp_is_thumb)
             {
-                const AddressClass addr_class = bp_loc_sp->GetAddress().GetAddressClass ();
-                if (addr_class == eAddressClassCodeAlternateISA)
-                {
-                    trap_opcode = g_thumb_breakpooint_opcode;
-                    trap_opcode_size = sizeof(g_thumb_breakpooint_opcode);
-                    break;
-                }
+                lldb::BreakpointLocationSP bp_loc_sp (bp_site->GetOwnerAtIndex (0));
+                if (bp_loc_sp)
+                    bp_is_thumb = bp_loc_sp->GetAddress().GetAddressClass () == eAddressClassCodeAlternateISA;
+            }
+            if (bp_is_thumb)
+            {
+                trap_opcode = g_thumb_breakpooint_opcode;
+                trap_opcode_size = sizeof(g_thumb_breakpooint_opcode);
+                break;
             }
             trap_opcode = g_arm_breakpoint_opcode;
             trap_opcode_size = sizeof(g_arm_breakpoint_opcode);
@@ -186,7 +191,7 @@
         break;
         
     default:
-        assert(!"Unhandled architecture in ProcessMacOSX::GetSoftwareBreakpointTrapOpcode()");
+        assert(!"Unhandled architecture in PlatformDarwin::GetSoftwareBreakpointTrapOpcode()");
         break;
     }
     
diff --git a/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp b/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
index 70685f7..2ae4a90 100644
--- a/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
+++ b/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
@@ -473,14 +473,14 @@
     default:
         switch (idx)
         {
-        case 0: arch.SetTriple ("armv7-apple-darwin");  return true;
-        case 1: arch.SetTriple ("armv7f-apple-darwin"); return true;
-        case 2: arch.SetTriple ("armv7k-apple-darwin"); return true;
-        case 3: arch.SetTriple ("armv7s-apple-darwin"); return true;
-        case 4: arch.SetTriple ("armv6-apple-darwin");  return true;
-        case 5: arch.SetTriple ("armv5-apple-darwin");  return true;
-        case 6: arch.SetTriple ("armv4-apple-darwin");  return true;
-        case 7: arch.SetTriple ("arm-apple-darwin");    return true;
+        case 0: arch.SetTriple ("armv7-apple-darwin", NULL);  return true;
+        case 1: arch.SetTriple ("armv7f-apple-darwin", NULL); return true;
+        case 2: arch.SetTriple ("armv7k-apple-darwin", NULL); return true;
+        case 3: arch.SetTriple ("armv7s-apple-darwin", NULL); return true;
+        case 4: arch.SetTriple ("armv6-apple-darwin", NULL);  return true;
+        case 5: arch.SetTriple ("armv5-apple-darwin", NULL);  return true;
+        case 6: arch.SetTriple ("armv4-apple-darwin", NULL);  return true;
+        case 7: arch.SetTriple ("arm-apple-darwin", NULL);    return true;
         default: break;
         }
         break;
@@ -488,12 +488,12 @@
     case ArchSpec::eCore_arm_armv7f:
         switch (idx)
         {
-        case 0: arch.SetTriple ("armv7f-apple-darwin"); return true;
-        case 1: arch.SetTriple ("armv7-apple-darwin");  return true;
-        case 2: arch.SetTriple ("armv6-apple-darwin");  return true;
-        case 3: arch.SetTriple ("armv5-apple-darwin");  return true;
-        case 4: arch.SetTriple ("armv4-apple-darwin");  return true;
-        case 5: arch.SetTriple ("arm-apple-darwin");    return true;
+        case 0: arch.SetTriple ("armv7f-apple-darwin", NULL); return true;
+        case 1: arch.SetTriple ("armv7-apple-darwin", NULL);  return true;
+        case 2: arch.SetTriple ("armv6-apple-darwin", NULL);  return true;
+        case 3: arch.SetTriple ("armv5-apple-darwin", NULL);  return true;
+        case 4: arch.SetTriple ("armv4-apple-darwin", NULL);  return true;
+        case 5: arch.SetTriple ("arm-apple-darwin", NULL);    return true;
         default: break;
         }
         break;
@@ -501,12 +501,12 @@
     case ArchSpec::eCore_arm_armv7k:
         switch (idx)
         {
-        case 0: arch.SetTriple ("armv7k-apple-darwin"); return true;
-        case 1: arch.SetTriple ("armv7-apple-darwin");  return true;
-        case 2: arch.SetTriple ("armv6-apple-darwin");  return true;
-        case 3: arch.SetTriple ("armv5-apple-darwin");  return true;
-        case 4: arch.SetTriple ("armv4-apple-darwin");  return true;
-        case 5: arch.SetTriple ("arm-apple-darwin");    return true;
+        case 0: arch.SetTriple ("armv7k-apple-darwin", NULL); return true;
+        case 1: arch.SetTriple ("armv7-apple-darwin", NULL);  return true;
+        case 2: arch.SetTriple ("armv6-apple-darwin", NULL);  return true;
+        case 3: arch.SetTriple ("armv5-apple-darwin", NULL);  return true;
+        case 4: arch.SetTriple ("armv4-apple-darwin", NULL);  return true;
+        case 5: arch.SetTriple ("arm-apple-darwin", NULL);    return true;
         default: break;
         }
         break;
@@ -514,12 +514,12 @@
     case ArchSpec::eCore_arm_armv7s:
         switch (idx)
         {
-        case 0: arch.SetTriple ("armv7s-apple-darwin"); return true;
-        case 1: arch.SetTriple ("armv7-apple-darwin");  return true;
-        case 2: arch.SetTriple ("armv6-apple-darwin");  return true;
-        case 3: arch.SetTriple ("armv5-apple-darwin");  return true;
-        case 4: arch.SetTriple ("armv4-apple-darwin");  return true;
-        case 5: arch.SetTriple ("arm-apple-darwin");    return true;
+        case 0: arch.SetTriple ("armv7s-apple-darwin", NULL); return true;
+        case 1: arch.SetTriple ("armv7-apple-darwin", NULL);  return true;
+        case 2: arch.SetTriple ("armv6-apple-darwin", NULL);  return true;
+        case 3: arch.SetTriple ("armv5-apple-darwin", NULL);  return true;
+        case 4: arch.SetTriple ("armv4-apple-darwin", NULL);  return true;
+        case 5: arch.SetTriple ("arm-apple-darwin", NULL);    return true;
         default: break;
         }
         break;
@@ -527,11 +527,11 @@
     case ArchSpec::eCore_arm_armv7:
         switch (idx)
         {
-        case 0: arch.SetTriple ("armv7-apple-darwin");  return true;
-        case 1: arch.SetTriple ("armv6-apple-darwin");  return true;
-        case 2: arch.SetTriple ("armv5-apple-darwin");  return true;
-        case 3: arch.SetTriple ("armv4-apple-darwin");  return true;
-        case 4: arch.SetTriple ("arm-apple-darwin");    return true;
+        case 0: arch.SetTriple ("armv7-apple-darwin", NULL);  return true;
+        case 1: arch.SetTriple ("armv6-apple-darwin", NULL);  return true;
+        case 2: arch.SetTriple ("armv5-apple-darwin", NULL);  return true;
+        case 3: arch.SetTriple ("armv4-apple-darwin", NULL);  return true;
+        case 4: arch.SetTriple ("arm-apple-darwin", NULL);    return true;
         default: break;
         }
         break;
@@ -539,10 +539,10 @@
     case ArchSpec::eCore_arm_armv6:
         switch (idx)
         {
-        case 0: arch.SetTriple ("armv6-apple-darwin");  return true;
-        case 1: arch.SetTriple ("armv5-apple-darwin");  return true;
-        case 2: arch.SetTriple ("armv4-apple-darwin");  return true;
-        case 3: arch.SetTriple ("arm-apple-darwin");    return true;
+        case 0: arch.SetTriple ("armv6-apple-darwin", NULL);  return true;
+        case 1: arch.SetTriple ("armv5-apple-darwin", NULL);  return true;
+        case 2: arch.SetTriple ("armv4-apple-darwin", NULL);  return true;
+        case 3: arch.SetTriple ("arm-apple-darwin", NULL);    return true;
         default: break;
         }
         break;
@@ -550,9 +550,9 @@
     case ArchSpec::eCore_arm_armv5:
         switch (idx)
         {
-        case 0: arch.SetTriple ("armv5-apple-darwin");  return true;
-        case 1: arch.SetTriple ("armv4-apple-darwin");  return true;
-        case 2: arch.SetTriple ("arm-apple-darwin");    return true;
+        case 0: arch.SetTriple ("armv5-apple-darwin", NULL);  return true;
+        case 1: arch.SetTriple ("armv4-apple-darwin", NULL);  return true;
+        case 2: arch.SetTriple ("arm-apple-darwin", NULL);    return true;
         default: break;
         }
         break;
@@ -560,8 +560,8 @@
     case ArchSpec::eCore_arm_armv4:
         switch (idx)
         {
-        case 0: arch.SetTriple ("armv4-apple-darwin");  return true;
-        case 1: arch.SetTriple ("arm-apple-darwin");    return true;
+        case 0: arch.SetTriple ("armv4-apple-darwin", NULL);  return true;
+        case 1: arch.SetTriple ("arm-apple-darwin", NULL);    return true;
         default: break;
         }
         break;
diff --git a/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp b/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
index 7ad3d44..2cebb10 100644
--- a/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
+++ b/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
@@ -919,7 +919,7 @@
                             triple += "unknown";
                         else
                             triple += os_name;
-                        m_host_arch.SetTriple (triple.c_str());
+                        m_host_arch.SetTriple (triple.c_str(), NULL);
                         if (pointer_byte_size)
                         {
                             assert (pointer_byte_size == m_host_arch.GetAddressByteSize());
@@ -933,7 +933,7 @@
                 }
                 else
                 {
-                    m_host_arch.SetTriple (triple.c_str());
+                    m_host_arch.SetTriple (triple.c_str(), NULL);
                     if (pointer_byte_size)
                     {
                         assert (pointer_byte_size == m_host_arch.GetAddressByteSize());
@@ -1159,7 +1159,7 @@
                 extractor.GetStringRef().swap(value);
                 extractor.SetFilePos(0);
                 extractor.GetHexByteString (value);
-                process_info.GetArchitecture ().SetTriple (value.c_str());
+                process_info.GetArchitecture ().SetTriple (value.c_str(), NULL);
             }
             else if (name.compare("name") == 0)
             {
diff --git a/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp b/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp
index d6edbdd..c243138 100644
--- a/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp
+++ b/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp
@@ -357,7 +357,7 @@
             }
             else if (key.compare("triple") == 0)
             {
-                match_info.GetProcessInfo().GetArchitecture().SetTriple(value.c_str());
+                match_info.GetProcessInfo().GetArchitecture().SetTriple (value.c_str(), NULL);
             }
             else
             {