The change was made so we could re-use a platform if one was already created instead of creating a new one, but it would fail in the above case. To fix this, if we have a selected platform, we verify that the platform matches the current platform before we try to re-use it. We do this by asking the OptionGroupPlatform if the platform matches. If so, it returns true and we don't create a new platform, else we do.
llvm-svn: 227288
SetSDKBuild (const ConstString &sdk_build)
{
m_sdk_build = sdk_build;
- }
-
+ }
+
+ bool
+ PlatformMatches(const lldb::PlatformSP &platform_sp) const;
protected:
std::string m_platform_name;
}
return error;
}
+
+bool
+OptionGroupPlatform::PlatformMatches(const lldb::PlatformSP &platform_sp) const
+{
+ if (platform_sp)
+ {
+ if (!m_platform_name.empty())
+ {
+ if (platform_sp->GetName() != ConstString(m_platform_name.c_str()))
+ return false;
+ }
+
+ if (m_sdk_build && m_sdk_build != platform_sp->GetSDKBuild())
+ return false;
+
+ if (m_sdk_sysroot && m_sdk_sysroot != platform_sp->GetSDKRootDirectory())
+ return false;
+
+ if (m_os_version_major != UINT32_MAX)
+ {
+ uint32_t major, minor, update;
+ if (platform_sp->GetOSVersion (major, minor, update))
+ {
+ if (m_os_version_major != major)
+ return false;
+ if (m_os_version_minor != minor)
+ return false;
+ if (m_os_version_update != update)
+ return false;
+ }
+ }
+ return true;
+ }
+ return false;
+}
// let's see if there is already an existing plaform before we go creating another...
platform_sp = debugger.GetPlatformList().GetSelectedPlatform();
- if (!platform_sp && platform_options && platform_options->PlatformWasSpecified ())
+ if (platform_options && platform_options->PlatformWasSpecified ())
{
- const bool select_platform = true;
- platform_sp = platform_options->CreatePlatformWithOptions (interpreter,
- arch,
- select_platform,
- error,
- platform_arch);
- if (!platform_sp)
- return error;
+ // Create a new platform if it doesn't match the selected platform
+ if (!platform_options->PlatformMatches(platform_sp))
+ {
+ const bool select_platform = true;
+ platform_sp = platform_options->CreatePlatformWithOptions (interpreter,
+ arch,
+ select_platform,
+ error,
+ platform_arch);
+ if (!platform_sp)
+ return error;
+ }
}
if (user_exe_path && user_exe_path[0])