diff options
author | Greg Clayton <gclayton@apple.com> | 2015-01-22 18:25:49 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2015-01-22 18:25:49 +0000 |
commit | cd6bbba18612654fdc8aa2508202333694b207ab (patch) | |
tree | b42efb5a23a2ab80b6436f0446db78fe528f5976 /lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp | |
parent | 37c41c1d2c787ebc51fe40d1cc0d14e57f4b648d (diff) | |
download | bcm5719-llvm-cd6bbba18612654fdc8aa2508202333694b207ab.tar.gz bcm5719-llvm-cd6bbba18612654fdc8aa2508202333694b207ab.zip |
Fix the -*-version-min option to not try and use the current OS version for iOS and the simulator since llvm/clang will assert and kill LLDB.
llvm-svn: 226846
Diffstat (limited to 'lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp')
-rw-r--r-- | lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp | 79 |
1 files changed, 59 insertions, 20 deletions
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp index cf1d1529f2e..5fb43c6d4c1 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp @@ -1419,7 +1419,7 @@ PlatformDarwin::GetSDKDirectoryForModules (SDKType sdk_type) } void -PlatformDarwin::AddClangModuleCompilationOptionsForSDKType (std::vector<std::string> &options, SDKType sdk_type) +PlatformDarwin::AddClangModuleCompilationOptionsForSDKType (Target *target, std::vector<std::string> &options, SDKType sdk_type) { const std::vector<std::string> apple_arguments = { @@ -1435,28 +1435,67 @@ PlatformDarwin::AddClangModuleCompilationOptionsForSDKType (std::vector<std::str apple_arguments.end()); StreamString minimum_version_option; - unsigned int major = 0, minor = 0, micro = 0; - GetOSVersion(major, minor, micro); - if (micro == UINT32_MAX) - micro = 0; // FIXME who actually likes this behavior? - + uint32_t versions[3] = { 0, 0, 0 }; + bool use_current_os_version = false; switch (sdk_type) { - case SDKType::iPhoneOS: - minimum_version_option.PutCString("-mios-version-min="); - minimum_version_option.PutCString(clang::VersionTuple(major, minor, micro).getAsString().c_str()); - break; - case SDKType::iPhoneSimulator: - minimum_version_option.PutCString("-mios-simulator-version-min="); - minimum_version_option.PutCString(clang::VersionTuple(major, minor, micro).getAsString().c_str()); - break; - case SDKType::MacOSX: - minimum_version_option.PutCString("-mmacosx-version-min="); - minimum_version_option.PutCString(clang::VersionTuple(major, minor, micro).getAsString().c_str()); + case SDKType::iPhoneOS: +#if defined (__arm__) || defined (__arm64__) || defined (__aarch64__) + use_current_os_version = true; +#else + use_current_os_version = false; +#endif + break; + + case SDKType::iPhoneSimulator: + use_current_os_version = false; + break; + + case SDKType::MacOSX: +#if defined (__i386__) || defined (__x86_64__) + use_current_os_version = true; +#else + use_current_os_version = false; +#endif + break; } - - options.push_back(minimum_version_option.GetString()); - + + if (use_current_os_version) + GetOSVersion(versions[0], versions[1], versions[2]); + else if (target) + { + // Our OS doesn't match our executable so we need to get the min OS version from the object file + ModuleSP exe_module_sp = target->GetExecutableModule(); + if (exe_module_sp) + { + ObjectFile *object_file = exe_module_sp->GetObjectFile(); + if (object_file) + object_file->GetMinimumOSVersion(versions, 3); + } + } + // Only add the version-min options if we got a version from somewhere + if (versions[0]) + { + if (versions[2] == UINT32_MAX) + versions[2] = 0; // FIXME who actually likes this behavior? + + switch (sdk_type) + { + case SDKType::iPhoneOS: + minimum_version_option.PutCString("-mios-version-min="); + minimum_version_option.PutCString(clang::VersionTuple(versions[0], versions[1], versions[2]).getAsString().c_str()); + break; + case SDKType::iPhoneSimulator: + minimum_version_option.PutCString("-mios-simulator-version-min="); + minimum_version_option.PutCString(clang::VersionTuple(versions[0], versions[1], versions[2]).getAsString().c_str()); + break; + case SDKType::MacOSX: + minimum_version_option.PutCString("-mmacosx-version-min="); + minimum_version_option.PutCString(clang::VersionTuple(versions[0], versions[1], versions[2]).getAsString().c_str()); + } + options.push_back(minimum_version_option.GetString()); + } + FileSpec sysroot_spec = GetSDKDirectoryForModules(sdk_type); if (sysroot_spec.IsDirectory()) |