511 |
|
#endif |
512 |
|
|
513 |
|
#if !EMULATED_PPC |
514 |
+ |
// Create and install stacks for signal handlers |
515 |
+ |
for (int i = 0; i < SIG_STACK_COUNT; i++) { |
516 |
+ |
void *sig_stack = malloc(SIG_STACK_SIZE); |
517 |
+ |
D(bug("Signal stack %d at %p\n", i, sig_stack)); |
518 |
+ |
if (sig_stack == NULL) { |
519 |
+ |
ErrorAlert(GetString(STR_NOT_ENOUGH_MEMORY_ERR)); |
520 |
+ |
goto quit; |
521 |
+ |
} |
522 |
+ |
sig_stacks[i].ss_sp = sig_stack; |
523 |
+ |
sig_stacks[i].ss_flags = 0; |
524 |
+ |
sig_stacks[i].ss_size = SIG_STACK_SIZE; |
525 |
+ |
} |
526 |
+ |
sig_stack_id = 0; |
527 |
+ |
if (sigaltstack(&sig_stacks[0], NULL) < 0) { |
528 |
+ |
sprintf(str, GetString(STR_SIGALTSTACK_ERR), strerror(errno)); |
529 |
+ |
ErrorAlert(str); |
530 |
+ |
goto quit; |
531 |
+ |
} |
532 |
+ |
#endif |
533 |
+ |
|
534 |
+ |
#if !EMULATED_PPC |
535 |
|
// Install SIGSEGV and SIGBUS handlers |
536 |
|
sigemptyset(&sigsegv_action.sa_mask); // Block interrupts during SEGV handling |
537 |
|
sigaddset(&sigsegv_action.sa_mask, SIGUSR2); |
994 |
|
D(bug("NVRAM thread installed (%ld)\n", nvram_thread)); |
995 |
|
|
996 |
|
#if !EMULATED_PPC |
976 |
– |
// Create and install stacks for signal handlers |
977 |
– |
for (int i = 0; i < SIG_STACK_COUNT; i++) { |
978 |
– |
void *sig_stack = malloc(SIG_STACK_SIZE); |
979 |
– |
D(bug("Signal stack %d at %p\n", i, sig_stack)); |
980 |
– |
if (sig_stack == NULL) { |
981 |
– |
ErrorAlert(GetString(STR_NOT_ENOUGH_MEMORY_ERR)); |
982 |
– |
goto quit; |
983 |
– |
} |
984 |
– |
sig_stacks[i].ss_sp = sig_stack; |
985 |
– |
sig_stacks[i].ss_flags = 0; |
986 |
– |
sig_stacks[i].ss_size = SIG_STACK_SIZE; |
987 |
– |
} |
988 |
– |
sig_stack_id = 0; |
989 |
– |
if (sigaltstack(&sig_stacks[0], NULL) < 0) { |
990 |
– |
sprintf(str, GetString(STR_SIGALTSTACK_ERR), strerror(errno)); |
991 |
– |
ErrorAlert(str); |
992 |
– |
goto quit; |
993 |
– |
} |
994 |
– |
#endif |
995 |
– |
|
996 |
– |
#if !EMULATED_PPC |
997 |
|
// Install SIGILL handler |
998 |
|
sigemptyset(&sigill_action.sa_mask); // Block interrupts during ILL handling |
999 |
|
sigaddset(&sigill_action.sa_mask, SIGUSR2); |