On Fri, Aug 08, 2025 at 10:08:12AM +0200, Markus Armbruster wrote:
> HMP command gdbserver used to emit two error messages for certain
> errors. For instance, with -M none:
>
> (qemu) gdbserver
> gdbstub: meaningless to attach gdb to a machine without any CPU.
> Could not open gdbserver on device 'tcp::1234'
>
> The first message is the specific error, and the second one a generic
> additional message that feels superfluous to me.
>
> Commit c0e6b8b798b (system: propagate Error to gdbserver_start (and
> other device setups)) turned the first message into a warning:
>
> warning: gdbstub: meaningless to attach gdb to a machine without any CPU.
> Could not open gdbserver on device 'tcp::1234'
>
> This is arguably worse.
>
> hmp_gdbserver() passes &error_warn to gdbserver_start(), so that
> failure gets reported as warning, and then additionally emits the
> generic error on failure. This is a misuse of &error_warn.
>
> Instead, receive the error in &err and report it, as usual. With
> this, gdbserver reports just the error:
>
> gdbstub: meaningless to attach gdb to a machine without any CPU.
What do you think about an alternative of removing "gdbstub: "
from all the errors raised in 'gdbserver_start' & similar, and
then using
error_prepend(err, "Could not open gdbserver on device '%s'", device);
in hmp_gdbserver ?
I don't feel too strongly, so in any case for the patch as is,
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
>
> Cc: Alex Bennée <alex.bennee@linaro.org>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
> include/exec/gdbstub.h | 3 ---
> monitor/hmp-cmds.c | 7 ++++---
> 2 files changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h
> index a16c0051ce..bd7182c4d3 100644
> --- a/include/exec/gdbstub.h
> +++ b/include/exec/gdbstub.h
> @@ -55,9 +55,6 @@ void gdb_unregister_coprocessor_all(CPUState *cpu);
> * system emulation you can use a full chardev spec for your gdbserver
> * port.
> *
> - * The error handle should be either &error_fatal (for start-up) or
> - * &error_warn (for QMP/HMP initiated sessions).
> - *
> * Returns true when server successfully started.
> */
> bool gdbserver_start(const char *port_or_device, Error **errp);
> diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
> index 74a0f56566..33a88ce205 100644
> --- a/monitor/hmp-cmds.c
> +++ b/monitor/hmp-cmds.c
> @@ -280,14 +280,15 @@ void hmp_log(Monitor *mon, const QDict *qdict)
>
> void hmp_gdbserver(Monitor *mon, const QDict *qdict)
> {
> + Error *err = NULL;
> const char *device = qdict_get_try_str(qdict, "device");
> +
> if (!device) {
> device = "tcp::" DEFAULT_GDBSTUB_PORT;
> }
>
> - if (!gdbserver_start(device, &error_warn)) {
> - monitor_printf(mon, "Could not open gdbserver on device '%s'\n",
> - device);
> + if (!gdbserver_start(device, &err)) {
> + error_report_err(err);
> } else if (strcmp(device, "none") == 0) {
> monitor_printf(mon, "Disabled gdbserver\n");
> } else {
> --
> 2.49.0
>
>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|