diff mbox series

[RFC,02/11] semihosting: introduce CONFIG_SEMIHOSTING

Message ID 20190514155301.16123-3-alex.bennee@linaro.org
State Superseded
Headers show
Series semihosting cleanup and re-factor | expand

Commit Message

Alex Bennée May 14, 2019, 3:52 p.m. UTC
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>

---
 default-configs/arm-softmmu.mak         |  1 +
 default-configs/lm32-softmmu.mak        |  2 +
 default-configs/m68k-softmmu.mak        |  2 +
 default-configs/mips-softmmu-common.mak |  1 +
 default-configs/nios2-softmmu.mak       |  2 +
 default-configs/xtensa-softmmu.mak      |  2 +
 hw/Kconfig                              |  1 +
 hw/semihosting/Kconfig                  |  3 ++
 hw/semihosting/Makefile.objs            |  2 +-
 stubs/Makefile.objs                     |  1 +
 stubs/semihost.c                        | 66 +++++++++++++++++++++++++
 11 files changed, 82 insertions(+), 1 deletion(-)
 create mode 100644 hw/semihosting/Kconfig
 create mode 100644 stubs/semihost.c

-- 
2.20.1

Comments

Philippe Mathieu-Daudé May 14, 2019, 4:25 p.m. UTC | #1
On 5/14/19 5:52 PM, Alex Bennée wrote:
> 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>


> ---

>  default-configs/arm-softmmu.mak         |  1 +

>  default-configs/lm32-softmmu.mak        |  2 +

>  default-configs/m68k-softmmu.mak        |  2 +

>  default-configs/mips-softmmu-common.mak |  1 +

>  default-configs/nios2-softmmu.mak       |  2 +

>  default-configs/xtensa-softmmu.mak      |  2 +

>  hw/Kconfig                              |  1 +

>  hw/semihosting/Kconfig                  |  3 ++

>  hw/semihosting/Makefile.objs            |  2 +-

>  stubs/Makefile.objs                     |  1 +

>  stubs/semihost.c                        | 66 +++++++++++++++++++++++++

>  11 files changed, 82 insertions(+), 1 deletion(-)

>  create mode 100644 hw/semihosting/Kconfig

>  create mode 100644 stubs/semihost.c

> 

> diff --git a/default-configs/arm-softmmu.mak b/default-configs/arm-softmmu.mak

> index f23ecfd5c58..1f2e0e7fdeb 100644

> --- a/default-configs/arm-softmmu.mak

> +++ b/default-configs/arm-softmmu.mak

> @@ -39,3 +39,4 @@ CONFIG_MICROBIT=y

>  CONFIG_FSL_IMX25=y

>  CONFIG_FSL_IMX7=y

>  CONFIG_FSL_IMX6UL=y

> +CONFIG_SEMIHOSTING=y

> diff --git a/default-configs/lm32-softmmu.mak b/default-configs/lm32-softmmu.mak

> index 6d259665d60..115b3e34c98 100644

> --- a/default-configs/lm32-softmmu.mak

> +++ b/default-configs/lm32-softmmu.mak

> @@ -4,6 +4,8 @@

>  #

>  #CONFIG_MILKYMIST_TMU2=n        # disabling it actually causes compile-time failures

>  

> +CONFIG_SEMIHOSTING=y

> +

>  # Boards:

>  #

>  CONFIG_LM32=y

> diff --git a/default-configs/m68k-softmmu.mak b/default-configs/m68k-softmmu.mak

> index e17495e2a0b..4049a8f2ba9 100644

> --- a/default-configs/m68k-softmmu.mak

> +++ b/default-configs/m68k-softmmu.mak

> @@ -1,5 +1,7 @@

>  # Default configuration for m68k-softmmu

>  

> +CONFIG_SEMIHOSTING=y

> +

>  # Boards:

>  #

>  CONFIG_AN5206=y

> diff --git a/default-configs/mips-softmmu-common.mak b/default-configs/mips-softmmu-common.mak

> index 8e54a74b7a5..e10ac4b20c0 100644

> --- a/default-configs/mips-softmmu-common.mak

> +++ b/default-configs/mips-softmmu-common.mak

