X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/70ad1dc8a19d6edd9b97aa81f32cfd65758ae97d..a9aaacca3a68bb8d74fec09d8d8681a0efda2581:/stdlib/FreeBSD/abort.c diff --git a/stdlib/FreeBSD/abort.c b/stdlib/FreeBSD/abort.c index 8758cf8..bac55ad 100644 --- a/stdlib/FreeBSD/abort.c +++ b/stdlib/FreeBSD/abort.c @@ -48,11 +48,16 @@ __FBSDID("$FreeBSD: src/lib/libc/stdlib/abort.c,v 1.11 2007/01/09 00:28:09 imp E #include "libc_private.h" +#if __has_include() #include +#else +#define CRGetCrashLogMessage() NULL +#define CRSetCrashLogMessage(...) +#endif #include "_simple.h" extern void (*__cleanup)(); -extern void __abort(void) __dead2; +extern void __abort(void) __cold __dead2; #define TIMEOUT 10000 /* 10 milliseconds */ @@ -78,6 +83,17 @@ abort() */ sigdelset(&act.sa_mask, SIGABRT); + /* + * Don't block SIGSEGV since we might trigger a segfault if the pthread + * struct is corrupt. The end user behavior is that the program will + * terminate with a SIGSEGV instead of a SIGABRT which is acceptable. If + * the user registers a SIGSEGV handler, then they are responsible for + * dealing with any corruption themselves and abort may not work. + * rdar://48853131 + */ + sigdelset(&act.sa_mask, SIGSEGV); + sigdelset(&act.sa_mask, SIGBUS); + /* abort() should call pthread_kill to deliver a signal to the aborting thread * This helps gdb focus on the thread calling abort() */