On Tue, Oct 19, 2021 at 11:45 AM Warner Losh <i...@bsdimp.com> wrote: > > Get the machine context from the CPU state. > > Signed-off-by: Stacey Son <s...@freebsd.org> > Signed-off-by: Klye Evans <kev...@freebsd.org> > Signed-off-by: Warner Losh <i...@bsdimp.com> > --- > bsd-user/arm/target_arch_signal.h | 38 +++++++++++++++++++++++++++++++ > 1 file changed, 38 insertions(+) > > diff --git a/bsd-user/arm/target_arch_signal.h > b/bsd-user/arm/target_arch_signal.h > index b421c2522c..302fdc2846 100644 > --- a/bsd-user/arm/target_arch_signal.h > +++ b/bsd-user/arm/target_arch_signal.h > @@ -163,4 +163,42 @@ set_sigtramp_args(CPUARMState *regs, int sig, struct > target_sigframe *frame, > return 0; > } > > +/* > + * Compare to arm/arm/machdep.c get_mcontext() > + * Assumes that the memory is locked if mcp points to user memory. > + */ > +static inline abi_long get_mcontext(CPUARMState *regs, target_mcontext_t > *mcp, > + int flags) > +{ > + int err = 0; > + uint32_t *gr = mcp->__gregs; > + > + gr[TARGET_REG_CPSR] = tswap32(cpsr_read(regs)); > + if (flags & TARGET_MC_GET_CLEAR_RET) { > + gr[TARGET_REG_R0] = 0; > + gr[TARGET_REG_CPSR] &= ~CPSR_C; > + } else { > + gr[TARGET_REG_R0] = tswap32(regs->regs[0]); > + } > + > + gr[TARGET_REG_R1] = tswap32(regs->regs[1]); > + gr[TARGET_REG_R2] = tswap32(regs->regs[2]); > + gr[TARGET_REG_R3] = tswap32(regs->regs[3]); > + gr[TARGET_REG_R4] = tswap32(regs->regs[4]); > + gr[TARGET_REG_R5] = tswap32(regs->regs[5]); > + gr[TARGET_REG_R6] = tswap32(regs->regs[6]); > + gr[TARGET_REG_R7] = tswap32(regs->regs[7]); > + gr[TARGET_REG_R8] = tswap32(regs->regs[8]); > + gr[TARGET_REG_R9] = tswap32(regs->regs[9]); > + gr[TARGET_REG_R10] = tswap32(regs->regs[10]); > + gr[TARGET_REG_R11] = tswap32(regs->regs[11]); > + gr[TARGET_REG_R12] = tswap32(regs->regs[12]); > + > + gr[TARGET_REG_SP] = tswap32(regs->regs[13]); > + gr[TARGET_REG_LR] = tswap32(regs->regs[14]); > + gr[TARGET_REG_PC] = tswap32(regs->regs[15]); > + > + return err; > +} > + > #endif /* !_TARGET_ARCH_SIGNAL_H_ */ > -- > 2.32.0 >
Reviewed-by: Kyle Evans <kev...@freebsd.org>