diff options
author | Måns Rullgård <mans@mansr.com> | 2007-04-13 20:16:13 +0000 |
---|---|---|
committer | Måns Rullgård <mans@mansr.com> | 2007-04-13 20:16:13 +0000 |
commit | 7dfef2451da550abd2510eff87da78523278e476 (patch) | |
tree | 737fdf15a46473c29cfa03e93390905cf741ae62 /configure | |
parent | 24ba15b16e1970fd6af7b3f6ae11e4840c6e3029 (diff) | |
download | ffmpeg-7dfef2451da550abd2510eff87da78523278e476.tar.gz |
trap signals in tests that can crash
Originally committed as revision 8727 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'configure')
-rwxr-xr-x | configure | 42 |
1 files changed, 27 insertions, 15 deletions
@@ -485,6 +485,32 @@ check_exec(){ check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; } } +check_exec_crash(){ + code=`cat` + + # exit() is not async signal safe. _Exit (C99) and _exit (POSIX) + # are safe but may not be available everywhere. Thus we use + # raise(SIGTERM) instead. The check is run in a subshell so we + # can redirect the "Terminated" message from the shell. SIGBUS + # is not defined by standard C so it is used conditionally. + + (check_exec "$@") >>$logfile 2>&1 <<EOF +#include <signal.h> +static void sighandler(int sig){ + raise(SIGTERM); +} +int main(){ + signal(SIGILL, sighandler); + signal(SIGFPE, sighandler); + signal(SIGSEGV, sighandler); +#ifdef SIGBUS + signal(SIGBUS, sighandler); +#endif + { $code } +} +EOF +} + require(){ name="$1" header="$2" @@ -1191,10 +1217,6 @@ ar="${cross_prefix}${ar}" ranlib="${cross_prefix}${ranlib}" strip="${cross_prefix}${strip}" -# Disable core dumps so that intentional execution of broken apps doesn't -# pollute the current directory. -ulimit -c 0 >/dev/null 2>&1 - # we need to build at least one lib type if disabled_all static shared; then cat <<EOF @@ -1397,26 +1419,16 @@ if test "$?" != 0; then fi if test $arch = "x86_32" -o $arch = "x86_64"; then - if test "$targetos" = mingw32 -o "$targetos" = cygwin; then - cat <<EOF -WARNING: The following test might cause a testapp to crash (intentionally) -resulting in the appearance of a dialog box. Please click "Don't send" and -ignore it. -EOF - fi - # check whether EBP is available on x86 # As 'i' is stored on the stack, this program will crash # if the base pointer is used to access it because the # base pointer is cleared in the inline assembly code. - (check_exec) <<EOF >>$logfile 2>&1 && enable ebp_available -int main(){ + check_exec_crash <<EOF && enable ebp_available volatile int i=0; asm volatile ( "xorl %%ebp, %%ebp" ::: "%ebp"); return i; -} EOF # check wether EBX is available on x86 |