The linux-user and bsd-user trees both widely use a function called
`gemu_log` (notice the 'g') for miscellaneous and strace logging. This
function predates the newer `qemu_log` function, and has a few drawbacks
compared to `qemu_log`:
1. Always logs to `stderr`, no logging redirection.
2. "Miscellaneous" logging cannot be disabled, so it may mix with guest
logging.
3. Inconsistency with other parts of the QEMU codebase, and a
confusing name.
The second issue is especially troubling because it can interfere with
programs that expect to communicate via stderr.
This change introduces two new logging masks to the `qemu_log` subsystem
to support its use for user-mode logging. The `LOG_USER` mask, for
miscellaneous logs, and the `LOG_STRACE` mask for strace-specific
logging. Further, it replaces all existing uses of `gemu_log` with the
appropriate `qemu_log_mask(LOG_{USER,STRACE}, ...)` based on the log
message. To avoid potential backwards incompatibility, this patch series
also introduces a new flag: `-no-force-user-mode-logging`. Since "user
mode" logging was always enabled before this change, by-default the
LOG_USER mask is always set. The flag is provided for users that want to
disable LOG_USER. Hopefully, this flag can be removed, or turned into a
no-op in the futre, and -d/QEMU_LOG can be used directly to enable
user-mode logging if desired.
Unfortunately, this change introduces one small backwards incompatibility
for the linux-user tree: If an explicit `-D` option is provided, or the
`QEMU_LOG_FILENAME`_ environment variable is set, strace and user-mode
logging statements will log to the QEMU log file instead of stderr.
Tested:
* Built with clang 9 and g++ 8.3
* `make check` run with clang 9 build
* Verified:
* QEMU_STRACE/-strace still works for linux-user
* -no-force-user-mode-logging uses QEMU_LOG + `user_mode` or
`strace` can be set in QEMU_LOG to trigger the appropriate
logging.
Not tested:
* Build/logging with bsd-user. I do not have easy access to a BSD system.
The bsd-user that is in tree doesn't work. I've been trying to catch up to qemu head of tree, but I'm only up to 3.2... chances are the bsd-user changes will not change the state of things...
Warner
Josh Kunz (4):
linux-user: Use `qemu_log' for non-strace logging
linux-user: Use `qemu_log' for strace
linux-user: remove gemu_log from the linux-user tree
bsd-user: Replace gemu_log with qemu_log
bsd-user/main.c | 13 +-
bsd-user/qemu.h | 2 -
bsd-user/strace.c | 32 ++-
bsd-user/syscall.c | 31 ++-
include/qemu/log.h | 15 ++
linux-user/arm/cpu_loop.c | 5 +-
linux-user/fd-trans.c | 55 +++--
linux-user/main.c | 50 +++-
linux-user/qemu.h | 2 -
linux-user/signal.c | 3 +-
linux-user/strace.c | 479 +++++++++++++++++++-------------------
linux-user/syscall.c | 43 ++--
linux-user/vm86.c | 3 +-
util/log.c | 5 +
14 files changed, 404 insertions(+), 334 deletions(-)
--
2.25.0.rc1.283.g88dfdc4193-goog