system: guard HMP initialization paths with CONFIG_HMP
- 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 Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-ID: <20260828-qemu-no-hmp-v5-28-9227de146347@redhat.com>
Marc-André Lureau committed
Aug 28, 2026 at 16:04 UTC
7c2ecb4e5e0353ddacd08ce2ffdda355bb95e189
4 files changed
+22
-3
chardev/char.c
+8
-1
@@ -804,8 +804,9 @@ static Chardev *qemu_chr_new_from_name(const char *label, const char *filename,
804
}
805
806
if (qemu_opt_get_bool(opts, "mux", 0)) {
807
- const char *chardev_id = qemu_opts_id(opts);
807
assert(permit_mux_mon);
808
+#ifdef CONFIG_HMP
809
+ const char *chardev_id = qemu_opts_id(opts);
810
monitor_new_hmp(NULL, chardev_id, true, &err);
811
if (err) {
812
error_report_err(err);
@@ -813,6 +814,12 @@ static Chardev *qemu_chr_new_from_name(const char *label, const char *filename,
814
chr = NULL;
815
goto out;
816
}
817
+#else
818
+ error_report("HMP monitor is disabled");
819
+ object_unparent(OBJECT(chr));
820
+ chr = NULL;
821
+ goto out;
822
+#endif
823
}
824
825
out:
gdbstub/system.c
+8
@@ -387,10 +387,14 @@ bool gdbserver_start(const char *device, Error **errp)
387
388
qemu_add_vm_change_state_handler(gdb_vm_state_change, NULL);
389
390
+#ifdef CONFIG_HMP
391
/* Initialize a monitor terminal for gdb */
392
mon_chr = qemu_chardev_new(NULL, TYPE_CHARDEV_GDB,
393
NULL, NULL, &error_abort);
394
monitor_new_hmp(NULL, mon_chr->label, false, &error_abort);
395
+#else
396
+ mon_chr = NULL;
397
+#endif
398
} else {
399
qemu_chr_fe_deinit(&gdbserver_system_state.chr, true);
400
mon_chr = gdbserver_system_state.mon_chr;
@@ -524,10 +528,14 @@ void gdb_handle_query_rcmd(GArray *params, void *ctx)
528
len = len / 2;
529
gdb_hextomem(gdbserver_state.mem_buf, gdb_get_cmd_param(params, 0)->data, len);
530
g_byte_array_append(gdbserver_state.mem_buf, &zero, 1);
531
+#ifdef CONFIG_HMP
532
qemu_chr_be_write(gdbserver_system_state.mon_chr,
533
gdbserver_state.mem_buf->data,
534
gdbserver_state.mem_buf->len);
535
gdb_put_packet("OK");
536
+#else
537
+ gdb_put_packet("E01");
538
+#endif
539
}
540
541
/*
qemu-options.hx
+5
-1
@@ -4993,7 +4993,11 @@ SRST
4993
ERST
4994
4995
DEF("mon", HAS_ARG, QEMU_OPTION_mon, \
4996
- "-mon [chardev=]name[,mode=readline|control][,pretty=on|off]\n", QEMU_ARCH_ALL)
4996
+ "-mon [chardev=]name[,mode="
4997
+#ifdef CONFIG_HMP
4998
+ "readline|"
4999
+#endif
5000
+ "control][,pretty=on|off]\n", QEMU_ARCH_ALL)
5001
SRST
5002
``-mon [chardev=]name[,mode=readline|control][,pretty=on|off]``
5003
Set up a monitor connected to the chardev ``name``.
system/vl.c
+1
-1
@@ -199,7 +199,7 @@ static int has_defaults = 1;
199
static int default_audio = 1;
200
static int default_serial = 1;
201
static int default_parallel = 1;
202
-static int default_monitor = 1;
202
+static int default_monitor = IS_ENABLED(CONFIG_HMP);
203
static int default_floppy = 1;
204
static int default_cdrom = 1;
205
static bool auto_create_sdcard = true;