diff options
Diffstat (limited to 'semihosting')
-rw-r--r-- | semihosting/config.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/semihosting/config.c b/semihosting/config.c index e171d4d..89a1759 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"); |