Domanda

I'm registering SIGSEGV (for Segmentation fault) Using sigaction() function. It working in all cases but except one case i.e. when stack is overflowing.I searched to resolve this problem. Then I get the answer, we have to assign alternate Stack. But I don't know how to assign altrenate stack for signal registration. Please help me to allocate alternate stack for segmenaion fault step by step.

È stato utile?

Soluzione

You can do it with sigaltstack.

stack_t stack = {
    .ss_sp = malloc(SIGSTKSZ),
    .ss_size = SIGSTKSZ,
    .ss_flags = 0
};

if (sigaltstack(&stack, NULL))
    perror("sigaltstack");

At this point just establish your signal handler with sigaction and use sa_flags = SA_ONSTACK.

Altri suggerimenti

First establish an alternative stack with sigaltstack()

Secondly, when installing the signal handler, use sigaction() and set the SA_ONSTACK in the sa_flags member of the struct sigaction.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top