aboutsummaryrefslogtreecommitdiff
path: root/semihosting
diff options
context:
space:
mode:
Diffstat (limited to 'semihosting')
-rw-r--r--semihosting/config.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/semihosting/config.c b/semihosting/config.c
index e171d4d6bc..89a1759687 100644
--- a/semihosting/config.c
+++ b/semihosting/config.c
@@ -35,6 +35,9 @@ QemuOptsList qemu_semihosting_config_opts = {
.name = "enable",
.type = QEMU_OPT_BOOL,
}, {
+ .name = "userspace",
+ .type = QEMU_OPT_BOOL,
+ }, {
.name = "target",
.type = QEMU_OPT_STRING,
}, {
@@ -50,6 +53,7 @@ QemuOptsList qemu_semihosting_config_opts = {
typedef struct SemihostingConfig {
bool enabled;
+ bool userspace_enabled;
SemihostingTarget target;
char **argv;
int argc;
@@ -59,9 +63,9 @@ typedef struct SemihostingConfig {
static SemihostingConfig semihosting;
static const char *semihost_chardev;
-bool semihosting_enabled(void)
+bool semihosting_enabled(bool is_user)
{
- return semihosting.enabled;
+ return semihosting.enabled && (!is_user || semihosting.userspace_enabled);
}
SemihostingTarget semihosting_get_target(void)
@@ -137,6 +141,8 @@ int qemu_semihosting_config_options(const char *optarg)
if (opts != NULL) {
semihosting.enabled = qemu_opt_get_bool(opts, "enable",
true);
+ semihosting.userspace_enabled = qemu_opt_get_bool(opts, "userspace",
+ false);
const char *target = qemu_opt_get(opts, "target");
/* setup of chardev is deferred until they are initialised */
semihost_chardev = qemu_opt_get(opts, "chardev");