On Fri, Oct 8, 2021 at 6:15 PM Warner Losh <i...@bsdimp.com> wrote:
>
> do_freebsd_arch_sysarch() exists in $ARCH/target_arch_sysarch.h for x86.
> Call it from do_freebsd_sysarch() and remove the mostly duplicate
> version in syscall.c. Future changes will move it to os-sys.c and
> support other architectures.
>
> Signed-off-by: Warner Losh <i...@bsdimp.com>
> Reviewed-by: Richard Henderson <richard.hender...@linaro.org>
> ---
>  bsd-user/syscall.c | 45 +--------------------------------------------
>  1 file changed, 1 insertion(+), 44 deletions(-)
>
> diff --git a/bsd-user/syscall.c b/bsd-user/syscall.c
> index 2fd2ba8330..d3b9f431e2 100644
> --- a/bsd-user/syscall.c
> +++ b/bsd-user/syscall.c
> @@ -91,50 +91,7 @@ static abi_long do_obreak(abi_ulong new_brk)
>  #if defined(TARGET_I386)
>  static abi_long do_freebsd_sysarch(CPUX86State *env, int op, abi_ulong parms)
>  {
> -    abi_long ret = 0;
> -    abi_ulong val;
> -    int idx;
> -
> -    switch (op) {
> -#ifdef TARGET_ABI32
> -    case TARGET_FREEBSD_I386_SET_GSBASE:
> -    case TARGET_FREEBSD_I386_SET_FSBASE:
> -        if (op == TARGET_FREEBSD_I386_SET_GSBASE)
> -#else
> -    case TARGET_FREEBSD_AMD64_SET_GSBASE:
> -    case TARGET_FREEBSD_AMD64_SET_FSBASE:
> -        if (op == TARGET_FREEBSD_AMD64_SET_GSBASE)
> -#endif
> -            idx = R_GS;
> -        else
> -            idx = R_FS;
> -        if (get_user(val, parms, abi_ulong))
> -            return -TARGET_EFAULT;
> -        cpu_x86_load_seg(env, idx, 0);
> -        env->segs[idx].base = val;
> -        break;
> -#ifdef TARGET_ABI32
> -    case TARGET_FREEBSD_I386_GET_GSBASE:
> -    case TARGET_FREEBSD_I386_GET_FSBASE:
> -        if (op == TARGET_FREEBSD_I386_GET_GSBASE)
> -#else
> -    case TARGET_FREEBSD_AMD64_GET_GSBASE:
> -    case TARGET_FREEBSD_AMD64_GET_FSBASE:
> -        if (op == TARGET_FREEBSD_AMD64_GET_GSBASE)
> -#endif
> -            idx = R_GS;
> -        else
> -            idx = R_FS;
> -        val = env->segs[idx].base;
> -        if (put_user(val, parms, abi_ulong))
> -            return -TARGET_EFAULT;
> -        break;
> -    /* XXX handle the others... */
> -    default:
> -        ret = -TARGET_EINVAL;
> -        break;
> -    }
> -    return ret;
> +    do_freebsd_arch_sysarch(env, op, parms);
>  }
>  #endif
>
> --
> 2.32.0
>

Reviewed-by: Kyle Evans <kev...@freebsd.org>

Reply via email to