Thank you so much!
On Mon, 28 Sep 2020 at 16:14, Aleksandar Markovic < aleksandar.qemu.de...@gmail.com> wrote: > > > On Sunday, September 27, 2020, Kele Huang <kele.hw...@gmail.com> wrote: > >> Sorry about that, I only got maintainers by './scripts/get_maintainer.pl >> -f accel/tcg/user-exec.c' and missed your advice about maintainers. >> In another words, I thought I had Cc'ed the TCG MIPS maintainers. 😅 >> And sorry to maintainers. 😅 >> >>> >>> > This is fine, Kele. :) > > The granularity of get_maintainer.py is at file level, so this is one of > the cases where you can use your own judgement and include more email > addresses, even though get_maintainer.py doesn't list them. > get_maintainer.py is good most of the time, but not always. But not a big > deal. > > Thanks for the patch! :) > > I expect Richard is going to include it in his next tcg queue. > > Yours, > Aleksandar > > >> On Sun, 27 Sep 2020 at 16:41, Philippe Mathieu-Daudé <f4...@amsat.org> >> wrote: >> >>> On 9/27/20 10:20 AM, Kele Huang wrote: >>> > Detect all MIPS store instructions in cpu_signal_handler for all >>> available >>> > MIPS versions, and set is_write if encountering such store >>> instructions. >>> > >>> > This fixed the error while dealing with self-modified code for MIPS. >>> > >>> > Reviewed-by: Richard Henderson <richard.hender...@linaro.org> >>> > Signed-off-by: Kele Huang <kele.hw...@gmail.com> >>> > Signed-off-by: Xu Zou <iwatchn...@gmail.com> >>> >>> I already Cc'ed the TCG MIPS maintainers twice for you, >>> but you don't mind, so this time I won't insist. >>> >>> > --- >>> > accel/tcg/user-exec.c | 39 ++++++++++++++++++++++++++++++++++++++- >>> > 1 file changed, 38 insertions(+), 1 deletion(-) >>> > >>> > diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c >>> > index bb039eb32d..9ecda6c0d0 100644 >>> > --- a/accel/tcg/user-exec.c >>> > +++ b/accel/tcg/user-exec.c >>> > @@ -702,6 +702,10 @@ int cpu_signal_handler(int host_signum, void >>> *pinfo, >>> > >>> > #elif defined(__mips__) >>> > >>> > +#if defined(__misp16) || defined(__mips_micromips) >>> > +#error "Unsupported encoding" >>> > +#endif >>> > + >>> > int cpu_signal_handler(int host_signum, void *pinfo, >>> > void *puc) >>> > { >>> > @@ -709,9 +713,42 @@ int cpu_signal_handler(int host_signum, void >>> *pinfo, >>> > ucontext_t *uc = puc; >>> > greg_t pc = uc->uc_mcontext.pc; >>> > int is_write; >>> > + uint32_t insn; >>> > >>> > - /* XXX: compute is_write */ >>> > + /* Detect all store instructions at program counter. */ >>> > is_write = 0; >>> > + insn = *(uint32_t *)pc; >>> > + switch((insn >> 26) & 077) { >>> > + case 050: /* SB */ >>> > + case 051: /* SH */ >>> > + case 052: /* SWL */ >>> > + case 053: /* SW */ >>> > + case 054: /* SDL */ >>> > + case 055: /* SDR */ >>> > + case 056: /* SWR */ >>> > + case 070: /* SC */ >>> > + case 071: /* SWC1 */ >>> > + case 074: /* SCD */ >>> > + case 075: /* SDC1 */ >>> > + case 077: /* SD */ >>> > +#if !defined(__mips_isa_rev) || __mips_isa_rev < 6 >>> > + case 072: /* SWC2 */ >>> > + case 076: /* SDC2 */ >>> > +#endif >>> > + is_write = 1; >>> > + break; >>> > + case 023: /* COP1X */ >>> > + /* Required in all versions of MIPS64 since >>> > + MIPS64r1 and subsequent versions of MIPS32r2. */ >>> > + switch (insn & 077) { >>> > + case 010: /* SWXC1 */ >>> > + case 011: /* SDXC1 */ >>> > + case 015: /* SDXC1 */ >>> > + is_write = 1; >>> > + } >>> > + break; >>> > + } >>> > + >>> > return handle_cpu_signal(pc, info, is_write, &uc->uc_sigmask); >>> > } >>> > >>> > >>> >>>