trap signals in tests that can crash
authorMåns Rullgård <mans@mansr.com>
Fri, 13 Apr 2007 20:16:13 +0000 (20:16 +0000)
committerMåns Rullgård <mans@mansr.com>
Fri, 13 Apr 2007 20:16:13 +0000 (20:16 +0000)
Originally committed as revision 8727 to svn://svn.ffmpeg.org/ffmpeg/trunk

configure

index 2c6eeea..ae1841c 100755 (executable)
--- a/configure
+++ b/configure
@@ -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