[lldb] Add Debugger & ScriptedMetadata reference to Platform::CreateInstance
This patch is preparatory work for Scripted Platform support and does multiple things: First, it introduces new options for the `platform select` command and `SBPlatform::Create` API, to hold a reference to the debugger object, the name of the python script managing the Scripted Platform and a structured data dictionary that the user can use to pass arbitrary data. Then, it updates the various `Create` and `GetOrCreate` methods for the `Platform` and `PlatformList` classes to pass down the new parameter to the `Platform::CreateInstance` callbacks. Finally, it updates every callback to reflect these changes. Differential Revision: https://reviews.llvm.org/D139249 Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
This commit is contained in:
@@ -126,6 +126,18 @@ public:
|
||||
|
||||
SBPlatform (const char *);
|
||||
|
||||
%feature("docstring", "
|
||||
Create a platform instance using a specific platform plugin name, debugger,
|
||||
script name and user-provided dictionary.
|
||||
|
||||
:param platform_name: name of the platform plugin to use to create the platform
|
||||
:param debugger: debugger instance owning the platform
|
||||
:param script_name: name of the script class and module to use to create the platform
|
||||
:param dict: user-provided dictionary that can be used when instanciating a platform
|
||||
")
|
||||
SBPlatform (const char *, const SBDebugger&,
|
||||
const char *, const SBStructuredData&);
|
||||
|
||||
~SBPlatform();
|
||||
|
||||
static SBPlatform GetHostPlatform();
|
||||
|
||||
@@ -420,6 +420,7 @@ public:
|
||||
const SBFileSpec &trace_description_file);
|
||||
|
||||
private:
|
||||
friend class SBPlatform;
|
||||
friend class SBCommandInterpreter;
|
||||
friend class SBInputReader;
|
||||
friend class SBListener;
|
||||
|
||||
@@ -96,6 +96,9 @@ public:
|
||||
|
||||
SBPlatform(const char *platform_name);
|
||||
|
||||
SBPlatform(const char *platform_name, const SBDebugger &debugger,
|
||||
const char *script_name, const SBStructuredData &dict);
|
||||
|
||||
SBPlatform(const SBPlatform &rhs);
|
||||
|
||||
SBPlatform &operator=(const SBPlatform &rhs);
|
||||
|
||||
@@ -93,6 +93,7 @@ protected:
|
||||
friend class SBLaunchInfo;
|
||||
friend class SBDebugger;
|
||||
friend class SBTarget;
|
||||
friend class SBPlatform;
|
||||
friend class SBProcess;
|
||||
friend class SBThread;
|
||||
friend class SBThreadPlan;
|
||||
|
||||
@@ -9,19 +9,22 @@
|
||||
#ifndef LLDB_INTERPRETER_OPTIONGROUPPLATFORM_H
|
||||
#define LLDB_INTERPRETER_OPTIONGROUPPLATFORM_H
|
||||
|
||||
#include "lldb/Interpreter/OptionGroupPythonClassWithDict.h"
|
||||
#include "lldb/Interpreter/Options.h"
|
||||
#include "lldb/Utility/ConstString.h"
|
||||
#include "llvm/Support/VersionTuple.h"
|
||||
|
||||
namespace lldb_private {
|
||||
|
||||
class CommandObjectPlatformSelect;
|
||||
// PlatformOptionGroup
|
||||
//
|
||||
// Make platform options available to any commands that need the settings.
|
||||
class OptionGroupPlatform : public OptionGroup {
|
||||
public:
|
||||
OptionGroupPlatform(bool include_platform_option)
|
||||
: m_include_platform_option(include_platform_option) {}
|
||||
: m_include_platform_option(include_platform_option),
|
||||
m_class_options("scripted platform", true, 'C', 'K', 'V', 0) {}
|
||||
|
||||
~OptionGroupPlatform() override = default;
|
||||
|
||||
@@ -60,11 +63,14 @@ public:
|
||||
bool PlatformMatches(const lldb::PlatformSP &platform_sp) const;
|
||||
|
||||
protected:
|
||||
friend class CommandObjectPlatformSelect;
|
||||
|
||||
std::string m_platform_name;
|
||||
ConstString m_sdk_sysroot;
|
||||
ConstString m_sdk_build;
|
||||
llvm::VersionTuple m_os_version;
|
||||
bool m_include_platform_option;
|
||||
OptionGroupPythonClassWithDict m_class_options;
|
||||
};
|
||||
|
||||
} // namespace lldb_private
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "lldb/Core/UserSettingsController.h"
|
||||
#include "lldb/Host/File.h"
|
||||
#include "lldb/Interpreter/Options.h"
|
||||
#include "lldb/Interpreter/ScriptedMetadata.h"
|
||||
#include "lldb/Utility/ArchSpec.h"
|
||||
#include "lldb/Utility/ConstString.h"
|
||||
#include "lldb/Utility/FileSpec.h"
|
||||
@@ -99,7 +100,8 @@ public:
|
||||
|
||||
static void SetHostPlatform(const lldb::PlatformSP &platform_sp);
|
||||
|
||||
static lldb::PlatformSP Create(llvm::StringRef name);
|
||||
static lldb::PlatformSP Create(llvm::StringRef name, const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
/// Augments the triple either with information from platform or the host
|
||||
/// system (if platform is null).
|
||||
@@ -974,7 +976,7 @@ private:
|
||||
|
||||
class PlatformList {
|
||||
public:
|
||||
PlatformList() = default;
|
||||
PlatformList(Debugger &debugger) : m_debugger(debugger) {}
|
||||
|
||||
~PlatformList() = default;
|
||||
|
||||
@@ -1029,13 +1031,16 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
lldb::PlatformSP GetOrCreate(llvm::StringRef name);
|
||||
lldb::PlatformSP GetOrCreate(llvm::StringRef name,
|
||||
const ScriptedMetadata *metadata);
|
||||
lldb::PlatformSP GetOrCreate(const ArchSpec &arch,
|
||||
const ArchSpec &process_host_arch,
|
||||
ArchSpec *platform_arch_ptr, Status &error);
|
||||
ArchSpec *platform_arch_ptr, Status &error,
|
||||
const ScriptedMetadata *metadata);
|
||||
lldb::PlatformSP GetOrCreate(const ArchSpec &arch,
|
||||
const ArchSpec &process_host_arch,
|
||||
ArchSpec *platform_arch_ptr);
|
||||
ArchSpec *platform_arch_ptr,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
/// Get the platform for the given list of architectures.
|
||||
///
|
||||
@@ -1051,9 +1056,11 @@ public:
|
||||
/// given architecture.
|
||||
lldb::PlatformSP GetOrCreate(llvm::ArrayRef<ArchSpec> archs,
|
||||
const ArchSpec &process_host_arch,
|
||||
std::vector<lldb::PlatformSP> &candidates);
|
||||
std::vector<lldb::PlatformSP> &candidates,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
lldb::PlatformSP Create(llvm::StringRef name);
|
||||
lldb::PlatformSP Create(llvm::StringRef name,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
/// Detect a binary in memory that will determine which Platform and
|
||||
/// DynamicLoader should be used in this target/process, and update
|
||||
@@ -1090,6 +1097,7 @@ protected:
|
||||
private:
|
||||
PlatformList(const PlatformList &) = delete;
|
||||
const PlatformList &operator=(const PlatformList &) = delete;
|
||||
Debugger &m_debugger;
|
||||
};
|
||||
|
||||
class OptionGroupPlatformRSync : public lldb_private::OptionGroup {
|
||||
|
||||
@@ -26,6 +26,7 @@ class Value;
|
||||
} // namespace llvm
|
||||
|
||||
namespace lldb_private {
|
||||
class ScriptedMetadata;
|
||||
typedef lldb::ABISP (*ABICreateInstance)(lldb::ProcessSP process_sp,
|
||||
const ArchSpec &arch);
|
||||
typedef std::unique_ptr<Architecture> (*ArchitectureCreateInstance)(
|
||||
@@ -77,8 +78,9 @@ typedef lldb::StructuredDataPluginSP (*StructuredDataPluginCreateInstance)(
|
||||
typedef Status (*StructuredDataFilterLaunchInfo)(ProcessLaunchInfo &launch_info,
|
||||
Target *target);
|
||||
typedef SystemRuntime *(*SystemRuntimeCreateInstance)(Process *process);
|
||||
typedef lldb::PlatformSP (*PlatformCreateInstance)(bool force,
|
||||
const ArchSpec *arch);
|
||||
typedef lldb::PlatformSP (*PlatformCreateInstance)(
|
||||
bool force, const ArchSpec *arch, const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
typedef lldb::ProcessSP (*ProcessCreateInstance)(
|
||||
lldb::TargetSP target_sp, lldb::ListenerSP listener_sp,
|
||||
const FileSpec *crash_file_path, bool can_connect);
|
||||
|
||||
@@ -1498,7 +1498,8 @@ SBError SBDebugger::SetCurrentPlatform(const char *platform_name_cstr) {
|
||||
if (m_opaque_sp) {
|
||||
if (platform_name_cstr && platform_name_cstr[0]) {
|
||||
PlatformList &platforms = m_opaque_sp->GetPlatformList();
|
||||
if (PlatformSP platform_sp = platforms.GetOrCreate(platform_name_cstr))
|
||||
if (PlatformSP platform_sp = platforms.GetOrCreate(
|
||||
platform_name_cstr, /*metadata = */ nullptr))
|
||||
platforms.SetSelectedPlatform(platform_sp);
|
||||
else
|
||||
sb_error.ref().SetErrorString("platform not found");
|
||||
|
||||
@@ -7,13 +7,16 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "lldb/API/SBPlatform.h"
|
||||
#include "lldb/API/SBDebugger.h"
|
||||
#include "lldb/API/SBEnvironment.h"
|
||||
#include "lldb/API/SBError.h"
|
||||
#include "lldb/API/SBFileSpec.h"
|
||||
#include "lldb/API/SBLaunchInfo.h"
|
||||
#include "lldb/API/SBPlatform.h"
|
||||
#include "lldb/API/SBStructuredData.h"
|
||||
#include "lldb/API/SBUnixSignals.h"
|
||||
#include "lldb/Host/File.h"
|
||||
#include "lldb/Interpreter/ScriptedMetadata.h"
|
||||
#include "lldb/Target/Platform.h"
|
||||
#include "lldb/Target/Target.h"
|
||||
#include "lldb/Utility/ArchSpec.h"
|
||||
@@ -292,7 +295,31 @@ SBPlatform::SBPlatform() { LLDB_INSTRUMENT_VA(this); }
|
||||
SBPlatform::SBPlatform(const char *platform_name) {
|
||||
LLDB_INSTRUMENT_VA(this, platform_name);
|
||||
|
||||
m_opaque_sp = Platform::Create(platform_name);
|
||||
m_opaque_sp = Platform::Create(platform_name, /*debugger = */ nullptr,
|
||||
/*metadata = */ nullptr);
|
||||
}
|
||||
|
||||
SBPlatform::SBPlatform(const char *platform_name, const SBDebugger &debugger,
|
||||
const char *script_name, const SBStructuredData &dict) {
|
||||
LLDB_INSTRUMENT_VA(this, platform_name, debugger, script_name, dict);
|
||||
|
||||
if (!script_name || !dict.IsValid() || !dict.m_impl_up)
|
||||
return;
|
||||
|
||||
StructuredData::ObjectSP obj_sp = dict.m_impl_up->GetObjectSP();
|
||||
|
||||
if (!obj_sp)
|
||||
return;
|
||||
|
||||
StructuredData::DictionarySP dict_sp =
|
||||
std::make_shared<StructuredData::Dictionary>(obj_sp);
|
||||
if (!dict_sp || dict_sp->GetType() == lldb::eStructuredDataTypeInvalid)
|
||||
return;
|
||||
|
||||
const ScriptedMetadata metadata(script_name, dict_sp);
|
||||
|
||||
m_opaque_sp =
|
||||
Platform::Create(platform_name, debugger.m_opaque_sp.get(), &metadata);
|
||||
}
|
||||
|
||||
SBPlatform::SBPlatform(const SBPlatform &rhs) {
|
||||
|
||||
@@ -139,63 +139,58 @@ private:
|
||||
};
|
||||
|
||||
// "platform select <platform-name>"
|
||||
class CommandObjectPlatformSelect : public CommandObjectParsed {
|
||||
public:
|
||||
CommandObjectPlatformSelect(CommandInterpreter &interpreter)
|
||||
: CommandObjectParsed(interpreter, "platform select",
|
||||
"Create a platform if needed and select it as the "
|
||||
"current platform.",
|
||||
"platform select <platform-name>", 0),
|
||||
m_platform_options(
|
||||
false) // Don't include the "--platform" option by passing false
|
||||
{
|
||||
m_option_group.Append(&m_platform_options, LLDB_OPT_SET_ALL, 1);
|
||||
m_option_group.Finalize();
|
||||
CommandArgumentData platform_arg{eArgTypePlatform, eArgRepeatPlain};
|
||||
m_arguments.push_back({platform_arg});
|
||||
}
|
||||
CommandObjectPlatformSelect::CommandObjectPlatformSelect(
|
||||
CommandInterpreter &interpreter)
|
||||
: CommandObjectParsed(interpreter, "platform select",
|
||||
"Create a platform if needed and select it as the "
|
||||
"current platform.",
|
||||
"platform select <platform-name>", 0),
|
||||
m_platform_options(
|
||||
false) // Don't include the "--platform" option by passing false
|
||||
{
|
||||
m_option_group.Append(&m_platform_options, LLDB_OPT_SET_ALL, 1);
|
||||
m_option_group.Append(&m_platform_options.m_class_options,
|
||||
LLDB_OPT_SET_1 | LLDB_OPT_SET_2, LLDB_OPT_SET_ALL);
|
||||
m_option_group.Finalize();
|
||||
CommandArgumentData platform_arg{eArgTypePlatform, eArgRepeatPlain};
|
||||
m_arguments.push_back({platform_arg});
|
||||
}
|
||||
|
||||
~CommandObjectPlatformSelect() override = default;
|
||||
void CommandObjectPlatformSelect::HandleCompletion(CompletionRequest &request) {
|
||||
CommandCompletions::PlatformPluginNames(GetCommandInterpreter(), request,
|
||||
nullptr);
|
||||
}
|
||||
|
||||
void HandleCompletion(CompletionRequest &request) override {
|
||||
CommandCompletions::PlatformPluginNames(GetCommandInterpreter(), request,
|
||||
nullptr);
|
||||
}
|
||||
Options *CommandObjectPlatformSelect::GetOptions() { return &m_option_group; }
|
||||
|
||||
Options *GetOptions() override { return &m_option_group; }
|
||||
bool CommandObjectPlatformSelect::DoExecute(Args &args,
|
||||
CommandReturnObject &result) {
|
||||
if (args.GetArgumentCount() == 1) {
|
||||
const char *platform_name = args.GetArgumentAtIndex(0);
|
||||
if (platform_name && platform_name[0]) {
|
||||
const bool select = true;
|
||||
m_platform_options.SetPlatformName(platform_name);
|
||||
Status error;
|
||||
ArchSpec platform_arch;
|
||||
PlatformSP platform_sp(m_platform_options.CreatePlatformWithOptions(
|
||||
m_interpreter, ArchSpec(), select, error, platform_arch));
|
||||
if (platform_sp) {
|
||||
GetDebugger().GetPlatformList().SetSelectedPlatform(platform_sp);
|
||||
|
||||
protected:
|
||||
bool DoExecute(Args &args, CommandReturnObject &result) override {
|
||||
if (args.GetArgumentCount() == 1) {
|
||||
const char *platform_name = args.GetArgumentAtIndex(0);
|
||||
if (platform_name && platform_name[0]) {
|
||||
const bool select = true;
|
||||
m_platform_options.SetPlatformName(platform_name);
|
||||
Status error;
|
||||
ArchSpec platform_arch;
|
||||
PlatformSP platform_sp(m_platform_options.CreatePlatformWithOptions(
|
||||
m_interpreter, ArchSpec(), select, error, platform_arch));
|
||||
if (platform_sp) {
|
||||
GetDebugger().GetPlatformList().SetSelectedPlatform(platform_sp);
|
||||
|
||||
platform_sp->GetStatus(result.GetOutputStream());
|
||||
result.SetStatus(eReturnStatusSuccessFinishResult);
|
||||
} else {
|
||||
result.AppendError(error.AsCString());
|
||||
}
|
||||
platform_sp->GetStatus(result.GetOutputStream());
|
||||
result.SetStatus(eReturnStatusSuccessFinishResult);
|
||||
} else {
|
||||
result.AppendError("invalid platform name");
|
||||
result.AppendError(error.AsCString());
|
||||
}
|
||||
} else {
|
||||
result.AppendError(
|
||||
"platform create takes a platform name as an argument\n");
|
||||
result.AppendError("invalid platform name");
|
||||
}
|
||||
return result.Succeeded();
|
||||
} else {
|
||||
result.AppendError(
|
||||
"platform create takes a platform name as an argument\n");
|
||||
}
|
||||
|
||||
OptionGroupOptions m_option_group;
|
||||
OptionGroupPlatform m_platform_options;
|
||||
};
|
||||
return result.Succeeded();
|
||||
}
|
||||
|
||||
// "platform list"
|
||||
class CommandObjectPlatformList : public CommandObjectParsed {
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#define LLDB_SOURCE_COMMANDS_COMMANDOBJECTPLATFORM_H
|
||||
|
||||
#include "lldb/Interpreter/CommandObjectMultiword.h"
|
||||
#include "lldb/Interpreter/OptionGroupPlatform.h"
|
||||
|
||||
namespace lldb_private {
|
||||
|
||||
@@ -27,6 +28,23 @@ private:
|
||||
operator=(const CommandObjectPlatform &) = delete;
|
||||
};
|
||||
|
||||
class CommandObjectPlatformSelect : public CommandObjectParsed {
|
||||
public:
|
||||
CommandObjectPlatformSelect(CommandInterpreter &interpreter);
|
||||
|
||||
~CommandObjectPlatformSelect() override = default;
|
||||
|
||||
void HandleCompletion(CompletionRequest &request) override;
|
||||
|
||||
Options *GetOptions() override;
|
||||
|
||||
protected:
|
||||
bool DoExecute(Args &args, CommandReturnObject &result) override;
|
||||
|
||||
OptionGroupOptions m_option_group;
|
||||
OptionGroupPlatform m_platform_options;
|
||||
};
|
||||
|
||||
} // namespace lldb_private
|
||||
|
||||
#endif // LLDB_SOURCE_COMMANDS_COMMANDOBJECTPLATFORM_H
|
||||
|
||||
@@ -764,7 +764,7 @@ Debugger::Debugger(lldb::LogOutputCallback log_callback, void *baton)
|
||||
m_error_stream_sp(std::make_shared<StreamFile>(stderr, false)),
|
||||
m_input_recorder(nullptr),
|
||||
m_broadcaster_manager_sp(BroadcasterManager::MakeBroadcasterManager()),
|
||||
m_terminal_state(), m_target_list(*this), m_platform_list(),
|
||||
m_terminal_state(), m_target_list(*this), m_platform_list(*this),
|
||||
m_listener_sp(Listener::MakeListener("lldb.Debugger")),
|
||||
m_source_manager_up(), m_source_file_cache(),
|
||||
m_command_interpreter_up(
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#include "lldb/Host/OptionParser.h"
|
||||
#include "lldb/Interpreter/CommandInterpreter.h"
|
||||
#include "lldb/Interpreter/ScriptedMetadata.h"
|
||||
#include "lldb/Target/Platform.h"
|
||||
|
||||
using namespace lldb;
|
||||
@@ -22,8 +23,10 @@ PlatformSP OptionGroupPlatform::CreatePlatformWithOptions(
|
||||
|
||||
PlatformSP platform_sp;
|
||||
|
||||
const ScriptedMetadata metadata(m_class_options);
|
||||
|
||||
if (!m_platform_name.empty()) {
|
||||
platform_sp = platforms.Create(m_platform_name);
|
||||
platform_sp = platforms.Create(m_platform_name, &metadata);
|
||||
if (!platform_sp) {
|
||||
error.SetErrorStringWithFormatv(
|
||||
"unable to find a plug-in for the platform named \"{0}\"",
|
||||
@@ -41,7 +44,8 @@ PlatformSP OptionGroupPlatform::CreatePlatformWithOptions(
|
||||
}
|
||||
}
|
||||
} else if (arch.IsValid()) {
|
||||
platform_sp = platforms.GetOrCreate(arch, {}, &platform_arch, error);
|
||||
platform_sp =
|
||||
platforms.GetOrCreate(arch, {}, &platform_arch, error, &metadata);
|
||||
}
|
||||
|
||||
if (platform_sp) {
|
||||
|
||||
@@ -511,7 +511,7 @@ DynamicLoaderDarwinKernel::DynamicLoaderDarwinKernel(Process *process,
|
||||
process->SetCanRunCode(false);
|
||||
PlatformSP platform_sp =
|
||||
process->GetTarget().GetDebugger().GetPlatformList().Create(
|
||||
PlatformDarwinKernel::GetPluginNameStatic());
|
||||
PlatformDarwinKernel::GetPluginNameStatic(), /*metadata = */ nullptr);
|
||||
if (platform_sp.get())
|
||||
process->GetTarget().SetPlatform(platform_sp);
|
||||
}
|
||||
|
||||
@@ -59,7 +59,9 @@ void PlatformAndroid::Terminate() {
|
||||
PlatformLinux::Terminate();
|
||||
}
|
||||
|
||||
PlatformSP PlatformAndroid::CreateInstance(bool force, const ArchSpec *arch) {
|
||||
PlatformSP PlatformAndroid::CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
Log *log = GetLog(LLDBLog::Platform);
|
||||
if (log) {
|
||||
const char *arch_name;
|
||||
|
||||
@@ -28,7 +28,9 @@ public:
|
||||
static void Terminate();
|
||||
|
||||
// lldb_private::PluginInterface functions
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch);
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
static llvm::StringRef GetPluginNameStatic(bool is_host) {
|
||||
return is_host ? Platform::GetHostPlatformName() : "remote-android";
|
||||
|
||||
@@ -44,8 +44,9 @@ LLDB_PLUGIN_DEFINE(PlatformFreeBSD)
|
||||
|
||||
static uint32_t g_initialize_count = 0;
|
||||
|
||||
|
||||
PlatformSP PlatformFreeBSD::CreateInstance(bool force, const ArchSpec *arch) {
|
||||
PlatformSP PlatformFreeBSD::CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
Log *log = GetLog(LLDBLog::Platform);
|
||||
LLDB_LOG(log, "force = {0}, arch=({1}, {2})", force,
|
||||
arch ? arch->GetArchitectureName() : "<null>",
|
||||
|
||||
@@ -24,7 +24,9 @@ public:
|
||||
static void Terminate();
|
||||
|
||||
// lldb_private::PluginInterface functions
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch);
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
static llvm::StringRef GetPluginNameStatic(bool is_host) {
|
||||
return is_host ? Platform::GetHostPlatformName() : "remote-freebsd";
|
||||
|
||||
@@ -41,8 +41,9 @@ LLDB_PLUGIN_DEFINE(PlatformLinux)
|
||||
|
||||
static uint32_t g_initialize_count = 0;
|
||||
|
||||
|
||||
PlatformSP PlatformLinux::CreateInstance(bool force, const ArchSpec *arch) {
|
||||
PlatformSP PlatformLinux::CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
Log *log = GetLog(LLDBLog::Platform);
|
||||
LLDB_LOG(log, "force = {0}, arch=({1}, {2})", force,
|
||||
arch ? arch->GetArchitectureName() : "<null>",
|
||||
|
||||
@@ -24,7 +24,9 @@ public:
|
||||
static void Terminate();
|
||||
|
||||
// lldb_private::PluginInterface functions
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch);
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
static llvm::StringRef GetPluginNameStatic(bool is_host) {
|
||||
return is_host ? Platform::GetHostPlatformName() : "remote-linux";
|
||||
|
||||
@@ -552,7 +552,9 @@ struct PlatformiOSSimulator {
|
||||
PluginManager::UnregisterPlugin(PlatformiOSSimulator::CreateInstance);
|
||||
}
|
||||
|
||||
static PlatformSP CreateInstance(bool force, const ArchSpec *arch) {
|
||||
static PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
if (shouldSkipSimulatorPlatform(force, arch))
|
||||
return nullptr;
|
||||
|
||||
@@ -597,7 +599,9 @@ struct PlatformAppleTVSimulator {
|
||||
PluginManager::UnregisterPlugin(PlatformAppleTVSimulator::CreateInstance);
|
||||
}
|
||||
|
||||
static PlatformSP CreateInstance(bool force, const ArchSpec *arch) {
|
||||
static PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
if (shouldSkipSimulatorPlatform(force, arch))
|
||||
return nullptr;
|
||||
return PlatformAppleSimulator::CreateInstance(
|
||||
@@ -639,7 +643,9 @@ struct PlatformAppleWatchSimulator {
|
||||
PlatformAppleWatchSimulator::CreateInstance);
|
||||
}
|
||||
|
||||
static PlatformSP CreateInstance(bool force, const ArchSpec *arch) {
|
||||
static PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
if (shouldSkipSimulatorPlatform(force, arch))
|
||||
return nullptr;
|
||||
return PlatformAppleSimulator::CreateInstance(
|
||||
|
||||
@@ -106,9 +106,11 @@ llvm::StringRef PlatformDarwin::GetDescriptionStatic() {
|
||||
return "Darwin platform plug-in.";
|
||||
}
|
||||
|
||||
PlatformSP PlatformDarwin::CreateInstance(bool force, const ArchSpec *arch) {
|
||||
// We only create subclasses of the PlatformDarwin plugin.
|
||||
return PlatformSP();
|
||||
PlatformSP PlatformDarwin::CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
// We only create subclasses of the PlatformDarwin plugin.
|
||||
return PlatformSP();
|
||||
}
|
||||
|
||||
#define LLDB_PROPERTIES_platformdarwin
|
||||
|
||||
@@ -48,7 +48,9 @@ public:
|
||||
|
||||
~PlatformDarwin() override;
|
||||
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch);
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
static void DebuggerInitialize(lldb_private::Debugger &debugger);
|
||||
|
||||
|
||||
@@ -72,8 +72,10 @@ void PlatformDarwinKernel::Terminate() {
|
||||
PlatformDarwin::Terminate();
|
||||
}
|
||||
|
||||
PlatformSP PlatformDarwinKernel::CreateInstance(bool force,
|
||||
const ArchSpec *arch) {
|
||||
PlatformSP
|
||||
PlatformDarwinKernel::CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
Log *log = GetLog(LLDBLog::Platform);
|
||||
if (log) {
|
||||
const char *arch_name;
|
||||
@@ -968,7 +970,7 @@ bool PlatformDarwinKernel::LoadPlatformBinaryAndSetup(Process *process,
|
||||
|
||||
PlatformSP platform_sp =
|
||||
process->GetTarget().GetDebugger().GetPlatformList().Create(
|
||||
PlatformDarwinKernel::GetPluginNameStatic());
|
||||
PlatformDarwinKernel::GetPluginNameStatic(), /*metadata = */ nullptr);
|
||||
if (platform_sp)
|
||||
process->GetTarget().SetPlatform(platform_sp);
|
||||
|
||||
|
||||
@@ -36,7 +36,9 @@ class Stream;
|
||||
|
||||
class PlatformDarwinKernel : public PlatformDarwin {
|
||||
public:
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch);
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
static void DebuggerInitialize(Debugger &debugger);
|
||||
|
||||
|
||||
@@ -90,7 +90,9 @@ llvm::StringRef PlatformMacOSX::GetDescriptionStatic() {
|
||||
return "Local Mac OS X user platform plug-in.";
|
||||
}
|
||||
|
||||
PlatformSP PlatformMacOSX::CreateInstance(bool force, const ArchSpec *arch) {
|
||||
PlatformSP PlatformMacOSX::CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
// The only time we create an instance is when we are creating a remote
|
||||
// macosx platform which is handled by PlatformRemoteMacOSX.
|
||||
return PlatformSP();
|
||||
|
||||
@@ -32,7 +32,9 @@ class PlatformMacOSX : public PlatformDarwinDevice {
|
||||
public:
|
||||
PlatformMacOSX();
|
||||
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch);
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
static void Initialize();
|
||||
|
||||
|
||||
@@ -56,8 +56,10 @@ void PlatformRemoteAppleBridge::Terminate() {
|
||||
PlatformDarwin::Terminate();
|
||||
}
|
||||
|
||||
PlatformSP PlatformRemoteAppleBridge::CreateInstance(bool force,
|
||||
const ArchSpec *arch) {
|
||||
PlatformSP
|
||||
PlatformRemoteAppleBridge::CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
Log *log = GetLog(LLDBLog::Platform);
|
||||
if (log) {
|
||||
const char *arch_name;
|
||||
|
||||
@@ -24,7 +24,9 @@ class PlatformRemoteAppleBridge : public PlatformRemoteDarwinDevice {
|
||||
public:
|
||||
PlatformRemoteAppleBridge();
|
||||
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch);
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
static void Initialize();
|
||||
|
||||
|
||||
@@ -57,8 +57,10 @@ void PlatformRemoteAppleTV::Terminate() {
|
||||
PlatformDarwin::Terminate();
|
||||
}
|
||||
|
||||
PlatformSP PlatformRemoteAppleTV::CreateInstance(bool force,
|
||||
const ArchSpec *arch) {
|
||||
PlatformSP
|
||||
PlatformRemoteAppleTV::CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
Log *log = GetLog(LLDBLog::Platform);
|
||||
if (log) {
|
||||
const char *arch_name;
|
||||
|
||||
@@ -26,8 +26,9 @@ public:
|
||||
PlatformRemoteAppleTV();
|
||||
|
||||
// Class Functions
|
||||
static lldb::PlatformSP CreateInstance(bool force,
|
||||
const lldb_private::ArchSpec *arch);
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
static void Initialize();
|
||||
|
||||
|
||||
@@ -54,8 +54,10 @@ void PlatformRemoteAppleWatch::Terminate() {
|
||||
PlatformDarwin::Terminate();
|
||||
}
|
||||
|
||||
PlatformSP PlatformRemoteAppleWatch::CreateInstance(bool force,
|
||||
const ArchSpec *arch) {
|
||||
PlatformSP
|
||||
PlatformRemoteAppleWatch::CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
Log *log = GetLog(LLDBLog::Platform);
|
||||
if (log) {
|
||||
const char *arch_name;
|
||||
|
||||
@@ -22,7 +22,9 @@ class PlatformRemoteAppleWatch : public PlatformRemoteDarwinDevice {
|
||||
public:
|
||||
PlatformRemoteAppleWatch();
|
||||
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch);
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
static void Initialize();
|
||||
|
||||
|
||||
@@ -57,8 +57,10 @@ void PlatformRemoteMacOSX::Terminate() {
|
||||
PlatformDarwin::Terminate();
|
||||
}
|
||||
|
||||
PlatformSP PlatformRemoteMacOSX::CreateInstance(bool force,
|
||||
const ArchSpec *arch) {
|
||||
PlatformSP
|
||||
PlatformRemoteMacOSX::CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
Log *log = GetLog(LLDBLog::Platform);
|
||||
if (log) {
|
||||
const char *arch_name;
|
||||
|
||||
@@ -27,7 +27,9 @@ class PlatformRemoteMacOSX : public virtual PlatformRemoteDarwinDevice {
|
||||
public:
|
||||
PlatformRemoteMacOSX();
|
||||
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch);
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
static void Initialize();
|
||||
|
||||
|
||||
@@ -52,7 +52,9 @@ void PlatformRemoteiOS::Terminate() {
|
||||
PlatformDarwin::Terminate();
|
||||
}
|
||||
|
||||
PlatformSP PlatformRemoteiOS::CreateInstance(bool force, const ArchSpec *arch) {
|
||||
PlatformSP PlatformRemoteiOS::CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
Log *log = GetLog(LLDBLog::Platform);
|
||||
if (log) {
|
||||
const char *arch_name;
|
||||
|
||||
@@ -22,7 +22,9 @@ class PlatformRemoteiOS : public PlatformRemoteDarwinDevice {
|
||||
public:
|
||||
PlatformRemoteiOS();
|
||||
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch);
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
static void Initialize();
|
||||
|
||||
|
||||
@@ -39,8 +39,9 @@ LLDB_PLUGIN_DEFINE(PlatformNetBSD)
|
||||
|
||||
static uint32_t g_initialize_count = 0;
|
||||
|
||||
|
||||
PlatformSP PlatformNetBSD::CreateInstance(bool force, const ArchSpec *arch) {
|
||||
PlatformSP PlatformNetBSD::CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
Log *log = GetLog(LLDBLog::Platform);
|
||||
LLDB_LOG(log, "force = {0}, arch=({1}, {2})", force,
|
||||
arch ? arch->GetArchitectureName() : "<null>",
|
||||
|
||||
@@ -24,7 +24,9 @@ public:
|
||||
static void Terminate();
|
||||
|
||||
// lldb_private::PluginInterface functions
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch);
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
static llvm::StringRef GetPluginNameStatic(bool is_host) {
|
||||
return is_host ? Platform::GetHostPlatformName() : "remote-netbsd";
|
||||
|
||||
@@ -39,8 +39,9 @@ LLDB_PLUGIN_DEFINE(PlatformOpenBSD)
|
||||
|
||||
static uint32_t g_initialize_count = 0;
|
||||
|
||||
|
||||
PlatformSP PlatformOpenBSD::CreateInstance(bool force, const ArchSpec *arch) {
|
||||
PlatformSP PlatformOpenBSD::CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
Log *log = GetLog(LLDBLog::Platform);
|
||||
LLDB_LOG(log, "force = {0}, arch=({1}, {2})", force,
|
||||
arch ? arch->GetArchitectureName() : "<null>",
|
||||
|
||||
@@ -23,7 +23,9 @@ public:
|
||||
static void Terminate();
|
||||
|
||||
// lldb_private::PluginInterface functions
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch);
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
static llvm::StringRef GetPluginNameStatic(bool is_host) {
|
||||
return is_host ? Platform::GetHostPlatformName() : "remote-openbsd";
|
||||
|
||||
@@ -310,7 +310,8 @@ Status PlatformPOSIX::ConnectRemote(Args &args) {
|
||||
if (!m_remote_platform_sp)
|
||||
m_remote_platform_sp =
|
||||
platform_gdb_server::PlatformRemoteGDBServer::CreateInstance(
|
||||
/*force=*/true, nullptr);
|
||||
/*force=*/true, /*arch=*/nullptr, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr);
|
||||
|
||||
if (m_remote_platform_sp && error.Success())
|
||||
error = m_remote_platform_sp->ConnectRemote(args);
|
||||
|
||||
@@ -103,7 +103,9 @@ void PlatformQemuUser::DebuggerInitialize(Debugger &debugger) {
|
||||
}
|
||||
}
|
||||
|
||||
PlatformSP PlatformQemuUser::CreateInstance(bool force, const ArchSpec *arch) {
|
||||
PlatformSP PlatformQemuUser::CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
if (force)
|
||||
return PlatformSP(new PlatformQemuUser());
|
||||
return nullptr;
|
||||
|
||||
@@ -70,7 +70,9 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch);
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
static void DebuggerInitialize(Debugger &debugger);
|
||||
|
||||
PlatformQemuUser() : Platform(/*is_host=*/true) {}
|
||||
|
||||
@@ -41,8 +41,9 @@ LLDB_PLUGIN_DEFINE(PlatformWindows)
|
||||
|
||||
static uint32_t g_initialize_count = 0;
|
||||
|
||||
PlatformSP PlatformWindows::CreateInstance(bool force,
|
||||
const lldb_private::ArchSpec *arch) {
|
||||
PlatformSP PlatformWindows::CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
// The only time we create an instance is when we are creating a remote
|
||||
// windows platform
|
||||
const bool is_host = false;
|
||||
@@ -137,10 +138,12 @@ Status PlatformWindows::ConnectRemote(Args &args) {
|
||||
"can't connect to the host platform '{0}', always connected",
|
||||
GetPluginName());
|
||||
} else {
|
||||
if (!m_remote_platform_sp)
|
||||
if (!m_remote_platform_sp) {
|
||||
m_remote_platform_sp =
|
||||
platform_gdb_server::PlatformRemoteGDBServer::CreateInstance(
|
||||
/*force=*/true, nullptr);
|
||||
/*force=*/true, /*arch=*/nullptr, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr);
|
||||
}
|
||||
|
||||
if (m_remote_platform_sp) {
|
||||
if (error.Success()) {
|
||||
|
||||
@@ -22,8 +22,9 @@ public:
|
||||
static void Terminate();
|
||||
|
||||
// lldb_private::PluginInterface functions
|
||||
static lldb::PlatformSP CreateInstance(bool force,
|
||||
const lldb_private::ArchSpec *arch);
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
static llvm::StringRef GetPluginNameStatic(bool is_host) {
|
||||
return is_host ? Platform::GetHostPlatformName() : "remote-windows";
|
||||
|
||||
@@ -64,8 +64,10 @@ void PlatformRemoteGDBServer::Terminate() {
|
||||
Platform::Terminate();
|
||||
}
|
||||
|
||||
PlatformSP PlatformRemoteGDBServer::CreateInstance(bool force,
|
||||
const ArchSpec *arch) {
|
||||
PlatformSP
|
||||
PlatformRemoteGDBServer::CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
bool create = force;
|
||||
if (!create) {
|
||||
create = !arch->TripleVendorWasSpecified() && !arch->TripleOSWasSpecified();
|
||||
|
||||
@@ -26,7 +26,9 @@ public:
|
||||
|
||||
static void Terminate();
|
||||
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch);
|
||||
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata);
|
||||
|
||||
static llvm::StringRef GetPluginNameStatic() { return "remote-gdb-server"; }
|
||||
|
||||
|
||||
@@ -164,40 +164,6 @@ Platform::LocateExecutableScriptingResources(Target *target, Module &module,
|
||||
return FileSpecList();
|
||||
}
|
||||
|
||||
// PlatformSP
|
||||
// Platform::FindPlugin (Process *process, ConstString plugin_name)
|
||||
//{
|
||||
// PlatformCreateInstance create_callback = nullptr;
|
||||
// if (plugin_name)
|
||||
// {
|
||||
// create_callback =
|
||||
// PluginManager::GetPlatformCreateCallbackForPluginName (plugin_name);
|
||||
// if (create_callback)
|
||||
// {
|
||||
// ArchSpec arch;
|
||||
// if (process)
|
||||
// {
|
||||
// arch = process->GetTarget().GetArchitecture();
|
||||
// }
|
||||
// PlatformSP platform_sp(create_callback(process, &arch));
|
||||
// if (platform_sp)
|
||||
// return platform_sp;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// for (uint32_t idx = 0; (create_callback =
|
||||
// PluginManager::GetPlatformCreateCallbackAtIndex(idx)) != nullptr;
|
||||
// ++idx)
|
||||
// {
|
||||
// PlatformSP platform_sp(create_callback(process, nullptr));
|
||||
// if (platform_sp)
|
||||
// return platform_sp;
|
||||
// }
|
||||
// }
|
||||
// return PlatformSP();
|
||||
//}
|
||||
|
||||
Status Platform::GetSharedModule(
|
||||
const ModuleSpec &module_spec, Process *process, ModuleSP &module_sp,
|
||||
const FileSpecList *module_search_paths_ptr,
|
||||
@@ -251,14 +217,15 @@ bool Platform::GetModuleSpec(const FileSpec &module_file_spec,
|
||||
module_spec);
|
||||
}
|
||||
|
||||
PlatformSP Platform::Create(llvm::StringRef name) {
|
||||
PlatformSP Platform::Create(llvm::StringRef name, const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
lldb::PlatformSP platform_sp;
|
||||
if (name == GetHostPlatformName())
|
||||
return GetHostPlatform();
|
||||
|
||||
if (PlatformCreateInstance create_callback =
|
||||
PluginManager::GetPlatformCreateCallbackForPluginName(name))
|
||||
return create_callback(true, nullptr);
|
||||
return create_callback(true, nullptr, debugger, metadata);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -1967,19 +1934,20 @@ Args Platform::GetExtraStartupCommands() {
|
||||
return {};
|
||||
}
|
||||
|
||||
PlatformSP PlatformList::GetOrCreate(llvm::StringRef name) {
|
||||
PlatformSP PlatformList::GetOrCreate(llvm::StringRef name,
|
||||
const ScriptedMetadata *metadata) {
|
||||
std::lock_guard<std::recursive_mutex> guard(m_mutex);
|
||||
for (const PlatformSP &platform_sp : m_platforms) {
|
||||
if (platform_sp->GetName() == name)
|
||||
return platform_sp;
|
||||
}
|
||||
return Create(name);
|
||||
return Create(name, metadata);
|
||||
}
|
||||
|
||||
PlatformSP PlatformList::GetOrCreate(const ArchSpec &arch,
|
||||
const ArchSpec &process_host_arch,
|
||||
ArchSpec *platform_arch_ptr,
|
||||
Status &error) {
|
||||
ArchSpec *platform_arch_ptr, Status &error,
|
||||
const ScriptedMetadata *metadata) {
|
||||
std::lock_guard<std::recursive_mutex> guard(m_mutex);
|
||||
// First try exact arch matches across all platforms already created
|
||||
for (const auto &platform_sp : m_platforms) {
|
||||
@@ -2002,7 +1970,8 @@ PlatformSP PlatformList::GetOrCreate(const ArchSpec &arch,
|
||||
for (idx = 0;
|
||||
(create_callback = PluginManager::GetPlatformCreateCallbackAtIndex(idx));
|
||||
++idx) {
|
||||
PlatformSP platform_sp = create_callback(false, &arch);
|
||||
PlatformSP platform_sp =
|
||||
create_callback(false, &arch, &m_debugger, metadata);
|
||||
if (platform_sp &&
|
||||
platform_sp->IsCompatibleArchitecture(
|
||||
arch, process_host_arch, ArchSpec::ExactMatch, platform_arch_ptr)) {
|
||||
@@ -2014,7 +1983,8 @@ PlatformSP PlatformList::GetOrCreate(const ArchSpec &arch,
|
||||
for (idx = 0;
|
||||
(create_callback = PluginManager::GetPlatformCreateCallbackAtIndex(idx));
|
||||
++idx) {
|
||||
PlatformSP platform_sp = create_callback(false, &arch);
|
||||
PlatformSP platform_sp =
|
||||
create_callback(false, &arch, &m_debugger, metadata);
|
||||
if (platform_sp && platform_sp->IsCompatibleArchitecture(
|
||||
arch, process_host_arch, ArchSpec::CompatibleMatch,
|
||||
platform_arch_ptr)) {
|
||||
@@ -2029,16 +1999,19 @@ PlatformSP PlatformList::GetOrCreate(const ArchSpec &arch,
|
||||
|
||||
PlatformSP PlatformList::GetOrCreate(const ArchSpec &arch,
|
||||
const ArchSpec &process_host_arch,
|
||||
ArchSpec *platform_arch_ptr) {
|
||||
ArchSpec *platform_arch_ptr,
|
||||
const ScriptedMetadata *metadata) {
|
||||
Status error;
|
||||
if (arch.IsValid())
|
||||
return GetOrCreate(arch, process_host_arch, platform_arch_ptr, error);
|
||||
return GetOrCreate(arch, process_host_arch, platform_arch_ptr, error,
|
||||
metadata);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
PlatformSP PlatformList::GetOrCreate(llvm::ArrayRef<ArchSpec> archs,
|
||||
const ArchSpec &process_host_arch,
|
||||
std::vector<PlatformSP> &candidates) {
|
||||
std::vector<PlatformSP> &candidates,
|
||||
const ScriptedMetadata *metadata) {
|
||||
candidates.clear();
|
||||
candidates.reserve(archs.size());
|
||||
|
||||
@@ -2067,7 +2040,9 @@ PlatformSP PlatformList::GetOrCreate(llvm::ArrayRef<ArchSpec> archs,
|
||||
|
||||
// Collect a list of candidate platforms for the architectures.
|
||||
for (const ArchSpec &arch : archs) {
|
||||
if (PlatformSP platform = GetOrCreate(arch, process_host_arch, nullptr))
|
||||
if (PlatformSP platform = GetOrCreate(arch, process_host_arch,
|
||||
/*platform_arch_ptr = */ nullptr,
|
||||
/*metadata = */ nullptr))
|
||||
candidates.push_back(platform);
|
||||
}
|
||||
|
||||
@@ -2088,9 +2063,10 @@ PlatformSP PlatformList::GetOrCreate(llvm::ArrayRef<ArchSpec> archs,
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
PlatformSP PlatformList::Create(llvm::StringRef name) {
|
||||
PlatformSP PlatformList::Create(llvm::StringRef name,
|
||||
const ScriptedMetadata *metadata) {
|
||||
std::lock_guard<std::recursive_mutex> guard(m_mutex);
|
||||
PlatformSP platform_sp = Platform::Create(name);
|
||||
PlatformSP platform_sp = Platform::Create(name, &m_debugger, metadata);
|
||||
m_platforms.push_back(platform_sp);
|
||||
return platform_sp;
|
||||
}
|
||||
@@ -2104,7 +2080,8 @@ bool PlatformList::LoadPlatformBinaryAndSetup(Process *process,
|
||||
(create_callback = PluginManager::GetPlatformCreateCallbackAtIndex(idx));
|
||||
++idx) {
|
||||
ArchSpec arch;
|
||||
PlatformSP platform_sp = create_callback(true, &arch);
|
||||
PlatformSP platform_sp =
|
||||
create_callback(true, &arch, &m_debugger, /*metadata = */ nullptr);
|
||||
if (platform_sp) {
|
||||
if (platform_sp->LoadPlatformBinaryAndSetup(process, addr, notify))
|
||||
return true;
|
||||
|
||||
@@ -2931,7 +2931,8 @@ void Process::CompleteAttach() {
|
||||
ArchSpec::CompatibleMatch, nullptr)) {
|
||||
ArchSpec platform_arch;
|
||||
platform_sp = GetTarget().GetDebugger().GetPlatformList().GetOrCreate(
|
||||
target_arch, process_host_arch, &platform_arch);
|
||||
target_arch, process_host_arch, &platform_arch,
|
||||
/*metadata = */ nullptr);
|
||||
if (platform_sp) {
|
||||
GetTarget().SetPlatform(platform_sp);
|
||||
GetTarget().SetArchitecture(platform_arch);
|
||||
|
||||
@@ -1503,8 +1503,9 @@ bool Target::SetArchitecture(const ArchSpec &arch_spec, bool set_platform,
|
||||
other, {}, ArchSpec::CompatibleMatch, nullptr)) {
|
||||
ArchSpec platform_arch;
|
||||
if (PlatformSP arch_platform_sp =
|
||||
GetDebugger().GetPlatformList().GetOrCreate(other, {},
|
||||
&platform_arch)) {
|
||||
GetDebugger().GetPlatformList().GetOrCreate(
|
||||
other, /*process_host_arch = */ {}, &platform_arch,
|
||||
/*metadata = */ nullptr)) {
|
||||
SetPlatform(arch_platform_sp);
|
||||
if (platform_arch.IsValid())
|
||||
other = platform_arch;
|
||||
|
||||
@@ -184,8 +184,9 @@ Status TargetList::CreateTargetInternal(
|
||||
std::vector<ArchSpec> archs;
|
||||
for (const ModuleSpec &spec : module_specs.ModuleSpecs())
|
||||
archs.push_back(spec.GetArchitecture());
|
||||
if (PlatformSP platform_for_archs_sp =
|
||||
platform_list.GetOrCreate(archs, {}, candidates)) {
|
||||
if (PlatformSP platform_for_archs_sp = platform_list.GetOrCreate(
|
||||
archs, /*process_host_arch = */ {}, candidates,
|
||||
/*metadata = */ nullptr)) {
|
||||
platform_sp = platform_for_archs_sp;
|
||||
} else if (candidates.empty()) {
|
||||
error.SetErrorString("no matching platforms found for this file");
|
||||
@@ -218,7 +219,9 @@ Status TargetList::CreateTargetInternal(
|
||||
if (!prefer_platform_arch && arch.IsValid()) {
|
||||
if (!platform_sp->IsCompatibleArchitecture(
|
||||
arch, {}, ArchSpec::CompatibleMatch, nullptr)) {
|
||||
platform_sp = platform_list.GetOrCreate(arch, {}, &platform_arch);
|
||||
platform_sp =
|
||||
platform_list.GetOrCreate(arch, /*process_host_arch = */ {},
|
||||
&platform_arch, /*metadata = */ nullptr);
|
||||
if (platform_sp)
|
||||
platform_list.SetSelectedPlatform(platform_sp);
|
||||
}
|
||||
@@ -228,8 +231,9 @@ Status TargetList::CreateTargetInternal(
|
||||
ArchSpec fixed_platform_arch;
|
||||
if (!platform_sp->IsCompatibleArchitecture(
|
||||
platform_arch, {}, ArchSpec::CompatibleMatch, nullptr)) {
|
||||
platform_sp =
|
||||
platform_list.GetOrCreate(platform_arch, {}, &fixed_platform_arch);
|
||||
platform_sp = platform_list.GetOrCreate(
|
||||
platform_arch, /*process_host_arch = */ {}, &fixed_platform_arch,
|
||||
/*metadata = */ nullptr);
|
||||
if (platform_sp)
|
||||
platform_list.SetSelectedPlatform(platform_sp);
|
||||
}
|
||||
@@ -260,8 +264,9 @@ Status TargetList::CreateTargetInternal(Debugger &debugger,
|
||||
if (arch.IsValid()) {
|
||||
if (!platform_sp || !platform_sp->IsCompatibleArchitecture(
|
||||
arch, {}, ArchSpec::CompatibleMatch, nullptr))
|
||||
platform_sp =
|
||||
debugger.GetPlatformList().GetOrCreate(specified_arch, {}, &arch);
|
||||
platform_sp = debugger.GetPlatformList().GetOrCreate(
|
||||
specified_arch, /*process_host_arch = */ {}, &arch,
|
||||
/*metadata = */ nullptr);
|
||||
}
|
||||
|
||||
if (!platform_sp)
|
||||
|
||||
@@ -39,7 +39,8 @@ public:
|
||||
[]() { Debugger::Initialize(nullptr); });
|
||||
ArchSpec arch("x86_64-apple-macosx-");
|
||||
Platform::SetHostPlatform(
|
||||
PlatformRemoteMacOSX::CreateInstance(true, &arch));
|
||||
PlatformRemoteMacOSX::CreateInstance(true, &arch, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr));
|
||||
}
|
||||
void TearDown() override {
|
||||
PlatformMacOSX::Terminate();
|
||||
|
||||
@@ -369,8 +369,9 @@ TEST_F(DWARFExpressionMockProcessTest, DW_OP_deref) {
|
||||
|
||||
// Set up a mock process.
|
||||
ArchSpec arch("i386-pc-linux");
|
||||
Platform::SetHostPlatform(
|
||||
platform_linux::PlatformLinux::CreateInstance(true, &arch));
|
||||
Platform::SetHostPlatform(platform_linux::PlatformLinux::CreateInstance(
|
||||
true, &arch, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr));
|
||||
lldb::DebuggerSP debugger_sp = Debugger::CreateInstance();
|
||||
ASSERT_TRUE(debugger_sp);
|
||||
lldb::TargetSP target_sp;
|
||||
@@ -409,7 +410,9 @@ TEST_F(DWARFExpressionMockProcessTest, WASM_DW_OP_addr) {
|
||||
// Set up a wasm target
|
||||
ArchSpec arch("wasm32-unknown-unknown-wasm");
|
||||
lldb::PlatformSP host_platform_sp =
|
||||
platform_linux::PlatformLinux::CreateInstance(true, &arch);
|
||||
platform_linux::PlatformLinux::CreateInstance(true, &arch,
|
||||
/*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr);
|
||||
ASSERT_TRUE(host_platform_sp);
|
||||
Platform::SetHostPlatform(host_platform_sp);
|
||||
lldb::DebuggerSP debugger_sp = Debugger::CreateInstance();
|
||||
@@ -488,7 +491,9 @@ DWARF:
|
||||
// Set up a wasm target
|
||||
ArchSpec arch("wasm32-unknown-unknown-wasm");
|
||||
lldb::PlatformSP host_platform_sp =
|
||||
platform_linux::PlatformLinux::CreateInstance(true, &arch);
|
||||
platform_linux::PlatformLinux::CreateInstance(true, &arch,
|
||||
/*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr);
|
||||
ASSERT_TRUE(host_platform_sp);
|
||||
Platform::SetHostPlatform(host_platform_sp);
|
||||
lldb::DebuggerSP debugger_sp = Debugger::CreateInstance();
|
||||
|
||||
@@ -104,8 +104,10 @@ void RunTest(CommandInterpreter &interp, const char *args, bool is_leaf,
|
||||
TEST_F(VerifyUserMultiwordCmdPathTest, TestErrors) {
|
||||
ArchSpec arch("x86_64-apple-macosx-");
|
||||
|
||||
Platform::SetHostPlatform(PlatformRemoteMacOSX::CreateInstance(true, &arch));
|
||||
|
||||
Platform::SetHostPlatform(
|
||||
PlatformRemoteMacOSX::CreateInstance(true, &arch, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr));
|
||||
|
||||
DebuggerSP debugger_sp = Debugger::CreateInstance();
|
||||
ASSERT_TRUE(debugger_sp);
|
||||
|
||||
|
||||
@@ -9,10 +9,13 @@
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "Plugins/Platform/MacOSX/PlatformAppleSimulator.h"
|
||||
#include "Plugins/Platform/MacOSX/PlatformMacOSX.h"
|
||||
#include "Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h"
|
||||
#include "Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h"
|
||||
#include "Plugins/Platform/MacOSX/PlatformRemoteMacOSX.h"
|
||||
#include "Plugins/Platform/MacOSX/PlatformRemoteiOS.h"
|
||||
#include "TestingSupport/SubsystemRAII.h"
|
||||
#include "lldb/Core/Debugger.h"
|
||||
#include "lldb/Host/FileSystem.h"
|
||||
#include "lldb/Host/HostInfo.h"
|
||||
#include "lldb/Target/Platform.h"
|
||||
@@ -20,16 +23,36 @@
|
||||
using namespace lldb;
|
||||
using namespace lldb_private;
|
||||
|
||||
static std::once_flag platform_initialize_flag;
|
||||
static std::once_flag debugger_initialize_flag;
|
||||
|
||||
class PlatformAppleSimulatorTest : public ::testing::Test {
|
||||
SubsystemRAII<FileSystem, HostInfo, PlatformAppleSimulator, PlatformRemoteiOS,
|
||||
PlatformRemoteAppleTV, PlatformRemoteAppleWatch>
|
||||
subsystems;
|
||||
|
||||
public:
|
||||
void SetUp() override {
|
||||
std::call_once(platform_initialize_flag,
|
||||
[]() { PlatformMacOSX::Initialize(); });
|
||||
std::call_once(debugger_initialize_flag,
|
||||
[]() { Debugger::Initialize(nullptr); });
|
||||
ArchSpec arch("x86_64-apple-macosx-");
|
||||
Platform::SetHostPlatform(
|
||||
PlatformRemoteMacOSX::CreateInstance(true, &arch, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr));
|
||||
}
|
||||
void TearDown() override { PlatformMacOSX::Terminate(); }
|
||||
|
||||
protected:
|
||||
DebuggerSP m_debugger_sp = nullptr;
|
||||
};
|
||||
|
||||
#ifdef __APPLE__
|
||||
|
||||
static void testSimPlatformArchHasSimEnvironment(llvm::StringRef name) {
|
||||
auto platform_sp = Platform::Create(name);
|
||||
auto platform_sp = Platform::Create(name, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr);
|
||||
ASSERT_TRUE(platform_sp);
|
||||
int num_arches = 0;
|
||||
|
||||
@@ -58,12 +81,13 @@ TEST_F(PlatformAppleSimulatorTest, TestHostPlatformToSim) {
|
||||
};
|
||||
|
||||
for (auto sim : sim_platforms) {
|
||||
PlatformList list;
|
||||
PlatformList list(*m_debugger_sp.get());
|
||||
ArchSpec arch = platform_arch;
|
||||
arch.GetTriple().setOS(sim);
|
||||
arch.GetTriple().setEnvironment(llvm::Triple::Simulator);
|
||||
|
||||
auto platform_sp = list.GetOrCreate(arch, {}, nullptr);
|
||||
auto platform_sp = list.GetOrCreate(arch, {}, /*platform_arch_ptr=*/nullptr,
|
||||
/*metadata=*/nullptr);
|
||||
EXPECT_TRUE(platform_sp);
|
||||
}
|
||||
}
|
||||
@@ -78,10 +102,10 @@ TEST_F(PlatformAppleSimulatorTest, TestPlatformSelectionOrder) {
|
||||
llvm::Triple::WatchOS,
|
||||
};
|
||||
|
||||
PlatformList list;
|
||||
list.GetOrCreate("remote-ios");
|
||||
list.GetOrCreate("remote-tvos");
|
||||
list.GetOrCreate("remote-watchos");
|
||||
PlatformList list(*m_debugger_sp.get());
|
||||
list.GetOrCreate("remote-ios", /*metadata=*/nullptr);
|
||||
list.GetOrCreate("remote-tvos", /*metadata=*/nullptr);
|
||||
list.GetOrCreate("remote-watchos", /*metadata=*/nullptr);
|
||||
|
||||
for (auto sim : sim_platforms) {
|
||||
ArchSpec arch = platform_arch;
|
||||
@@ -89,7 +113,9 @@ TEST_F(PlatformAppleSimulatorTest, TestPlatformSelectionOrder) {
|
||||
arch.GetTriple().setEnvironment(llvm::Triple::Simulator);
|
||||
|
||||
Status error;
|
||||
auto platform_sp = list.GetOrCreate(arch, {}, nullptr, error);
|
||||
auto platform_sp =
|
||||
list.GetOrCreate(arch, {}, /*platform_arch_ptr=*/nullptr, error,
|
||||
/*metadata=*/nullptr);
|
||||
EXPECT_TRUE(platform_sp);
|
||||
EXPECT_TRUE(platform_sp->GetName().contains("simulator"));
|
||||
}
|
||||
|
||||
@@ -82,15 +82,19 @@ public:
|
||||
|
||||
switch (arch.GetTriple().getOS()) {
|
||||
case llvm::Triple::FreeBSD:
|
||||
platform_sp =
|
||||
platform_freebsd::PlatformFreeBSD::CreateInstance(true, &arch);
|
||||
platform_sp = platform_freebsd::PlatformFreeBSD::CreateInstance(
|
||||
true, &arch, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr);
|
||||
break;
|
||||
case llvm::Triple::Linux:
|
||||
platform_sp = platform_linux::PlatformLinux::CreateInstance(true, &arch);
|
||||
platform_sp = platform_linux::PlatformLinux::CreateInstance(
|
||||
true, &arch, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr);
|
||||
break;
|
||||
case llvm::Triple::NetBSD:
|
||||
platform_sp =
|
||||
platform_netbsd::PlatformNetBSD::CreateInstance(true, &arch);
|
||||
platform_sp = platform_netbsd::PlatformNetBSD::CreateInstance(
|
||||
true, &arch, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr);
|
||||
break;
|
||||
default:
|
||||
llvm_unreachable("unknown ostype in triple");
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#include "Plugins/Platform/POSIX/PlatformPOSIX.h"
|
||||
#include "TestingSupport/SubsystemRAII.h"
|
||||
#include "lldb/Core/Debugger.h"
|
||||
#include "lldb/Core/PluginManager.h"
|
||||
#include "lldb/Host/FileSystem.h"
|
||||
#include "lldb/Host/HostInfo.h"
|
||||
@@ -18,6 +19,8 @@
|
||||
using namespace lldb;
|
||||
using namespace lldb_private;
|
||||
|
||||
static std::once_flag debugger_initialize_flag;
|
||||
|
||||
class TestPlatform : public PlatformPOSIX {
|
||||
public:
|
||||
TestPlatform() : PlatformPOSIX(false) {}
|
||||
@@ -59,7 +62,9 @@ public:
|
||||
PluginManager::UnregisterPlugin(PlatformThumb::CreateInstance);
|
||||
}
|
||||
|
||||
static PlatformSP CreateInstance(bool force, const ArchSpec *arch) {
|
||||
static PlatformSP CreateInstance(bool force, const ArchSpec *arch,
|
||||
const Debugger *debugger,
|
||||
const ScriptedMetadata *metadata) {
|
||||
return std::make_shared<PlatformThumb>();
|
||||
}
|
||||
|
||||
@@ -76,12 +81,21 @@ class PlatformTest : public ::testing::Test {
|
||||
SubsystemRAII<FileSystem, HostInfo> subsystems;
|
||||
|
||||
protected:
|
||||
PlatformList list;
|
||||
PlatformList *list = nullptr;
|
||||
DebuggerSP m_debugger_sp = nullptr;
|
||||
|
||||
void SetUp() override {
|
||||
std::call_once(debugger_initialize_flag,
|
||||
[]() { Debugger::Initialize(nullptr); });
|
||||
list = new PlatformList(*m_debugger_sp.get());
|
||||
}
|
||||
|
||||
void TearDown() override { delete list; }
|
||||
|
||||
void SetHostPlatform(const PlatformSP &platform_sp) {
|
||||
Platform::SetHostPlatform(platform_sp);
|
||||
ASSERT_EQ(Platform::GetHostPlatform(), platform_sp);
|
||||
list.Append(platform_sp, /*set_selected=*/true);
|
||||
list->Append(platform_sp, /*set_selected=*/true);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -93,7 +107,8 @@ TEST_F(PlatformTest, GetPlatformForArchitecturesHost) {
|
||||
std::vector<PlatformSP> candidates;
|
||||
|
||||
// The host platform matches all architectures.
|
||||
PlatformSP platform_sp = list.GetOrCreate(archs, {}, candidates);
|
||||
PlatformSP platform_sp =
|
||||
list->GetOrCreate(archs, {}, candidates, /*metadata=*/nullptr);
|
||||
ASSERT_TRUE(platform_sp);
|
||||
EXPECT_EQ(platform_sp, Platform::GetHostPlatform());
|
||||
}
|
||||
@@ -106,13 +121,14 @@ TEST_F(PlatformTest, GetPlatformForArchitecturesSelected) {
|
||||
std::vector<PlatformSP> candidates;
|
||||
|
||||
// The host platform matches no architectures.
|
||||
PlatformSP platform_sp = list.GetOrCreate(archs, {}, candidates);
|
||||
PlatformSP platform_sp =
|
||||
list->GetOrCreate(archs, {}, candidates, /*metadata=*/nullptr);
|
||||
ASSERT_FALSE(platform_sp);
|
||||
|
||||
// The selected platform matches all architectures.
|
||||
const PlatformSP selected_platform_sp = std::make_shared<PlatformArm>();
|
||||
list.Append(selected_platform_sp, /*set_selected=*/true);
|
||||
platform_sp = list.GetOrCreate(archs, {}, candidates);
|
||||
list->Append(selected_platform_sp, /*set_selected=*/true);
|
||||
platform_sp = list->GetOrCreate(archs, {}, candidates, /*metadata=*/nullptr);
|
||||
ASSERT_TRUE(platform_sp);
|
||||
EXPECT_EQ(platform_sp, selected_platform_sp);
|
||||
}
|
||||
@@ -125,15 +141,16 @@ TEST_F(PlatformTest, GetPlatformForArchitecturesSelectedOverHost) {
|
||||
std::vector<PlatformSP> candidates;
|
||||
|
||||
// The host platform matches one architecture.
|
||||
PlatformSP platform_sp = list.GetOrCreate(archs, {}, candidates);
|
||||
PlatformSP platform_sp =
|
||||
list->GetOrCreate(archs, {}, candidates, /*metadata=*/nullptr);
|
||||
ASSERT_TRUE(platform_sp);
|
||||
EXPECT_EQ(platform_sp, Platform::GetHostPlatform());
|
||||
|
||||
// The selected and host platform each match one architecture.
|
||||
// The selected platform is preferred.
|
||||
const PlatformSP selected_platform_sp = std::make_shared<PlatformArm>();
|
||||
list.Append(selected_platform_sp, /*set_selected=*/true);
|
||||
platform_sp = list.GetOrCreate(archs, {}, candidates);
|
||||
list->Append(selected_platform_sp, /*set_selected=*/true);
|
||||
platform_sp = list->GetOrCreate(archs, {}, candidates, /*metadata=*/nullptr);
|
||||
ASSERT_TRUE(platform_sp);
|
||||
EXPECT_EQ(platform_sp, selected_platform_sp);
|
||||
}
|
||||
@@ -144,14 +161,15 @@ TEST_F(PlatformTest, GetPlatformForArchitecturesCandidates) {
|
||||
SetHostPlatform(std::make_shared<PlatformIntel>());
|
||||
|
||||
const PlatformSP selected_platform_sp = std::make_shared<PlatformArm>();
|
||||
list.Append(selected_platform_sp, /*set_selected=*/true);
|
||||
list->Append(selected_platform_sp, /*set_selected=*/true);
|
||||
|
||||
const std::vector<ArchSpec> archs = {ArchSpec("thumbv7-apple-ps4"),
|
||||
ArchSpec("thumbv7f-apple-ps4")};
|
||||
std::vector<PlatformSP> candidates;
|
||||
|
||||
// The host platform matches one architecture.
|
||||
PlatformSP platform_sp = list.GetOrCreate(archs, {}, candidates);
|
||||
PlatformSP platform_sp =
|
||||
list->GetOrCreate(archs, {}, candidates, /*metadata=*/nullptr);
|
||||
ASSERT_TRUE(platform_sp);
|
||||
EXPECT_EQ(platform_sp->GetName(), "thumb");
|
||||
|
||||
|
||||
@@ -142,7 +142,9 @@ ThreadSP CreateThread(ProcessSP &process_sp, bool should_stop,
|
||||
TEST_F(ProcessEventDataTest, DoOnRemoval) {
|
||||
ArchSpec arch("x86_64-apple-macosx-");
|
||||
|
||||
Platform::SetHostPlatform(PlatformRemoteMacOSX::CreateInstance(true, &arch));
|
||||
Platform::SetHostPlatform(
|
||||
PlatformRemoteMacOSX::CreateInstance(true, &arch, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr));
|
||||
|
||||
DebuggerSP debugger_sp = Debugger::CreateInstance();
|
||||
ASSERT_TRUE(debugger_sp);
|
||||
@@ -182,7 +184,9 @@ TEST_F(ProcessEventDataTest, DoOnRemoval) {
|
||||
TEST_F(ProcessEventDataTest, ShouldStop) {
|
||||
ArchSpec arch("x86_64-apple-macosx-");
|
||||
|
||||
Platform::SetHostPlatform(PlatformRemoteMacOSX::CreateInstance(true, &arch));
|
||||
Platform::SetHostPlatform(
|
||||
PlatformRemoteMacOSX::CreateInstance(true, &arch, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr));
|
||||
|
||||
DebuggerSP debugger_sp = Debugger::CreateInstance();
|
||||
ASSERT_TRUE(debugger_sp);
|
||||
|
||||
@@ -72,8 +72,9 @@ TEST_F(ExecutionContextTest, GetByteOrder) {
|
||||
TEST_F(ExecutionContextTest, GetByteOrderTarget) {
|
||||
ArchSpec arch("powerpc64-pc-linux");
|
||||
|
||||
Platform::SetHostPlatform(
|
||||
platform_linux::PlatformLinux::CreateInstance(true, &arch));
|
||||
Platform::SetHostPlatform(platform_linux::PlatformLinux::CreateInstance(
|
||||
true, &arch, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr));
|
||||
|
||||
DebuggerSP debugger_sp = Debugger::CreateInstance();
|
||||
ASSERT_TRUE(debugger_sp);
|
||||
@@ -94,8 +95,9 @@ TEST_F(ExecutionContextTest, GetByteOrderTarget) {
|
||||
TEST_F(ExecutionContextTest, GetByteOrderProcess) {
|
||||
ArchSpec arch("powerpc64-pc-linux");
|
||||
|
||||
Platform::SetHostPlatform(
|
||||
platform_linux::PlatformLinux::CreateInstance(true, &arch));
|
||||
Platform::SetHostPlatform(platform_linux::PlatformLinux::CreateInstance(
|
||||
true, &arch, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr));
|
||||
|
||||
DebuggerSP debugger_sp = Debugger::CreateInstance();
|
||||
ASSERT_TRUE(debugger_sp);
|
||||
|
||||
@@ -32,8 +32,9 @@ public:
|
||||
// Pretend Linux is the host platform.
|
||||
platform_linux::PlatformLinux::Initialize();
|
||||
ArchSpec arch("powerpc64-pc-linux");
|
||||
Platform::SetHostPlatform(
|
||||
platform_linux::PlatformLinux::CreateInstance(true, &arch));
|
||||
Platform::SetHostPlatform(platform_linux::PlatformLinux::CreateInstance(
|
||||
true, &arch, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr));
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
|
||||
@@ -91,8 +91,9 @@ TargetSP CreateTarget(DebuggerSP &debugger_sp, ArchSpec &arch) {
|
||||
TEST_F(ThreadTest, SetStopInfo) {
|
||||
ArchSpec arch("powerpc64-pc-linux");
|
||||
|
||||
Platform::SetHostPlatform(
|
||||
platform_linux::PlatformLinux::CreateInstance(true, &arch));
|
||||
Platform::SetHostPlatform(platform_linux::PlatformLinux::CreateInstance(
|
||||
true, &arch, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr));
|
||||
|
||||
DebuggerSP debugger_sp = Debugger::CreateInstance();
|
||||
ASSERT_TRUE(debugger_sp);
|
||||
@@ -126,8 +127,9 @@ TEST_F(ThreadTest, SetStopInfo) {
|
||||
TEST_F(ThreadTest, GetPrivateStopInfo) {
|
||||
ArchSpec arch("powerpc64-pc-linux");
|
||||
|
||||
Platform::SetHostPlatform(
|
||||
platform_linux::PlatformLinux::CreateInstance(true, &arch));
|
||||
Platform::SetHostPlatform(platform_linux::PlatformLinux::CreateInstance(
|
||||
true, &arch, /*debugger=*/nullptr,
|
||||
/*metadata=*/nullptr));
|
||||
|
||||
DebuggerSP debugger_sp = Debugger::CreateInstance();
|
||||
ASSERT_TRUE(debugger_sp);
|
||||
|
||||
Reference in New Issue
Block a user