> @@ -35,6 +35,7 @@ CONFIG_MIPS_CPS=y

>  CONFIG_MIPS_ITU=y

>  CONFIG_R4K=y

>  CONFIG_MALTA=y

> +CONFIG_SEMIHOSTING=y

>  CONFIG_PCNET_PCI=y

>  CONFIG_MIPSSIM=y

>  CONFIG_ACPI_SMBUS=y

> diff --git a/default-configs/nios2-softmmu.mak b/default-configs/nios2-softmmu.mak

> index e130d024e62..1bc4082ea99 100644

> --- a/default-configs/nios2-softmmu.mak

> +++ b/default-configs/nios2-softmmu.mak

> @@ -1,5 +1,7 @@

>  # Default configuration for nios2-softmmu

>  

> +CONFIG_SEMIHOSTING=y

> +

>  # Boards:

>  #

>  CONFIG_NIOS2_10M50=y

> diff --git a/default-configs/xtensa-softmmu.mak b/default-configs/xtensa-softmmu.mak

> index 7e4d1cc0979..3aa20a47a7f 100644

> --- a/default-configs/xtensa-softmmu.mak

> +++ b/default-configs/xtensa-softmmu.mak

> @@ -1,5 +1,7 @@

>  # Default configuration for Xtensa

>  

> +CONFIG_SEMIHOSTING=y

> +

>  # Boards:

>  #

>  CONFIG_XTENSA_SIM=y

> diff --git a/hw/Kconfig b/hw/Kconfig

> index 88b9f150070..195f541e50c 100644

> --- a/hw/Kconfig

> +++ b/hw/Kconfig

> @@ -29,6 +29,7 @@ source pci/Kconfig

>  source rdma/Kconfig

>  source scsi/Kconfig

>  source sd/Kconfig

> +source semihosting/Kconfig

>  source smbios/Kconfig

>  source ssi/Kconfig

>  source timer/Kconfig

> diff --git a/hw/semihosting/Kconfig b/hw/semihosting/Kconfig

> new file mode 100644

> index 00000000000..efe0a30734c

> --- /dev/null

> +++ b/hw/semihosting/Kconfig

> @@ -0,0 +1,3 @@

> +

> +config SEMIHOSTING

> +       bool

> diff --git a/hw/semihosting/Makefile.objs b/hw/semihosting/Makefile.objs

> index 546954f4ff4..09c19bf19ed 100644

> --- a/hw/semihosting/Makefile.objs

> +++ b/hw/semihosting/Makefile.objs

> @@ -1 +1 @@

> -common-obj-$(CONFIG_SOFTMMU) += config.o

> +obj-$(CONFIG_SEMIHOSTING) += config.o

> diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs

> index 269dfa58326..e0d4f11b348 100644

> --- a/stubs/Makefile.objs

> +++ b/stubs/Makefile.objs

> @@ -39,3 +39,4 @@ stub-obj-y += xen-hvm.o

>  stub-obj-y += pci-host-piix.o

>  stub-obj-y += ram-block.o

>  stub-obj-y += ramfb.o

> +stub-obj-$(CONFIG_SOFTMMU) += semihost.o

> diff --git a/stubs/semihost.c b/stubs/semihost.c

> new file mode 100644

> index 00000000000..1a4e88e5326

> --- /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)

> +{

> +}

>
diff mbox series

Patch

diff --git a/default-configs/arm-softmmu.mak b/default-configs/arm-softmmu.mak
index f23ecfd5c58..1f2e0e7fdeb 100644
--- a/default-configs/arm-softmmu.mak
+++ b/default-configs/arm-softmmu.mak
@@ -39,3 +39,4 @@  CONFIG_MICROBIT=y
 CONFIG_FSL_IMX25=y
 CONFIG_FSL_IMX7=y
 CONFIG_FSL_IMX6UL=y
+CONFIG_SEMIHOSTING=y
diff --git a/default-configs/lm32-softmmu.mak b/default-configs/lm32-softmmu.mak
index 6d259665d60..115b3e34c98 100644
--- a/default-configs/lm32-softmmu.mak
+++ b/default-configs/lm32-softmmu.mak
@@ -4,6 +4,8 @@ 
 #
 #CONFIG_MILKYMIST_TMU2=n        # disabling it actually causes compile-time failures
 
