mirror of https://github.com/xemu-project/xemu.git
tcg-hppa: Compute is_write in cpu_signal_handler.
Signed-off-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
af92284bec
commit
f57040be4c
38
cpu-exec.c
38
cpu-exec.c
|
@ -1197,15 +1197,39 @@ int cpu_signal_handler(int host_signum, void *pinfo,
|
||||||
{
|
{
|
||||||
struct siginfo *info = pinfo;
|
struct siginfo *info = pinfo;
|
||||||
struct ucontext *uc = puc;
|
struct ucontext *uc = puc;
|
||||||
unsigned long pc;
|
unsigned long pc = uc->uc_mcontext.sc_iaoq[0];
|
||||||
int is_write;
|
uint32_t insn = *(uint32_t *)pc;
|
||||||
|
int is_write = 0;
|
||||||
|
|
||||||
|
/* XXX: need kernel patch to get write flag faster. */
|
||||||
|
switch (insn >> 26) {
|
||||||
|
case 0x1a: /* STW */
|
||||||
|
case 0x19: /* STH */
|
||||||
|
case 0x18: /* STB */
|
||||||
|
case 0x1b: /* STWM */
|
||||||
|
is_write = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x09: /* CSTWX, FSTWX, FSTWS */
|
||||||
|
case 0x0b: /* CSTDX, FSTDX, FSTDS */
|
||||||
|
/* Distinguish from coprocessor load ... */
|
||||||
|
is_write = (insn >> 9) & 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x03:
|
||||||
|
switch ((insn >> 6) & 15) {
|
||||||
|
case 0xa: /* STWS */
|
||||||
|
case 0x9: /* STHS */
|
||||||
|
case 0x8: /* STBS */
|
||||||
|
case 0xe: /* STWAS */
|
||||||
|
case 0xc: /* STBYS */
|
||||||
|
is_write = 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
pc = uc->uc_mcontext.sc_iaoq[0];
|
|
||||||
/* FIXME: compute is_write */
|
|
||||||
is_write = 0;
|
|
||||||
return handle_cpu_signal(pc, (unsigned long)info->si_addr,
|
return handle_cpu_signal(pc, (unsigned long)info->si_addr,
|
||||||
is_write,
|
is_write, &uc->uc_sigmask, puc);
|
||||||
&uc->uc_sigmask, puc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
Loading…
Reference in New Issue