Let the user turn off ifunc support at configure time if they want
to. Currently, the logic in gcc/autoconf.ac will override the default
logic in gcc/config.gcc.

gcc/ChangeLog:

    * config.gcc: Default-enable ifunc support for RISC-V on Linux.
    * autoconf.ac: Honor the default_gnu_indirect_function variable.
    * autoconf: Regenerate.
---
 gcc/config.gcc   |  2 +-
 gcc/configure    | 72 +++++++++++++++++++++++++-----------------------
 gcc/configure.ac | 72 +++++++++++++++++++++++++-----------------------
 3 files changed, 77 insertions(+), 69 deletions(-)

diff --git a/gcc/config.gcc b/gcc/config.gcc
index bc45615741b..012022399f4 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -3687,7 +3687,7 @@ case ${target} in
         ;;
 *-*-linux* | *-*-gnu*)
     case ${target} in
-    aarch64*-* | arm*-* | i[34567]86-* | powerpc*-* | s390*-* |
sparc*-* | x86_64-* | loongarch*-*)
+    aarch64*-* | arm*-* | i[34567]86-* | powerpc*-* | riscv*-* |
s390*-* | sparc*-* | x86_64-* | loongarch*-*)
         default_gnu_indirect_function=yes
         ;;
     esac
diff --git a/gcc/configure b/gcc/configure
index 4faae0fa5fb..874412dc96b 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -25907,42 +25907,46 @@ else
 fi


-case "${target}" in
-  riscv*-*-linux*)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker ifunc
IRELATIVE support" >&5
+if test $default_gnu_indirect_function = yes; then
+  case "${target}" in
+    riscv*-*-linux*)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker ifunc
IRELATIVE support" >&5
 $as_echo_n "checking linker ifunc IRELATIVE support... " >&6; }
-    cat > conftest.s <<EOF
-    .text
-    .type    foo_resolver, @function
-foo_resolver:
-    ret
-    .size    foo_resolver, .-foo_resolver
-
-    .globl    foo
-    .type    foo, %gnu_indirect_function
-    .set    foo, foo_resolver
-
-    .globl    bar
-    .type    bar, @function
-bar:
-    call    foo
-    ret
-    .size    bar, .-bar
-EOF
-    if test x$gcc_cv_as != x \
-       && test x$gcc_cv_ld != x \
-       && test x$gcc_cv_readelf != x \
-       && $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 \
-       && $gcc_cv_ld -o conftest conftest.o > /dev/null 2>&1 \
-       && $gcc_cv_readelf --relocs --wide conftest \
-      | grep R_RISCV_IRELATIVE > /dev/null 2>&1; then
-      enable_gnu_indirect_function=yes
-    fi
-    rm -f conftest conftest.o conftest.s
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result:
$enable_gnu_indirect_function" >&5
+      cat > conftest.s <<EOF
+      .text
+      .type    foo_resolver, @function
+  foo_resolver:
+      ret
+      .size    foo_resolver, .-foo_resolver
+
+      .globl    foo
+      .type    foo, %gnu_indirect_function
+      .set    foo, foo_resolver
+
+      .globl    bar
+      .type    bar, @function
+  bar:
+      call    foo
+      ret
+      .size    bar, .-bar
+  EOF
+      if test x$gcc_cv_as != x \
+     && test x$gcc_cv_ld != x \
+     && test x$gcc_cv_readelf != x \
+     && $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 \
+     && $gcc_cv_ld -o conftest conftest.o > /dev/null 2>&1 \
+     && $gcc_cv_readelf --relocs --wide conftest \
+        | grep R_RISCV_IRELATIVE > /dev/null 2>&1; then
+    enable_gnu_indirect_function=yes
+      else
+    enable_gnu_indirect_function=no
+      fi
+      rm -f conftest conftest.o conftest.s
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result:
$enable_gnu_indirect_function" >&5
 $as_echo "$enable_gnu_indirect_function" >&6; }
-    ;;
-esac
+      ;;
+  esac
+fi

 gif=`if test x$enable_gnu_indirect_function = xyes; then echo 1; else
echo 0; fi`

diff --git a/gcc/configure.ac b/gcc/configure.ac
index 3da1eaa7064..4f90a974c6b 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -3072,40 +3072,44 @@ Valid choices are 'yes' and 'no'.]) ;;
   esac],
  [enable_gnu_indirect_function="$default_gnu_indirect_function"])

-case "${target}" in
-  riscv*-*-linux*)
-    AC_MSG_CHECKING(linker ifunc IRELATIVE support)
-    cat > conftest.s <<EOF
-    .text
-    .type    foo_resolver, @function
-foo_resolver:
-    ret
-    .size    foo_resolver, .-foo_resolver
-
-    .globl    foo
-    .type    foo, %gnu_indirect_function
-    .set    foo, foo_resolver
-
-    .globl    bar
-    .type    bar, @function
-bar:
-    call    foo
-    ret
-    .size    bar, .-bar
-EOF
-    if test x$gcc_cv_as != x \
-       && test x$gcc_cv_ld != x \
-       && test x$gcc_cv_readelf != x \
-       && $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 \
-       && $gcc_cv_ld -o conftest conftest.o > /dev/null 2>&1 \
-       && $gcc_cv_readelf --relocs --wide conftest \
-      | grep R_RISCV_IRELATIVE > /dev/null 2>&1; then
-      enable_gnu_indirect_function=yes
-    fi
-    rm -f conftest conftest.o conftest.s
-    AC_MSG_RESULT($enable_gnu_indirect_function)
-    ;;
-esac
+if test $default_gnu_indirect_function = yes; then
+  case "${target}" in
+    riscv*-*-linux*)
+      AC_MSG_CHECKING(linker ifunc IRELATIVE support)
+      cat > conftest.s <<EOF
+      .text
+      .type    foo_resolver, @function
+  foo_resolver:
+      ret
+      .size    foo_resolver, .-foo_resolver
+
+      .globl    foo
+      .type    foo, %gnu_indirect_function
+      .set    foo, foo_resolver
+
+      .globl    bar
+      .type    bar, @function
+  bar:
+      call    foo
+      ret
+      .size    bar, .-bar
+  EOF
+      if test x$gcc_cv_as != x \
+     && test x$gcc_cv_ld != x \
+     && test x$gcc_cv_readelf != x \
+     && $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 \
+     && $gcc_cv_ld -o conftest conftest.o > /dev/null 2>&1 \
+     && $gcc_cv_readelf --relocs --wide conftest \
+        | grep R_RISCV_IRELATIVE > /dev/null 2>&1; then
+    enable_gnu_indirect_function=yes
+      else
+    enable_gnu_indirect_function=no
+      fi
+      rm -f conftest conftest.o conftest.s
+      AC_MSG_RESULT($enable_gnu_indirect_function)
+      ;;
+  esac
+fi

 gif=`if test x$enable_gnu_indirect_function = xyes; then echo 1; else
echo 0; fi`
 AC_DEFINE_UNQUOTED(HAVE_GNU_INDIRECT_FUNCTION, $gif,
--
2.34.1

Reply via email to