qemu-trivial
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 20/24] bsd-user/arm/target_arch_signal.h: arm set_sigtramp_ar


From: Kyle Evans
Subject: Re: [PATCH 20/24] bsd-user/arm/target_arch_signal.h: arm set_sigtramp_args
Date: Tue, 26 Oct 2021 01:10:19 -0500

On Tue, Oct 19, 2021 at 11:45 AM Warner Losh <imp@bsdimp.com> wrote:
>
> Implement set_sigtramp_args to setup the arguments to the sigtramp
> calls.
>
> Signed-off-by: Stacey Son <sson@FreeBSD.org>
> Signed-off-by: Warner Losh <imp@bsdimp.com>
> ---
>  bsd-user/arm/target_arch_signal.h | 35 +++++++++++++++++++++++++++++++
>  1 file changed, 35 insertions(+)
>
> diff --git a/bsd-user/arm/target_arch_signal.h 
> b/bsd-user/arm/target_arch_signal.h
> index 67355ff28f..b421c2522c 100644
> --- a/bsd-user/arm/target_arch_signal.h
> +++ b/bsd-user/arm/target_arch_signal.h
> @@ -128,4 +128,39 @@ struct target_trapframe {
>      abi_ulong tf_pc;
>  };
>
> +/*
> + * Compare to arm/arm/machdep.c sendsig()
> + * Assumes that target stack frame memory is locked.
> + */
> +static inline abi_long
> +set_sigtramp_args(CPUARMState *regs, int sig, struct target_sigframe *frame,
> +    abi_ulong frame_addr, struct target_sigaction *ka)
> +{
> +    /*
> +     * Arguments to signal handler:
> +     *  r0 = signal number
> +     *  r1 = siginfo pointer
> +     *  r2 = ucontext pointer
> +     *  r5 = ucontext pointer
> +     *  pc = signal handler pointer
> +     *  sp = sigframe struct pointer
> +     *  lr = sigtramp at base of user stack
> +     */
> +
> +    regs->regs[0] = sig;
> +    regs->regs[1] = frame_addr +
> +        offsetof(struct target_sigframe, sf_si);
> +    regs->regs[2] = frame_addr +
> +        offsetof(struct target_sigframe, sf_uc);
> +
> +    /* the trampoline uses r5 as the uc address */
> +    regs->regs[5] = frame_addr +
> +        offsetof(struct target_sigframe, sf_uc);
> +    regs->regs[TARGET_REG_PC] = ka->_sa_handler;
> +    regs->regs[TARGET_REG_SP] = frame_addr;
> +    regs->regs[TARGET_REG_LR] = TARGET_PS_STRINGS - TARGET_SZSIGCODE;
> +
> +    return 0;
> +}
> +
>  #endif /* !_TARGET_ARCH_SIGNAL_H_ */
> --
> 2.32.0
>

Reviewed-by: Kyle Evans <kevans@FreeBSD.org>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]