diff options
author | Nelson Chu <nelson.chu@sifive.com> | 2020-11-10 19:33:38 -0800 |
---|---|---|
committer | Jim Wilson <jimw@sifive.com> | 2020-11-12 13:47:16 -0800 |
commit | 97976c0757ad3173ac00d1e32e335f3f960b0b9f (patch) | |
tree | 7829c7ae7ed64fbc246da5cb20fe4f768ab56394 | |
parent | 1d00f8c86324c40ab2ba7933366d380e32c0a94a (diff) | |
download | gcc-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-x | gcc/configure | 37 | ||||
-rw-r--r-- | gcc/configure.ac | 35 |
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.]) |