struct rlimit rl_save;
struct sigaction sa_save;
int errno_save;
+ stack_t ss_save;
assert(max > 0 && fn);
#define ok(x, y) ({ long __r = (long) (x); if (__r == -1) { bang(#x); if (y) goto out; } __r; })
stack_t ss = { .ss_sp = sigstk, .ss_size = sizeof(sigstk) };
struct sigaction sa = { .sa_handler = segvjmp, .sa_flags = SA_NODEFER|SA_RESETHAND|SA_ONSTACK };
- ok(sigaltstack(&ss, 0), 1);
+ ok(sigaltstack(&ss, &ss_save), 1);
undo++;
sigemptyset(&sa.sa_mask);
case 4:
ok(sigaction(SIGSEGV, &sa_save, 0), 0);
case 3:
- ok(sigaltstack(&(stack_t) { .ss_flags = SS_DISABLE }, 0), 0);
+ ok(sigaltstack(&ss_save, 0), 0);
case 2:
ok(munmap(m, max), 0);
case 1: