When constructing an ArchSpec from a MachO cpu type and subtype, don't set the OS...
authorGreg Clayton <gclayton@apple.com>
Tue, 29 Jul 2014 18:04:57 +0000 (18:04 +0000)
committerGreg Clayton <gclayton@apple.com>
Tue, 29 Jul 2014 18:04:57 +0000 (18:04 +0000)
<rdar://problem/17819272>

llvm-svn: 214188

lldb/source/Core/ArchSpec.cpp
lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp

index faedcb6..c4bca8b 100644 (file)
@@ -752,6 +752,15 @@ ArchSpec::SetArchitecture (ArchitectureType arch_type, uint32_t cpu, uint32_t su
                             
                         case llvm::Triple::x86:
                         case llvm::Triple::x86_64:
+                            // Don't set the OS for x86_64 or for x86 as we want to leave it as an "unspecified unknown"
+                            // which means if we ask for the OS from the llvm::Triple we get back llvm::Triple::UnknownOS, but
+                            // if we ask for the string value for the OS it will come back empty (unspecified).
+                            // We do this because we now have iOS and MacOSX as the OS values for x86 and x86_64 for
+                            // normal desktop and simulator binaries. And if we compare a "x86_64-apple-ios" to a "x86_64-apple-"
+                            // triple, it will say it is compatible (because the OS is unspecified in the second one and will match
+                            // anything in the first
+                            break;
+
                         default:
                             m_triple.setOS (llvm::Triple::MacOSX);
                             break;
index 11b2796..fda38ea 100644 (file)
@@ -4365,10 +4365,14 @@ ObjectFileMachO::GetArchitecture (const llvm::MachO::mach_header &header,
                 offset = cmd_offset + load_cmd.cmdsize;
             }
             
+            // Only set the OS to iOS for ARM, we don't want to set it for x86 and x86_64.
+            // We do this because we now have MacOSX or iOS as the OS value for x86 and
+            // x86_64 for normal desktop (MacOSX) and simulator (iOS) binaries. And if
+            // we compare a "x86_64-apple-ios" to a "x86_64-apple-" triple, it will say
+            // it is compatible (because the OS is unspecified in the second one and will
+            // match anything in the first
             if (header.cputype == CPU_TYPE_ARM || header.cputype == CPU_TYPE_ARM64)
                 triple.setOS (llvm::Triple::IOS);
-            else
-                triple.setOS (llvm::Triple::MacOSX);
         }
     }
     return arch.IsValid();