[Lldb-commits] [lldb] 611fdde - [lldb/qemu] Add emulator-args setting

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Tue Dec 7 05:19:54 PST 2021


Author: Pavel Labath
Date: 2021-12-07T14:19:43+01:00
New Revision: 611fdde4c765d1ed213744263cb2bbc04bd5060c

URL: https://github.com/llvm/llvm-project/commit/611fdde4c765d1ed213744263cb2bbc04bd5060c
DIFF: https://github.com/llvm/llvm-project/commit/611fdde4c765d1ed213744263cb2bbc04bd5060c.diff

LOG: [lldb/qemu] Add emulator-args setting

This setting allows the user to pass additional arguments to the qemu instance.
While we may want to introduce dedicated settings for the most common qemu
arguments (-cpu, for one), having this setting allows us to avoid creating a
setting for every possible argument.

Differential Revision: https://reviews.llvm.org/D115151

Added: 
    

Modified: 
    lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp
    lldb/source/Plugins/Platform/QemuUser/PlatformQemuUserProperties.td
    lldb/test/API/qemu/TestQemuLaunch.py
    lldb/test/API/qemu/qemu.py

Removed: 
    


################################################################################
diff  --git a/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp b/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp
index 36cf0f010b4cc..82b9bc078ce6c 100644
--- a/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp
+++ b/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp
@@ -47,6 +47,13 @@ class PluginProperties : public Properties {
     return m_collection_sp->GetPropertyAtIndexAsFileSpec(nullptr,
                                                          ePropertyEmulatorPath);
   }
+
+  Args GetEmulatorArgs() {
+    Args result;
+    m_collection_sp->GetPropertyAtIndexAsArgs(nullptr, ePropertyEmulatorArgs,
+                                              result);
+    return result;
+  }
 };
 
 static PluginProperties &GetGlobalProperties() {
@@ -112,8 +119,10 @@ 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, launch_info.GetExecutableFile().GetPath()});
+  Args args({qemu, "-g", socket_path});
+  args.AppendArguments(GetGlobalProperties().GetEmulatorArgs());
+  args.AppendArgument("--");
+  args.AppendArgument(launch_info.GetExecutableFile().GetPath());
   for (size_t i = 1; i < launch_info.GetArguments().size(); ++i)
     args.AppendArgument(launch_info.GetArguments()[i].ref());
 

diff  --git a/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUserProperties.td b/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUserProperties.td
index abfab7f59de40..19de9c810841e 100644
--- a/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUserProperties.td
+++ b/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUserProperties.td
@@ -9,4 +9,8 @@ let Definition = "platformqemuuser" in {
     Global,
     DefaultStringValue<"">,
     Desc<"Path to the emulator binary.">;
+  def EmulatorArgs: Property<"emulator-args", "Args">,
+    Global,
+    DefaultStringValue<"">,
+    Desc<"Extra arguments to pass to the emulator.">;
 }

diff  --git a/lldb/test/API/qemu/TestQemuLaunch.py b/lldb/test/API/qemu/TestQemuLaunch.py
index 36a032190a608..259b381d26721 100644
--- a/lldb/test/API/qemu/TestQemuLaunch.py
+++ b/lldb/test/API/qemu/TestQemuLaunch.py
@@ -20,7 +20,7 @@ class TestQemuLaunch(TestBase):
     NO_DEBUG_INFO_TESTCASE = True
 
     def set_emulator_setting(self, name, value):
-        self.runCmd("settings set platform.plugin.qemu-user.%s %s" %
+        self.runCmd("settings set -- platform.plugin.qemu-user.%s %s" %
                 (name, value))
 
     def setUp(self):
@@ -43,7 +43,7 @@ def setUp(self):
         self.set_emulator_setting("architecture", self.getArchitecture())
         self.set_emulator_setting("emulator-path", emulator)
 
-    def test_basic_launch(self):
+    def _run_and_get_state(self):
         self.build()
         exe = self.getBuildArtifact()
 
@@ -63,7 +63,11 @@ def test_basic_launch(self):
 
         # Verify the qemu invocation parameters.
         with open(self.getBuildArtifact("state.log")) as s:
-            state = json.load(s)
+            return json.load(s)
+
+    def test_basic_launch(self):
+        state = self._run_and_get_state()
+
         self.assertEqual(state["program"], self.getBuildArtifact())
         self.assertEqual(state["args"],
                 ["dump:" + self.getBuildArtifact("state.log")])
@@ -159,3 +163,9 @@ def test_bad_emulator_path(self):
         target.Launch(info, error)
         self.assertTrue(error.Fail())
         self.assertIn("doesn't exist", error.GetCString())
+
+    def test_extra_args(self):
+        self.set_emulator_setting("emulator-args", "-fake-arg fake-value")
+        state = self._run_and_get_state()
+
+        self.assertEqual(state["fake-arg"], "fake-value")

diff  --git a/lldb/test/API/qemu/qemu.py b/lldb/test/API/qemu/qemu.py
index 97a9efba81a9b..eca85f8ac99b9 100755
--- a/lldb/test/API/qemu/qemu.py
+++ b/lldb/test/API/qemu/qemu.py
@@ -53,6 +53,7 @@ def main():
     parser = argparse.ArgumentParser(description=_description,
             formatter_class=argparse.RawDescriptionHelpFormatter)
     parser.add_argument('-g', metavar="unix-socket", required=True)
+    parser.add_argument('-fake-arg', dest="fake-arg")
     parser.add_argument('program', help="The program to 'emulate'.")
     parser.add_argument("args", nargs=argparse.REMAINDER)
     args = parser.parse_args()


        


More information about the lldb-commits mailing list