- disable default monitor when HMP is not available - hide 'readline' from -mon help text - error out on mux chardev monitor when no HMP - skip HMP monitor terminal for gdb, return E01 for 'qRcmd' remote commands
Signed-off-by: Marc-André Lureau <[email protected]> --- chardev/char.c | 7 +++++++ gdbstub/system.c | 8 ++++++++ system/vl.c | 4 ++++ qemu-options.hx | 6 +++++- 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/chardev/char.c b/chardev/char.c index ca8b37ed8d7..5f2b9fbc4bf 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -805,6 +805,7 @@ static Chardev *qemu_chr_new_from_name(const char *label, const char *filename, if (qemu_opt_get_bool(opts, "mux", 0)) { assert(permit_mux_mon); +#ifdef CONFIG_HMP monitor_init_hmp(chr, true, &err); if (err) { error_report_err(err); @@ -812,6 +813,12 @@ static Chardev *qemu_chr_new_from_name(const char *label, const char *filename, chr = NULL; goto out; } +#else + error_report("HMP monitor is disabled"); + object_unparent(OBJECT(chr)); + chr = NULL; + goto out; +#endif } out: diff --git a/gdbstub/system.c b/gdbstub/system.c index e86c5870abc..0c282c9c491 100644 --- a/gdbstub/system.c +++ b/gdbstub/system.c @@ -385,10 +385,14 @@ bool gdbserver_start(const char *device, Error **errp) qemu_add_vm_change_state_handler(gdb_vm_state_change, NULL); +#ifdef CONFIG_HMP /* Initialize a monitor terminal for gdb */ mon_chr = qemu_chardev_new(NULL, TYPE_CHARDEV_GDB, NULL, NULL, &error_abort); monitor_init_hmp(mon_chr, false, &error_abort); +#else + mon_chr = NULL; +#endif } else { qemu_chr_fe_deinit(&gdbserver_system_state.chr, true); mon_chr = gdbserver_system_state.mon_chr; @@ -529,10 +533,14 @@ void gdb_handle_query_rcmd(GArray *params, void *ctx) len = len / 2; gdb_hextomem(gdbserver_state.mem_buf, gdb_get_cmd_param(params, 0)->data, len); g_byte_array_append(gdbserver_state.mem_buf, &zero, 1); +#ifdef CONFIG_HMP qemu_chr_be_write(gdbserver_system_state.mon_chr, gdbserver_state.mem_buf->data, gdbserver_state.mem_buf->len); gdb_put_packet("OK"); +#else + gdb_put_packet("E01"); +#endif } /* diff --git a/system/vl.c b/system/vl.c index 4797700abd5..f9fa00de07b 100644 --- a/system/vl.c +++ b/system/vl.c @@ -199,7 +199,11 @@ static int has_defaults = 1; static int default_audio = 1; static int default_serial = 1; static int default_parallel = 1; +#ifdef CONFIG_HMP static int default_monitor = 1; +#else +static int default_monitor; /* false */ +#endif static int default_floppy = 1; static int default_cdrom = 1; static bool auto_create_sdcard = true; diff --git a/qemu-options.hx b/qemu-options.hx index 4c1b32713e0..d788467b83f 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -4941,7 +4941,11 @@ SRST ERST DEF("mon", HAS_ARG, QEMU_OPTION_mon, \ - "-mon [chardev=]name[,mode=readline|control][,pretty=on|off]\n", QEMU_ARCH_ALL) + "-mon [chardev=]name[,mode=" +#ifdef CONFIG_HMP + "readline|" +#endif + "control][,pretty=on|off]\n", QEMU_ARCH_ALL) SRST ``-mon [chardev=]name[,mode=readline|control][,pretty=on|off]`` Set up a monitor connected to the chardev ``name``. -- 2.54.0
