On Fri, 6 Dec 2019 at 18:36, Richard Henderson <richard.hender...@linaro.org> wrote:
> >> +static void el2_e2h_write(CPUARMState *env, const ARMCPRegInfo *ri, > >> + uint64_t value) > >> +{ > >> + CPWriteFn *writefn; > >> + > >> + if (redirect_for_e2h(env)) { > >> + /* Switch to the saved EL2 version of the register. */ > >> + ri = ri->opaque; > >> + writefn = ri->writefn; > >> + } else { > >> + writefn = ri->orig_writefn; > >> + } > >> + if (writefn == NULL) { > >> + writefn = raw_write; > >> + } > >> + writefn(env, ri, value); > >> +} > > > > I see how this works when we have a readfn or writefn, > > but how does the redirection work where the access > > goes directly via .fieldoffset ? > > When there is no .writefn, we use raw_write, which uses fieldoffset. Yes, that's what I mean. There's no 'if redirect then this fieldoffset else that fieldoffset' codepath, so how does it update the right field? thanks -- PMM