diff options
Diffstat (limited to 'cpu-exec.c')
-rw-r--r-- | cpu-exec.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/cpu-exec.c b/cpu-exec.c index a3e6e8e124..a17ea2f739 100644 --- a/cpu-exec.c +++ b/cpu-exec.c @@ -657,6 +657,17 @@ int cpu_exec(CPUState *env1) "o0", "o1", "o2", "o3", "o4", "o5", "l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7"); +#elif defined(__hppa__) + asm volatile ("ble 0(%%sr4,%1)\n" + "copy %%r31,%%r18\n" + "copy %%r28,%0\n" + : "=r" (T0) + : "r" (gen_func) + : "r1", "r2", "r3", "r4", "r5", "r6", "r7", + "r8", "r9", "r10", "r11", "r12", "r13", + "r18", "r19", "r20", "r21", "r22", "r23", + "r24", "r25", "r26", "r27", "r28", "r29", + "r30", "r31"); #elif defined(__arm__) asm volatile ("mov pc, %0\n\t" ".global exec_loop\n\t" @@ -1488,6 +1499,24 @@ int cpu_signal_handler(int host_signum, void *pinfo, is_write, &uc->uc_sigmask, puc); } +#elif defined(__hppa__) + +int cpu_signal_handler(int host_signum, void *pinfo, + void *puc) +{ + struct siginfo *info = pinfo; + struct ucontext *uc = puc; + unsigned long pc; + int is_write; + + pc = uc->uc_mcontext.sc_iaoq[0]; + /* FIXME: compute is_write */ + is_write = 0; + return handle_cpu_signal(pc, (unsigned long)info->si_addr, + is_write, + &uc->uc_sigmask, puc); +} + #else #error host CPU specific signal handler needed |