summaryrefslogtreecommitdiff
path: root/configure
diff options
context:
space:
mode:
authorMåns Rullgård <mans@mansr.com>2007-04-13 20:16:13 +0000
committerMåns Rullgård <mans@mansr.com>2007-04-13 20:16:13 +0000
commit7dfef2451da550abd2510eff87da78523278e476 (patch)
tree737fdf15a46473c29cfa03e93390905cf741ae62 /configure
parent24ba15b16e1970fd6af7b3f6ae11e4840c6e3029 (diff)
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-xconfigure42
1 files changed, 27 insertions, 15 deletions
diff --git a/configure b/configure
index 2c6eeead58..ae1841c591 100755
--- 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