system: propagate Error to gdbserver_start (and other device setups)

This started as a clean-up to properly pass a Error handler to the
gdbserver_start so we could do the right thing for command line and
HMP invocations.

Now that we have cleaned up foreach_device_config_or_exit() in earlier
patches we can further simplify by it by passing &error_fatal instead
of checking the return value. Having a return value is still useful
for HMP though so tweak the return to use a simple bool instead.

Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20250116160306.1709518-11-alex.bennee@linaro.org>
This commit is contained in:
Alex Bennée 2025-01-16 16:02:39 +00:00
parent 05cdd648a8
commit c0e6b8b798
7 changed files with 62 additions and 59 deletions

View file

@ -330,26 +330,27 @@ static void create_processes(GDBState *s)
gdb_create_default_process(s);
}
int gdbserver_start(const char *device)
bool gdbserver_start(const char *device, Error **errp)
{
Chardev *chr = NULL;
Chardev *mon_chr;
g_autoptr(GString) cs = g_string_new(device);
if (!first_cpu) {
error_report("gdbstub: meaningless to attach gdb to a "
"machine without any CPU.");
return -1;
error_setg(errp, "gdbstub: meaningless to attach gdb to a "
"machine without any CPU.");
return false;
}
if (!gdb_supports_guest_debug()) {
error_report("gdbstub: current accelerator doesn't "
"support guest debugging");
return -1;
error_setg(errp, "gdbstub: current accelerator doesn't "
"support guest debugging");
return false;
}
if (cs->len == 0) {
return -1;
error_setg(errp, "gdbstub: missing connection string");
return false;
}
trace_gdbstub_op_start(cs->str);
@ -374,7 +375,8 @@ int gdbserver_start(const char *device)
*/
chr = qemu_chr_new_noreplay("gdb", cs->str, true, NULL);
if (!chr) {
return -1;
error_setg(errp, "gdbstub: couldn't create chardev");
return false;
}
}
@ -406,7 +408,7 @@ int gdbserver_start(const char *device)
gdbserver_system_state.mon_chr = mon_chr;
gdb_syscall_reset();
return 0;
return true;
}
static void register_types(void)