On Fri, Aug 2, 2024 at 7:46 AM Richard Henderson < richard.hender...@linaro.org> wrote:
> On 8/2/24 18:34, Ajeet Singh wrote: > > From: Mark Corbin <mark.cor...@embecsom.com> > > > > Added functions for setting up the RISC-V signal trampoline and signal > > frame: > > > > 'set_sigtramp_args()': Configures the RISC-V CPU state with arguments > > for the signal handler. It sets up the registers with the signal > > number,pointers to the signal info and user context, the signal handler > > address, and the signal frame pointer. > > > > 'setup_sigframe_arch()': Initializes the signal frame with the current > > machine context.This function copies the context from the CPU state to > > the signal frame, preparing it for the signal handler. > > > > Signed-off-by: Mark Corbin <mark.cor...@embecsom.com> > > Signed-off-by: Ajeet Singh <itac...@freebsd.org> > > Signed-off-by: Warner Losh <i...@bsdimp.com> > > Co-authored-by: Warner Losh <i...@bsdimp.com> > > --- > > bsd-user/riscv/signal.c | 63 +++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 63 insertions(+) > > create mode 100644 bsd-user/riscv/signal.c > > > > diff --git a/bsd-user/riscv/signal.c b/bsd-user/riscv/signal.c > > new file mode 100644 > > index 0000000000..005eb53cab > > --- /dev/null > > +++ b/bsd-user/riscv/signal.c > > @@ -0,0 +1,63 @@ > > +/* > > + * RISC-V signal definitions > > + * > > + * Copyright (c) 2019 Mark Corbin > > + * > > + * This program is free software; you can redistribute it and/or modify > > + * it under the terms of the GNU General Public License as published by > > + * the Free Software Foundation; either version 2 of the License, or > > + * (at your option) any later version. > > + * > > + * This program 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 General Public License for more details. > > + * > > + * You should have received a copy of the GNU General Public License > > + * along with this program; if not, see <http://www.gnu.org/licenses/ > >. > > + */ > > +#include "qemu/osdep.h" > > + > > +#include "qemu.h" > > + > > +/* > > + * Compare with sendsig() in riscv/riscv/exec_machdep.c > > + * Assumes that target stack frame memory is locked. > > + */ > > +abi_long > > +set_sigtramp_args(CPURISCVState *regs, int sig, struct target_sigframe > *frame, > > + abi_ulong frame_addr, struct target_sigaction *ka) > > +{ > > + /* > > + * Arguments to signal handler: > > + * a0 (10) = signal number > > + * a1 (11) = siginfo pointer > > + * a2 (12) = ucontext pointer > > + * pc = signal pointer handler > > + * sp (2) = sigframe pointer > > + * ra (1) = sigtramp at base of user stack > > + */ > > + > > + regs->gpr[10] = sig; > > + regs->gpr[11] = frame_addr + > > + offsetof(struct target_sigframe, sf_si); > > + regs->gpr[12] = frame_addr + > > + offsetof(struct target_sigframe, sf_uc); > > xA0 .. xA2 > > > + regs->pc = ka->_sa_handler; > > + regs->gpr[2] = frame_addr; > > + regs->gpr[1] = TARGET_PS_STRINGS - TARGET_SZSIGCODE; > > xRA, xSP. > So to be clear, this is 'use these constants rather than the raw numbers for the array subscripts' right? Warner Otherwise, > Reviewed-by: Richard Henderson <richard.hender...@linaro.org> > > r~ >