aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNelson Chu <nelson.chu@sifive.com>2020-11-10 19:33:38 -0800
committerJim Wilson <jimw@sifive.com>2020-11-12 13:47:16 -0800
commit97976c0757ad3173ac00d1e32e335f3f960b0b9f (patch)
tree7829c7ae7ed64fbc246da5cb20fe4f768ab56394
parent1d00f8c86324c40ab2ba7933366d380e32c0a94a (diff)
downloadgcc-97976c0757ad3173ac00d1e32e335f3f960b0b9f.zip
gcc-97976c0757ad3173ac00d1e32e335f3f960b0b9f.tar.gz
gcc-97976c0757ad3173ac00d1e32e335f3f960b0b9f.tar.bz2
RISC-V: Enable ifunc if it was supported in the binutils for linux toolchain.
gcc/ * configure: Regenerated. * configure.ac: If ifunc was supported in the binutils for linux toolchain, then set enable_gnu_indirect_function to yes.
-rwxr-xr-xgcc/configure37
-rw-r--r--gcc/configure.ac35
2 files changed, 72 insertions, 0 deletions
diff --git a/gcc/configure b/gcc/configure
index 9d2fd0d..dbda441 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -23407,6 +23407,43 @@ else
fi
+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
+$as_echo "$enable_gnu_indirect_function" >&6; }
+ ;;
+esac
+
gif=`if test x$enable_gnu_indirect_function = xyes; then echo 1; else echo 0; fi`
cat >>confdefs.h <<_ACEOF
diff --git a/gcc/configure.ac b/gcc/configure.ac
index 73034bb..08f3034 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -2807,6 +2807,41 @@ 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
+
gif=`if test x$enable_gnu_indirect_function = xyes; then echo 1; else echo 0; fi`
AC_DEFINE_UNQUOTED(HAVE_GNU_INDIRECT_FUNCTION, $gif,
[Define if your system supports gnu indirect functions.])