447 |
is_write, &uc->uc_sigmask); |
is_write, &uc->uc_sigmask); |
448 |
} |
} |
449 |
|
|
450 |
|
#elif defined(__alpha__) |
451 |
|
|
452 |
|
int cpu_x86_signal_handler(int host_signum, struct siginfo *info, |
453 |
|
void *puc) |
454 |
|
{ |
455 |
|
struct ucontext *uc = puc; |
456 |
|
uint32_t *pc = uc->uc_mcontext.sc_pc; |
457 |
|
uint32_t insn = *pc; |
458 |
|
int is_write = 0; |
459 |
|
|
460 |
|
switch (insn >> 26) { |
461 |
|
case 0x0d: // stw |
462 |
|
case 0x0e: // stb |
463 |
|
case 0x0f: // stq_u |
464 |
|
case 0x24: // stf |
465 |
|
case 0x25: // stg |
466 |
|
case 0x26: // sts |
467 |
|
case 0x27: // stt |
468 |
|
case 0x2c: // stl |
469 |
|
case 0x2d: // stq |
470 |
|
case 0x2e: // stl_c |
471 |
|
case 0x2f: // stq_c |
472 |
|
is_write = 1; |
473 |
|
} |
474 |
|
|
475 |
|
return handle_cpu_signal(pc, (unsigned long)info->si_addr, |
476 |
|
is_write, &uc->uc_sigmask); |
477 |
|
} |
478 |
#else |
#else |
479 |
|
|
480 |
#error CPU specific signal handler needed |
#error CPU specific signal handler needed |