On 6/17/24 11:57, Ajeet Singh wrote:
> From: Stacey Son <sson@FreeBSD.org>
>
> Function for setting up thread upcall which will
> add thread support to BSD-User
>
> Signed-off-by: Stacey Son <sson@FreeBSD.org>
> Signed-off-by: Ajeet Singh <itachis@FreeBSD.org>
> Co-authored-by: Jessica Clarke <jrtc27@jrtc27.com>
> ---
> bsd-user/aarch64/target_arch_thread.h | 45 +++++++++++++++++++++++++++
> 1 file changed, 45 insertions(+)
> create mode 100644 bsd-user/aarch64/target_arch_thread.h
>
> diff --git a/bsd-user/aarch64/target_arch_thread.h b/bsd-user/aarch64/target_arch_thread.h
> new file mode 100644
> index 0000000000..d2f2dea7ce
> --- /dev/null
> +++ b/bsd-user/aarch64/target_arch_thread.h
> @@ -0,0 +1,45 @@
> +/*
> + * ARM AArch64 thread support for bsd-user.
> + *
> + * Copyright (c) 2015 Stacey D. Son <sson at FreeBSD>
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#ifndef TARGET_ARCH_THREAD_H
> +#define TARGET_ARCH_THREAD_H
> +
> +/* Compare to arm64/arm64/vm_machdep.c cpu_set_upcall_kse() */
> +static inline void target_thread_set_upcall(CPUARMState *regs, abi_ulong entry,
> + abi_ulong arg, abi_ulong stack_base, abi_ulong stack_size)
> +{
> + abi_ulong sp;
> +
> + /*
> + * Make sure the stack is properly aligned.
> + * arm64/include/param.h (STACKLIGN() macro)
> + */
> + sp = (abi_ulong)(stack_base + stack_size) & ~(16 - 1);
sp = ROUND_DOWN(stack_base + stack_size, 16);
> + pstate_write(regs, PSTATE_MODE_EL0t);
This is the default in arm_cpu_reset_hold for user-only.
There should be no need to duplicate this.
r~