On 3/18/25 14:31, Richard Henderson wrote:
> Avoid testing CONFIG_USER_ONLY in semihost.h.
> The only function that's required is semihosting_enabled.
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
> include/semihosting/semihost.h | 29 ++---------------------------
> semihosting/user.c | 15 +++++++++++++++
> semihosting/meson.build | 2 ++
> 3 files changed, 19 insertions(+), 27 deletions(-)
> create mode 100644 semihosting/user.c
>
> diff --git a/include/semihosting/semihost.h b/include/semihosting/semihost.h
> index 97d2a2ba99..b03e637578 100644
> --- a/include/semihosting/semihost.h
> +++ b/include/semihosting/semihost.h
> @@ -26,32 +26,6 @@ typedef enum SemihostingTarget {
> SEMIHOSTING_TARGET_GDB
> } SemihostingTarget;
>
> -#ifdef CONFIG_USER_ONLY
> -static inline bool semihosting_enabled(bool is_user)
> -{
> - return true;
> -}
> -
> -static inline SemihostingTarget semihosting_get_target(void)
> -{
> - return SEMIHOSTING_TARGET_AUTO;
> -}
> -
> -static inline const char *semihosting_get_arg(int i)
> -{
> - return NULL;
> -}
> -
> -static inline int semihosting_get_argc(void)
> -{
> - return 0;
> -}
> -
> -static inline const char *semihosting_get_cmdline(void)
> -{
> - return NULL;
> -}
> -#else /* !CONFIG_USER_ONLY */
> /**
> * semihosting_enabled:
> * @is_user: true if guest code is in usermode (i.e. not privileged)
> @@ -59,17 +33,18 @@ static inline const char *semihosting_get_cmdline(void)
> * Return true if guest code is allowed to make semihosting calls.
> */
> bool semihosting_enabled(bool is_user);
> +
> SemihostingTarget semihosting_get_target(void);
> const char *semihosting_get_arg(int i);
> int semihosting_get_argc(void);
> const char *semihosting_get_cmdline(void);
> void semihosting_arg_fallback(const char *file, const char *cmd);
> +
> /* for vl.c hooks */
> void qemu_semihosting_enable(void);
> int qemu_semihosting_config_options(const char *optstr);
> void qemu_semihosting_chardev_init(void);
> void qemu_semihosting_console_init(Chardev *);
> -#endif /* CONFIG_USER_ONLY */
> void qemu_semihosting_guestfd_init(void);
>
> #endif /* SEMIHOST_H */
> diff --git a/semihosting/user.c b/semihosting/user.c
> new file mode 100644
> index 0000000000..9473729beb
> --- /dev/null
> +++ b/semihosting/user.c
> @@ -0,0 +1,15 @@
> +/*
> + * Semihosting for user emulation
> + *
> + * Copyright (c) 2019 Linaro Ltd
> + *
> + * SPDX-License-Identifier: GPL-2.0-or-later
> + */
> +
> +#include "qemu/osdep.h"
> +#include "semihosting/semihost.h"
> +
> +bool semihosting_enabled(bool is_user)
> +{
> + return true;
> +}
> diff --git a/semihosting/meson.build b/semihosting/meson.build
> index 86f5004bed..ab67f87e4f 100644
> --- a/semihosting/meson.build
> +++ b/semihosting/meson.build
> @@ -15,5 +15,7 @@ system_ss.add(when: ['CONFIG_SEMIHOSTING'], if_true: files(
> 'stubs-system.c',
> ))
>
> +user_ss.add(when: 'CONFIG_SEMIHOSTING', if_true: files('user.c'))
> +
> specific_ss.add(when: ['CONFIG_ARM_COMPATIBLE_SEMIHOSTING'],
> if_true: files('arm-compat-semi.c'))
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>