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; })
state.fn = fn;
state.arg = arg;
- state.out = 0;
+ state.out = NULL;
state.max = max;
state.ebuf[state.elen = 0] = '\0';
- if (out) *out = 0;
+ if (out) *out = NULL;
// if the first page below the mapping is in use, we get max-pgsz usable bytes
// add pgsz to max to guarantee at least max usable bytes
ok(setrlimit(RLIMIT_STACK, &(struct rlimit) { state.max, rl_save.rlim_max }), 1);
undo++;
- ok(m = mmap(0, max, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN|MAP_NORESERVE, -1, 0), 1);
+ ok(m = mmap(NULL, max, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN|MAP_NORESERVE, -1, 0), 1);
undo++;
if (setjmp(state.jmp) == 0) {
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);
switch (undo) {
case 4:
- ok(sigaction(SIGSEGV, &sa_save, 0), 0);
+ ok(sigaction(SIGSEGV, &sa_save, NULL), 0);
case 3:
- ok(sigaltstack(&(stack_t) { .ss_flags = SS_DISABLE }, 0), 0);
+ ok(sigaltstack(&ss_save, NULL), 0);
case 2:
ok(munmap(m, max), 0);
case 1: