/* -*- Mode: C; -*- * ---------------------------------------------------------------------------- * Title: Demonstration how Signal Handlers Leak with Rosetta * Created: 2025-05-20 * Author: Gilbert Baumann * ---------------------------------------------------------------------------- * (c) copyright 2025 by Gilbert Baumann */ /* * This leaks something around 2k to 4k per trap when run with Rosetta. */ #include #include #include jmp_buf abort_jb; void signal_handler (int signum, siginfo_t *info, ucontext_t *uc) { (void)signum; (void)info; printf("uc at %p\n", uc); longjmp(abort_jb, 1); } int main (int argc, char **argv) { (void)argc; (void)argv; struct sigaction sa; sa.sa_sigaction = (void*)signal_handler; sa.sa_flags = SA_SIGINFO; sa.sa_mask = 0; sigaction(SIGSEGV, &sa, 0); for(;;) { if (0 == setjmp(abort_jb)) { *((volatile char *)-1); } } return 0; }