Add #ifdef CONFIG_HMP guards around HMP-specific declarations in
monitor headers and implementations:
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
include/monitor/hmp.h | 2 ++
include/monitor/monitor.h | 11 +++++++++++
monitor/monitor.c | 31 +++++++++++++++++++++++++++++++
monitor/qmp-cmds.c | 2 ++
stubs/monitor-core.c | 2 ++
stubs/monitor-internal.c | 2 ++
6 files changed, 50 insertions(+)
diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h
index 9258a049bff..7bc524cd4ff 100644
--- a/include/monitor/hmp.h
+++ b/include/monitor/hmp.h
@@ -14,6 +14,7 @@
#ifndef HMP_H
#define HMP_H
+#ifdef CONFIG_HMP
#include "qemu/readline.h"
#include "qapi/qapi-types-common.h"
#include "monitor/monitor.h"
@@ -195,3 +196,4 @@ void hmp_info_cmma(Monitor *mon, const QDict *qdict);
void hmp_migrationmode(Monitor *mon, const QDict *qdict);
#endif
+#endif
diff --git a/include/monitor/monitor.h b/include/monitor/monitor.h
index 17182e626a7..3457f4a7f88 100644
--- a/include/monitor/monitor.h
+++ b/include/monitor/monitor.h
@@ -20,7 +20,9 @@ bool monitor_cur_is_qmp(void);
void monitor_init_globals(void);
void monitor_init_globals_core(void);
void monitor_init_qmp(Chardev *chr, bool pretty, Error **errp);
+#ifdef CONFIG_HMP
void monitor_init_hmp(Chardev *chr, bool use_readline, Error **errp);
+#endif
int monitor_init(MonitorOptions *opts, bool allow_hmp, Error **errp);
int monitor_init_opts(QemuOpts *opts, Error **errp);
void monitor_cleanup(void);
@@ -32,28 +34,37 @@ int monitor_get_fd(Monitor *mon, const char *fdname, Error **errp);
int monitor_fd_param(Monitor *mon, const char *fdname, Error **errp);
int monitor_puts(Monitor *mon, const char *str);
+
+#ifdef CONFIG_HMP
int monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
G_GNUC_PRINTF(2, 0);
int monitor_printf(Monitor *mon, const char *fmt, ...) G_GNUC_PRINTF(2, 3);
void monitor_printc(Monitor *mon, int ch);
+#endif
+
void monitor_flush(Monitor *mon);
int monitor_get_cpu_index(Monitor *mon);
int monitor_puts_locked(Monitor *mon, const char *str);
void monitor_flush_locked(Monitor *mon);
+
+#ifdef CONFIG_HMP
void monitor_read_command(MonitorHMP *mon, int show_prompt);
int monitor_read_password(MonitorHMP *mon, ReadLineFunc *readline_func,
void *opaque);
+#endif
AddfdInfo *monitor_fdset_add_fd(int fd, bool has_fdset_id, int64_t fdset_id,
const char *opaque, Error **errp);
int monitor_fdset_dup_fd_add(int64_t fdset_id, int flags, Error **errp);
void monitor_fdset_dup_fd_remove(int dup_fd);
+#ifdef CONFIG_HMP
void monitor_register_hmp(const char *name, bool info,
void (*cmd)(Monitor *mon, const QDict *qdict));
void monitor_register_hmp_info_hrt(const char *name,
HumanReadableText *(*handler)(Error **errp));
+#endif
#endif /* MONITOR_H */
diff --git a/monitor/monitor.c b/monitor/monitor.c
index 2dec0e299af..096a5ee748d 100644
--- a/monitor/monitor.c
+++ b/monitor/monitor.c
@@ -116,6 +116,7 @@ bool monitor_cur_is_qmp(void)
return cur_mon && monitor_is_qmp(cur_mon);
}
+#ifdef CONFIG_HMP
/**
* Is @mon is using readline?
* Note: not all HMP monitors use readline, e.g., gdbserver has a
@@ -134,6 +135,12 @@ static inline bool monitor_is_hmp_non_interactive(const Monitor *mon)
return !monitor_uses_readline(container_of(mon, MonitorHMP, common));
}
+#else
+static inline bool monitor_is_hmp_non_interactive(const Monitor *mon)
+{
+ return false;
+}
+#endif
static gboolean monitor_unblocked(void *do_not_use, GIOCondition cond,
void *opaque)
@@ -211,6 +218,7 @@ int monitor_puts(Monitor *mon, const char *str)
return monitor_puts_locked(mon, str);
}
+#ifdef CONFIG_HMP
int monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
{
char *buf;
@@ -267,6 +275,7 @@ void monitor_printc(Monitor *mon, int c)
}
monitor_printf(mon, "'");
}
+#endif
static MonitorQAPIEventConf monitor_qapi_event_conf[QAPI_EVENT__MAX] = {
/* Limit guest-triggerable events to 1 per second */
@@ -541,6 +550,7 @@ static void monitor_accept_input(void *opaque)
Monitor *mon = opaque;
qemu_mutex_lock(&mon->mon_lock);
+#ifdef CONFIG_HMP
if (!monitor_is_qmp(mon)) {
MonitorHMP *hmp_mon = container_of(mon, MonitorHMP, common);
assert(hmp_mon->rs);
@@ -555,6 +565,9 @@ static void monitor_accept_input(void *opaque)
} else {
qemu_mutex_unlock(&mon->mon_lock);
}
+#else
+ qemu_mutex_unlock(&mon->mon_lock);
+#endif
qemu_chr_fe_accept_input(&mon->chr);
}
@@ -631,9 +644,11 @@ void monitor_data_destroy(Monitor *mon)
if (monitor_is_qmp(mon)) {
monitor_data_destroy_qmp(container_of(mon, MonitorQMP, common));
} else {
+#ifdef CONFIG_HMP
MonitorHMP *hmp_mon = container_of(mon, MonitorHMP, common);
readline_free(hmp_mon->rs);
g_free(hmp_mon->mon_cpu_path);
+#endif
}
g_string_free(mon->outbuf, true);
qemu_mutex_destroy(&mon->mon_lock);
@@ -733,13 +748,18 @@ int monitor_init(MonitorOptions *opts, bool allow_hmp, Error **errp)
}
if (!opts->has_mode) {
+#ifdef CONFIG_HMP
opts->mode = allow_hmp ? MONITOR_MODE_READLINE : MONITOR_MODE_CONTROL;
+#else
+ opts->mode = MONITOR_MODE_CONTROL;
+#endif
}
switch (opts->mode) {
case MONITOR_MODE_CONTROL:
monitor_init_qmp(chr, opts->pretty, errp);
break;
+#ifdef CONFIG_HMP
case MONITOR_MODE_READLINE:
if (!allow_hmp) {
error_setg(errp, "Only QMP is supported");
@@ -751,6 +771,7 @@ int monitor_init(MonitorOptions *opts, bool allow_hmp, Error **errp)
}
monitor_init_hmp(chr, true, errp);
break;
+#endif
default:
g_assert_not_reached();
}
@@ -764,6 +785,16 @@ int monitor_init_opts(QemuOpts *opts, Error **errp)
MonitorOptions *options;
int ret;
+#ifndef CONFIG_HMP
+ const char *mode = qemu_opt_get(opts, "mode");
+ /* readline is HMP.. */
+ if (mode && g_str_equal(mode, "readline")) {
+ error_setg(errp, "HMP monitor is not available,"
+ " use '-qmp' instead of '-monitor'");
+ return -1;
+ }
+#endif
+
v = opts_visitor_new(opts);
visit_type_MonitorOptions(v, NULL, &options, errp);
visit_free(v);
diff --git a/monitor/qmp-cmds.c b/monitor/qmp-cmds.c
index 0c409c27dc3..cca25c18a15 100644
--- a/monitor/qmp-cmds.c
+++ b/monitor/qmp-cmds.c
@@ -162,6 +162,7 @@ void qmp_add_client(const char *protocol, const char *fdname,
}
}
+#ifdef CONFIG_HMP
char *qmp_human_monitor_command(const char *command_line, bool has_cpu_index,
int64_t cpu_index, Error **errp)
{
@@ -189,6 +190,7 @@ out:
monitor_data_destroy(&hmp.common);
return output;
}
+#endif
static void __attribute__((__constructor__)) monitor_init_qmp_commands(void)
{
diff --git a/stubs/monitor-core.c b/stubs/monitor-core.c
index 078a5012e9b..b4a4de41aa2 100644
--- a/stubs/monitor-core.c
+++ b/stubs/monitor-core.c
@@ -21,6 +21,7 @@ void qapi_event_emit(QAPIEvent event, QDict *qdict)
{
}
+#ifdef CONFIG_HMP
int monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
{
/*
@@ -37,3 +38,4 @@ int monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
}
return -1;
}
+#endif
diff --git a/stubs/monitor-internal.c b/stubs/monitor-internal.c
index 4fece49d531..29274bd2b4a 100644
--- a/stubs/monitor-internal.c
+++ b/stubs/monitor-internal.c
@@ -8,6 +8,8 @@ int monitor_get_fd(Monitor *mon, const char *name, Error **errp)
return -1;
}
+#ifdef CONFIG_HMP
void monitor_init_hmp(Chardev *chr, bool use_readline, Error **errp)
{
}
+#endif
--
2.54.0