aboutsummaryrefslogtreecommitdiffstats
path: root/configure
diff options
context:
space:
mode:
authorLaurent <laurent.aml@gmail.com>2013-05-25 06:01:29 -0400
committerLuca Barbato <lu_zero@gentoo.org>2013-05-25 12:07:56 +0200
commit9495cd170b5786c3518419e873d94eb5e7ada11a (patch)
tree7f0b486bd789d7975c416bbda78693ceb169938a /configure
parent597208fde175f7ae56f833e8cbae10cb9b709daf (diff)
downloadffmpeg-9495cd170b5786c3518419e873d94eb5e7ada11a.tar.gz
configure: Fix check_exec_crash for ICL support
Change the check_exec_crash test to use a function pointer instead of simply calling the function. The EBP availability test will crash when compiled with ICL likely due to compiler optimization shenanigans. Originally the check_exec_crash code was moved out of main to fix a problem with gcc's treatment of non-leaf main on x86_32. Libav already moved the code out of main but the addition of the function pointer will prevent any inlining which fixes the remaining problem. A function pointer is used since it is compiler agnostic (as opposed to say __attribute__ ((noinline)) which would only work with gcc compatible compilers). Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure3
1 files changed, 2 insertions, 1 deletions
diff --git a/configure b/configure
index e3cf0b9f8f..4866894d75 100755
--- a/configure
+++ b/configure
@@ -911,6 +911,7 @@ static void sighandler(int sig){
int foo(void){
$code
}
+int (*func_ptr)(void) = foo;
int main(void){
signal(SIGILL, sighandler);
signal(SIGFPE, sighandler);
@@ -918,7 +919,7 @@ int main(void){
#ifdef SIGBUS
signal(SIGBUS, sighandler);
#endif
- foo();
+ return func_ptr();
}
EOF
}