* David Laight: > Was there any 'spare' space in struct jmpbuf ? jmp_buf in glibc looks like this: (gdb) ptype/o jmp_buf type = struct __jmp_buf_tag { /* 0 | 64 */ __jmp_buf __jmpbuf; /* 64 | 4 */ int __mask_was_saved; /* XXX 4-byte hole */ /* 72 | 128 */ __sigset_t __saved_mask; /* total size (bytes): 200 */ } [1] (gdb) ptype/o __jmp_buf type = long [8] The glibc ABI reserves space for 1024 signals, something that Linux is never going to implement. We can use that space to store a few extra registers in __save_mask. There is a complication because the pthread_cancel unwinding allocates only space for the __jmpbuf member. Fortunately, we do not need to unwind the shadow stack for thread cancellation, so we don't need that extra space in that case. Thanks, Florian