+CONFIG_SEMIHOSTING=y
+
 # Boards:
 #
 CONFIG_LM32=y
diff --git a/default-configs/m68k-softmmu.mak b/default-configs/m68k-softmmu.mak
index e17495e2a0b..4049a8f2ba9 100644
--- a/default-configs/m68k-softmmu.mak
+++ b/default-configs/m68k-softmmu.mak
@@ -1,5 +1,7 @@ 
 # Default configuration for m68k-softmmu
 
+CONFIG_SEMIHOSTING=y
+
 # Boards:
 #
 CONFIG_AN5206=y
diff --git a/default-configs/mips-softmmu-common.mak b/default-configs/mips-softmmu-common.mak
index 8e54a74b7a5..e10ac4b20c0 100644
--- a/default-configs/mips-softmmu-common.mak
+++ b/default-configs/mips-softmmu-common.mak
@@ -35,6 +35,7 @@  CONFIG_MIPS_CPS=y
 CONFIG_MIPS_ITU=y
 CONFIG_R4K=y
 CONFIG_MALTA=y
+CONFIG_SEMIHOSTING=y
 CONFIG_PCNET_PCI=y
 CONFIG_MIPSSIM=y
 CONFIG_ACPI_SMBUS=y
diff --git a/default-configs/nios2-softmmu.mak b/default-configs/nios2-softmmu.mak
index e130d024e62..1bc4082ea99 100644
--- a/default-configs/nios2-softmmu.mak
+++ b/default-configs/nios2-softmmu.mak
@@ -1,5 +1,7 @@ 
 # Default configuration for nios2-softmmu
 
+CONFIG_SEMIHOSTING=y
+
 # Boards:
 #
 CONFIG_NIOS2_10M50=y
diff --git a/default-configs/xtensa-softmmu.mak b/default-configs/xtensa-softmmu.mak
index 7e4d1cc0979..3aa20a47a7f 100644
--- a/default-configs/xtensa-softmmu.mak
+++ b/default-configs/xtensa-softmmu.mak
@@ -1,5 +1,7 @@ 
 # Default configuration for Xtensa
 
+CONFIG_SEMIHOSTING=y
+
 # Boards:
 #
 CONFIG_XTENSA_SIM=y
diff --git a/hw/Kconfig b/hw/Kconfig
index 88b9f150070..195f541e50c 100644
--- a/hw/Kconfig
+++ b/hw/Kconfig
@@ -29,6 +29,7 @@  source pci/Kconfig
 source rdma/Kconfig
 source scsi/Kconfig
 source sd/Kconfig
+source semihosting/Kconfig
 source smbios/Kconfig
 source ssi/Kconfig
 source timer/Kconfig
diff --git a/hw/semihosting/Kconfig b/hw/semihosting/Kconfig
new file mode 100644
index 00000000000..efe0a30734c
--- /dev/null
+++ b/hw/semihosting/Kconfig
@@ -0,0 +1,3 @@ 
+
+config SEMIHOSTING
+       bool
diff --git a/hw/semihosting/Makefile.objs b/hw/semihosting/Makefile.objs
index 546954f4ff4..09c19bf19ed 100644
--- a/hw/semihosting/Makefile.objs
+++ b/hw/semihosting/Makefile.objs
@@ -1 +1 @@ 
-common-obj-$(CONFIG_SOFTMMU) += config.o
+obj-$(CONFIG_SEMIHOSTING) += config.o
diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
index 269dfa58326..e0d4f11b348 100644
--- a/stubs/Makefile.objs
+++ b/stubs/Makefile.objs
@@ -39,3 +39,4 @@  stub-obj-y += xen-hvm.o
 stub-obj-y += pci-host-piix.o
 stub-obj-y += ram-block.o
 stub-obj-y += ramfb.o
+stub-obj-$(CONFIG_SOFTMMU) += semihost.o
diff --git a/stubs/semihost.c b/stubs/semihost.c
new file mode 100644
index 00000000000..1a4e88e5326
--- /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)
+{
+}