[Lldb-commits] [PATCH] D114509: [lldb] Introduce PlatformQemuUser

Pavel Labath via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Wed Nov 24 00:14:07 PST 2021


labath created this revision.
labath added reviewers: JDevlieghere, DavidSpickett, mgorny.
labath requested review of this revision.
Herald added a project: LLDB.

This adds a new platform class, whose job is to enable running
(debugging) executables under qemu.

(For general information about qemu, I recommend reading the RFC thread
on lldb-dev
https://lists.llvm.org/pipermail/lldb-dev/2021-October/017106.html.)

This initial patch implements the necessary boilerplate as well as the
minimal amount of functionality needed to actually be able to do
something useful (which, in this case means debugging a fully statically
linked executable).

The knobs necessary to emulate dynamically linked programs, as well as
to control other aspects of qemu operation (the emulated cpu, for
instance) will be added in subsequent patches. Same goes for the ability
to automatically bind to the executables of the emulated architecture.

Currently only two settings are available:

- architecture: the architecture that we should emulate
- emulator-path: the path to the emulator

Even though this patch is relatively small, it doesn't lack subtleties
that are worth calling out explicitly:

- named sockets: qemu supports tcp and unix socket connections, both of them in the "forward connect" mode (qemu listening, lldb connecting). Forward TCP connections are impossible to realise in a race-free way. This is the reason why I chose unix sockets as they have larger, more structured names, which can guarantee that there are no collisions between concurrent connection attempts.
- the above means that this code will not work on windows. I don't think that's an issue since user mode qemu does not support windows anyway.
- Right now, I am leaving the code enabled for windows, but maybe it would be better to disable it (otoh, disabling it means windows developers can't check they don't break it)
- qemu also does not support macOS, so one could contemplate disabling it there too. However, macOS does support named sockets, so one can even run the (mock) qemu tests there, and I think it'd be a shame to lose that.
- some things in this patch are called "Qemu" (the plugin folder, for instance), while others (e.g., the class) have "QemuUser" in their name. I did this intentionally to make room for a hypothetical system-mode qemu plugin. However, that may have been premature...


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D114509

Files:
  lldb/packages/Python/lldbsuite/test/gdbclientutils.py
  lldb/source/Plugins/Platform/CMakeLists.txt
  lldb/source/Plugins/Platform/Qemu/CMakeLists.txt
  lldb/source/Plugins/Platform/Qemu/PlatformQemuProperties.td
  lldb/source/Plugins/Platform/Qemu/PlatformQemuUser.cpp
  lldb/source/Plugins/Platform/Qemu/PlatformQemuUser.h
  lldb/test/API/qemu/Makefile
  lldb/test/API/qemu/TestQemuLaunch.py
  lldb/test/API/qemu/main.c
  lldb/test/API/qemu/qemu.py

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D114509.389406.patch
Type: text/x-patch
Size: 16635 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20211124/67e6aae0/attachment-0001.bin>


More information about the lldb-commits mailing list