forked from OSchip/llvm-project
[lldb/qemu] More flexible emulator specification
This small patch adds two useful improvements: - allows one to specify the emulator path as a bare filename, and have it be looked up in the PATH - allows one to leave the path empty and have the filename be derived from the architecture.
This commit is contained in:
parent
e5e844b37e
commit
9b8f9d33db
|
@ -162,7 +162,10 @@ lldb::ProcessSP PlatformQemuUser::DebugProcess(ProcessLaunchInfo &launch_info,
|
|||
Target &target, Status &error) {
|
||||
Log *log = GetLogIfAnyCategoriesSet(LIBLLDB_LOG_PLATFORM);
|
||||
|
||||
std::string qemu = GetGlobalProperties().GetEmulatorPath().GetPath();
|
||||
FileSpec qemu = GetGlobalProperties().GetEmulatorPath();
|
||||
if (!qemu)
|
||||
qemu.SetPath(("qemu-" + GetGlobalProperties().GetArchitecture()).str());
|
||||
FileSystem::Instance().ResolveExecutableLocation(qemu);
|
||||
|
||||
llvm::SmallString<0> socket_model, socket_path;
|
||||
HostInfo::GetProcessTempDir().GetPath(socket_model);
|
||||
|
@ -171,7 +174,7 @@ lldb::ProcessSP PlatformQemuUser::DebugProcess(ProcessLaunchInfo &launch_info,
|
|||
llvm::sys::fs::createUniquePath(socket_model, socket_path, false);
|
||||
} while (FileSystem::Instance().Exists(socket_path));
|
||||
|
||||
Args args({qemu, "-g", socket_path});
|
||||
Args args({qemu.GetPath(), "-g", socket_path});
|
||||
args.AppendArguments(GetGlobalProperties().GetEmulatorArgs());
|
||||
args.AppendArgument("--");
|
||||
args.AppendArgument(launch_info.GetExecutableFile().GetPath());
|
||||
|
|
|
@ -8,7 +8,7 @@ let Definition = "platformqemuuser" in {
|
|||
def EmulatorPath: Property<"emulator-path", "FileSpec">,
|
||||
Global,
|
||||
DefaultStringValue<"">,
|
||||
Desc<"Path to the emulator binary.">;
|
||||
Desc<"Path to the emulator binary. If the path does not contain a directory separator, the filename is looked up in the PATH environment variable. If empty, the filename is derived from the architecture setting.">;
|
||||
def EmulatorArgs: Property<"emulator-args", "Args">,
|
||||
Global,
|
||||
DefaultStringValue<"">,
|
||||
|
|
|
@ -154,6 +154,24 @@ class TestQemuLaunch(TestBase):
|
|||
state = json.load(s)
|
||||
self.assertEqual(state["stdin"], "STDIN CONTENT")
|
||||
|
||||
def test_find_in_PATH(self):
|
||||
emulator = self.getBuildArtifact("qemu-" + self.getArchitecture())
|
||||
os.rename(self.getBuildArtifact("qemu.py"), emulator)
|
||||
self.set_emulator_setting("emulator-path", "''")
|
||||
|
||||
original_path = os.environ["PATH"]
|
||||
os.environ["PATH"] = (self.getBuildDir() +
|
||||
self.platformContext.shlib_path_separator + original_path)
|
||||
def cleanup():
|
||||
os.environ["PATH"] = original_path
|
||||
|
||||
self.addTearDownHook(cleanup)
|
||||
state = self._run_and_get_state()
|
||||
|
||||
self.assertEqual(state["program"], self.getBuildArtifact())
|
||||
self.assertEqual(state["args"],
|
||||
["dump:" + self.getBuildArtifact("state.log")])
|
||||
|
||||
def test_bad_emulator_path(self):
|
||||
self.set_emulator_setting("emulator-path",
|
||||
self.getBuildArtifact("nonexistent.file"))
|
||||
|
|
Loading…
Reference in New Issue