From 9639fab82bb910dc8e97ed41aa6385631c4c084e Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Fri, 22 Jun 2018 09:29:21 +0900 Subject: [PATCH] Revert "Revert "eina debug - fix segv if an app is compiled with -pg for profiling"" This reverts commit 0d91088d0fe00ab64e1e852551e850d403e9db37. It also includes a workaround for OSX where RT signals aren't supported due to kernel age (too old a fork of freebsd). fixes D6310 and T7029 --- src/lib/eina/eina_debug_bt.c | 60 +++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/src/lib/eina/eina_debug_bt.c b/src/lib/eina/eina_debug_bt.c index 2a2234f245..f38dcd481a 100644 --- a/src/lib/eina/eina_debug_bt.c +++ b/src/lib/eina/eina_debug_bt.c @@ -37,7 +37,65 @@ #ifndef _WIN32 # include -# define SIG SIGPROF +// realtime signals guarantee a minimum of 8, so SIGRTMIN + 7 would be valid +// at a minimum, so let's choose + 6 ... second last of the minimum set. +// SIGRTMAX of course is defined too... note the manual pages for sigation say +// that it calls rt_sigaction transparently for us so... no need for anything +// else special +# ifdef SIGRTMIN +# define SIG (SIGRTMIN + 6) +# else +// OSX seems to not support posix RT signals... too old a kernel. so be partly +// broken on OSX in that a HUP signal will maybe cause a crash... but compiling +// with -pg would have guaranteed always caused a crash before anyway. +// given OSX only supports "old-style" signals like: +// +// #define SIGHUP 1 /* hangup */ +// #define SIGINT 2 /* interrupt */ +// #define SIGQUIT 3 /* quit */ +// #define SIGILL 4 /* illegal instruction (not reset when caught) */ +// #define SIGTRAP 5 /* trace trap (not reset when caught) */ +// #define SIGABRT 6 /* abort() */ +// #if (defined(_POSIX_C_SOURCE) && !defined(_DARWIN_C_SOURCE)) +// # define SIGPOLL 7 /* pollable event ([XSR] generated, not supported) */ +// #else /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ +// # define SIGIOT SIGABRT /* compatibility */ +// # define SIGEMT 7 /* EMT instruction */ +// #endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ +// #define SIGFPE 8 /* floating point exception */ +// #define SIGKILL 9 /* kill (cannot be caught or ignored) */ +// #define SIGBUS 10 /* bus error */ +// #define SIGSEGV 11 /* segmentation violation */ +// #define SIGSYS 12 /* bad argument to system call */ +// #define SIGPIPE 13 /* write on a pipe with no one to read it */ +// #define SIGALRM 14 /* alarm clock */ +// #define SIGTERM 15 /* software termination signal from kill */ +// #define SIGURG 16 /* urgent condition on IO channel */ +// #define SIGSTOP 17 /* sendable stop signal not from tty */ +// #define SIGTSTP 18 /* stop signal from tty */ +// #define SIGCONT 19 /* continue a stopped process */ +// #define SIGCHLD 20 /* to parent on child stop or exit */ +// #define SIGTTIN 21 /* to readers pgrp upon background tty read */ +// #define SIGTTOU 22 /* like TTIN for output if (tp->t_local<OSTOP) */ +// #if (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)) +// # define SIGIO 23 /* input/output possible signal */ +// #endif +// #define SIGXCPU 24 /* exceeded CPU time limit */ +// #define SIGXFSZ 25 /* exceeded file size limit */ +// #define SIGVTALRM 26 /* virtual time alarm */ +// #define SIGPROF 27 /* profiling time alarm */ +// #if (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)) +// # define SIGWINCH 28 /* window size changes */ +// # define SIGINFO 29 /* information request */ +// #endif +// #define SIGUSR1 30 /* user defined signal 1 */ +// #define SIGUSR2 31 /* user defined signal 2 */ +// +// (excerpt from OSX's signal.h - found at: +// http://github.com/st3fan/osx-10.9/blob/master/xnu-2422.1.72/bsd/sys/signal.h +// pasting here due to how difficult it was to find a signal list for OSX) +# define SIG SIGHUP +# endif #endif static Eina_Semaphore _wait_for_bts_sem;