mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-04-01 12:43:47 +00:00
Changes in 226712 needed some fixing as a platform is almost always selected and even if platform options are specified when doing a "target create" they would get ignored if a platform was already selected.
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
This commit is contained in:
parent
33c9433ed4
commit
ccd2a6d958
@ -102,8 +102,10 @@ public:
|
||||
SetSDKBuild (const ConstString &sdk_build)
|
||||
{
|
||||
m_sdk_build = sdk_build;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool
|
||||
PlatformMatches(const lldb::PlatformSP &platform_sp) const;
|
||||
|
||||
protected:
|
||||
std::string m_platform_name;
|
||||
|
@ -147,3 +147,38 @@ OptionGroupPlatform::SetOptionValue (CommandInterpreter &interpreter,
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
@ -130,16 +130,20 @@ TargetList::CreateTargetInternal (Debugger &debugger,
|
||||
// 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])
|
||||
|
Loading…
x
Reference in New Issue
Block a user