forked from OSchip/llvm-project
[lldb] Plumb process host architecture through platform selection
To allow us to select a different platform based on where the process is running, plumb the process host architecture through platform selection. This patch is in preparation for D121444 which needs this functionality to tell apart iOS binaries running on Apple Silicon vs on a remote iOS device. Differential revision: https://reviews.llvm.org/D121484
This commit is contained in:
parent
c7cf960d85
commit
dde487e547
|
@ -95,7 +95,9 @@ public:
|
||||||
static lldb::PlatformSP GetHostPlatform();
|
static lldb::PlatformSP GetHostPlatform();
|
||||||
|
|
||||||
static lldb::PlatformSP
|
static lldb::PlatformSP
|
||||||
GetPlatformForArchitecture(const ArchSpec &arch, ArchSpec *platform_arch_ptr);
|
GetPlatformForArchitecture(const ArchSpec &arch,
|
||||||
|
const ArchSpec &process_host_arch = {},
|
||||||
|
ArchSpec *platform_arch_ptr = nullptr);
|
||||||
|
|
||||||
static const char *GetHostPlatformName();
|
static const char *GetHostPlatformName();
|
||||||
|
|
||||||
|
@ -107,6 +109,7 @@ public:
|
||||||
static lldb::PlatformSP Create(ConstString name, Status &error);
|
static lldb::PlatformSP Create(ConstString name, Status &error);
|
||||||
|
|
||||||
static lldb::PlatformSP Create(const ArchSpec &arch,
|
static lldb::PlatformSP Create(const ArchSpec &arch,
|
||||||
|
const ArchSpec &process_host_arch,
|
||||||
ArchSpec *platform_arch_ptr, Status &error);
|
ArchSpec *platform_arch_ptr, Status &error);
|
||||||
|
|
||||||
/// Augments the triple either with information from platform or the host
|
/// Augments the triple either with information from platform or the host
|
||||||
|
@ -310,7 +313,8 @@ public:
|
||||||
|
|
||||||
/// Get the platform's supported architectures in the order in which they
|
/// Get the platform's supported architectures in the order in which they
|
||||||
/// should be searched.
|
/// should be searched.
|
||||||
virtual std::vector<ArchSpec> GetSupportedArchitectures() = 0;
|
virtual std::vector<ArchSpec>
|
||||||
|
GetSupportedArchitectures(const ArchSpec &process_host_arch) = 0;
|
||||||
|
|
||||||
virtual size_t GetSoftwareBreakpointTrapOpcode(Target &target,
|
virtual size_t GetSoftwareBreakpointTrapOpcode(Target &target,
|
||||||
BreakpointSite *bp_site);
|
BreakpointSite *bp_site);
|
||||||
|
@ -332,6 +336,7 @@ public:
|
||||||
/// Lets a platform answer if it is compatible with a given architecture and
|
/// Lets a platform answer if it is compatible with a given architecture and
|
||||||
/// the target triple contained within.
|
/// the target triple contained within.
|
||||||
virtual bool IsCompatibleArchitecture(const ArchSpec &arch,
|
virtual bool IsCompatibleArchitecture(const ArchSpec &arch,
|
||||||
|
const ArchSpec &process_host_arch,
|
||||||
bool exact_arch_match,
|
bool exact_arch_match,
|
||||||
ArchSpec *compatible_arch_ptr);
|
ArchSpec *compatible_arch_ptr);
|
||||||
|
|
||||||
|
|
|
@ -23,8 +23,8 @@ PlatformSP OptionGroupPlatform::CreatePlatformWithOptions(
|
||||||
if (!m_platform_name.empty()) {
|
if (!m_platform_name.empty()) {
|
||||||
platform_sp = Platform::Create(ConstString(m_platform_name.c_str()), error);
|
platform_sp = Platform::Create(ConstString(m_platform_name.c_str()), error);
|
||||||
if (platform_sp) {
|
if (platform_sp) {
|
||||||
if (platform_arch.IsValid() &&
|
if (platform_arch.IsValid() && !platform_sp->IsCompatibleArchitecture(
|
||||||
!platform_sp->IsCompatibleArchitecture(arch, false, &platform_arch)) {
|
arch, {}, false, &platform_arch)) {
|
||||||
error.SetErrorStringWithFormatv("platform '{0}' doesn't support '{1}'",
|
error.SetErrorStringWithFormatv("platform '{0}' doesn't support '{1}'",
|
||||||
platform_sp->GetPluginName(),
|
platform_sp->GetPluginName(),
|
||||||
arch.GetTriple().getTriple());
|
arch.GetTriple().getTriple());
|
||||||
|
@ -33,7 +33,7 @@ PlatformSP OptionGroupPlatform::CreatePlatformWithOptions(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (arch.IsValid()) {
|
} else if (arch.IsValid()) {
|
||||||
platform_sp = Platform::Create(arch, &platform_arch, error);
|
platform_sp = Platform::Create(arch, {}, &platform_arch, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (platform_sp) {
|
if (platform_sp) {
|
||||||
|
|
|
@ -129,9 +129,10 @@ PlatformFreeBSD::PlatformFreeBSD(bool is_host)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ArchSpec> PlatformFreeBSD::GetSupportedArchitectures() {
|
std::vector<ArchSpec>
|
||||||
|
PlatformFreeBSD::GetSupportedArchitectures(const ArchSpec &process_host_arch) {
|
||||||
if (m_remote_platform_sp)
|
if (m_remote_platform_sp)
|
||||||
return m_remote_platform_sp->GetSupportedArchitectures();
|
return m_remote_platform_sp->GetSupportedArchitectures(process_host_arch);
|
||||||
return m_supported_architectures;
|
return m_supported_architectures;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,8 @@ public:
|
||||||
|
|
||||||
void GetStatus(Stream &strm) override;
|
void GetStatus(Stream &strm) override;
|
||||||
|
|
||||||
std::vector<ArchSpec> GetSupportedArchitectures() override;
|
std::vector<ArchSpec>
|
||||||
|
GetSupportedArchitectures(const ArchSpec &process_host_arch) override;
|
||||||
|
|
||||||
bool CanDebugProcess() override;
|
bool CanDebugProcess() override;
|
||||||
|
|
||||||
|
|
|
@ -128,9 +128,10 @@ PlatformLinux::PlatformLinux(bool is_host)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ArchSpec> PlatformLinux::GetSupportedArchitectures() {
|
std::vector<ArchSpec>
|
||||||
|
PlatformLinux::GetSupportedArchitectures(const ArchSpec &process_host_arch) {
|
||||||
if (m_remote_platform_sp)
|
if (m_remote_platform_sp)
|
||||||
return m_remote_platform_sp->GetSupportedArchitectures();
|
return m_remote_platform_sp->GetSupportedArchitectures(process_host_arch);
|
||||||
return m_supported_architectures;
|
return m_supported_architectures;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,8 @@ public:
|
||||||
|
|
||||||
void GetStatus(Stream &strm) override;
|
void GetStatus(Stream &strm) override;
|
||||||
|
|
||||||
std::vector<ArchSpec> GetSupportedArchitectures() override;
|
std::vector<ArchSpec>
|
||||||
|
GetSupportedArchitectures(const ArchSpec &process_host_arch) override;
|
||||||
|
|
||||||
uint32_t GetResumeCountForLaunchInfo(ProcessLaunchInfo &launch_info) override;
|
uint32_t GetResumeCountForLaunchInfo(ProcessLaunchInfo &launch_info) override;
|
||||||
|
|
||||||
|
|
|
@ -266,7 +266,8 @@ CoreSimulatorSupport::Device PlatformAppleSimulator::GetSimulatorDevice() {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
std::vector<ArchSpec> PlatformAppleSimulator::GetSupportedArchitectures() {
|
std::vector<ArchSpec> PlatformAppleSimulator::GetSupportedArchitectures(
|
||||||
|
const ArchSpec &process_host_arch) {
|
||||||
std::vector<ArchSpec> result(m_supported_triples.size());
|
std::vector<ArchSpec> result(m_supported_triples.size());
|
||||||
llvm::transform(m_supported_triples, result.begin(),
|
llvm::transform(m_supported_triples, result.begin(),
|
||||||
[](llvm::StringRef triple) { return ArchSpec(triple); });
|
[](llvm::StringRef triple) { return ArchSpec(triple); });
|
||||||
|
@ -382,7 +383,7 @@ Status PlatformAppleSimulator::ResolveExecutable(
|
||||||
StreamString arch_names;
|
StreamString arch_names;
|
||||||
llvm::ListSeparator LS;
|
llvm::ListSeparator LS;
|
||||||
ArchSpec platform_arch;
|
ArchSpec platform_arch;
|
||||||
for (const ArchSpec &arch : GetSupportedArchitectures()) {
|
for (const ArchSpec &arch : GetSupportedArchitectures({})) {
|
||||||
resolved_module_spec.GetArchitecture() = arch;
|
resolved_module_spec.GetArchitecture() = arch;
|
||||||
|
|
||||||
// Only match x86 with x86 and x86_64 with x86_64...
|
// Only match x86 with x86 and x86_64 with x86_64...
|
||||||
|
|
|
@ -65,7 +65,8 @@ public:
|
||||||
lldb_private::Target &target,
|
lldb_private::Target &target,
|
||||||
lldb_private::Status &error) override;
|
lldb_private::Status &error) override;
|
||||||
|
|
||||||
std::vector<lldb_private::ArchSpec> GetSupportedArchitectures() override;
|
std::vector<lldb_private::ArchSpec> GetSupportedArchitectures(
|
||||||
|
const lldb_private::ArchSpec &process_host_arch) override;
|
||||||
|
|
||||||
lldb_private::Status ResolveExecutable(
|
lldb_private::Status ResolveExecutable(
|
||||||
const lldb_private::ModuleSpec &module_spec, lldb::ModuleSP &module_sp,
|
const lldb_private::ModuleSpec &module_spec, lldb::ModuleSP &module_sp,
|
||||||
|
|
|
@ -909,7 +909,8 @@ Status PlatformDarwinKernel::ExamineKextForMatchingUUID(
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ArchSpec> PlatformDarwinKernel::GetSupportedArchitectures() {
|
std::vector<ArchSpec> PlatformDarwinKernel::GetSupportedArchitectures(
|
||||||
|
const ArchSpec &process_host_arch) {
|
||||||
std::vector<ArchSpec> result;
|
std::vector<ArchSpec> result;
|
||||||
#if defined(__arm__) || defined(__arm64__) || defined(__aarch64__)
|
#if defined(__arm__) || defined(__arm64__) || defined(__aarch64__)
|
||||||
ARMGetSupportedArchitectures(result);
|
ARMGetSupportedArchitectures(result);
|
||||||
|
|
|
@ -56,7 +56,8 @@ public:
|
||||||
llvm::SmallVectorImpl<lldb::ModuleSP> *old_modules,
|
llvm::SmallVectorImpl<lldb::ModuleSP> *old_modules,
|
||||||
bool *did_create_ptr) override;
|
bool *did_create_ptr) override;
|
||||||
|
|
||||||
std::vector<lldb_private::ArchSpec> GetSupportedArchitectures() override;
|
std::vector<lldb_private::ArchSpec> GetSupportedArchitectures(
|
||||||
|
const lldb_private::ArchSpec &process_host_arch) override;
|
||||||
|
|
||||||
bool SupportsModules() override { return false; }
|
bool SupportsModules() override { return false; }
|
||||||
|
|
||||||
|
|
|
@ -133,7 +133,8 @@ ConstString PlatformMacOSX::GetSDKDirectory(lldb_private::Target &target) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ArchSpec> PlatformMacOSX::GetSupportedArchitectures() {
|
std::vector<ArchSpec>
|
||||||
|
PlatformMacOSX::GetSupportedArchitectures(const ArchSpec &process_host_arch) {
|
||||||
std::vector<ArchSpec> result;
|
std::vector<ArchSpec> result;
|
||||||
#if defined(__arm__) || defined(__arm64__) || defined(__aarch64__)
|
#if defined(__arm__) || defined(__arm64__) || defined(__aarch64__)
|
||||||
// macOS for ARM64 support both native and translated x86_64 processes
|
// macOS for ARM64 support both native and translated x86_64 processes
|
||||||
|
|
|
@ -47,7 +47,8 @@ public:
|
||||||
return PlatformDarwin::GetFile(source, destination);
|
return PlatformDarwin::GetFile(source, destination);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<lldb_private::ArchSpec> GetSupportedArchitectures() override;
|
std::vector<lldb_private::ArchSpec> GetSupportedArchitectures(
|
||||||
|
const lldb_private::ArchSpec &process_host_arch) override;
|
||||||
|
|
||||||
lldb_private::ConstString
|
lldb_private::ConstString
|
||||||
GetSDKDirectory(lldb_private::Target &target) override;
|
GetSDKDirectory(lldb_private::Target &target) override;
|
||||||
|
|
|
@ -138,7 +138,8 @@ llvm::StringRef PlatformRemoteAppleBridge::GetDescriptionStatic() {
|
||||||
return "Remote BridgeOS platform plug-in.";
|
return "Remote BridgeOS platform plug-in.";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ArchSpec> PlatformRemoteAppleBridge::GetSupportedArchitectures() {
|
std::vector<ArchSpec> PlatformRemoteAppleBridge::GetSupportedArchitectures(
|
||||||
|
const ArchSpec &process_host_arch) {
|
||||||
return {ArchSpec("arm64-apple-bridgeos")};
|
return {ArchSpec("arm64-apple-bridgeos")};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,8 @@ public:
|
||||||
|
|
||||||
llvm::StringRef GetDescription() override { return GetDescriptionStatic(); }
|
llvm::StringRef GetDescription() override { return GetDescriptionStatic(); }
|
||||||
|
|
||||||
std::vector<lldb_private::ArchSpec> GetSupportedArchitectures() override;
|
std::vector<lldb_private::ArchSpec> GetSupportedArchitectures(
|
||||||
|
const lldb_private::ArchSpec &process_host_arch) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
llvm::StringRef GetDeviceSupportDirectoryName() override;
|
llvm::StringRef GetDeviceSupportDirectoryName() override;
|
||||||
|
|
|
@ -133,7 +133,8 @@ llvm::StringRef PlatformRemoteAppleTV::GetDescriptionStatic() {
|
||||||
return "Remote Apple TV platform plug-in.";
|
return "Remote Apple TV platform plug-in.";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ArchSpec> PlatformRemoteAppleTV::GetSupportedArchitectures() {
|
std::vector<ArchSpec> PlatformRemoteAppleTV::GetSupportedArchitectures(
|
||||||
|
const ArchSpec &process_host_arch) {
|
||||||
ArchSpec system_arch(GetSystemArchitecture());
|
ArchSpec system_arch(GetSystemArchitecture());
|
||||||
|
|
||||||
const ArchSpec::Core system_core = system_arch.GetCore();
|
const ArchSpec::Core system_core = system_arch.GetCore();
|
||||||
|
|
|
@ -40,7 +40,8 @@ public:
|
||||||
|
|
||||||
llvm::StringRef GetDescription() override { return GetDescriptionStatic(); }
|
llvm::StringRef GetDescription() override { return GetDescriptionStatic(); }
|
||||||
|
|
||||||
std::vector<lldb_private::ArchSpec> GetSupportedArchitectures() override;
|
std::vector<lldb_private::ArchSpec> GetSupportedArchitectures(
|
||||||
|
const lldb_private::ArchSpec &process_host_arch) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
llvm::StringRef GetDeviceSupportDirectoryName() override;
|
llvm::StringRef GetDeviceSupportDirectoryName() override;
|
||||||
|
|
|
@ -144,7 +144,8 @@ llvm::StringRef PlatformRemoteAppleWatch::GetDescriptionStatic() {
|
||||||
PlatformRemoteAppleWatch::PlatformRemoteAppleWatch()
|
PlatformRemoteAppleWatch::PlatformRemoteAppleWatch()
|
||||||
: PlatformRemoteDarwinDevice() {}
|
: PlatformRemoteDarwinDevice() {}
|
||||||
|
|
||||||
std::vector<ArchSpec> PlatformRemoteAppleWatch::GetSupportedArchitectures() {
|
std::vector<ArchSpec>
|
||||||
|
PlatformRemoteAppleWatch::GetSupportedArchitectures(const ArchSpec &host_info) {
|
||||||
ArchSpec system_arch(GetSystemArchitecture());
|
ArchSpec system_arch(GetSystemArchitecture());
|
||||||
|
|
||||||
const ArchSpec::Core system_core = system_arch.GetCore();
|
const ArchSpec::Core system_core = system_arch.GetCore();
|
||||||
|
|
|
@ -43,7 +43,8 @@ public:
|
||||||
|
|
||||||
// lldb_private::Platform functions
|
// lldb_private::Platform functions
|
||||||
|
|
||||||
std::vector<lldb_private::ArchSpec> GetSupportedArchitectures() override;
|
std::vector<lldb_private::ArchSpec> GetSupportedArchitectures(
|
||||||
|
const lldb_private::ArchSpec &process_host_arch) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
llvm::StringRef GetDeviceSupportDirectoryName() override;
|
llvm::StringRef GetDeviceSupportDirectoryName() override;
|
||||||
|
|
|
@ -92,7 +92,8 @@ Status PlatformRemoteDarwinDevice::ResolveExecutable(
|
||||||
// the correct order) and see if we can find a match that way
|
// the correct order) and see if we can find a match that way
|
||||||
StreamString arch_names;
|
StreamString arch_names;
|
||||||
llvm::ListSeparator LS;
|
llvm::ListSeparator LS;
|
||||||
for (const ArchSpec &arch : GetSupportedArchitectures()) {
|
ArchSpec process_host_arch;
|
||||||
|
for (const ArchSpec &arch : GetSupportedArchitectures(process_host_arch)) {
|
||||||
resolved_module_spec.GetArchitecture() = arch;
|
resolved_module_spec.GetArchitecture() = arch;
|
||||||
error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
|
error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
|
||||||
nullptr, nullptr, nullptr);
|
nullptr, nullptr, nullptr);
|
||||||
|
|
|
@ -125,7 +125,8 @@ PlatformSP PlatformRemoteMacOSX::CreateInstance(bool force,
|
||||||
return PlatformSP();
|
return PlatformSP();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ArchSpec> PlatformRemoteMacOSX::GetSupportedArchitectures() {
|
std::vector<ArchSpec>
|
||||||
|
PlatformRemoteMacOSX::GetSupportedArchitectures(const ArchSpec &host_info) {
|
||||||
// macOS for ARM64 support both native and translated x86_64 processes
|
// macOS for ARM64 support both native and translated x86_64 processes
|
||||||
std::vector<ArchSpec> result;
|
std::vector<ArchSpec> result;
|
||||||
ARMGetSupportedArchitectures(result, llvm::Triple::MacOSX);
|
ARMGetSupportedArchitectures(result, llvm::Triple::MacOSX);
|
||||||
|
|
|
@ -42,7 +42,8 @@ public:
|
||||||
const lldb_private::UUID *uuid_ptr,
|
const lldb_private::UUID *uuid_ptr,
|
||||||
lldb_private::FileSpec &local_file) override;
|
lldb_private::FileSpec &local_file) override;
|
||||||
|
|
||||||
std::vector<lldb_private::ArchSpec> GetSupportedArchitectures() override;
|
std::vector<lldb_private::ArchSpec> GetSupportedArchitectures(
|
||||||
|
const lldb_private::ArchSpec &process_host_arch) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
llvm::StringRef GetDeviceSupportDirectoryName() override;
|
llvm::StringRef GetDeviceSupportDirectoryName() override;
|
||||||
|
|
|
@ -134,7 +134,8 @@ llvm::StringRef PlatformRemoteiOS::GetDescriptionStatic() {
|
||||||
PlatformRemoteiOS::PlatformRemoteiOS()
|
PlatformRemoteiOS::PlatformRemoteiOS()
|
||||||
: PlatformRemoteDarwinDevice() {}
|
: PlatformRemoteDarwinDevice() {}
|
||||||
|
|
||||||
std::vector<ArchSpec> PlatformRemoteiOS::GetSupportedArchitectures() {
|
std::vector<ArchSpec> PlatformRemoteiOS::GetSupportedArchitectures(
|
||||||
|
const ArchSpec &process_host_arch) {
|
||||||
std::vector<ArchSpec> result;
|
std::vector<ArchSpec> result;
|
||||||
ARMGetSupportedArchitectures(result, llvm::Triple::IOS);
|
ARMGetSupportedArchitectures(result, llvm::Triple::IOS);
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -39,7 +39,8 @@ public:
|
||||||
// lldb_private::PluginInterface functions
|
// lldb_private::PluginInterface functions
|
||||||
llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
|
llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
|
||||||
|
|
||||||
std::vector<lldb_private::ArchSpec> GetSupportedArchitectures() override;
|
std::vector<lldb_private::ArchSpec> GetSupportedArchitectures(
|
||||||
|
const lldb_private::ArchSpec &process_host_arch) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool CheckLocalSharedCache() const override;
|
bool CheckLocalSharedCache() const override;
|
||||||
|
|
|
@ -115,9 +115,10 @@ PlatformNetBSD::PlatformNetBSD(bool is_host)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ArchSpec> PlatformNetBSD::GetSupportedArchitectures() {
|
std::vector<ArchSpec>
|
||||||
|
PlatformNetBSD::GetSupportedArchitectures(const ArchSpec &process_host_arch) {
|
||||||
if (m_remote_platform_sp)
|
if (m_remote_platform_sp)
|
||||||
return m_remote_platform_sp->GetSupportedArchitectures();
|
return m_remote_platform_sp->GetSupportedArchitectures(process_host_arch);
|
||||||
return m_supported_architectures;
|
return m_supported_architectures;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,8 @@ public:
|
||||||
|
|
||||||
void GetStatus(Stream &strm) override;
|
void GetStatus(Stream &strm) override;
|
||||||
|
|
||||||
std::vector<ArchSpec> GetSupportedArchitectures() override;
|
std::vector<ArchSpec>
|
||||||
|
GetSupportedArchitectures(const ArchSpec &process_host_arch) override;
|
||||||
|
|
||||||
uint32_t GetResumeCountForLaunchInfo(ProcessLaunchInfo &launch_info) override;
|
uint32_t GetResumeCountForLaunchInfo(ProcessLaunchInfo &launch_info) override;
|
||||||
|
|
||||||
|
|
|
@ -118,9 +118,10 @@ PlatformOpenBSD::PlatformOpenBSD(bool is_host)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ArchSpec> PlatformOpenBSD::GetSupportedArchitectures() {
|
std::vector<ArchSpec>
|
||||||
|
PlatformOpenBSD::GetSupportedArchitectures(const ArchSpec &process_host_arch) {
|
||||||
if (m_remote_platform_sp)
|
if (m_remote_platform_sp)
|
||||||
return m_remote_platform_sp->GetSupportedArchitectures();
|
return m_remote_platform_sp->GetSupportedArchitectures(process_host_arch);
|
||||||
return m_supported_architectures;
|
return m_supported_architectures;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,8 @@ public:
|
||||||
|
|
||||||
void GetStatus(Stream &strm) override;
|
void GetStatus(Stream &strm) override;
|
||||||
|
|
||||||
std::vector<ArchSpec> GetSupportedArchitectures() override;
|
std::vector<ArchSpec>
|
||||||
|
GetSupportedArchitectures(const ArchSpec &process_host_arch) override;
|
||||||
|
|
||||||
bool CanDebugProcess() override;
|
bool CanDebugProcess() override;
|
||||||
|
|
||||||
|
|
|
@ -106,7 +106,8 @@ PlatformSP PlatformQemuUser::CreateInstance(bool force, const ArchSpec *arch) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ArchSpec> PlatformQemuUser::GetSupportedArchitectures() {
|
std::vector<ArchSpec>
|
||||||
|
PlatformQemuUser::GetSupportedArchitectures(const ArchSpec &process_host_arch) {
|
||||||
llvm::Triple triple = HostInfo::GetArchitecture().GetTriple();
|
llvm::Triple triple = HostInfo::GetArchitecture().GetTriple();
|
||||||
triple.setEnvironment(llvm::Triple::UnknownEnvironment);
|
triple.setEnvironment(llvm::Triple::UnknownEnvironment);
|
||||||
triple.setArchName(GetGlobalProperties().GetArchitecture());
|
triple.setArchName(GetGlobalProperties().GetArchitecture());
|
||||||
|
|
|
@ -29,7 +29,8 @@ public:
|
||||||
return HostInfo::GetUserIDResolver();
|
return HostInfo::GetUserIDResolver();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ArchSpec> GetSupportedArchitectures() override;
|
std::vector<ArchSpec>
|
||||||
|
GetSupportedArchitectures(const ArchSpec &process_host_arch) override;
|
||||||
|
|
||||||
lldb::ProcessSP DebugProcess(ProcessLaunchInfo &launch_info,
|
lldb::ProcessSP DebugProcess(ProcessLaunchInfo &launch_info,
|
||||||
Debugger &debugger, Target &target,
|
Debugger &debugger, Target &target,
|
||||||
|
|
|
@ -63,7 +63,8 @@ public:
|
||||||
lldb_private::Target *target,
|
lldb_private::Target *target,
|
||||||
lldb_private::Status &error) override;
|
lldb_private::Status &error) override;
|
||||||
|
|
||||||
std::vector<ArchSpec> GetSupportedArchitectures() override {
|
std::vector<ArchSpec>
|
||||||
|
GetSupportedArchitectures(const ArchSpec &process_host_arch) override {
|
||||||
return m_supported_architectures;
|
return m_supported_architectures;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,8 @@ public:
|
||||||
// target, else use existing one
|
// target, else use existing one
|
||||||
Status &error) override;
|
Status &error) override;
|
||||||
|
|
||||||
std::vector<ArchSpec> GetSupportedArchitectures() override {
|
std::vector<ArchSpec>
|
||||||
|
GetSupportedArchitectures(const ArchSpec &process_host_arch) override {
|
||||||
return m_supported_architectures;
|
return m_supported_architectures;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -314,8 +314,9 @@ PlatformSP Platform::Create(ConstString name, Status &error) {
|
||||||
return platform_sp;
|
return platform_sp;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlatformSP Platform::Create(const ArchSpec &arch, ArchSpec *platform_arch_ptr,
|
PlatformSP Platform::Create(const ArchSpec &arch,
|
||||||
Status &error) {
|
const ArchSpec &process_host_arch,
|
||||||
|
ArchSpec *platform_arch_ptr, Status &error) {
|
||||||
lldb::PlatformSP platform_sp;
|
lldb::PlatformSP platform_sp;
|
||||||
if (arch.IsValid()) {
|
if (arch.IsValid()) {
|
||||||
// Scope for locker
|
// Scope for locker
|
||||||
|
@ -323,15 +324,15 @@ PlatformSP Platform::Create(const ArchSpec &arch, ArchSpec *platform_arch_ptr,
|
||||||
// First try exact arch matches across all platforms already created
|
// First try exact arch matches across all platforms already created
|
||||||
std::lock_guard<std::recursive_mutex> guard(GetPlatformListMutex());
|
std::lock_guard<std::recursive_mutex> guard(GetPlatformListMutex());
|
||||||
for (const auto &platform_sp : GetPlatformList()) {
|
for (const auto &platform_sp : GetPlatformList()) {
|
||||||
if (platform_sp->IsCompatibleArchitecture(arch, true,
|
if (platform_sp->IsCompatibleArchitecture(arch, process_host_arch, true,
|
||||||
platform_arch_ptr))
|
platform_arch_ptr))
|
||||||
return platform_sp;
|
return platform_sp;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Next try compatible arch matches across all platforms already created
|
// Next try compatible arch matches across all platforms already created
|
||||||
for (const auto &platform_sp : GetPlatformList()) {
|
for (const auto &platform_sp : GetPlatformList()) {
|
||||||
if (platform_sp->IsCompatibleArchitecture(arch, false,
|
if (platform_sp->IsCompatibleArchitecture(arch, process_host_arch,
|
||||||
platform_arch_ptr))
|
false, platform_arch_ptr))
|
||||||
return platform_sp;
|
return platform_sp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -345,7 +346,7 @@ PlatformSP Platform::Create(const ArchSpec &arch, ArchSpec *platform_arch_ptr,
|
||||||
if (create_callback) {
|
if (create_callback) {
|
||||||
platform_sp = create_callback(false, &arch);
|
platform_sp = create_callback(false, &arch);
|
||||||
if (platform_sp &&
|
if (platform_sp &&
|
||||||
platform_sp->IsCompatibleArchitecture(arch, true,
|
platform_sp->IsCompatibleArchitecture(arch, process_host_arch, true,
|
||||||
platform_arch_ptr)) {
|
platform_arch_ptr)) {
|
||||||
std::lock_guard<std::recursive_mutex> guard(GetPlatformListMutex());
|
std::lock_guard<std::recursive_mutex> guard(GetPlatformListMutex());
|
||||||
GetPlatformList().push_back(platform_sp);
|
GetPlatformList().push_back(platform_sp);
|
||||||
|
@ -360,8 +361,8 @@ PlatformSP Platform::Create(const ArchSpec &arch, ArchSpec *platform_arch_ptr,
|
||||||
if (create_callback) {
|
if (create_callback) {
|
||||||
platform_sp = create_callback(false, &arch);
|
platform_sp = create_callback(false, &arch);
|
||||||
if (platform_sp &&
|
if (platform_sp &&
|
||||||
platform_sp->IsCompatibleArchitecture(arch, false,
|
platform_sp->IsCompatibleArchitecture(arch, process_host_arch,
|
||||||
platform_arch_ptr)) {
|
false, platform_arch_ptr)) {
|
||||||
std::lock_guard<std::recursive_mutex> guard(GetPlatformListMutex());
|
std::lock_guard<std::recursive_mutex> guard(GetPlatformListMutex());
|
||||||
GetPlatformList().push_back(platform_sp);
|
GetPlatformList().push_back(platform_sp);
|
||||||
return platform_sp;
|
return platform_sp;
|
||||||
|
@ -845,7 +846,9 @@ Platform::ResolveExecutable(const ModuleSpec &module_spec,
|
||||||
// architectures that we should be using (in the correct order) and see
|
// architectures that we should be using (in the correct order) and see
|
||||||
// if we can find a match that way
|
// if we can find a match that way
|
||||||
ModuleSpec arch_module_spec(module_spec);
|
ModuleSpec arch_module_spec(module_spec);
|
||||||
for (const ArchSpec &arch : GetSupportedArchitectures()) {
|
ArchSpec process_host_arch;
|
||||||
|
for (const ArchSpec &arch :
|
||||||
|
GetSupportedArchitectures(process_host_arch)) {
|
||||||
arch_module_spec.GetArchitecture() = arch;
|
arch_module_spec.GetArchitecture() = arch;
|
||||||
error = ModuleList::GetSharedModule(arch_module_spec, exe_module_sp,
|
error = ModuleList::GetSharedModule(arch_module_spec, exe_module_sp,
|
||||||
module_search_paths_ptr, nullptr,
|
module_search_paths_ptr, nullptr,
|
||||||
|
@ -892,7 +895,8 @@ Platform::ResolveRemoteExecutable(const ModuleSpec &module_spec,
|
||||||
// correct order) and see if we can find a match that way
|
// correct order) and see if we can find a match that way
|
||||||
StreamString arch_names;
|
StreamString arch_names;
|
||||||
llvm::ListSeparator LS;
|
llvm::ListSeparator LS;
|
||||||
for (const ArchSpec &arch : GetSupportedArchitectures()) {
|
ArchSpec process_host_arch;
|
||||||
|
for (const ArchSpec &arch : GetSupportedArchitectures(process_host_arch)) {
|
||||||
resolved_module_spec.GetArchitecture() = arch;
|
resolved_module_spec.GetArchitecture() = arch;
|
||||||
error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
|
error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
|
||||||
module_search_paths_ptr, nullptr,
|
module_search_paths_ptr, nullptr,
|
||||||
|
@ -990,7 +994,7 @@ ArchSpec Platform::GetAugmentedArchSpec(llvm::StringRef triple) {
|
||||||
|
|
||||||
ArchSpec compatible_arch;
|
ArchSpec compatible_arch;
|
||||||
ArchSpec raw_arch(triple);
|
ArchSpec raw_arch(triple);
|
||||||
if (!IsCompatibleArchitecture(raw_arch, false, &compatible_arch))
|
if (!IsCompatibleArchitecture(raw_arch, {}, false, &compatible_arch))
|
||||||
return raw_arch;
|
return raw_arch;
|
||||||
|
|
||||||
if (!compatible_arch.IsValid())
|
if (!compatible_arch.IsValid())
|
||||||
|
@ -1202,11 +1206,13 @@ lldb::ProcessSP Platform::DebugProcess(ProcessLaunchInfo &launch_info,
|
||||||
|
|
||||||
lldb::PlatformSP
|
lldb::PlatformSP
|
||||||
Platform::GetPlatformForArchitecture(const ArchSpec &arch,
|
Platform::GetPlatformForArchitecture(const ArchSpec &arch,
|
||||||
|
const ArchSpec &process_host_arch,
|
||||||
ArchSpec *platform_arch_ptr) {
|
ArchSpec *platform_arch_ptr) {
|
||||||
lldb::PlatformSP platform_sp;
|
lldb::PlatformSP platform_sp;
|
||||||
Status error;
|
Status error;
|
||||||
if (arch.IsValid())
|
if (arch.IsValid())
|
||||||
platform_sp = Platform::Create(arch, platform_arch_ptr, error);
|
platform_sp =
|
||||||
|
Platform::Create(arch, process_host_arch, platform_arch_ptr, error);
|
||||||
return platform_sp;
|
return platform_sp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1226,6 +1232,7 @@ Platform::CreateArchList(llvm::ArrayRef<llvm::Triple::ArchType> archs,
|
||||||
/// Lets a platform answer if it is compatible with a given
|
/// Lets a platform answer if it is compatible with a given
|
||||||
/// architecture and the target triple contained within.
|
/// architecture and the target triple contained within.
|
||||||
bool Platform::IsCompatibleArchitecture(const ArchSpec &arch,
|
bool Platform::IsCompatibleArchitecture(const ArchSpec &arch,
|
||||||
|
const ArchSpec &process_host_arch,
|
||||||
bool exact_arch_match,
|
bool exact_arch_match,
|
||||||
ArchSpec *compatible_arch_ptr) {
|
ArchSpec *compatible_arch_ptr) {
|
||||||
// If the architecture is invalid, we must answer true...
|
// If the architecture is invalid, we must answer true...
|
||||||
|
@ -1233,7 +1240,8 @@ bool Platform::IsCompatibleArchitecture(const ArchSpec &arch,
|
||||||
ArchSpec platform_arch;
|
ArchSpec platform_arch;
|
||||||
auto match = exact_arch_match ? &ArchSpec::IsExactMatch
|
auto match = exact_arch_match ? &ArchSpec::IsExactMatch
|
||||||
: &ArchSpec::IsCompatibleMatch;
|
: &ArchSpec::IsCompatibleMatch;
|
||||||
for (const ArchSpec &platform_arch : GetSupportedArchitectures()) {
|
for (const ArchSpec &platform_arch :
|
||||||
|
GetSupportedArchitectures(process_host_arch)) {
|
||||||
if ((arch.*match)(platform_arch)) {
|
if ((arch.*match)(platform_arch)) {
|
||||||
if (compatible_arch_ptr)
|
if (compatible_arch_ptr)
|
||||||
*compatible_arch_ptr = platform_arch;
|
*compatible_arch_ptr = platform_arch;
|
||||||
|
@ -1571,8 +1579,10 @@ Status Platform::GetRemoteSharedModule(const ModuleSpec &module_spec,
|
||||||
bool *did_create_ptr) {
|
bool *did_create_ptr) {
|
||||||
// Get module information from a target.
|
// Get module information from a target.
|
||||||
ModuleSpec resolved_module_spec;
|
ModuleSpec resolved_module_spec;
|
||||||
|
ArchSpec process_host_arch;
|
||||||
bool got_module_spec = false;
|
bool got_module_spec = false;
|
||||||
if (process) {
|
if (process) {
|
||||||
|
process_host_arch = process->GetSystemArchitecture();
|
||||||
// Try to get module information from the process
|
// Try to get module information from the process
|
||||||
if (process->GetModuleSpec(module_spec.GetFileSpec(),
|
if (process->GetModuleSpec(module_spec.GetFileSpec(),
|
||||||
module_spec.GetArchitecture(),
|
module_spec.GetArchitecture(),
|
||||||
|
@ -1590,7 +1600,7 @@ Status Platform::GetRemoteSharedModule(const ModuleSpec &module_spec,
|
||||||
// architectures that we should be using (in the correct order) and see if
|
// architectures that we should be using (in the correct order) and see if
|
||||||
// we can find a match that way
|
// we can find a match that way
|
||||||
ModuleSpec arch_module_spec(module_spec);
|
ModuleSpec arch_module_spec(module_spec);
|
||||||
for (const ArchSpec &arch : GetSupportedArchitectures()) {
|
for (const ArchSpec &arch : GetSupportedArchitectures(process_host_arch)) {
|
||||||
arch_module_spec.GetArchitecture() = arch;
|
arch_module_spec.GetArchitecture() = arch;
|
||||||
error = ModuleList::GetSharedModule(arch_module_spec, module_sp, nullptr,
|
error = ModuleList::GetSharedModule(arch_module_spec, module_sp, nullptr,
|
||||||
nullptr, nullptr);
|
nullptr, nullptr);
|
||||||
|
|
|
@ -2885,13 +2885,15 @@ void Process::CompleteAttach() {
|
||||||
// switch architectures.
|
// switch architectures.
|
||||||
PlatformSP platform_sp(GetTarget().GetPlatform());
|
PlatformSP platform_sp(GetTarget().GetPlatform());
|
||||||
assert(platform_sp);
|
assert(platform_sp);
|
||||||
|
ArchSpec process_host_arch = GetSystemArchitecture();
|
||||||
if (platform_sp) {
|
if (platform_sp) {
|
||||||
const ArchSpec &target_arch = GetTarget().GetArchitecture();
|
const ArchSpec &target_arch = GetTarget().GetArchitecture();
|
||||||
if (target_arch.IsValid() &&
|
if (target_arch.IsValid() &&
|
||||||
!platform_sp->IsCompatibleArchitecture(target_arch, false, nullptr)) {
|
!platform_sp->IsCompatibleArchitecture(target_arch, process_host_arch,
|
||||||
|
false, nullptr)) {
|
||||||
ArchSpec platform_arch;
|
ArchSpec platform_arch;
|
||||||
platform_sp =
|
platform_sp = platform_sp->GetPlatformForArchitecture(
|
||||||
platform_sp->GetPlatformForArchitecture(target_arch, &platform_arch);
|
target_arch, process_host_arch, &platform_arch);
|
||||||
if (platform_sp) {
|
if (platform_sp) {
|
||||||
GetTarget().SetPlatform(platform_sp);
|
GetTarget().SetPlatform(platform_sp);
|
||||||
GetTarget().SetArchitecture(platform_arch);
|
GetTarget().SetArchitecture(platform_arch);
|
||||||
|
|
|
@ -132,7 +132,9 @@ Status RemoteAwarePlatform::ResolveExecutable(
|
||||||
// if we can find a match that way
|
// if we can find a match that way
|
||||||
StreamString arch_names;
|
StreamString arch_names;
|
||||||
llvm::ListSeparator LS;
|
llvm::ListSeparator LS;
|
||||||
for (const ArchSpec &arch : GetSupportedArchitectures()) {
|
ArchSpec process_host_arch;
|
||||||
|
for (const ArchSpec &arch :
|
||||||
|
GetSupportedArchitectures(process_host_arch)) {
|
||||||
resolved_module_spec.GetArchitecture() = arch;
|
resolved_module_spec.GetArchitecture() = arch;
|
||||||
error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
|
error = ModuleList::GetSharedModule(resolved_module_spec, exe_module_sp,
|
||||||
module_search_paths_ptr, nullptr, nullptr);
|
module_search_paths_ptr, nullptr, nullptr);
|
||||||
|
|
|
@ -1470,10 +1470,10 @@ bool Target::SetArchitecture(const ArchSpec &arch_spec, bool set_platform) {
|
||||||
if (other.IsValid()) {
|
if (other.IsValid()) {
|
||||||
auto platform_sp = GetPlatform();
|
auto platform_sp = GetPlatform();
|
||||||
if (!platform_sp ||
|
if (!platform_sp ||
|
||||||
!platform_sp->IsCompatibleArchitecture(other, false, nullptr)) {
|
!platform_sp->IsCompatibleArchitecture(other, {}, false, nullptr)) {
|
||||||
ArchSpec platform_arch;
|
ArchSpec platform_arch;
|
||||||
auto arch_platform_sp =
|
auto arch_platform_sp =
|
||||||
Platform::GetPlatformForArchitecture(other, &platform_arch);
|
Platform::GetPlatformForArchitecture(other, {}, &platform_arch);
|
||||||
if (arch_platform_sp) {
|
if (arch_platform_sp) {
|
||||||
SetPlatform(arch_platform_sp);
|
SetPlatform(arch_platform_sp);
|
||||||
if (platform_arch.IsValid())
|
if (platform_arch.IsValid())
|
||||||
|
|
|
@ -180,7 +180,7 @@ Status TargetList::CreateTargetInternal(
|
||||||
// the selected platform otherwise.
|
// the selected platform otherwise.
|
||||||
if (platform_sp) {
|
if (platform_sp) {
|
||||||
if (platform_sp->IsCompatibleArchitecture(
|
if (platform_sp->IsCompatibleArchitecture(
|
||||||
module_spec.GetArchitecture(), false, nullptr)) {
|
module_spec.GetArchitecture(), {}, false, nullptr)) {
|
||||||
platforms.push_back(platform_sp);
|
platforms.push_back(platform_sp);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -192,7 +192,7 @@ Status TargetList::CreateTargetInternal(
|
||||||
(!platform_sp ||
|
(!platform_sp ||
|
||||||
host_platform_sp->GetName() != platform_sp->GetName())) {
|
host_platform_sp->GetName() != platform_sp->GetName())) {
|
||||||
if (host_platform_sp->IsCompatibleArchitecture(
|
if (host_platform_sp->IsCompatibleArchitecture(
|
||||||
module_spec.GetArchitecture(), false, nullptr)) {
|
module_spec.GetArchitecture(), {}, false, nullptr)) {
|
||||||
platforms.push_back(host_platform_sp);
|
platforms.push_back(host_platform_sp);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -202,7 +202,7 @@ Status TargetList::CreateTargetInternal(
|
||||||
// executable file.
|
// executable file.
|
||||||
PlatformSP fallback_platform_sp(
|
PlatformSP fallback_platform_sp(
|
||||||
Platform::GetPlatformForArchitecture(
|
Platform::GetPlatformForArchitecture(
|
||||||
module_spec.GetArchitecture(), nullptr));
|
module_spec.GetArchitecture()));
|
||||||
if (fallback_platform_sp) {
|
if (fallback_platform_sp) {
|
||||||
platforms.push_back(fallback_platform_sp);
|
platforms.push_back(fallback_platform_sp);
|
||||||
}
|
}
|
||||||
|
@ -257,8 +257,9 @@ Status TargetList::CreateTargetInternal(
|
||||||
// If we have a valid architecture, make sure the current platform is
|
// If we have a valid architecture, make sure the current platform is
|
||||||
// compatible with that architecture.
|
// compatible with that architecture.
|
||||||
if (!prefer_platform_arch && arch.IsValid()) {
|
if (!prefer_platform_arch && arch.IsValid()) {
|
||||||
if (!platform_sp->IsCompatibleArchitecture(arch, false, nullptr)) {
|
if (!platform_sp->IsCompatibleArchitecture(arch, {}, false, nullptr)) {
|
||||||
platform_sp = Platform::GetPlatformForArchitecture(arch, &platform_arch);
|
platform_sp =
|
||||||
|
Platform::GetPlatformForArchitecture(arch, {}, &platform_arch);
|
||||||
if (platform_sp)
|
if (platform_sp)
|
||||||
debugger.GetPlatformList().SetSelectedPlatform(platform_sp);
|
debugger.GetPlatformList().SetSelectedPlatform(platform_sp);
|
||||||
}
|
}
|
||||||
|
@ -266,8 +267,9 @@ Status TargetList::CreateTargetInternal(
|
||||||
// If "arch" isn't valid, yet "platform_arch" is, it means we have an
|
// If "arch" isn't valid, yet "platform_arch" is, it means we have an
|
||||||
// executable file with a single architecture which should be used.
|
// executable file with a single architecture which should be used.
|
||||||
ArchSpec fixed_platform_arch;
|
ArchSpec fixed_platform_arch;
|
||||||
if (!platform_sp->IsCompatibleArchitecture(platform_arch, false, nullptr)) {
|
if (!platform_sp->IsCompatibleArchitecture(platform_arch, {}, false,
|
||||||
platform_sp = Platform::GetPlatformForArchitecture(platform_arch,
|
nullptr)) {
|
||||||
|
platform_sp = Platform::GetPlatformForArchitecture(platform_arch, {},
|
||||||
&fixed_platform_arch);
|
&fixed_platform_arch);
|
||||||
if (platform_sp)
|
if (platform_sp)
|
||||||
debugger.GetPlatformList().SetSelectedPlatform(platform_sp);
|
debugger.GetPlatformList().SetSelectedPlatform(platform_sp);
|
||||||
|
@ -298,8 +300,9 @@ Status TargetList::CreateTargetInternal(Debugger &debugger,
|
||||||
|
|
||||||
if (arch.IsValid()) {
|
if (arch.IsValid()) {
|
||||||
if (!platform_sp ||
|
if (!platform_sp ||
|
||||||
!platform_sp->IsCompatibleArchitecture(arch, false, nullptr))
|
!platform_sp->IsCompatibleArchitecture(arch, {}, false, nullptr))
|
||||||
platform_sp = Platform::GetPlatformForArchitecture(specified_arch, &arch);
|
platform_sp =
|
||||||
|
Platform::GetPlatformForArchitecture(specified_arch, {}, &arch);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!platform_sp)
|
if (!platform_sp)
|
||||||
|
|
|
@ -30,7 +30,7 @@ static void testSimPlatformArchHasSimEnvironment(llvm::StringRef name) {
|
||||||
ASSERT_TRUE(platform_sp);
|
ASSERT_TRUE(platform_sp);
|
||||||
int num_arches = 0;
|
int num_arches = 0;
|
||||||
|
|
||||||
for (auto arch : platform_sp->GetSupportedArchitectures()) {
|
for (auto arch : platform_sp->GetSupportedArchitectures({})) {
|
||||||
EXPECT_EQ(arch.GetTriple().getEnvironment(), llvm::Triple::Simulator);
|
EXPECT_EQ(arch.GetTriple().getEnvironment(), llvm::Triple::Simulator);
|
||||||
num_arches++;
|
num_arches++;
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ TEST_F(PlatformAppleSimulatorTest, TestHostPlatformToSim) {
|
||||||
arch.GetTriple().setEnvironment(llvm::Triple::Simulator);
|
arch.GetTriple().setEnvironment(llvm::Triple::Simulator);
|
||||||
|
|
||||||
Status error;
|
Status error;
|
||||||
auto platform_sp = Platform::Create(arch, nullptr, error);
|
auto platform_sp = Platform::Create(arch, {}, nullptr, error);
|
||||||
EXPECT_TRUE(platform_sp);
|
EXPECT_TRUE(platform_sp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,8 @@ public:
|
||||||
|
|
||||||
MOCK_METHOD0(GetDescription, llvm::StringRef());
|
MOCK_METHOD0(GetDescription, llvm::StringRef());
|
||||||
MOCK_METHOD0(GetPluginName, llvm::StringRef());
|
MOCK_METHOD0(GetPluginName, llvm::StringRef());
|
||||||
MOCK_METHOD0(GetSupportedArchitectures, std::vector<ArchSpec>());
|
MOCK_METHOD1(GetSupportedArchitectures,
|
||||||
|
std::vector<ArchSpec>(const ArchSpec &process_host_arch));
|
||||||
MOCK_METHOD4(Attach,
|
MOCK_METHOD4(Attach,
|
||||||
ProcessSP(ProcessAttachInfo &, Debugger &, Target *, Status &));
|
ProcessSP(ProcessAttachInfo &, Debugger &, Target *, Status &));
|
||||||
MOCK_METHOD0(CalculateTrapHandlerSymbolNames, void());
|
MOCK_METHOD0(CalculateTrapHandlerSymbolNames, void());
|
||||||
|
@ -53,7 +54,8 @@ public:
|
||||||
|
|
||||||
MOCK_METHOD0(GetDescription, llvm::StringRef());
|
MOCK_METHOD0(GetDescription, llvm::StringRef());
|
||||||
MOCK_METHOD0(GetPluginName, llvm::StringRef());
|
MOCK_METHOD0(GetPluginName, llvm::StringRef());
|
||||||
MOCK_METHOD0(GetSupportedArchitectures, std::vector<ArchSpec>());
|
MOCK_METHOD1(GetSupportedArchitectures,
|
||||||
|
std::vector<ArchSpec>(const ArchSpec &process_host_arch));
|
||||||
MOCK_METHOD4(Attach,
|
MOCK_METHOD4(Attach,
|
||||||
ProcessSP(ProcessAttachInfo &, Debugger &, Target *, Status &));
|
ProcessSP(ProcessAttachInfo &, Debugger &, Target *, Status &));
|
||||||
MOCK_METHOD0(CalculateTrapHandlerSymbolNames, void());
|
MOCK_METHOD0(CalculateTrapHandlerSymbolNames, void());
|
||||||
|
@ -73,7 +75,8 @@ TEST_F(RemoteAwarePlatformTest, TestResolveExecutabelOnClientByPlatform) {
|
||||||
ModuleSP expected_executable(new Module(executable_spec));
|
ModuleSP expected_executable(new Module(executable_spec));
|
||||||
|
|
||||||
RemoteAwarePlatformTester platform(false);
|
RemoteAwarePlatformTester platform(false);
|
||||||
EXPECT_CALL(platform, GetSupportedArchitectures())
|
static const ArchSpec process_host_arch;
|
||||||
|
EXPECT_CALL(platform, GetSupportedArchitectures(process_host_arch))
|
||||||
.WillRepeatedly(Return(std::vector<ArchSpec>()));
|
.WillRepeatedly(Return(std::vector<ArchSpec>()));
|
||||||
EXPECT_CALL(platform, ResolveRemoteExecutable(_, _))
|
EXPECT_CALL(platform, ResolveRemoteExecutable(_, _))
|
||||||
.WillRepeatedly(Return(std::make_pair(Status(), expected_executable)));
|
.WillRepeatedly(Return(std::make_pair(Status(), expected_executable)));
|
||||||
|
|
Loading…
Reference in New Issue