On Thu, Jul 21, 2011 at 11:56 PM, Uros Bizjak <ubiz...@gmail.com> wrote:
> Revision 164725 [1] broke detection of ifunc support in the testsuite > [2] due to extra "#endif" without if in the test function. Attached > patch fixes this up. Actually, we can use existing testsuite infrastructure to simplify the function substantially. 2011-07-21 Uros Bizjak <ubiz...@gmail.com> * lib/target-supports.exp (check_ifunc_available): Rewrite. The patch is tested on x86_64-pc-linux-gnu, but my toolchain does not support ifunc attribute. Can somebody please test it with ifunc support? OK for mainline and 4.6 ? Uros.
Index: lib/target-supports.exp =================================================================== --- lib/target-supports.exp (revision 176584) +++ lib/target-supports.exp (working copy) @@ -361,45 +361,16 @@ return $alias_available_saved } -############################### -# proc check_ifunc_available { } -############################### +# Returns 1 if the target supports ifunc, 0 otherwise. -# Determine if the target toolchain supports the ifunc attribute. - -# Returns 1 if the target supports ifunc. Returns 0 if the target -# does not support ifunc. - proc check_ifunc_available { } { - global ifunc_available_saved - global tool - - if [info exists ifunc_available_saved] { - verbose "check_ifunc_available returning saved $ifunc_available_saved" 2 - } else { - set src ifunc[pid].c - set obj ifunc[pid].o - verbose "check_ifunc_available compiling testfile $src" 2 - set f [open $src "w"] - puts $f "#endif" - puts $f "#ifdef __cplusplus\nextern \"C\"\n#endif" - puts $f "void g() {}" - puts $f "void f() __attribute__((ifunc(\"g\")));" - close $f - set lines [${tool}_target_compile $src $obj object ""] - file delete $src - remote_file build delete $obj - - if [string match "" $lines] then { - set ifunc_available_saved 1 - } else { - set ifunc_available_saved 0 - } - - verbose "check_ifunc_available returning $ifunc_available_saved" 2 - } - - return $ifunc_available_saved + return [check_no_compiler_messages ifunc_available object { + #ifdef __cplusplus + extern "C" + #endif + void g() {} + f() __attribute__((ifunc("g"))); + }] } # Returns true if --gc-sections is supported on the target.