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>
This commit is contained in:
parent
597208fde1
commit
9495cd170b
3
configure
vendored
3
configure
vendored
@ -911,6 +911,7 @@ static void sighandler(int sig){
|
|||||||
int foo(void){
|
int foo(void){
|
||||||
$code
|
$code
|
||||||
}
|
}
|
||||||
|
int (*func_ptr)(void) = foo;
|
||||||
int main(void){
|
int main(void){
|
||||||
signal(SIGILL, sighandler);
|
signal(SIGILL, sighandler);
|
||||||
signal(SIGFPE, sighandler);
|
signal(SIGFPE, sighandler);
|
||||||
@ -918,7 +919,7 @@ int main(void){
|
|||||||
#ifdef SIGBUS
|
#ifdef SIGBUS
|
||||||
signal(SIGBUS, sighandler);
|
signal(SIGBUS, sighandler);
|
||||||
#endif
|
#endif
|
||||||
foo();
|
return func_ptr();
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user