On Thu, Jan 13, 2022 at 12:32 PM Peter Maydell <peter.mayd...@linaro.org>
wrote:

> On Sun, 9 Jan 2022 at 16:33, Warner Losh <i...@bsdimp.com> wrote:
> >
> > Implement host_signal_pc, host_signal_set_pc and host_signal_write for
> > arm.
> >
> > Signed-off-by: Kyle Evans <kev...@freebsd.org>
> > Signed-off-by: Warner Losh <i...@bsdimp.com>
>
> > +static inline bool host_signal_write(siginfo_t *info, ucontext_t *uc)
> > +{
> > +    /*
> > +     * In the FSR, bit 11 is WnR. FreeBSD returns this as part of the
> > +     * si_info.si_trapno which we don't have access to here.  We assume
> that uc
> > +     * is part of a trapframe and reach around to get to the si_info
> that's in
> > +     * the sigframe just before it, though this may be unwise.
> > +     */
>
> Yeah, that's pretty nasty. But this function is passed a
> siginfo_t pointer -- isn't that the one you need ?
>

Doh! I feel stupid now... You're right. This is a lot easier than I
thought. I'll fix that.

Warner


> > +    siginfo_t *si;
> > +    si = &((siginfo_t *)uc)[-1];
> > +    uint32_t fsr = si->si_trapno;
> > +
> > +    return extract32(fsr, 11, 1);
> > +}
>
> thanks
> -- PMM
>

Reply via email to