- 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 <marcandre.lureau@redhat.com>
---
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