undo++;
if (setjmp(jmp) == 0) {
- unsigned char sigstk[MINSIGSTKSZ];
+ unsigned char sigstk[SIGSTKSZ];
stack_t ss = { .ss_sp = sigstk, .ss_size = sizeof(sigstk) };
struct sigaction sa = { .sa_handler = segvjmp, .sa_flags = SA_NODEFER|SA_RESETHAND|SA_ONSTACK };
"mov %1, %%rsp\n\t"
"sub $8, %%rsp\n\t"
"push %%r10"
- : "=r" (rsp_save_[0]) : "0" (m + max) : "r10");
+ : "=r" (rsp_save_[0]) : "0" (m + max) : "r10", "memory");
out_ = fn_(arg_);
- asm volatile ("pop %rsp");
+ asm volatile ("pop %%rsp"
+ : : : "memory");
ret = 0;
if (out) *out = out_;
}