257 lines
9 KiB
Diff
257 lines
9 KiB
Diff
|
From 7b50823d8a4131e5a55d2499a0f5a52b3d91eed2 Mon Sep 17 00:00:00 2001
|
||
|
From: Drew DeVault <sir@cmpwn.com>
|
||
|
Date: Wed, 9 Dec 2020 07:42:06 +0000
|
||
|
Subject: [PATCH 27/35] configure: Add --enable-autolink-libatomic, use in
|
||
|
LINK_GCC_C_SEQUENCE_SPEC [PR81358]
|
||
|
|
||
|
This fixes issues with RISC-V.
|
||
|
---
|
||
|
Makefile.in | 1 +
|
||
|
gcc/config.in | 6 ++++++
|
||
|
gcc/config/gnu-user.h | 12 +++++++++++-
|
||
|
gcc/configure | 31 ++++++++++++++++++++++++++++++-
|
||
|
gcc/configure.ac | 21 +++++++++++++++++++++
|
||
|
gcc/doc/install.texi | 8 ++++++++
|
||
|
gcc/doc/tm.texi | 8 +++++++-
|
||
|
gcc/doc/tm.texi.in | 8 +++++++-
|
||
|
gcc/gcc.cc | 12 +++++++++++-
|
||
|
9 files changed, 102 insertions(+), 5 deletions(-)
|
||
|
|
||
|
diff --git a/Makefile.in b/Makefile.in
|
||
|
index 6ff2b3f9925..394b105b271 100644
|
||
|
--- a/Makefile.in
|
||
|
+++ b/Makefile.in
|
||
|
@@ -235,6 +235,7 @@ HOST_EXPORTS = \
|
||
|
RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)"; export RANLIB_FOR_TARGET; \
|
||
|
READELF_FOR_TARGET="$(READELF_FOR_TARGET)"; export READELF_FOR_TARGET; \
|
||
|
TOPLEVEL_CONFIGURE_ARGUMENTS="$(TOPLEVEL_CONFIGURE_ARGUMENTS)"; export TOPLEVEL_CONFIGURE_ARGUMENTS; \
|
||
|
+ TARGET_CONFIGDIRS="$(TARGET_CONFIGDIRS)"; export TARGET_CONFIGDIRS; \
|
||
|
HOST_LIBS="$(STAGE1_LIBS)"; export HOST_LIBS; \
|
||
|
GMPLIBS="$(HOST_GMPLIBS)"; export GMPLIBS; \
|
||
|
GMPINC="$(HOST_GMPINC)"; export GMPINC; \
|
||
|
diff --git a/gcc/config.in b/gcc/config.in
|
||
|
index 0679fbbf4c6..ee81139b385 100644
|
||
|
--- a/gcc/config.in
|
||
|
+++ b/gcc/config.in
|
||
|
@@ -118,6 +118,12 @@
|
||
|
#endif
|
||
|
|
||
|
|
||
|
+/* Define if libatomic should always be linked. */
|
||
|
+#ifndef USED_FOR_TARGET
|
||
|
+#undef ENABLE_AUTOLINK_LIBATOMIC
|
||
|
+#endif
|
||
|
+
|
||
|
+
|
||
|
/* Define to 1 to specify that we are using the BID decimal floating point
|
||
|
format instead of DPD */
|
||
|
#ifndef USED_FOR_TARGET
|
||
|
diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h
|
||
|
index b26b17f2f2a..3f64ea46180 100644
|
||
|
--- a/gcc/config/gnu-user.h
|
||
|
+++ b/gcc/config/gnu-user.h
|
||
|
@@ -109,8 +109,18 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||
|
#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
|
||
|
#endif
|
||
|
|
||
|
+#if !defined(LINK_LIBATOMIC_SPEC) && defined(ENABLE_AUTOLINK_LIBATOMIC)
|
||
|
+# ifdef LD_AS_NEEDED_OPTION
|
||
|
+# define LINK_LIBATOMIC_SPEC LD_AS_NEEDED_OPTION " -latomic " LD_NO_AS_NEEDED_OPTION
|
||
|
+# else
|
||
|
+# define LINK_LIBATOMIC_SPEC "-latomic"
|
||
|
+# endif
|
||
|
+#elif !defined(LINK_LIBATOMIC_SPEC)
|
||
|
+# define LINK_LIBATOMIC_SPEC ""
|
||
|
+#endif
|
||
|
+
|
||
|
#define GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC \
|
||
|
- "%{static|static-pie:--start-group} %G %{!nolibc:%L} \
|
||
|
+ "%{static|static-pie:--start-group} %G %{!nolibc:" LINK_LIBATOMIC_SPEC " %L} \
|
||
|
%{static|static-pie:--end-group}%{!static:%{!static-pie:%G}}"
|
||
|
|
||
|
#undef LINK_GCC_C_SEQUENCE_SPEC
|
||
|
diff --git a/gcc/configure b/gcc/configure
|
||
|
index e59cbee1767..787c35d4e25 100755
|
||
|
--- a/gcc/configure
|
||
|
+++ b/gcc/configure
|
||
|
@@ -984,6 +984,7 @@ with_changes_root_url
|
||
|
enable_languages
|
||
|
with_multilib_list
|
||
|
with_multilib_generator
|
||
|
+enable_autolink_libatomic
|
||
|
with_zstd
|
||
|
with_zstd_include
|
||
|
with_zstd_lib
|
||
|
@@ -1713,6 +1714,9 @@ Optional Features:
|
||
|
--disable-shared don't provide a shared libgcc
|
||
|
--disable-gcov don't provide libgcov and related host tools
|
||
|
--enable-languages=LIST specify which front-ends to build
|
||
|
+ --enable-autolink-libatomic
|
||
|
+ enable automatic linking of libatomic (ignored if
|
||
|
+ not built)
|
||
|
--disable-rpath do not hardcode runtime library paths
|
||
|
--enable-sjlj-exceptions
|
||
|
arrange to use setjmp/longjmp exception handling
|
||
|
@@ -8329,7 +8333,6 @@ else
|
||
|
fi
|
||
|
|
||
|
|
||
|
-
|
||
|
# Check whether --with-multilib-generator was given.
|
||
|
if test "${with_multilib_generator+set}" = set; then :
|
||
|
withval=$with_multilib_generator; :
|
||
|
@@ -8337,6 +8340,32 @@ else
|
||
|
with_multilib_generator=default
|
||
|
fi
|
||
|
|
||
|
+# If libatomic is available, whether it should be linked automatically
|
||
|
+# Check whether --enable-autolink-libatomic was given.
|
||
|
+if test "${enable_autolink_libatomic+set}" = set; then :
|
||
|
+ enableval=$enable_autolink_libatomic;
|
||
|
+ case $enable_autolink_libatomic in
|
||
|
+ yes | no) ;;
|
||
|
+ *) as_fn_error $? "'$enable_autolink_libatomic' is an invalid value for
|
||
|
+--enable-autolink-libatomic. Valid choices are 'yes' and 'no'." "$LINENO" 5 ;;
|
||
|
+ esac
|
||
|
+
|
||
|
+else
|
||
|
+ enable_autolink_libatomic=''
|
||
|
+fi
|
||
|
+
|
||
|
+
|
||
|
+if test x$enable_autolink_libatomic = xyes; then
|
||
|
+ if echo " ${TARGET_CONFIGDIRS} " | grep " libatomic " > /dev/null 2>&1 ; then
|
||
|
+
|
||
|
+$as_echo "#define ENABLE_AUTOLINK_LIBATOMIC 1" >>confdefs.h
|
||
|
+
|
||
|
+ else
|
||
|
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libatomic is not build for this target, --enable-autolink-libatomic ignored" >&5
|
||
|
+$as_echo "$as_me: WARNING: libatomic is not build for this target, --enable-autolink-libatomic ignored" >&2;}
|
||
|
+ fi
|
||
|
+fi
|
||
|
+
|
||
|
|
||
|
# -------------------------
|
||
|
# Checks for other programs
|
||
|
diff --git a/gcc/configure.ac b/gcc/configure.ac
|
||
|
index 57268319de1..56bcaa87620 100644
|
||
|
--- a/gcc/configure.ac
|
||
|
+++ b/gcc/configure.ac
|
||
|
@@ -1199,6 +1199,27 @@ AC_ARG_WITH(multilib-generator,
|
||
|
:,
|
||
|
with_multilib_generator=default)
|
||
|
|
||
|
+# If libatomic is available, whether it should be linked automatically
|
||
|
+AC_ARG_ENABLE(autolink-libatomic,
|
||
|
+[AS_HELP_STRING([--enable-autolink-libatomic],
|
||
|
+ [enable automatic linking of libatomic (ignored if not built)])],
|
||
|
+[
|
||
|
+ case $enable_autolink_libatomic in
|
||
|
+ yes | no) ;;
|
||
|
+ *) AC_MSG_ERROR(['$enable_autolink_libatomic' is an invalid value for
|
||
|
+--enable-autolink-libatomic. Valid choices are 'yes' and 'no'.]) ;;
|
||
|
+ esac
|
||
|
+], [enable_autolink_libatomic=''])
|
||
|
+
|
||
|
+if test x$enable_autolink_libatomic = xyes; then
|
||
|
+ if echo " ${TARGET_CONFIGDIRS} " | grep " libatomic " > /dev/null 2>&1 ; then
|
||
|
+ AC_DEFINE(ENABLE_AUTOLINK_LIBATOMIC, 1,
|
||
|
+ [Define if libatomic should always be linked.])
|
||
|
+ else
|
||
|
+ AC_MSG_WARN([libatomic is not build for this target, --enable-autolink-libatomic ignored])
|
||
|
+ fi
|
||
|
+fi
|
||
|
+
|
||
|
# -------------------------
|
||
|
# Checks for other programs
|
||
|
# -------------------------
|
||
|
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
|
||
|
index b30d3691fe6..ccc8e5dbb00 100644
|
||
|
--- a/gcc/doc/install.texi
|
||
|
+++ b/gcc/doc/install.texi
|
||
|
@@ -2377,6 +2377,14 @@ files, but these changed header paths may conflict with some compilation
|
||
|
environments. Enabled by default, and may be disabled using
|
||
|
@option{--disable-canonical-system-headers}.
|
||
|
|
||
|
+@item --enable-autolink-libatomic
|
||
|
+@itemx --disable-autolink-libatomic
|
||
|
+Tell GCC that it should automatically link libatomic; if supported by
|
||
|
+the linker, the file is only linked as needed. This flag is ignored
|
||
|
+when libatomic is not built. Note that this conigure flag is in particular
|
||
|
+useful when building an offloading-target compiler; as for those, a
|
||
|
+user had to specify @code{-foffload=target=-latomic} otherwise.
|
||
|
+
|
||
|
@item --with-glibc-version=@var{major}.@var{minor}
|
||
|
Tell GCC that when the GNU C Library (glibc) is used on the target it
|
||
|
will be version @var{major}.@var{minor} or later. Normally this can
|
||
|
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
|
||
|
index a660e33739b..6183c407a2b 100644
|
||
|
--- a/gcc/doc/tm.texi
|
||
|
+++ b/gcc/doc/tm.texi
|
||
|
@@ -381,7 +381,13 @@ the argument @option{-lgcc} to tell the linker to do the search.
|
||
|
|
||
|
@defmac LINK_GCC_C_SEQUENCE_SPEC
|
||
|
The sequence in which libgcc and libc are specified to the linker.
|
||
|
-By default this is @code{%G %L %G}.
|
||
|
+By default this is @code{%G LINK_LIBATOMIC_SPEC %L %G}.
|
||
|
+@end defmac
|
||
|
+
|
||
|
+@defmac LINK_LIBATOMIC_SPEC
|
||
|
+This macro is used in the default @code{LINK_GCC_C_SEQUENCE_SPEC} to link
|
||
|
+libatomic. By default, it is unset unless @code{ENABLE_AUTOLINK_LIBATOMIC}
|
||
|
+is set.
|
||
|
@end defmac
|
||
|
|
||
|
@defmac POST_LINK_SPEC
|
||
|
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
|
||
|
index f7ab5d48a63..281540aba68 100644
|
||
|
--- a/gcc/doc/tm.texi.in
|
||
|
+++ b/gcc/doc/tm.texi.in
|
||
|
@@ -381,7 +381,13 @@ the argument @option{-lgcc} to tell the linker to do the search.
|
||
|
|
||
|
@defmac LINK_GCC_C_SEQUENCE_SPEC
|
||
|
The sequence in which libgcc and libc are specified to the linker.
|
||
|
-By default this is @code{%G %L %G}.
|
||
|
+By default this is @code{%G LINK_LIBATOMIC_SPEC %L %G}.
|
||
|
+@end defmac
|
||
|
+
|
||
|
+@defmac LINK_LIBATOMIC_SPEC
|
||
|
+This macro is used in the default @code{LINK_GCC_C_SEQUENCE_SPEC} to link
|
||
|
+libatomic. By default, it is unset unless @code{ENABLE_AUTOLINK_LIBATOMIC}
|
||
|
+is set.
|
||
|
@end defmac
|
||
|
|
||
|
@defmac POST_LINK_SPEC
|
||
|
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
|
||
|
index 59390fd39d6..dae1dd4cf79 100644
|
||
|
--- a/gcc/gcc.cc
|
||
|
+++ b/gcc/gcc.cc
|
||
|
@@ -974,13 +974,23 @@ proper position among the other output files. */
|
||
|
# define ASM_DEBUG_OPTION_SPEC ""
|
||
|
#endif
|
||
|
|
||
|
+#if !defined(LINK_LIBATOMIC_SPEC) && defined(ENABLE_AUTOLINK_LIBATOMIC)
|
||
|
+# ifdef LD_AS_NEEDED_OPTION
|
||
|
+# define LINK_LIBATOMIC_SPEC LD_AS_NEEDED_OPTION " -latomic " LD_NO_AS_NEEDED_OPTION
|
||
|
+# else
|
||
|
+# define LINK_LIBATOMIC_SPEC "-latomic"
|
||
|
+# endif
|
||
|
+#elif !defined(LINK_LIBATOMIC_SPEC)
|
||
|
+# define LINK_LIBATOMIC_SPEC ""
|
||
|
+#endif
|
||
|
+
|
||
|
/* Here is the spec for running the linker, after compiling all files. */
|
||
|
|
||
|
/* This is overridable by the target in case they need to specify the
|
||
|
-lgcc and -lc order specially, yet not require them to override all
|
||
|
of LINK_COMMAND_SPEC. */
|
||
|
#ifndef LINK_GCC_C_SEQUENCE_SPEC
|
||
|
-#define LINK_GCC_C_SEQUENCE_SPEC "%G %{!nolibc:%L %G}"
|
||
|
+#define LINK_GCC_C_SEQUENCE_SPEC "%G %{!nolibc:" LINK_LIBATOMIC_SPEC " %L %G}"
|
||
|
#endif
|
||
|
|
||
|
#ifdef ENABLE_DEFAULT_SSP
|
||
|
--
|
||
|
2.41.0
|
||
|
|