aboutsummaryrefslogtreecommitdiff
path: root/stubs
diff options
context:
space:
mode:
authorAlex Bennée <alex.bennee@linaro.org>2019-05-13 15:25:27 +0100
committerAlex Bennée <alex.bennee@linaro.org>2019-05-28 10:28:50 +0100
commit16932bb761e52c2ca9397b57af5bdc5bdc5ae6a4 (patch)
tree07cb4fc3156715ca54cf17e7b24777bf8cfbc802 /stubs
parentf1672e6f2b6642f9bf5042df6713ce8e4a0f00c6 (diff)
semihosting: introduce CONFIG_SEMIHOSTING
There isn't much point building semihosting for platforms that don't support it. Introduce a new symbol and enable it only for the softmmu targets that need it. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'stubs')
-rw-r--r--stubs/Makefile.objs1
-rw-r--r--stubs/semihost.c66
2 files changed, 67 insertions, 0 deletions
diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
index 73452ad265..9c7393b08c 100644
--- a/stubs/Makefile.objs
+++ b/stubs/Makefile.objs
@@ -40,3 +40,4 @@ stub-obj-y += pci-host-piix.o
stub-obj-y += ram-block.o
stub-obj-y += ramfb.o
stub-obj-y += fw_cfg.o
+stub-obj-$(CONFIG_SOFTMMU) += semihost.o
diff --git a/stubs/semihost.c b/stubs/semihost.c
new file mode 100644
index 0000000000..1a4e88e532
--- /dev/null
+++ b/stubs/semihost.c
@@ -0,0 +1,66 @@
+/*
+ * Semihosting Stubs for SoftMMU
+ *
+ * Copyright (c) 2019 Linaro Ltd
+ *
+ * Stubs for SoftMMU targets that don't actually do semihosting.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "qemu/osdep.h"
+#include "qemu/option.h"
+#include "qemu/error-report.h"
+#include "hw/semihosting/semihost.h"
+
+/* Empty config */
+QemuOptsList qemu_semihosting_config_opts = {
+ .name = "",
+ .head = QTAILQ_HEAD_INITIALIZER(qemu_semihosting_config_opts.head),
+ .desc = {
+ { /* end of list */ }
+ },
+};
+
+/* Queries to config status default to off */
+bool semihosting_enabled(void)
+{
+ return false;
+}
+
+SemihostingTarget semihosting_get_target(void)
+{
+ return SEMIHOSTING_TARGET_AUTO;
+}
+
+/*
+ * All the rest are empty subs. We could g_assert_not_reached() but
+ * that adds extra weight to the final binary. Waste not want not.
+ */
+void qemu_semihosting_enable(void)
+{
+}
+
+int qemu_semihosting_config_options(const char *optarg)
+{
+ return 1;
+}
+
+const char *semihosting_get_arg(int i)
+{
+ return NULL;
+}
+
+int semihosting_get_argc(void)
+{
+ return 0;
+}
+
+const char *semihosting_get_cmdline(void)
+{
+ return NULL;
+}
+
+void semihosting_arg_fallback(const char *file, const char *cmd)
+{
+}