trap signals in tests that can crash
Originally committed as revision 8727 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
24ba15b16e
commit
7dfef2451d
42
configure
vendored
42
configure
vendored
@ -485,6 +485,32 @@ check_exec(){
|
|||||||
check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
|
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(){
|
require(){
|
||||||
name="$1"
|
name="$1"
|
||||||
header="$2"
|
header="$2"
|
||||||
@ -1191,10 +1217,6 @@ ar="${cross_prefix}${ar}"
|
|||||||
ranlib="${cross_prefix}${ranlib}"
|
ranlib="${cross_prefix}${ranlib}"
|
||||||
strip="${cross_prefix}${strip}"
|
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
|
# we need to build at least one lib type
|
||||||
if disabled_all static shared; then
|
if disabled_all static shared; then
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
@ -1397,26 +1419,16 @@ if test "$?" != 0; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test $arch = "x86_32" -o $arch = "x86_64"; then
|
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
|
# check whether EBP is available on x86
|
||||||
# As 'i' is stored on the stack, this program will crash
|
# As 'i' is stored on the stack, this program will crash
|
||||||
# if the base pointer is used to access it because the
|
# if the base pointer is used to access it because the
|
||||||
# base pointer is cleared in the inline assembly code.
|
# base pointer is cleared in the inline assembly code.
|
||||||
(check_exec) <<EOF >>$logfile 2>&1 && enable ebp_available
|
check_exec_crash <<EOF && enable ebp_available
|
||||||
int main(){
|
|
||||||
volatile int i=0;
|
volatile int i=0;
|
||||||
asm volatile (
|
asm volatile (
|
||||||
"xorl %%ebp, %%ebp"
|
"xorl %%ebp, %%ebp"
|
||||||
::: "%ebp");
|
::: "%ebp");
|
||||||
return i;
|
return i;
|
||||||
}
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# check wether EBX is available on x86
|
# check wether EBX is available on x86
|
||||||
|
Loading…
x
Reference in New Issue
Block a user