ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/SheepShaver/src/Unix/main_unix.cpp
(Generate patch)

Comparing SheepShaver/src/Unix/main_unix.cpp (file contents):
Revision 1.43 by gbeauche, 2004-06-26T15:26:17Z vs.
Revision 1.44 by gbeauche, 2004-06-26T16:25:22Z

# Line 511 | Line 511 | int main(int argc, char **argv)
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);
# Line 973 | Line 994 | int main(int argc, char **argv)
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);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines