Two minor changes to the copyright and license marking for these files: (1) Stacey D Son is used instead of variations of his name. (2) The GPL boilerplate is replaced by SPDX markings. No change to the terms of the license are intended, and this matches current QEMU practice. There's no changes to the license or additional claims to any IP that others may hold in these files. All the S-o-bs in this commit have given me permission to do this to the extent they may hold rights. git blame over multiple repos and branches suggests that only minimal other material is present (much of it likely not subject to copyright protection). The project's long and complex history as well as tooling limitations make it hard to be 100% sure. Any omissions are unintentional and I will correct them as they come to light. Signed-off-by: Stacey Son <sson@FreeBSD.org> Signed-off-by: Sean Bruno <sbruno@FreeBSD.org> Signed-off-by: Mikaël Urankar <mikael.urankar@gmail.com> Signed-off-by: Kyle Evans <kevans@FreeBSD.org> Signed-off-by: Guy Yur <guyyur@gmail.com> Signed-off-by: Alexander Kabaev <kan@FreeBSD.org> Signed-off-by: Michal Meloun <mmel@FreeBSD.org> Signed-off-by: Ed Schouten <ed@nuxi.nl> Signed-off-by: Karim Taha <kariem.taha2.7@gmail.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Warner Losh <imp@bsdimp.com>
50 lines
1.2 KiB
C
50 lines
1.2 KiB
C
/*
|
|
* ARM AArch64 thread support for bsd-user.
|
|
*
|
|
* Copyright (c) 2015 Stacey D. Son
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
#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 = ROUND_DOWN(stack_base + stack_size, 16);
|
|
|
|
/* sp = stack base */
|
|
regs->xregs[31] = sp;
|
|
/* pc = start function entry */
|
|
regs->pc = entry;
|
|
/* r0 = arg */
|
|
regs->xregs[0] = arg;
|
|
|
|
|
|
}
|
|
|
|
static inline void target_thread_init(struct target_pt_regs *regs,
|
|
struct image_info *infop)
|
|
{
|
|
abi_long stack = infop->start_stack;
|
|
|
|
/*
|
|
* Make sure the stack is properly aligned.
|
|
* arm64/include/param.h (STACKLIGN() macro)
|
|
*/
|
|
|
|
memset(regs, 0, sizeof(*regs));
|
|
regs->regs[0] = infop->start_stack;
|
|
regs->pc = infop->entry;
|
|
regs->sp = ROUND_DOWN(stack, 16);
|
|
}
|
|
|
|
#endif /* TARGET_ARCH_THREAD_H */
|