Change Target & Process so they can really be initialized with an invalid architecture. 
Arrange that this then gets properly set on attach, or when a "file" is set.
Add a completer for "process attach -n".

Caveats: there isn't currently a way to handle multiple processes with the same name.  That
will have to wait on a way to pass annotations along with the completion strings.

llvm-svn: 110624
diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
index 032fb75..1568639 100644
--- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -145,6 +145,13 @@
 {
 }
 
+bool
+ObjectFileELF::IsExecutable() const
+{
+    // FIXME: How is this marked in ELF?
+    return false;
+}
+
 ByteOrder
 ObjectFileELF::GetByteOrder() const
 {
diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h
index 7c941a7..dcee1ad 100644
--- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h
+++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h
@@ -86,6 +86,9 @@
     virtual lldb::ByteOrder
     GetByteOrder() const;
 
+    virtual bool
+    IsExecutable () const;
+
     virtual size_t
     GetAddressByteSize() const;
 
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
index c0d7eec..9d05fac 100644
--- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -161,7 +161,8 @@
         m_data.GetU32(&offset, &m_header.cputype, 6);
 
         ArchSpec mach_arch(eArchTypeMachO, m_header.cputype, m_header.cpusubtype);
-        if (mach_arch == m_module->GetArchitecture())
+        
+        if (SetModulesArchitecture (mach_arch))
         {
             // Read in all only the load command data
             DataBufferSP data_sp(m_file.ReadFileContents(m_offset, m_header.sizeofcmds + MachHeaderSizeFromMagic(m_header.magic)));
@@ -184,6 +185,11 @@
     return m_data.GetByteOrder ();
 }
 
+bool
+ObjectFileMachO::IsExecutable() const
+{
+    return m_header.filetype == HeaderFileTypeExecutable;
+}
 
 size_t
 ObjectFileMachO::GetAddressByteSize () const
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h
index d00ae0d..d3000f4 100644
--- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h
+++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h
@@ -66,6 +66,9 @@
 
     virtual lldb::ByteOrder
     GetByteOrder () const;
+    
+    virtual bool
+    IsExecutable () const;
 
     virtual size_t
     GetAddressByteSize ()  const;