diff options
author | Laurent <laurent.aml@gmail.com> | 2013-05-25 06:01:29 -0400 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2013-05-25 12:07:56 +0200 |
commit | 9495cd170b5786c3518419e873d94eb5e7ada11a (patch) | |
tree | 7f0b486bd789d7975c416bbda78693ceb169938a /configure | |
parent | 597208fde175f7ae56f833e8cbae10cb9b709daf (diff) | |
download | ffmpeg-streaming-9495cd170b5786c3518419e873d94eb5e7ada11a.zip ffmpeg-streaming-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-x | configure | 3 |
1 files changed, 2 insertions, 1 deletions
@@ -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 } |