import gcc-11.2.1-9.4.el9
This commit is contained in:
parent
c00c1735bd
commit
8fe3b7422f
@ -1,4 +1,4 @@
|
|||||||
2e5c6969d43215a06ef6f85e547291cd58bcbbeb SOURCES/gcc-11.2.1-20211203.tar.xz
|
54f8e112180f2cad6cf9459aab4681c7f157aca9 SOURCES/gcc-11.2.1-20220127.tar.xz
|
||||||
bbffc5a2b05e4f0c97e882f96c448504491dc4ed SOURCES/isl-0.18.tar.bz2
|
bbffc5a2b05e4f0c97e882f96c448504491dc4ed SOURCES/isl-0.18.tar.bz2
|
||||||
6ec33952e824e837fef0e829c93d39d6a507082f SOURCES/newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz
|
6ec33952e824e837fef0e829c93d39d6a507082f SOURCES/newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz
|
||||||
0e0c6f8d68ab0878f02287ac082c1077c831cd81 SOURCES/nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz
|
0e0c6f8d68ab0878f02287ac082c1077c831cd81 SOURCES/nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz
|
||||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,4 +1,4 @@
|
|||||||
SOURCES/gcc-11.2.1-20211203.tar.xz
|
SOURCES/gcc-11.2.1-20220127.tar.xz
|
||||||
SOURCES/isl-0.18.tar.bz2
|
SOURCES/isl-0.18.tar.bz2
|
||||||
SOURCES/newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz
|
SOURCES/newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz
|
||||||
SOURCES/nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz
|
SOURCES/nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz
|
||||||
|
333
SOURCES/gcc11-bind-now.patch
Normal file
333
SOURCES/gcc11-bind-now.patch
Normal file
@ -0,0 +1,333 @@
|
|||||||
|
From 36362544fb039599c0eb58d839e90ffb5410ad27 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Marek Polacek <polacek@redhat.com>
|
||||||
|
Date: Wed, 9 Feb 2022 15:18:43 -0500
|
||||||
|
Subject: [PATCH] configure: Implement --enable-host-bind-now
|
||||||
|
|
||||||
|
As promised in the --enable-host-pie patch, this patch adds another
|
||||||
|
configure option, --enable-host-bind-now, which adds -z now when linking
|
||||||
|
the compiler executables in order to extend hardening. BIND_NOW with RELRO
|
||||||
|
allows the GOT to be marked RO; this prevents GOT modification attacks.
|
||||||
|
|
||||||
|
This option does not affect linking of target libraries; you can use
|
||||||
|
LDFLAGS_FOR_TARGET=-Wl,-z,relro,-z,now to enable RELRO/BIND_NOW.
|
||||||
|
|
||||||
|
Bootstrapped/regtested on x86_64-pc-linux-gnu (with the option enabled vs
|
||||||
|
not enabled). I suppose this is GCC 13 material, but maybe I'll get some
|
||||||
|
comments anyway.
|
||||||
|
|
||||||
|
c++tools/ChangeLog:
|
||||||
|
|
||||||
|
* configure.ac (--enable-host-bind-now): New check.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
gcc/ChangeLog:
|
||||||
|
|
||||||
|
* configure.ac (--enable-host-bind-now): New check. Add
|
||||||
|
-Wl,-z,now to LD_PICFLAG if --enable-host-bind-now.
|
||||||
|
* configure: Regenerate.
|
||||||
|
* doc/install.texi: Document --enable-host-bind-now.
|
||||||
|
|
||||||
|
lto-plugin/ChangeLog:
|
||||||
|
|
||||||
|
* configure.ac (--enable-host-bind-now): New check. Link with
|
||||||
|
-z,now.
|
||||||
|
* configure: Regenerate.
|
||||||
|
---
|
||||||
|
c++tools/configure | 11 +++++++++++
|
||||||
|
c++tools/configure.ac | 7 +++++++
|
||||||
|
gcc/configure | 20 ++++++++++++++++++--
|
||||||
|
gcc/configure.ac | 13 ++++++++++++-
|
||||||
|
gcc/doc/install.texi | 6 ++++++
|
||||||
|
lto-plugin/configure | 20 ++++++++++++++++++--
|
||||||
|
lto-plugin/configure.ac | 11 +++++++++++
|
||||||
|
7 files changed, 83 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/c++tools/configure b/c++tools/configure
|
||||||
|
index c1aceb8404a..25432b5040d 100755
|
||||||
|
--- a/c++tools/configure
|
||||||
|
+++ b/c++tools/configure
|
||||||
|
@@ -631,6 +631,7 @@ ac_ct_CC
|
||||||
|
CFLAGS
|
||||||
|
CC
|
||||||
|
LD_PICFLAG
|
||||||
|
+enable_host_bind_now
|
||||||
|
PICFLAG
|
||||||
|
MAINTAINER
|
||||||
|
CXX_AUX_TOOLS
|
||||||
|
@@ -704,6 +705,7 @@ enable_c___tools
|
||||||
|
enable_maintainer_mode
|
||||||
|
enable_default_pie
|
||||||
|
enable_host_pie
|
||||||
|
+enable_host_bind_now
|
||||||
|
with_gcc_major_version_only
|
||||||
|
'
|
||||||
|
ac_precious_vars='build_alias
|
||||||
|
@@ -1336,6 +1338,7 @@ Optional Features:
|
||||||
|
configurey bits
|
||||||
|
--enable-default-pie enable Position Independent Executable as default
|
||||||
|
--enable-host-pie build host code as PIE
|
||||||
|
+ --enable-host-bind-now link host code as BIND_NOW
|
||||||
|
|
||||||
|
Optional Packages:
|
||||||
|
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
|
||||||
|
@@ -3009,6 +3012,14 @@ fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
+# Enable --enable-host-bind-now
|
||||||
|
+# Check whether --enable-host-bind-now was given.
|
||||||
|
+if test "${enable_host_bind_now+set}" = set; then :
|
||||||
|
+ enableval=$enable_host_bind_now; LD_PICFLAG="$LD_PICFLAG -Wl,-z,now"
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
|
||||||
|
# Check if O_CLOEXEC is defined by fcntl
|
||||||
|
ac_ext=c
|
||||||
|
diff --git a/c++tools/configure.ac b/c++tools/configure.ac
|
||||||
|
index 1e42689f2eb..d3f23f66f00 100644
|
||||||
|
--- a/c++tools/configure.ac
|
||||||
|
+++ b/c++tools/configure.ac
|
||||||
|
@@ -110,6 +110,13 @@ AC_ARG_ENABLE(host-pie,
|
||||||
|
[build host code as PIE])],
|
||||||
|
[PICFLAG=-fPIE; LD_PICFLAG=-pie], [])
|
||||||
|
AC_SUBST(PICFLAG)
|
||||||
|
+
|
||||||
|
+# Enable --enable-host-bind-now
|
||||||
|
+AC_ARG_ENABLE(host-bind-now,
|
||||||
|
+[AS_HELP_STRING([--enable-host-bind-now],
|
||||||
|
+ [link host code as BIND_NOW])],
|
||||||
|
+[LD_PICFLAG="$LD_PICFLAG -Wl,-z,now"], [])
|
||||||
|
+AC_SUBST(enable_host_bind_now)
|
||||||
|
AC_SUBST(LD_PICFLAG)
|
||||||
|
|
||||||
|
# Check if O_CLOEXEC is defined by fcntl
|
||||||
|
diff --git a/gcc/configure b/gcc/configure
|
||||||
|
index 2ded5d4c50b..5671dc7dcf4 100755
|
||||||
|
--- a/gcc/configure
|
||||||
|
+++ b/gcc/configure
|
||||||
|
@@ -635,6 +635,7 @@ CET_HOST_FLAGS
|
||||||
|
LD_PICFLAG
|
||||||
|
PICFLAG
|
||||||
|
enable_default_pie
|
||||||
|
+enable_host_bind_now
|
||||||
|
enable_host_pie
|
||||||
|
enable_host_shared
|
||||||
|
enable_plugin
|
||||||
|
@@ -1023,6 +1024,7 @@ enable_version_specific_runtime_libs
|
||||||
|
enable_plugin
|
||||||
|
enable_host_shared
|
||||||
|
enable_host_pie
|
||||||
|
+enable_host_bind_now
|
||||||
|
enable_libquadmath_support
|
||||||
|
with_linker_hash_style
|
||||||
|
with_diagnostics_color
|
||||||
|
@@ -1786,6 +1788,7 @@ Optional Features:
|
||||||
|
--enable-plugin enable plugin support
|
||||||
|
--enable-host-shared build host code as shared libraries
|
||||||
|
--enable-host-pie build host code as PIE
|
||||||
|
+ --enable-host-bind-now link host code as BIND_NOW
|
||||||
|
--disable-libquadmath-support
|
||||||
|
disable libquadmath support for Fortran
|
||||||
|
--enable-default-pie enable Position Independent Executable as default
|
||||||
|
@@ -19394,7 +19397,7 @@ else
|
||||||
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
|
lt_status=$lt_dlunknown
|
||||||
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
|
-#line 19409 "configure"
|
||||||
|
+#line 19412 "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
|
||||||
|
#if HAVE_DLFCN_H
|
||||||
|
@@ -19500,7 +19503,7 @@ else
|
||||||
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
|
lt_status=$lt_dlunknown
|
||||||
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
|
-#line 19515 "configure"
|
||||||
|
+#line 19518 "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
|
||||||
|
#if HAVE_DLFCN_H
|
||||||
|
@@ -32109,6 +32112,14 @@ fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
+# Enable --enable-host-bind-now
|
||||||
|
+# Check whether --enable-host-bind-now was given.
|
||||||
|
+if test "${enable_host_bind_now+set}" = set; then :
|
||||||
|
+ enableval=$enable_host_bind_now;
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
# Check whether --enable-libquadmath-support was given.
|
||||||
|
if test "${enable_libquadmath_support+set}" = set; then :
|
||||||
|
enableval=$enable_libquadmath_support; ENABLE_LIBQUADMATH_SUPPORT=$enableval
|
||||||
|
@@ -32295,6 +32306,8 @@ else
|
||||||
|
PICFLAG=
|
||||||
|
fi
|
||||||
|
|
||||||
|
+
|
||||||
|
+
|
||||||
|
if test x$enable_host_pie = xyes; then
|
||||||
|
LD_PICFLAG=-pie
|
||||||
|
elif test x$gcc_cv_no_pie = xyes; then
|
||||||
|
@@ -32303,6 +32316,9 @@ else
|
||||||
|
LD_PICFLAG=
|
||||||
|
fi
|
||||||
|
|
||||||
|
+if test x$enable_host_bind_now = xyes; then
|
||||||
|
+ LD_PICFLAG="$LD_PICFLAG -Wl,-z,now"
|
||||||
|
+fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/gcc/configure.ac b/gcc/configure.ac
|
||||||
|
index dca995aeec7..6017bcbc8c6 100644
|
||||||
|
--- a/gcc/configure.ac
|
||||||
|
+++ b/gcc/configure.ac
|
||||||
|
@@ -7497,6 +7497,12 @@ AC_ARG_ENABLE(host-pie,
|
||||||
|
[build host code as PIE])])
|
||||||
|
AC_SUBST(enable_host_pie)
|
||||||
|
|
||||||
|
+# Enable --enable-host-bind-now
|
||||||
|
+AC_ARG_ENABLE(host-bind-now,
|
||||||
|
+[AS_HELP_STRING([--enable-host-bind-now],
|
||||||
|
+ [link host code as BIND_NOW])])
|
||||||
|
+AC_SUBST(enable_host_bind_now)
|
||||||
|
+
|
||||||
|
AC_ARG_ENABLE(libquadmath-support,
|
||||||
|
[AS_HELP_STRING([--disable-libquadmath-support],
|
||||||
|
[disable libquadmath support for Fortran])],
|
||||||
|
@@ -7638,6 +7644,8 @@ else
|
||||||
|
PICFLAG=
|
||||||
|
fi
|
||||||
|
|
||||||
|
+AC_SUBST([PICFLAG])
|
||||||
|
+
|
||||||
|
if test x$enable_host_pie = xyes; then
|
||||||
|
LD_PICFLAG=-pie
|
||||||
|
elif test x$gcc_cv_no_pie = xyes; then
|
||||||
|
@@ -7646,7 +7654,10 @@ else
|
||||||
|
LD_PICFLAG=
|
||||||
|
fi
|
||||||
|
|
||||||
|
-AC_SUBST([PICFLAG])
|
||||||
|
+if test x$enable_host_bind_now = xyes; then
|
||||||
|
+ LD_PICFLAG="$LD_PICFLAG -Wl,-z,now"
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
AC_SUBST([LD_PICFLAG])
|
||||||
|
|
||||||
|
# Enable Intel CET on Intel CET enabled host if jit is enabled.
|
||||||
|
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
|
||||||
|
index 9747f832a75..b59af198d3e 100644
|
||||||
|
--- a/gcc/doc/install.texi
|
||||||
|
+++ b/gcc/doc/install.texi
|
||||||
|
@@ -1041,6 +1041,12 @@ protection against Return Oriented Programming (ROP) attacks.
|
||||||
|
in which case @option{-fPIC} is used when compiling, and @option{-pie} when
|
||||||
|
linking.
|
||||||
|
|
||||||
|
+@item --enable-host-bind-now
|
||||||
|
+Specify that the @emph{host} executables should be linked with the option
|
||||||
|
+@option{-Wl,-z,now}, which means that the dynamic linker will resolve all
|
||||||
|
+symbols when the executables are started, and that in turn allows RELRO to
|
||||||
|
+mark the GOT read-only, resulting in better security.
|
||||||
|
+
|
||||||
|
@item @anchor{with-gnu-as}--with-gnu-as
|
||||||
|
Specify that the compiler should assume that the
|
||||||
|
assembler it finds is the GNU assembler. However, this does not modify
|
||||||
|
diff --git a/lto-plugin/configure b/lto-plugin/configure
|
||||||
|
index baa84adbb6c..669ccaede52 100755
|
||||||
|
--- a/lto-plugin/configure
|
||||||
|
+++ b/lto-plugin/configure
|
||||||
|
@@ -656,6 +656,7 @@ accel_dir_suffix
|
||||||
|
gcc_build_dir
|
||||||
|
CET_HOST_FLAGS
|
||||||
|
ac_lto_plugin_ldflags
|
||||||
|
+enable_host_bind_now
|
||||||
|
ac_lto_plugin_warn_cflags
|
||||||
|
EGREP
|
||||||
|
GREP
|
||||||
|
@@ -771,6 +772,7 @@ enable_maintainer_mode
|
||||||
|
with_libiberty
|
||||||
|
enable_dependency_tracking
|
||||||
|
enable_largefile
|
||||||
|
+enable_host_bind_now
|
||||||
|
enable_cet
|
||||||
|
with_gcc_major_version_only
|
||||||
|
enable_shared
|
||||||
|
@@ -1418,6 +1420,7 @@ Optional Features:
|
||||||
|
--disable-dependency-tracking
|
||||||
|
speeds up one-time build
|
||||||
|
--disable-largefile omit support for large files
|
||||||
|
+ --enable-host-bind-now link host code as BIND_NOW
|
||||||
|
--enable-cet enable Intel CET in host libraries [default=auto]
|
||||||
|
--enable-shared[=PKGS] build shared libraries [default=yes]
|
||||||
|
--enable-static[=PKGS] build static libraries [default=yes]
|
||||||
|
@@ -5662,6 +5665,19 @@ if test "x$have_static_libgcc" = xyes; then
|
||||||
|
ac_lto_plugin_ldflags="-Wc,-static-libgcc"
|
||||||
|
fi
|
||||||
|
|
||||||
|
+# Enable --enable-host-bind-now
|
||||||
|
+# Check whether --enable-host-bind-now was given.
|
||||||
|
+if test "${enable_host_bind_now+set}" = set; then :
|
||||||
|
+ enableval=$enable_host_bind_now;
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+if test x$enable_host_bind_now = xyes; then
|
||||||
|
+ ac_lto_plugin_ldflags="$ac_lto_plugin_ldflags -Wl,-z,now"
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+
|
||||||
|
|
||||||
|
# Check whether --enable-cet was given.
|
||||||
|
if test "${enable_cet+set}" = set; then :
|
||||||
|
@@ -11950,7 +11968,7 @@ else
|
||||||
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
|
lt_status=$lt_dlunknown
|
||||||
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
|
-#line 11963 "configure"
|
||||||
|
+#line 11983 "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
|
||||||
|
#if HAVE_DLFCN_H
|
||||||
|
@@ -12056,7 +12074,7 @@ else
|
||||||
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
|
lt_status=$lt_dlunknown
|
||||||
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
|
-#line 12069 "configure"
|
||||||
|
+#line 12089 "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
|
||||||
|
#if HAVE_DLFCN_H
|
||||||
|
diff --git a/lto-plugin/configure.ac b/lto-plugin/configure.ac
|
||||||
|
index 7e6f729e9dc..5d5fea8fe70 100644
|
||||||
|
--- a/lto-plugin/configure.ac
|
||||||
|
+++ b/lto-plugin/configure.ac
|
||||||
|
@@ -25,6 +25,17 @@ LDFLAGS="$saved_LDFLAGS"
|
||||||
|
if test "x$have_static_libgcc" = xyes; then
|
||||||
|
ac_lto_plugin_ldflags="-Wc,-static-libgcc"
|
||||||
|
fi
|
||||||
|
+
|
||||||
|
+# Enable --enable-host-bind-now
|
||||||
|
+AC_ARG_ENABLE(host-bind-now,
|
||||||
|
+[AS_HELP_STRING([--enable-host-bind-now],
|
||||||
|
+ [link host code as BIND_NOW])])
|
||||||
|
+AC_SUBST(enable_host_bind_now)
|
||||||
|
+
|
||||||
|
+if test x$enable_host_bind_now = xyes; then
|
||||||
|
+ ac_lto_plugin_ldflags="$ac_lto_plugin_ldflags -Wl,-z,now"
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
AC_SUBST(ac_lto_plugin_ldflags)
|
||||||
|
|
||||||
|
GCC_CET_HOST_FLAGS(CET_HOST_FLAGS)
|
||||||
|
|
||||||
|
base-commit: bf799d3409cb9a189114a6c9ff5b7cd123915764
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
32
SOURCES/gcc11-dejagnu-multiline.patch
Normal file
32
SOURCES/gcc11-dejagnu-multiline.patch
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
commit 14c7757e9b751781360737f53b71f851fc356d3d
|
||||||
|
Author: Jeff Law <jeffreyalaw@gmail.com>
|
||||||
|
Date: Fri Oct 29 11:30:15 2021 -0400
|
||||||
|
|
||||||
|
Avoid overly-greedy match in dejagnu regexp.
|
||||||
|
|
||||||
|
Occasionally I've been seeing failures with the multi-line diagnostics. It's never been clear what's causing the spurious failures, though I have long suspected a greedy regexp match.
|
||||||
|
|
||||||
|
It happened again yesterday with a local change that in no way should affect diagnostics, so I finally went searching and found that sure enough the multi-line diagnostics had a ".*" in their regexp. According to the comments, the .* is primarily to catch any dg directives that may appear -- ie it should eat to EOL, but not multiple lines. But a .* can indeed match a newline and cause it to eat multiple lines.
|
||||||
|
|
||||||
|
The fix is simple. [^\r\n]* will eat to EOL, but not further.
|
||||||
|
|
||||||
|
Regression tested on x86_64 and on our internal target.
|
||||||
|
|
||||||
|
gcc/testsuite
|
||||||
|
|
||||||
|
* lib/multiline.exp (_build_multiline_regex): Use a better
|
||||||
|
regexp than .* to match up to EOL.
|
||||||
|
|
||||||
|
diff --git a/gcc/testsuite/lib/multiline.exp b/gcc/testsuite/lib/multiline.exp
|
||||||
|
index 0e151b6d222..86387f8209b 100644
|
||||||
|
--- a/gcc/testsuite/lib/multiline.exp
|
||||||
|
+++ b/gcc/testsuite/lib/multiline.exp
|
||||||
|
@@ -331,7 +331,7 @@ proc _build_multiline_regex { multiline index } {
|
||||||
|
# Support arbitrary followup text on each non-empty line,
|
||||||
|
# to deal with comments containing containing DejaGnu
|
||||||
|
# directives.
|
||||||
|
- append rexp ".*"
|
||||||
|
+ append rexp "\[^\\n\\r\]*"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
append rexp "\n"
|
54
SOURCES/gcc11-libsanitizer-pthread.patch
Normal file
54
SOURCES/gcc11-libsanitizer-pthread.patch
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
Backported from LLVM upstream:
|
||||||
|
|
||||||
|
commit ef14b78d9a144ba81ba02083fe21eb286a88732b
|
||||||
|
Author: Florian Weimer <fweimer@redhat.com>
|
||||||
|
Date: Tue Feb 8 12:46:41 2022 -0800
|
||||||
|
|
||||||
|
[sanitizer] Use _thread_db_sizeof_pthread to obtain struct pthread size
|
||||||
|
|
||||||
|
This symbol has been exported (as an internal GLIBC_PRIVATE symbol) from libc.so.6 starting with glibc 2.34. glibc uses it internally for its libthread_db implementation to enable thread debugging on GDB, so it is unlikely to go away for now.
|
||||||
|
|
||||||
|
Fixes #52989.
|
||||||
|
|
||||||
|
Reviewed By: #sanitizers, MaskRay, vitalybuka
|
||||||
|
|
||||||
|
Differential Revision: https://reviews.llvm.org/D119007
|
||||||
|
|
||||||
|
--- a/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp
|
||||||
|
+++ b/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp
|
||||||
|
@@ -265,10 +265,8 @@ void InitTlsSize() { }
|
||||||
|
// sizeof(struct pthread) from glibc.
|
||||||
|
static atomic_uintptr_t thread_descriptor_size;
|
||||||
|
|
||||||
|
-uptr ThreadDescriptorSize() {
|
||||||
|
- uptr val = atomic_load_relaxed(&thread_descriptor_size);
|
||||||
|
- if (val)
|
||||||
|
- return val;
|
||||||
|
+static uptr ThreadDescriptorSizeFallback() {
|
||||||
|
+ uptr val = 0;
|
||||||
|
#if defined(__x86_64__) || defined(__i386__) || defined(__arm__)
|
||||||
|
int major;
|
||||||
|
int minor;
|
||||||
|
@@ -323,8 +321,21 @@ uptr ThreadDescriptorSize() {
|
||||||
|
#elif defined(__s390__)
|
||||||
|
val = FIRST_32_SECOND_64(1152, 1776); // valid for glibc 2.22
|
||||||
|
#endif
|
||||||
|
+ return val;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+uptr ThreadDescriptorSize() {
|
||||||
|
+ uptr val = atomic_load_relaxed(&thread_descriptor_size);
|
||||||
|
if (val)
|
||||||
|
- atomic_store_relaxed(&thread_descriptor_size, val);
|
||||||
|
+ return val;
|
||||||
|
+ // _thread_db_sizeof_pthread is a GLIBC_PRIVATE symbol that is exported in
|
||||||
|
+ // glibc 2.34 and later.
|
||||||
|
+ if (unsigned *psizeof = static_cast<unsigned *>(
|
||||||
|
+ dlsym(RTLD_DEFAULT, "_thread_db_sizeof_pthread")))
|
||||||
|
+ val = *psizeof;
|
||||||
|
+ if (!val)
|
||||||
|
+ val = ThreadDescriptorSizeFallback();
|
||||||
|
+ atomic_store_relaxed(&thread_descriptor_size, val);
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
886
SOURCES/gcc11-pie.patch
Normal file
886
SOURCES/gcc11-pie.patch
Normal file
@ -0,0 +1,886 @@
|
|||||||
|
From 088d8e322811394203220663c3b9c925980d57a2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Marek Polacek <polacek@redhat.com>
|
||||||
|
Date: Tue, 1 Feb 2022 18:27:16 -0500
|
||||||
|
Subject: [PATCH] configure: Implement --enable-host-pie
|
||||||
|
|
||||||
|
This patch implements the --enable-host-pie configure option which
|
||||||
|
makes the compiler executables PIE. This can be used to enhance
|
||||||
|
protection against ROP attacks, and can be viewed as part of a wider
|
||||||
|
trend to harden binaries.
|
||||||
|
|
||||||
|
It is similar to the option --enable-host-shared, except that --e-h-s
|
||||||
|
won't add -shared to the linker flags whereas --e-h-p will add -pie.
|
||||||
|
It is different from --enable-default-pie because that option just
|
||||||
|
adds an implicit -fPIE/-pie when the compiler is invoked, but the
|
||||||
|
compiler itself isn't PIE.
|
||||||
|
|
||||||
|
Since r12-5768-gfe7c3ecf, PCH works well with PIE, so there are no PCH
|
||||||
|
regressions.
|
||||||
|
|
||||||
|
I plan to add an option to link with -Wl,-z,now.
|
||||||
|
|
||||||
|
c++tools/ChangeLog:
|
||||||
|
|
||||||
|
* Makefile.in: Rename PIEFLAG to PICFLAG. Set LD_PICFLAG. Use it.
|
||||||
|
Use pic/libiberty.a if PICFLAG is set.
|
||||||
|
* configure.ac (--enable-default-pie): Set PICFLAG instead of PIEFLAG.
|
||||||
|
(--enable-host-pie): New check.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
gcc/ChangeLog:
|
||||||
|
|
||||||
|
* Makefile.in: Set LD_PICFLAG. Use it. Set enable_host_pie.
|
||||||
|
Remove NO_PIE_CFLAGS and NO_PIE_FLAG. Pass LD_PICFLAG to
|
||||||
|
ALL_LINKERFLAGS. Use the "pic" build of libiberty if --enable-host-pie.
|
||||||
|
* configure.ac (--enable-host-shared): Don't set PICFLAG here.
|
||||||
|
(--enable-host-pie): New check. Set PICFLAG and LD_PICFLAG after this
|
||||||
|
check.
|
||||||
|
* configure: Regenerate.
|
||||||
|
* doc/install.texi: Document --enable-host-pie.
|
||||||
|
|
||||||
|
libcody/ChangeLog:
|
||||||
|
|
||||||
|
* Makefile.in: Pass LD_PICFLAG to LDFLAGS.
|
||||||
|
* configure.ac (--enable-host-shared): Don't set PICFLAG here.
|
||||||
|
(--enable-host-pie): New check. Set PICFLAG and LD_PICFLAG after this
|
||||||
|
check.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
libcpp/ChangeLog:
|
||||||
|
|
||||||
|
* configure.ac (--enable-host-shared): Don't set PICFLAG here.
|
||||||
|
(--enable-host-pie): New check. Set PICFLAG after this check.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
libdecnumber/ChangeLog:
|
||||||
|
|
||||||
|
* configure.ac (--enable-host-shared): Don't set PICFLAG here.
|
||||||
|
(--enable-host-pie): New check. Set PICFLAG after this check.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
|
zlib/ChangeLog:
|
||||||
|
|
||||||
|
* configure.ac (--enable-host-shared): Don't set PICFLAG here.
|
||||||
|
(--enable-host-pie): New check. Set PICFLAG after this check.
|
||||||
|
* configure: Regenerate.
|
||||||
|
---
|
||||||
|
c++tools/Makefile.in | 11 ++++++---
|
||||||
|
c++tools/configure | 17 +++++++++++---
|
||||||
|
c++tools/configure.ac | 11 +++++++--
|
||||||
|
gcc/Makefile.in | 29 ++++++++++++++----------
|
||||||
|
gcc/configure | 47 +++++++++++++++++++++++++++------------
|
||||||
|
gcc/configure.ac | 36 +++++++++++++++++++++---------
|
||||||
|
gcc/d/Make-lang.in | 2 +-
|
||||||
|
gcc/doc/install.texi | 16 +++++++++++--
|
||||||
|
libcody/Makefile.in | 2 +-
|
||||||
|
libcody/configure | 30 ++++++++++++++++++++++++-
|
||||||
|
libcody/configure.ac | 26 ++++++++++++++++++++--
|
||||||
|
libcpp/configure | 22 +++++++++++++++++-
|
||||||
|
libcpp/configure.ac | 19 ++++++++++++++--
|
||||||
|
libdecnumber/configure | 22 +++++++++++++++++-
|
||||||
|
libdecnumber/configure.ac | 19 ++++++++++++++--
|
||||||
|
zlib/configure | 30 ++++++++++++++++++++-----
|
||||||
|
zlib/configure.ac | 21 ++++++++++++++---
|
||||||
|
17 files changed, 295 insertions(+), 65 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/c++tools/Makefile.in b/c++tools/Makefile.in
|
||||||
|
index d6a33613732..4d5a5b0522b 100644
|
||||||
|
--- a/c++tools/Makefile.in
|
||||||
|
+++ b/c++tools/Makefile.in
|
||||||
|
@@ -28,8 +28,9 @@ AUTOCONF := @AUTOCONF@
|
||||||
|
AUTOHEADER := @AUTOHEADER@
|
||||||
|
CXX := @CXX@
|
||||||
|
CXXFLAGS := @CXXFLAGS@
|
||||||
|
-PIEFLAG := @PIEFLAG@
|
||||||
|
-CXXOPTS := $(CXXFLAGS) $(PIEFLAG) -fno-exceptions -fno-rtti
|
||||||
|
+PICFLAG := @PICFLAG@
|
||||||
|
+LD_PICFLAG := @LD_PICFLAG@
|
||||||
|
+CXXOPTS := $(CXXFLAGS) $(PICFLAG) -fno-exceptions -fno-rtti
|
||||||
|
LDFLAGS := @LDFLAGS@
|
||||||
|
exeext := @EXEEXT@
|
||||||
|
LIBIBERTY := ../libiberty/libiberty.a
|
||||||
|
@@ -87,11 +88,15 @@ ifeq (@CXX_AUX_TOOLS@,yes)
|
||||||
|
|
||||||
|
all::g++-mapper-server$(exeext)
|
||||||
|
|
||||||
|
+ifneq ($(PICFLAG),)
|
||||||
|
+override LIBIBERTY := ../libiberty/pic/libiberty.a
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
MAPPER.O := server.o resolver.o
|
||||||
|
CODYLIB = ../libcody/libcody.a
|
||||||
|
CXXINC += -I$(srcdir)/../libcody -I$(srcdir)/../include -I$(srcdir)/../gcc -I.
|
||||||
|
g++-mapper-server$(exeext): $(MAPPER.O) $(CODYLIB)
|
||||||
|
- +$(CXX) $(LDFLAGS) $(PIEFLAG) -o $@ $^ $(VERSION.O) $(LIBIBERTY) $(NETLIBS)
|
||||||
|
+ +$(CXX) $(LDFLAGS) $(PICFLAG) $(LD_PICFLAG) -o $@ $^ $(VERSION.O) $(LIBIBERTY) $(NETLIBS)
|
||||||
|
|
||||||
|
# copy to gcc dir so tests there can run
|
||||||
|
all::../gcc/g++-mapper-server$(exeext)
|
||||||
|
diff --git a/c++tools/configure b/c++tools/configure
|
||||||
|
index 742816e4253..88087009383 100755
|
||||||
|
--- a/c++tools/configure
|
||||||
|
+++ b/c++tools/configure
|
||||||
|
@@ -630,7 +630,8 @@ CPP
|
||||||
|
ac_ct_CC
|
||||||
|
CFLAGS
|
||||||
|
CC
|
||||||
|
-PIEFLAG
|
||||||
|
+LD_PICFLAG
|
||||||
|
+PICFLAG
|
||||||
|
MAINTAINER
|
||||||
|
CXX_AUX_TOOLS
|
||||||
|
AUTOHEADER
|
||||||
|
@@ -702,6 +703,7 @@ enable_option_checking
|
||||||
|
enable_c___tools
|
||||||
|
enable_maintainer_mode
|
||||||
|
enable_default_pie
|
||||||
|
+enable_host_pie
|
||||||
|
with_gcc_major_version_only
|
||||||
|
'
|
||||||
|
ac_precious_vars='build_alias
|
||||||
|
@@ -1333,6 +1335,7 @@ Optional Features:
|
||||||
|
enable maintainer mode. Add rules to rebuild
|
||||||
|
configurey bits
|
||||||
|
--enable-default-pie enable Position Independent Executable as default
|
||||||
|
+ --enable-host-pie build host code as PIE
|
||||||
|
|
||||||
|
Optional Packages:
|
||||||
|
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
|
||||||
|
@@ -2992,12 +2995,20 @@ test "$maintainer_mode" = yes && MAINTAI
|
||||||
|
# Check whether --enable-default-pie was given.
|
||||||
|
# Check whether --enable-default-pie was given.
|
||||||
|
if test "${enable_default_pie+set}" = set; then :
|
||||||
|
- enableval=$enable_default_pie; PIEFLAG=-fPIE
|
||||||
|
+ enableval=$enable_default_pie; PICFLAG=-fPIE
|
||||||
|
else
|
||||||
|
- PIEFLAG=
|
||||||
|
+ PICFLAG=
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
+# Enable --enable-host-pie
|
||||||
|
+# Check whether --enable-host-pie was given.
|
||||||
|
+if test "${enable_host_pie+set}" = set; then :
|
||||||
|
+ enableval=$enable_host_pie; PICFLAG=-fPIE; LD_PICFLAG=-pie
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
|
||||||
|
# Check if O_CLOEXEC is defined by fcntl
|
||||||
|
ac_ext=c
|
||||||
|
diff --git a/c++tools/configure.ac b/c++tools/configure.ac
|
||||||
|
index 6662b5ad7c9..1e42689f2eb 100644
|
||||||
|
--- a/c++tools/configure.ac
|
||||||
|
+++ b/c++tools/configure.ac
|
||||||
|
@@ -102,8 +102,15 @@ fi
|
||||||
|
AC_ARG_ENABLE(default-pie,
|
||||||
|
[AS_HELP_STRING([--enable-default-pie],
|
||||||
|
[enable Position Independent Executable as default])],
|
||||||
|
-[PIEFLAG=-fPIE], [PIEFLAG=])
|
||||||
|
-AC_SUBST([PIEFLAG])
|
||||||
|
+[PICFLAG=-fPIE], [PICFLAG=])
|
||||||
|
+
|
||||||
|
+# Enable --enable-host-pie
|
||||||
|
+AC_ARG_ENABLE(host-pie,
|
||||||
|
+[AS_HELP_STRING([--enable-host-pie],
|
||||||
|
+ [build host code as PIE])],
|
||||||
|
+[PICFLAG=-fPIE; LD_PICFLAG=-pie], [])
|
||||||
|
+AC_SUBST(PICFLAG)
|
||||||
|
+AC_SUBST(LD_PICFLAG)
|
||||||
|
|
||||||
|
# Check if O_CLOEXEC is defined by fcntl
|
||||||
|
AC_CACHE_CHECK(for O_CLOEXEC, ac_cv_o_cloexec, [
|
||||||
|
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
|
||||||
|
index 31ff95500c9..151dbfa54ec 100644
|
||||||
|
--- a/gcc/Makefile.in
|
||||||
|
+++ b/gcc/Makefile.in
|
||||||
|
@@ -155,6 +155,9 @@ LDFLAGS = @LDFLAGS@
|
||||||
|
# Should we build position-independent host code?
|
||||||
|
PICFLAG = @PICFLAG@
|
||||||
|
|
||||||
|
+# The linker flag for the above.
|
||||||
|
+LD_PICFLAG = @LD_PICFLAG@
|
||||||
|
+
|
||||||
|
# Flags to determine code coverage. When coverage is disabled, this will
|
||||||
|
# contain the optimization flags, as you normally want code coverage
|
||||||
|
# without optimization.
|
||||||
|
@@ -263,18 +266,17 @@ LINKER = $(CC)
|
||||||
|
LINKER_FLAGS = $(CFLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
+enable_host_pie = @enable_host_pie@
|
||||||
|
+
|
||||||
|
# Enable Intel CET on Intel CET enabled host if needed.
|
||||||
|
CET_HOST_FLAGS = @CET_HOST_FLAGS@
|
||||||
|
COMPILER += $(CET_HOST_FLAGS)
|
||||||
|
|
||||||
|
-NO_PIE_CFLAGS = @NO_PIE_CFLAGS@
|
||||||
|
-NO_PIE_FLAG = @NO_PIE_FLAG@
|
||||||
|
-
|
||||||
|
-# We don't want to compile the compilers with -fPIE, it make PCH fail.
|
||||||
|
-COMPILER += $(NO_PIE_CFLAGS)
|
||||||
|
+# Maybe compile the compilers with -fPIE or -fPIC.
|
||||||
|
+COMPILER += $(PICFLAG)
|
||||||
|
|
||||||
|
-# Link with -no-pie since we compile the compiler with -fno-PIE.
|
||||||
|
-LINKER += $(NO_PIE_FLAG)
|
||||||
|
+# Link with -pie, or -no-pie, depending on the above.
|
||||||
|
+LINKER += $(LD_PICFLAG)
|
||||||
|
|
||||||
|
# Like LINKER, but use a mutex for serializing front end links.
|
||||||
|
ifeq (@DO_LINK_MUTEX@,true)
|
||||||
|
@@ -1057,18 +1059,21 @@ ALL_CPPFLAGS = $(INCLUDES) $(CPPFLAGS)
|
||||||
|
ALL_COMPILERFLAGS = $(ALL_CXXFLAGS)
|
||||||
|
|
||||||
|
# This is the variable to use when using $(LINKER).
|
||||||
|
-ALL_LINKERFLAGS = $(ALL_CXXFLAGS)
|
||||||
|
+ALL_LINKERFLAGS = $(ALL_CXXFLAGS) $(LD_PICFLAG)
|
||||||
|
|
||||||
|
# Build and host support libraries.
|
||||||
|
|
||||||
|
-# Use the "pic" build of libiberty if --enable-host-shared, unless we are
|
||||||
|
-# building for mingw.
|
||||||
|
+# Use the "pic" build of libiberty if --enable-host-shared or --enable-host-pie,
|
||||||
|
+# unless we are building for mingw.
|
||||||
|
LIBIBERTY_PICDIR=$(if $(findstring mingw,$(target)),,pic)
|
||||||
|
-ifeq ($(enable_host_shared),yes)
|
||||||
|
+ifneq ($(enable_host_shared)$(enable_host_pie),)
|
||||||
|
LIBIBERTY = ../libiberty/$(LIBIBERTY_PICDIR)/libiberty.a
|
||||||
|
-BUILD_LIBIBERTY = $(build_libobjdir)/libiberty/$(LIBIBERTY_PICDIR)/libiberty.a
|
||||||
|
else
|
||||||
|
LIBIBERTY = ../libiberty/libiberty.a
|
||||||
|
+endif
|
||||||
|
+ifeq ($(enable_host_shared),yes)
|
||||||
|
+BUILD_LIBIBERTY = $(build_libobjdir)/libiberty/$(LIBIBERTY_PICDIR)/libiberty.a
|
||||||
|
+else
|
||||||
|
BUILD_LIBIBERTY = $(build_libobjdir)/libiberty/libiberty.a
|
||||||
|
endif
|
||||||
|
|
||||||
|
diff --git a/gcc/configure b/gcc/configure
|
||||||
|
index 258b17a226e..bd4fe1fd6ca 100755
|
||||||
|
--- a/gcc/configure
|
||||||
|
+++ b/gcc/configure
|
||||||
|
@@ -632,10 +632,10 @@ ac_includes_default="\
|
||||||
|
ac_subst_vars='LTLIBOBJS
|
||||||
|
LIBOBJS
|
||||||
|
CET_HOST_FLAGS
|
||||||
|
-NO_PIE_FLAG
|
||||||
|
-NO_PIE_CFLAGS
|
||||||
|
-enable_default_pie
|
||||||
|
+LD_PICFLAG
|
||||||
|
PICFLAG
|
||||||
|
+enable_default_pie
|
||||||
|
+enable_host_pie
|
||||||
|
enable_host_shared
|
||||||
|
enable_plugin
|
||||||
|
pluginlibs
|
||||||
|
@@ -1025,6 +1025,7 @@ enable_link_serialization
|
||||||
|
enable_version_specific_runtime_libs
|
||||||
|
enable_plugin
|
||||||
|
enable_host_shared
|
||||||
|
+enable_host_pie
|
||||||
|
enable_libquadmath_support
|
||||||
|
with_linker_hash_style
|
||||||
|
with_diagnostics_color
|
||||||
|
@@ -1787,6 +1788,7 @@ Optional Features:
|
||||||
|
in a compiler-specific directory
|
||||||
|
--enable-plugin enable plugin support
|
||||||
|
--enable-host-shared build host code as shared libraries
|
||||||
|
+ --enable-host-pie build host code as PIE
|
||||||
|
--disable-libquadmath-support
|
||||||
|
disable libquadmath support for Fortran
|
||||||
|
--enable-default-pie enable Position Independent Executable as default
|
||||||
|
@@ -19659,7 +19661,7 @@ else
|
||||||
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
|
lt_status=$lt_dlunknown
|
||||||
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
|
-#line 19395 "configure"
|
||||||
|
+#line 19409 "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
|
||||||
|
#if HAVE_DLFCN_H
|
||||||
|
@@ -19765,7 +19767,7 @@ else
|
||||||
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
|
lt_status=$lt_dlunknown
|
||||||
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
|
-#line 19501 "configure"
|
||||||
|
+#line 19515 "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
|
||||||
|
#if HAVE_DLFCN_H
|
||||||
|
@@ -32221,13 +32223,17 @@ fi
|
||||||
|
# Enable --enable-host-shared
|
||||||
|
# Check whether --enable-host-shared was given.
|
||||||
|
if test "${enable_host_shared+set}" = set; then :
|
||||||
|
- enableval=$enable_host_shared; PICFLAG=-fPIC
|
||||||
|
-else
|
||||||
|
- PICFLAG=
|
||||||
|
+ enableval=$enable_host_shared;
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
+# Enable --enable-host-pie
|
||||||
|
+# Check whether --enable-host-pie was given.
|
||||||
|
+if test "${enable_host_pie+set}" = set; then :
|
||||||
|
+ enableval=$enable_host_pie;
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
|
||||||
|
|
||||||
|
# Check whether --enable-libquadmath-support was given.
|
||||||
|
@@ -32381,10 +32387,6 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_c_no_fpie" >&5
|
||||||
|
$as_echo "$gcc_cv_c_no_fpie" >&6; }
|
||||||
|
-if test "$gcc_cv_c_no_fpie" = "yes"; then
|
||||||
|
- NO_PIE_CFLAGS="-fno-PIE"
|
||||||
|
-fi
|
||||||
|
-
|
||||||
|
|
||||||
|
# Check if -no-pie works.
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -no-pie option" >&5
|
||||||
|
@@ -32409,11 +32411,28 @@ rm -f core conftest.err conftest.$ac_objext \
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_no_pie" >&5
|
||||||
|
$as_echo "$gcc_cv_no_pie" >&6; }
|
||||||
|
-if test "$gcc_cv_no_pie" = "yes"; then
|
||||||
|
- NO_PIE_FLAG="-no-pie"
|
||||||
|
+
|
||||||
|
+if test x$enable_host_shared = xyes; then
|
||||||
|
+ PICFLAG=-fPIC
|
||||||
|
+elif test x$enable_host_pie = xyes; then
|
||||||
|
+ PICFLAG=-fPIE
|
||||||
|
+elif test x$gcc_cv_c_no_fpie = xyes; then
|
||||||
|
+ PICFLAG=-fno-PIE
|
||||||
|
+else
|
||||||
|
+ PICFLAG=
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+if test x$enable_host_pie = xyes; then
|
||||||
|
+ LD_PICFLAG=-pie
|
||||||
|
+elif test x$gcc_cv_no_pie = xyes; then
|
||||||
|
+ LD_PICFLAG=-no-pie
|
||||||
|
+else
|
||||||
|
+ LD_PICFLAG=
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
+
|
||||||
|
+
|
||||||
|
# Enable Intel CET on Intel CET enabled host if jit is enabled.
|
||||||
|
# Check whether --enable-cet was given.
|
||||||
|
if test "${enable_cet+set}" = set; then :
|
||||||
|
diff --git a/gcc/configure.ac b/gcc/configure.ac
|
||||||
|
index 06750cee977..dca995aeec7 100644
|
||||||
|
--- a/gcc/configure.ac
|
||||||
|
+++ b/gcc/configure.ac
|
||||||
|
@@ -7488,11 +7488,14 @@ fi
|
||||||
|
# Enable --enable-host-shared
|
||||||
|
AC_ARG_ENABLE(host-shared,
|
||||||
|
[AS_HELP_STRING([--enable-host-shared],
|
||||||
|
- [build host code as shared libraries])],
|
||||||
|
-[PICFLAG=-fPIC], [PICFLAG=])
|
||||||
|
+ [build host code as shared libraries])])
|
||||||
|
AC_SUBST(enable_host_shared)
|
||||||
|
-AC_SUBST(PICFLAG)
|
||||||
|
|
||||||
|
+# Enable --enable-host-pie
|
||||||
|
+AC_ARG_ENABLE(host-pie,
|
||||||
|
+[AS_HELP_STRING([--enable-host-pie],
|
||||||
|
+ [build host code as PIE])])
|
||||||
|
+AC_SUBST(enable_host_pie)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(libquadmath-support,
|
||||||
|
[AS_HELP_STRING([--disable-libquadmath-support],
|
||||||
|
@@ -7614,10 +7617,6 @@ AC_CACHE_CHECK([for -fno-PIE option],
|
||||||
|
[gcc_cv_c_no_fpie=yes],
|
||||||
|
[gcc_cv_c_no_fpie=no])
|
||||||
|
CXXFLAGS="$saved_CXXFLAGS"])
|
||||||
|
-if test "$gcc_cv_c_no_fpie" = "yes"; then
|
||||||
|
- NO_PIE_CFLAGS="-fno-PIE"
|
||||||
|
-fi
|
||||||
|
-AC_SUBST([NO_PIE_CFLAGS])
|
||||||
|
|
||||||
|
# Check if -no-pie works.
|
||||||
|
AC_CACHE_CHECK([for -no-pie option],
|
||||||
|
@@ -7628,10 +7627,27 @@ AC_CACHE_CHECK([for -no-pie option],
|
||||||
|
[gcc_cv_no_pie=yes],
|
||||||
|
[gcc_cv_no_pie=no])
|
||||||
|
LDFLAGS="$saved_LDFLAGS"])
|
||||||
|
-if test "$gcc_cv_no_pie" = "yes"; then
|
||||||
|
- NO_PIE_FLAG="-no-pie"
|
||||||
|
+
|
||||||
|
+if test x$enable_host_shared = xyes; then
|
||||||
|
+ PICFLAG=-fPIC
|
||||||
|
+elif test x$enable_host_pie = xyes; then
|
||||||
|
+ PICFLAG=-fPIE
|
||||||
|
+elif test x$gcc_cv_c_no_fpie = xyes; then
|
||||||
|
+ PICFLAG=-fno-PIE
|
||||||
|
+else
|
||||||
|
+ PICFLAG=
|
||||||
|
fi
|
||||||
|
-AC_SUBST([NO_PIE_FLAG])
|
||||||
|
+
|
||||||
|
+if test x$enable_host_pie = xyes; then
|
||||||
|
+ LD_PICFLAG=-pie
|
||||||
|
+elif test x$gcc_cv_no_pie = xyes; then
|
||||||
|
+ LD_PICFLAG=-no-pie
|
||||||
|
+else
|
||||||
|
+ LD_PICFLAG=
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+AC_SUBST([PICFLAG])
|
||||||
|
+AC_SUBST([LD_PICFLAG])
|
||||||
|
|
||||||
|
# Enable Intel CET on Intel CET enabled host if jit is enabled.
|
||||||
|
GCC_CET_HOST_FLAGS(CET_HOST_FLAGS)
|
||||||
|
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
|
||||||
|
index 93eae1f2582..be6985646b2 100644
|
||||||
|
--- a/gcc/doc/install.texi
|
||||||
|
+++ b/gcc/doc/install.texi
|
||||||
|
@@ -1021,14 +1021,26 @@ code.
|
||||||
|
|
||||||
|
@item --enable-host-shared
|
||||||
|
Specify that the @emph{host} code should be built into position-independent
|
||||||
|
-machine code (with -fPIC), allowing it to be used within shared libraries,
|
||||||
|
-but yielding a slightly slower compiler.
|
||||||
|
+machine code (with @option{-fPIC}), allowing it to be used within shared
|
||||||
|
+libraries, but yielding a slightly slower compiler.
|
||||||
|
|
||||||
|
This option is required when building the libgccjit.so library.
|
||||||
|
|
||||||
|
Contrast with @option{--enable-shared}, which affects @emph{target}
|
||||||
|
libraries.
|
||||||
|
|
||||||
|
+@item --enable-host-pie
|
||||||
|
+Specify that the @emph{host} executables should be built into
|
||||||
|
+position-independent executables (with @option{-fPIE} and @option{-pie}),
|
||||||
|
+yielding a slightly slower compiler (but faster than
|
||||||
|
+@option{--enable-host-shared}). Position-independent executables are loaded
|
||||||
|
+at random addresses each time they are executed, therefore provide additional
|
||||||
|
+protection against Return Oriented Programming (ROP) attacks.
|
||||||
|
+
|
||||||
|
+@option{--enable-host-pie}) may be used with @option{--enable-host-shared}),
|
||||||
|
+in which case @option{-fPIC} is used when compiling, and @option{-pie} when
|
||||||
|
+linking.
|
||||||
|
+
|
||||||
|
@item @anchor{with-gnu-as}--with-gnu-as
|
||||||
|
Specify that the compiler should assume that the
|
||||||
|
assembler it finds is the GNU assembler. However, this does not modify
|
||||||
|
diff --git a/libcody/Makefile.in b/libcody/Makefile.in
|
||||||
|
index 7eaf8ace8ce..0ff1625a39f 100644
|
||||||
|
--- a/libcody/Makefile.in
|
||||||
|
+++ b/libcody/Makefile.in
|
||||||
|
@@ -31,7 +31,7 @@ endif
|
||||||
|
CXXOPTS += $(filter-out -DHAVE_CONFIG_H,@DEFS@) -include config.h
|
||||||
|
|
||||||
|
# Linker options
|
||||||
|
-LDFLAGS := @LDFLAGS@
|
||||||
|
+LDFLAGS := @LDFLAGS@ @LD_PICFLAG@
|
||||||
|
LIBS := @LIBS@
|
||||||
|
|
||||||
|
# Per-source & per-directory compile flags (warning: recursive)
|
||||||
|
diff --git a/libcody/configure b/libcody/configure
|
||||||
|
index da52a5cfca5..0e536c0ccb0 100755
|
||||||
|
--- a/libcody/configure
|
||||||
|
+++ b/libcody/configure
|
||||||
|
@@ -591,7 +591,10 @@ configure_args
|
||||||
|
AR
|
||||||
|
RANLIB
|
||||||
|
EXCEPTIONS
|
||||||
|
+LD_PICFLAG
|
||||||
|
PICFLAG
|
||||||
|
+enable_host_pie
|
||||||
|
+enable_host_shared
|
||||||
|
OBJEXT
|
||||||
|
EXEEXT
|
||||||
|
ac_ct_CXX
|
||||||
|
@@ -653,6 +656,7 @@ enable_maintainer_mode
|
||||||
|
with_compiler
|
||||||
|
enable_checking
|
||||||
|
enable_host_shared
|
||||||
|
+enable_host_pie
|
||||||
|
enable_exceptions
|
||||||
|
'
|
||||||
|
ac_precious_vars='build_alias
|
||||||
|
@@ -1286,6 +1290,7 @@ Optional Features:
|
||||||
|
yes,no,all,none,release. Flags are: misc,valgrind or
|
||||||
|
other strings
|
||||||
|
--enable-host-shared build host code as shared libraries
|
||||||
|
+ --enable-host-pie build host code as PIE
|
||||||
|
--enable-exceptions enable exceptions & rtti
|
||||||
|
|
||||||
|
Optional Packages:
|
||||||
|
@@ -2635,11 +2640,34 @@ fi
|
||||||
|
# Enable --enable-host-shared.
|
||||||
|
# Check whether --enable-host-shared was given.
|
||||||
|
if test "${enable_host_shared+set}" = set; then :
|
||||||
|
- enableval=$enable_host_shared; PICFLAG=-fPIC
|
||||||
|
+ enableval=$enable_host_shared;
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+# Enable --enable-host-pie.
|
||||||
|
+# Check whether --enable-host-pie was given.
|
||||||
|
+if test "${enable_host_pie+set}" = set; then :
|
||||||
|
+ enableval=$enable_host_pie;
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+if test x$enable_host_shared = xyes; then
|
||||||
|
+ PICFLAG=-fPIC
|
||||||
|
+elif test x$enable_host_pie = xyes; then
|
||||||
|
+ PICFLAG=-fPIE
|
||||||
|
else
|
||||||
|
PICFLAG=
|
||||||
|
fi
|
||||||
|
|
||||||
|
+if test x$enable_host_pie = xyes; then
|
||||||
|
+ LD_PICFLAG=-pie
|
||||||
|
+else
|
||||||
|
+ LD_PICFLAG=
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+
|
||||||
|
|
||||||
|
|
||||||
|
# Check whether --enable-exceptions was given.
|
||||||
|
diff --git a/libcody/configure.ac b/libcody/configure.ac
|
||||||
|
index 960191ecb72..14e8dd4a226 100644
|
||||||
|
--- a/libcody/configure.ac
|
||||||
|
+++ b/libcody/configure.ac
|
||||||
|
@@ -63,9 +63,31 @@ fi
|
||||||
|
# Enable --enable-host-shared.
|
||||||
|
AC_ARG_ENABLE(host-shared,
|
||||||
|
[AS_HELP_STRING([--enable-host-shared],
|
||||||
|
- [build host code as shared libraries])],
|
||||||
|
-[PICFLAG=-fPIC], [PICFLAG=])
|
||||||
|
+ [build host code as shared libraries])])
|
||||||
|
+AC_SUBST(enable_host_shared)
|
||||||
|
+
|
||||||
|
+# Enable --enable-host-pie.
|
||||||
|
+AC_ARG_ENABLE(host-pie,
|
||||||
|
+[AS_HELP_STRING([--enable-host-pie],
|
||||||
|
+ [build host code as PIE])])
|
||||||
|
+AC_SUBST(enable_host_pie)
|
||||||
|
+
|
||||||
|
+if test x$enable_host_shared = xyes; then
|
||||||
|
+ PICFLAG=-fPIC
|
||||||
|
+elif test x$enable_host_pie = xyes; then
|
||||||
|
+ PICFLAG=-fPIE
|
||||||
|
+else
|
||||||
|
+ PICFLAG=
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+if test x$enable_host_pie = xyes; then
|
||||||
|
+ LD_PICFLAG=-pie
|
||||||
|
+else
|
||||||
|
+ LD_PICFLAG=
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
AC_SUBST(PICFLAG)
|
||||||
|
+AC_SUBST(LD_PICFLAG)
|
||||||
|
|
||||||
|
NMS_ENABLE_EXCEPTIONS
|
||||||
|
|
||||||
|
diff --git a/libcpp/configure b/libcpp/configure
|
||||||
|
index 75145390215..85168273cd1 100755
|
||||||
|
--- a/libcpp/configure
|
||||||
|
+++ b/libcpp/configure
|
||||||
|
@@ -625,6 +625,8 @@ ac_includes_default="\
|
||||||
|
ac_subst_vars='LTLIBOBJS
|
||||||
|
CET_HOST_FLAGS
|
||||||
|
PICFLAG
|
||||||
|
+enable_host_pie
|
||||||
|
+enable_host_shared
|
||||||
|
MAINT
|
||||||
|
USED_CATALOGS
|
||||||
|
PACKAGE
|
||||||
|
@@ -738,6 +740,7 @@ enable_maintainer_mode
|
||||||
|
enable_checking
|
||||||
|
enable_canonical_system_headers
|
||||||
|
enable_host_shared
|
||||||
|
+enable_host_pie
|
||||||
|
enable_cet
|
||||||
|
enable_valgrind_annotations
|
||||||
|
'
|
||||||
|
@@ -1379,6 +1382,7 @@ Optional Features:
|
||||||
|
--enable-canonical-system-headers
|
||||||
|
enable or disable system headers canonicalization
|
||||||
|
--enable-host-shared build host code as shared libraries
|
||||||
|
+ --enable-host-pie build host code as PIE
|
||||||
|
--enable-cet enable Intel CET in host libraries [default=auto]
|
||||||
|
--enable-valgrind-annotations
|
||||||
|
enable valgrind runtime interaction
|
||||||
|
@@ -7605,7 +7609,23 @@ esac
|
||||||
|
# Enable --enable-host-shared.
|
||||||
|
# Check whether --enable-host-shared was given.
|
||||||
|
if test "${enable_host_shared+set}" = set; then :
|
||||||
|
- enableval=$enable_host_shared; PICFLAG=-fPIC
|
||||||
|
+ enableval=$enable_host_shared;
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+# Enable --enable-host-pie.
|
||||||
|
+# Check whether --enable-host-pie was given.
|
||||||
|
+if test "${enable_host_pie+set}" = set; then :
|
||||||
|
+ enableval=$enable_host_pie;
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+if test x$enable_host_shared = xyes; then
|
||||||
|
+ PICFLAG=-fPIC
|
||||||
|
+elif test x$enable_host_pie = xyes; then
|
||||||
|
+ PICFLAG=-fPIE
|
||||||
|
else
|
||||||
|
PICFLAG=
|
||||||
|
fi
|
||||||
|
diff --git a/libcpp/configure.ac b/libcpp/configure.ac
|
||||||
|
index 9b6042518e5..d25bf5f414f 100644
|
||||||
|
--- a/libcpp/configure.ac
|
||||||
|
+++ b/libcpp/configure.ac
|
||||||
|
@@ -211,8 +211,23 @@ esac
|
||||||
|
# Enable --enable-host-shared.
|
||||||
|
AC_ARG_ENABLE(host-shared,
|
||||||
|
[AS_HELP_STRING([--enable-host-shared],
|
||||||
|
- [build host code as shared libraries])],
|
||||||
|
-[PICFLAG=-fPIC], [PICFLAG=])
|
||||||
|
+ [build host code as shared libraries])])
|
||||||
|
+AC_SUBST(enable_host_shared)
|
||||||
|
+
|
||||||
|
+# Enable --enable-host-pie.
|
||||||
|
+AC_ARG_ENABLE(host-pie,
|
||||||
|
+[AS_HELP_STRING([--enable-host-pie],
|
||||||
|
+ [build host code as PIE])])
|
||||||
|
+AC_SUBST(enable_host_pie)
|
||||||
|
+
|
||||||
|
+if test x$enable_host_shared = xyes; then
|
||||||
|
+ PICFLAG=-fPIC
|
||||||
|
+elif test x$enable_host_pie = xyes; then
|
||||||
|
+ PICFLAG=-fPIE
|
||||||
|
+else
|
||||||
|
+ PICFLAG=
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
AC_SUBST(PICFLAG)
|
||||||
|
|
||||||
|
# Enable Intel CET on Intel CET enabled host if jit is enabled.
|
||||||
|
diff --git a/libdecnumber/configure b/libdecnumber/configure
|
||||||
|
index da5302f9315..d805fdeab5a 100755
|
||||||
|
--- a/libdecnumber/configure
|
||||||
|
+++ b/libdecnumber/configure
|
||||||
|
@@ -626,6 +626,8 @@ ac_subst_vars='LTLIBOBJS
|
||||||
|
LIBOBJS
|
||||||
|
CET_HOST_FLAGS
|
||||||
|
PICFLAG
|
||||||
|
+enable_host_pie
|
||||||
|
+enable_host_shared
|
||||||
|
ADDITIONAL_OBJS
|
||||||
|
enable_decimal_float
|
||||||
|
target_os
|
||||||
|
@@ -706,6 +708,7 @@ enable_werror_always
|
||||||
|
enable_maintainer_mode
|
||||||
|
enable_decimal_float
|
||||||
|
enable_host_shared
|
||||||
|
+enable_host_pie
|
||||||
|
enable_cet
|
||||||
|
'
|
||||||
|
ac_precious_vars='build_alias
|
||||||
|
@@ -1338,6 +1341,7 @@ Optional Features:
|
||||||
|
or 'dpd' choses which decimal floating point format
|
||||||
|
to use
|
||||||
|
--enable-host-shared build host code as shared libraries
|
||||||
|
+ --enable-host-pie build host code as PIE
|
||||||
|
--enable-cet enable Intel CET in host libraries [default=auto]
|
||||||
|
|
||||||
|
Some influential environment variables:
|
||||||
|
@@ -5185,7 +5189,23 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
|
||||||
|
# Enable --enable-host-shared.
|
||||||
|
# Check whether --enable-host-shared was given.
|
||||||
|
if test "${enable_host_shared+set}" = set; then :
|
||||||
|
- enableval=$enable_host_shared; PICFLAG=-fPIC
|
||||||
|
+ enableval=$enable_host_shared;
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+# Enable --enable-host-pie.
|
||||||
|
+# Check whether --enable-host-pie was given.
|
||||||
|
+if test "${enable_host_pie+set}" = set; then :
|
||||||
|
+ enableval=$enable_host_pie;
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+if test x$enable_host_shared = xyes; then
|
||||||
|
+ PICFLAG=-fPIC
|
||||||
|
+elif test x$enable_host_pie = xyes; then
|
||||||
|
+ PICFLAG=-fPIE
|
||||||
|
else
|
||||||
|
PICFLAG=
|
||||||
|
fi
|
||||||
|
diff --git a/libdecnumber/configure.ac b/libdecnumber/configure.ac
|
||||||
|
index 0794031ec83..14f67f926d1 100644
|
||||||
|
--- a/libdecnumber/configure.ac
|
||||||
|
+++ b/libdecnumber/configure.ac
|
||||||
|
@@ -100,8 +100,23 @@ AC_C_BIGENDIAN
|
||||||
|
# Enable --enable-host-shared.
|
||||||
|
AC_ARG_ENABLE(host-shared,
|
||||||
|
[AS_HELP_STRING([--enable-host-shared],
|
||||||
|
- [build host code as shared libraries])],
|
||||||
|
-[PICFLAG=-fPIC], [PICFLAG=])
|
||||||
|
+ [build host code as shared libraries])])
|
||||||
|
+AC_SUBST(enable_host_shared)
|
||||||
|
+
|
||||||
|
+# Enable --enable-host-pie.
|
||||||
|
+AC_ARG_ENABLE(host-pie,
|
||||||
|
+[AS_HELP_STRING([--enable-host-pie],
|
||||||
|
+ [build host code as PIE])])
|
||||||
|
+AC_SUBST(enable_host_pie)
|
||||||
|
+
|
||||||
|
+if test x$enable_host_shared = xyes; then
|
||||||
|
+ PICFLAG=-fPIC
|
||||||
|
+elif test x$enable_host_pie = xyes; then
|
||||||
|
+ PICFLAG=-fPIE
|
||||||
|
+else
|
||||||
|
+ PICFLAG=
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
AC_SUBST(PICFLAG)
|
||||||
|
|
||||||
|
# Enable Intel CET on Intel CET enabled host if jit is enabled.
|
||||||
|
diff --git a/zlib/configure b/zlib/configure
|
||||||
|
index f489f31bc70..0dfc1982844 100755
|
||||||
|
--- a/zlib/configure
|
||||||
|
+++ b/zlib/configure
|
||||||
|
@@ -635,6 +635,8 @@ am__EXEEXT_TRUE
|
||||||
|
LTLIBOBJS
|
||||||
|
LIBOBJS
|
||||||
|
PICFLAG
|
||||||
|
+enable_host_pie
|
||||||
|
+enable_host_shared
|
||||||
|
TARGET_LIBRARY_FALSE
|
||||||
|
TARGET_LIBRARY_TRUE
|
||||||
|
toolexeclibdir
|
||||||
|
@@ -778,6 +780,7 @@ with_gnu_ld
|
||||||
|
enable_libtool_lock
|
||||||
|
with_toolexeclibdir
|
||||||
|
enable_host_shared
|
||||||
|
+enable_host_pie
|
||||||
|
'
|
||||||
|
ac_precious_vars='build_alias
|
||||||
|
host_alias
|
||||||
|
@@ -1420,6 +1423,7 @@ Optional Features:
|
||||||
|
optimize for fast installation [default=yes]
|
||||||
|
--disable-libtool-lock avoid locking (might break parallel builds)
|
||||||
|
--enable-host-shared build host code as shared libraries
|
||||||
|
+ --enable-host-pie build host code as PIE
|
||||||
|
|
||||||
|
Optional Packages:
|
||||||
|
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
|
||||||
|
@@ -4169,7 +4173,7 @@ case "$host" in
|
||||||
|
case "$enable_cet" in
|
||||||
|
auto)
|
||||||
|
# Check if target supports multi-byte NOPs
|
||||||
|
- # and if assembler supports CET insn.
|
||||||
|
+ # and if compiler and assembler support CET insn.
|
||||||
|
cet_save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS -fcf-protection"
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
@@ -10735,7 +10739,7 @@ else
|
||||||
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
|
lt_status=$lt_dlunknown
|
||||||
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
|
-#line 10748 "configure"
|
||||||
|
+#line 10754 "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
|
||||||
|
#if HAVE_DLFCN_H
|
||||||
|
@@ -10841,7 +10845,7 @@ else
|
||||||
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
|
lt_status=$lt_dlunknown
|
||||||
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
|
-#line 10854 "configure"
|
||||||
|
+#line 10860 "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
|
||||||
|
#if HAVE_DLFCN_H
|
||||||
|
@@ -11524,15 +11528,31 @@ else
|
||||||
|
multilib_arg=
|
||||||
|
fi
|
||||||
|
|
||||||
|
+# Enable --enable-host-shared.
|
||||||
|
# Check whether --enable-host-shared was given.
|
||||||
|
if test "${enable_host_shared+set}" = set; then :
|
||||||
|
- enableval=$enable_host_shared; PICFLAG=-fPIC
|
||||||
|
+ enableval=$enable_host_shared;
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+# Enable --enable-host-pie.
|
||||||
|
+# Check whether --enable-host-pie was given.
|
||||||
|
+if test "${enable_host_pie+set}" = set; then :
|
||||||
|
+ enableval=$enable_host_pie;
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+if test x$enable_host_shared = xyes; then
|
||||||
|
+ PICFLAG=-fPIC
|
||||||
|
+elif test x$enable_host_pie = xyes; then
|
||||||
|
+ PICFLAG=-fPIE
|
||||||
|
else
|
||||||
|
PICFLAG=
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
-
|
||||||
|
ac_config_files="$ac_config_files Makefile"
|
||||||
|
|
||||||
|
cat >confcache <<\_ACEOF
|
||||||
|
diff --git a/zlib/configure.ac b/zlib/configure.ac
|
||||||
|
index be1cfe29651..adf7aad4e51 100644
|
||||||
|
--- a/zlib/configure.ac
|
||||||
|
+++ b/zlib/configure.ac
|
||||||
|
@@ -122,11 +122,26 @@ else
|
||||||
|
multilib_arg=
|
||||||
|
fi
|
||||||
|
|
||||||
|
+# Enable --enable-host-shared.
|
||||||
|
AC_ARG_ENABLE(host-shared,
|
||||||
|
[AS_HELP_STRING([--enable-host-shared],
|
||||||
|
- [build host code as shared libraries])],
|
||||||
|
-[PICFLAG=-fPIC], [PICFLAG=])
|
||||||
|
-AC_SUBST(PICFLAG)
|
||||||
|
+ [build host code as shared libraries])])
|
||||||
|
+AC_SUBST(enable_host_shared)
|
||||||
|
+
|
||||||
|
+# Enable --enable-host-pie.
|
||||||
|
+AC_ARG_ENABLE(host-pie,
|
||||||
|
+[AS_HELP_STRING([--enable-host-pie],
|
||||||
|
+ [build host code as PIE])])
|
||||||
|
+AC_SUBST(enable_host_pie)
|
||||||
|
+
|
||||||
|
+if test x$enable_host_shared = xyes; then
|
||||||
|
+ PICFLAG=-fPIC
|
||||||
|
+elif test x$enable_host_pie = xyes; then
|
||||||
|
+ PICFLAG=-fPIE
|
||||||
|
+else
|
||||||
|
+ PICFLAG=
|
||||||
|
+fi
|
||||||
|
|
||||||
|
+AC_SUBST(PICFLAG)
|
||||||
|
AC_CONFIG_FILES([Makefile])
|
||||||
|
AC_OUTPUT
|
||||||
|
|
||||||
|
base-commit: ee50b4383a0dca88172c3a821418344bd7391956
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
828
SOURCES/gcc11-relocatable-pch.patch
Normal file
828
SOURCES/gcc11-relocatable-pch.patch
Normal file
@ -0,0 +1,828 @@
|
|||||||
|
This patch backports support for PCH with PIE from upstream trunk.
|
||||||
|
|
||||||
|
It squashes two commits:
|
||||||
|
|
||||||
|
commit e4641191287ca613529d78a906afe4f029c1c3cd
|
||||||
|
Author: Iain Sandoe <iain@sandoe.co.uk>
|
||||||
|
Date: Sat Nov 13 12:26:16 2021 +0000
|
||||||
|
|
||||||
|
PCH: Make the save and restore diagnostics more robust.
|
||||||
|
|
||||||
|
When saving, if we cannot obtain a suitable memory segment there
|
||||||
|
is no point in continuing, so exit with an error.
|
||||||
|
|
||||||
|
When reading in the PCH, we have a situation that the read-in
|
||||||
|
data will replace the line tables used by the diagnostics output.
|
||||||
|
However, the state of the read-oin line tables is indeterminate
|
||||||
|
at some points where diagnostics might be needed.
|
||||||
|
|
||||||
|
To make this more robust, we save the existing line tables at
|
||||||
|
the start and, once we have read in the pointer to the new one,
|
||||||
|
put that to one side and restore the original table. This
|
||||||
|
avoids compiler hangs if the read or memory acquisition code
|
||||||
|
issues an assert, fatal_error, segv etc.
|
||||||
|
|
||||||
|
Once the read is complete, we swap in the new line table that
|
||||||
|
came from the PCH.
|
||||||
|
|
||||||
|
If the read-in PCH is corrupted then we still have a broken
|
||||||
|
compilation w.r.t any future diagnostics - but there is little
|
||||||
|
that can be done about that without more careful validation of
|
||||||
|
the file.
|
||||||
|
|
||||||
|
and
|
||||||
|
|
||||||
|
commit fe7c3ecff1f9c0520090a77fa824d8c5d9dbec12
|
||||||
|
Author: Jakub Jelinek <jakub@redhat.com>
|
||||||
|
Date: Fri Dec 3 11:03:30 2021 +0100
|
||||||
|
|
||||||
|
pch: Add support for PCH for relocatable executables [PR71934]
|
||||||
|
|
||||||
|
So, if we want to make PCH work for PIEs, I'd say we can:
|
||||||
|
1) add a new GTY option, say callback, which would act like
|
||||||
|
skip for non-PCH and for PCH would make us skip it but
|
||||||
|
remember for address bias translation
|
||||||
|
2) drop the skip for tree_translation_unit_decl::language
|
||||||
|
3) change get_unnamed_section to have const char * as
|
||||||
|
last argument instead of const void *, change
|
||||||
|
unnamed_section::data also to const char * and update
|
||||||
|
everything related to that
|
||||||
|
4) maybe add a host hook whether it is ok to support binaries
|
||||||
|
changing addresses (the only thing I'm worried is if
|
||||||
|
some host that uses function descriptors allocates them
|
||||||
|
dynamically instead of having them somewhere in the
|
||||||
|
executable)
|
||||||
|
5) maybe add a gengtype warning if it sees in GTY tracked
|
||||||
|
structure a function pointer without that new callback
|
||||||
|
option
|
||||||
|
|
||||||
|
Here is 1), 2), 3) implemented.
|
||||||
|
|
||||||
|
Note, on stdc++.h.gch/O2g.gch there are just those 10 relocations without
|
||||||
|
the second patch, with it a few more, but nothing huge. And for non-PIEs
|
||||||
|
there isn't really any extra work on the load side except freading two scalar
|
||||||
|
values and fseek.
|
||||||
|
|
||||||
|
diff --git a/gcc/c-family/c-pch.c b/gcc/c-family/c-pch.c
|
||||||
|
index fd94c3799ac..eebfa1df0bc 100644
|
||||||
|
--- a/gcc/c-family/c-pch.c
|
||||||
|
+++ b/gcc/c-family/c-pch.c
|
||||||
|
@@ -54,7 +54,6 @@ struct c_pch_validity
|
||||||
|
{
|
||||||
|
unsigned char debug_info_type;
|
||||||
|
signed char match[MATCH_SIZE];
|
||||||
|
- void (*pch_init) (void);
|
||||||
|
size_t target_data_length;
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -117,7 +116,6 @@ pch_init (void)
|
||||||
|
gcc_assert (v.match[i] == *pch_matching[i].flag_var);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- v.pch_init = &pch_init;
|
||||||
|
target_validity = targetm.get_pch_validity (&v.target_data_length);
|
||||||
|
|
||||||
|
if (fwrite (partial_pch, IDENT_LENGTH, 1, f) != 1
|
||||||
|
@@ -275,19 +273,6 @@ c_common_valid_pch (cpp_reader *pfile, const char *name, int fd)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* If the text segment was not loaded at the same address as it was
|
||||||
|
- when the PCH file was created, function pointers loaded from the
|
||||||
|
- PCH will not be valid. We could in theory remap all the function
|
||||||
|
- pointers, but no support for that exists at present.
|
||||||
|
- Since we have the same executable, it should only be necessary to
|
||||||
|
- check one function. */
|
||||||
|
- if (v.pch_init != &pch_init)
|
||||||
|
- {
|
||||||
|
- cpp_warning (pfile, CPP_W_INVALID_PCH,
|
||||||
|
- "%s: had text segment at different address", name);
|
||||||
|
- return 2;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
/* Check the target-specific validity data. */
|
||||||
|
{
|
||||||
|
void *this_file_data = xmalloc (v.target_data_length);
|
||||||
|
diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c
|
||||||
|
index 3a250dfb960..4d29e80dcc9 100644
|
||||||
|
--- a/gcc/config/avr/avr.c
|
||||||
|
+++ b/gcc/config/avr/avr.c
|
||||||
|
@@ -10221,10 +10221,9 @@ avr_output_bss_section_asm_op (const void *data)
|
||||||
|
/* Unnamed section callback for progmem*.data sections. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
-avr_output_progmem_section_asm_op (const void *data)
|
||||||
|
+avr_output_progmem_section_asm_op (const char *data)
|
||||||
|
{
|
||||||
|
- fprintf (asm_out_file, "\t.section\t%s,\"a\",@progbits\n",
|
||||||
|
- (const char*) data);
|
||||||
|
+ fprintf (asm_out_file, "\t.section\t%s,\"a\",@progbits\n", data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c
|
||||||
|
index 5d173919ee0..0c8aea148dc 100644
|
||||||
|
--- a/gcc/config/darwin.c
|
||||||
|
+++ b/gcc/config/darwin.c
|
||||||
|
@@ -128,7 +128,7 @@ int emit_aligned_common = false;
|
||||||
|
DIRECTIVE is as for output_section_asm_op. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
-output_objc_section_asm_op (const void *directive)
|
||||||
|
+output_objc_section_asm_op (const char *directive)
|
||||||
|
{
|
||||||
|
static bool been_here = false;
|
||||||
|
|
||||||
|
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
|
||||||
|
index 341c5f0d765..8ac9c4b3a44 100644
|
||||||
|
--- a/gcc/config/pa/pa.c
|
||||||
|
+++ b/gcc/config/pa/pa.c
|
||||||
|
@@ -10011,7 +10011,7 @@ pa_arg_partial_bytes (cumulative_args_t cum_v, const function_arg_info &arg)
|
||||||
|
to the default text subspace. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
-som_output_text_section_asm_op (const void *data ATTRIBUTE_UNUSED)
|
||||||
|
+som_output_text_section_asm_op (const char *data ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
gcc_assert (TARGET_SOM);
|
||||||
|
if (TARGET_GAS)
|
||||||
|
@@ -10055,7 +10055,7 @@ som_output_text_section_asm_op (const void *data ATTRIBUTE_UNUSED)
|
||||||
|
sections. This function is only used with SOM. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
-som_output_comdat_data_section_asm_op (const void *data)
|
||||||
|
+som_output_comdat_data_section_asm_op (const char *data)
|
||||||
|
{
|
||||||
|
in_section = NULL;
|
||||||
|
output_section_asm_op (data);
|
||||||
|
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
|
||||||
|
index 9b1c3a8b5ea..fa245a8714c 100644
|
||||||
|
--- a/gcc/config/rs6000/rs6000.c
|
||||||
|
+++ b/gcc/config/rs6000/rs6000.c
|
||||||
|
@@ -20232,7 +20232,7 @@ rs6000_ms_bitfield_layout_p (const_tree record_type)
|
||||||
|
/* A get_unnamed_section callback, used for switching to toc_section. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
-rs6000_elf_output_toc_section_asm_op (const void *data ATTRIBUTE_UNUSED)
|
||||||
|
+rs6000_elf_output_toc_section_asm_op (const char *data ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
if ((DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
|
||||||
|
&& TARGET_MINIMAL_TOC)
|
||||||
|
@@ -20936,35 +20936,39 @@ rs6000_xcoff_asm_globalize_label (FILE *stream, const char *name)
|
||||||
|
points to the section string variable. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
-rs6000_xcoff_output_readonly_section_asm_op (const void *directive)
|
||||||
|
+rs6000_xcoff_output_readonly_section_asm_op (const char *directive)
|
||||||
|
{
|
||||||
|
fprintf (asm_out_file, "\t.csect %s[RO],%s\n",
|
||||||
|
- *(const char *const *) directive,
|
||||||
|
+ directive
|
||||||
|
+ ? xcoff_private_rodata_section_name
|
||||||
|
+ : xcoff_read_only_section_name,
|
||||||
|
XCOFF_CSECT_DEFAULT_ALIGNMENT_STR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Likewise for read-write sections. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
-rs6000_xcoff_output_readwrite_section_asm_op (const void *directive)
|
||||||
|
+rs6000_xcoff_output_readwrite_section_asm_op (const char *)
|
||||||
|
{
|
||||||
|
fprintf (asm_out_file, "\t.csect %s[RW],%s\n",
|
||||||
|
- *(const char *const *) directive,
|
||||||
|
+ xcoff_private_data_section_name,
|
||||||
|
XCOFF_CSECT_DEFAULT_ALIGNMENT_STR);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
-rs6000_xcoff_output_tls_section_asm_op (const void *directive)
|
||||||
|
+rs6000_xcoff_output_tls_section_asm_op (const char *directive)
|
||||||
|
{
|
||||||
|
fprintf (asm_out_file, "\t.csect %s[TL],%s\n",
|
||||||
|
- *(const char *const *) directive,
|
||||||
|
+ directive
|
||||||
|
+ ? xcoff_private_data_section_name
|
||||||
|
+ : xcoff_tls_data_section_name,
|
||||||
|
XCOFF_CSECT_DEFAULT_ALIGNMENT_STR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* A get_unnamed_section callback, used for switching to toc_section. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
-rs6000_xcoff_output_toc_section_asm_op (const void *data ATTRIBUTE_UNUSED)
|
||||||
|
+rs6000_xcoff_output_toc_section_asm_op (const char *data ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
if (TARGET_MINIMAL_TOC)
|
||||||
|
{
|
||||||
|
@@ -20991,26 +20995,26 @@ rs6000_xcoff_asm_init_sections (void)
|
||||||
|
{
|
||||||
|
read_only_data_section
|
||||||
|
= get_unnamed_section (0, rs6000_xcoff_output_readonly_section_asm_op,
|
||||||
|
- &xcoff_read_only_section_name);
|
||||||
|
+ NULL);
|
||||||
|
|
||||||
|
private_data_section
|
||||||
|
= get_unnamed_section (SECTION_WRITE,
|
||||||
|
rs6000_xcoff_output_readwrite_section_asm_op,
|
||||||
|
- &xcoff_private_data_section_name);
|
||||||
|
+ NULL);
|
||||||
|
|
||||||
|
read_only_private_data_section
|
||||||
|
= get_unnamed_section (0, rs6000_xcoff_output_readonly_section_asm_op,
|
||||||
|
- &xcoff_private_rodata_section_name);
|
||||||
|
+ "");
|
||||||
|
|
||||||
|
tls_data_section
|
||||||
|
= get_unnamed_section (SECTION_TLS,
|
||||||
|
rs6000_xcoff_output_tls_section_asm_op,
|
||||||
|
- &xcoff_tls_data_section_name);
|
||||||
|
+ NULL);
|
||||||
|
|
||||||
|
tls_private_data_section
|
||||||
|
= get_unnamed_section (SECTION_TLS,
|
||||||
|
rs6000_xcoff_output_tls_section_asm_op,
|
||||||
|
- &xcoff_private_data_section_name);
|
||||||
|
+ "");
|
||||||
|
|
||||||
|
toc_section
|
||||||
|
= get_unnamed_section (0, rs6000_xcoff_output_toc_section_asm_op, NULL);
|
||||||
|
diff --git a/gcc/doc/gty.texi b/gcc/doc/gty.texi
|
||||||
|
index aaf97ae9ad5..0154bd86fe9 100644
|
||||||
|
--- a/gcc/doc/gty.texi
|
||||||
|
+++ b/gcc/doc/gty.texi
|
||||||
|
@@ -197,6 +197,15 @@ If @code{skip} is applied to a field, the type machinery will ignore it.
|
||||||
|
This is somewhat dangerous; the only safe use is in a union when one
|
||||||
|
field really isn't ever used.
|
||||||
|
|
||||||
|
+@findex callback
|
||||||
|
+@item callback
|
||||||
|
+
|
||||||
|
+@code{callback} should be applied to fields with pointer to function type
|
||||||
|
+and causes the field to be ignored similarly to @code{skip}, except when
|
||||||
|
+writing PCH and the field is non-NULL it will remember the field's address
|
||||||
|
+for relocation purposes if the process writing PCH has different load base
|
||||||
|
+from a process reading PCH.
|
||||||
|
+
|
||||||
|
@findex for_user
|
||||||
|
@item for_user
|
||||||
|
|
||||||
|
diff --git a/gcc/gengtype-state.c b/gcc/gengtype-state.c
|
||||||
|
index 891f2e18a61..fb99729bc0e 100644
|
||||||
|
--- a/gcc/gengtype-state.c
|
||||||
|
+++ b/gcc/gengtype-state.c
|
||||||
|
@@ -57,6 +57,7 @@ type_lineloc (const_type_p ty)
|
||||||
|
case TYPE_STRING:
|
||||||
|
case TYPE_POINTER:
|
||||||
|
case TYPE_ARRAY:
|
||||||
|
+ case TYPE_CALLBACK:
|
||||||
|
return NULL;
|
||||||
|
default:
|
||||||
|
gcc_unreachable ();
|
||||||
|
@@ -171,6 +172,7 @@ private:
|
||||||
|
void write_state_version (const char *version);
|
||||||
|
void write_state_scalar_type (type_p current);
|
||||||
|
void write_state_string_type (type_p current);
|
||||||
|
+ void write_state_callback_type (type_p current);
|
||||||
|
void write_state_undefined_type (type_p current);
|
||||||
|
void write_state_struct_union_type (type_p current, const char *kindstr);
|
||||||
|
void write_state_struct_type (type_p current);
|
||||||
|
@@ -898,6 +900,20 @@ state_writer::write_state_string_type (type_p current)
|
||||||
|
fatal ("Unexpected type in write_state_string_type");
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* Write the callback type. There is only one such thing! */
|
||||||
|
+void
|
||||||
|
+state_writer::write_state_callback_type (type_p current)
|
||||||
|
+{
|
||||||
|
+ if (current == &callback_type)
|
||||||
|
+ {
|
||||||
|
+ write_any_indent (0);
|
||||||
|
+ fprintf (state_file, "callback ");
|
||||||
|
+ write_state_common_type_content (current);
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ fatal ("Unexpected type in write_state_callback_type");
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Write an undefined type. */
|
||||||
|
void
|
||||||
|
state_writer::write_state_undefined_type (type_p current)
|
||||||
|
@@ -1143,6 +1159,9 @@ state_writer::write_state_type (type_p current)
|
||||||
|
case TYPE_STRING:
|
||||||
|
write_state_string_type (current);
|
||||||
|
break;
|
||||||
|
+ case TYPE_CALLBACK:
|
||||||
|
+ write_state_callback_type (current);
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1477,6 +1496,14 @@ read_state_string_type (type_p *type)
|
||||||
|
read_state_common_type_content (*type);
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* Read the callback_type. */
|
||||||
|
+static void
|
||||||
|
+read_state_callback_type (type_p *type)
|
||||||
|
+{
|
||||||
|
+ *type = &callback_type;
|
||||||
|
+ read_state_common_type_content (*type);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
|
||||||
|
/* Read a lang_bitmap representing a set of GCC front-end languages. */
|
||||||
|
static void
|
||||||
|
@@ -1834,6 +1861,11 @@ read_state_type (type_p *current)
|
||||||
|
next_state_tokens (1);
|
||||||
|
read_state_string_type (current);
|
||||||
|
}
|
||||||
|
+ else if (state_token_is_name (t0, "callback"))
|
||||||
|
+ {
|
||||||
|
+ next_state_tokens (1);
|
||||||
|
+ read_state_callback_type (current);
|
||||||
|
+ }
|
||||||
|
else if (state_token_is_name (t0, "undefined"))
|
||||||
|
{
|
||||||
|
*current = XCNEW (struct type);
|
||||||
|
diff --git a/gcc/gengtype.c b/gcc/gengtype.c
|
||||||
|
index 98d4626f87e..91eacc26932 100644
|
||||||
|
--- a/gcc/gengtype.c
|
||||||
|
+++ b/gcc/gengtype.c
|
||||||
|
@@ -167,6 +167,7 @@ dbgprint_count_type_at (const char *fil, int lin, const char *msg, type_p t)
|
||||||
|
int nb_struct = 0, nb_union = 0, nb_array = 0, nb_pointer = 0;
|
||||||
|
int nb_lang_struct = 0;
|
||||||
|
int nb_user_struct = 0, nb_undefined = 0;
|
||||||
|
+ int nb_callback = 0;
|
||||||
|
type_p p = NULL;
|
||||||
|
for (p = t; p; p = p->next)
|
||||||
|
{
|
||||||
|
@@ -197,6 +198,9 @@ dbgprint_count_type_at (const char *fil, int lin, const char *msg, type_p t)
|
||||||
|
case TYPE_ARRAY:
|
||||||
|
nb_array++;
|
||||||
|
break;
|
||||||
|
+ case TYPE_CALLBACK:
|
||||||
|
+ nb_callback++;
|
||||||
|
+ break;
|
||||||
|
case TYPE_LANG_STRUCT:
|
||||||
|
nb_lang_struct++;
|
||||||
|
break;
|
||||||
|
@@ -212,6 +216,8 @@ dbgprint_count_type_at (const char *fil, int lin, const char *msg, type_p t)
|
||||||
|
fprintf (stderr, "@@%%@@ %d structs, %d unions\n", nb_struct, nb_union);
|
||||||
|
if (nb_pointer > 0 || nb_array > 0)
|
||||||
|
fprintf (stderr, "@@%%@@ %d pointers, %d arrays\n", nb_pointer, nb_array);
|
||||||
|
+ if (nb_callback > 0)
|
||||||
|
+ fprintf (stderr, "@@%%@@ %d callbacks\n", nb_callback);
|
||||||
|
if (nb_lang_struct > 0)
|
||||||
|
fprintf (stderr, "@@%%@@ %d lang_structs\n", nb_lang_struct);
|
||||||
|
if (nb_user_struct > 0)
|
||||||
|
@@ -490,6 +496,10 @@ struct type scalar_char = {
|
||||||
|
TYPE_SCALAR, 0, 0, 0, GC_USED, {0}
|
||||||
|
};
|
||||||
|
|
||||||
|
+struct type callback_type = {
|
||||||
|
+ TYPE_CALLBACK, 0, 0, 0, GC_USED, {0}
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
/* Lists of various things. */
|
||||||
|
|
||||||
|
pair_p typedefs = NULL;
|
||||||
|
@@ -1459,7 +1469,7 @@ static void set_gc_used (pair_p);
|
||||||
|
|
||||||
|
static void
|
||||||
|
process_gc_options (options_p opt, enum gc_used_enum level, int *maybe_undef,
|
||||||
|
- int *length, int *skip, type_p *nested_ptr)
|
||||||
|
+ int *length, int *skip, int *callback, type_p *nested_ptr)
|
||||||
|
{
|
||||||
|
options_p o;
|
||||||
|
for (o = opt; o; o = o->next)
|
||||||
|
@@ -1473,6 +1483,8 @@ process_gc_options (options_p opt, enum gc_used_enum level, int *maybe_undef,
|
||||||
|
*length = 1;
|
||||||
|
else if (strcmp (o->name, "skip") == 0)
|
||||||
|
*skip = 1;
|
||||||
|
+ else if (strcmp (o->name, "callback") == 0)
|
||||||
|
+ *callback = 1;
|
||||||
|
else if (strcmp (o->name, "nested_ptr") == 0
|
||||||
|
&& o->kind == OPTION_NESTED)
|
||||||
|
*nested_ptr = ((const struct nested_ptr_data *) o->info.nested)->type;
|
||||||
|
@@ -1521,7 +1533,7 @@ set_gc_used_type (type_p t, enum gc_used_enum level,
|
||||||
|
type_p dummy2;
|
||||||
|
bool allow_undefined_field_types = (t->kind == TYPE_USER_STRUCT);
|
||||||
|
|
||||||
|
- process_gc_options (t->u.s.opt, level, &dummy, &dummy, &dummy,
|
||||||
|
+ process_gc_options (t->u.s.opt, level, &dummy, &dummy, &dummy, &dummy,
|
||||||
|
&dummy2);
|
||||||
|
|
||||||
|
if (t->u.s.base_class)
|
||||||
|
@@ -1537,9 +1549,10 @@ set_gc_used_type (type_p t, enum gc_used_enum level,
|
||||||
|
int maybe_undef = 0;
|
||||||
|
int length = 0;
|
||||||
|
int skip = 0;
|
||||||
|
+ int callback = 0;
|
||||||
|
type_p nested_ptr = NULL;
|
||||||
|
process_gc_options (f->opt, level, &maybe_undef, &length, &skip,
|
||||||
|
- &nested_ptr);
|
||||||
|
+ &callback, &nested_ptr);
|
||||||
|
|
||||||
|
if (nested_ptr && f->type->kind == TYPE_POINTER)
|
||||||
|
set_gc_used_type (nested_ptr, GC_POINTED_TO);
|
||||||
|
@@ -1549,6 +1562,8 @@ set_gc_used_type (type_p t, enum gc_used_enum level,
|
||||||
|
set_gc_used_type (f->type->u.p, GC_MAYBE_POINTED_TO);
|
||||||
|
else if (skip)
|
||||||
|
; /* target type is not used through this field */
|
||||||
|
+ else if (callback)
|
||||||
|
+ f->type = &callback_type;
|
||||||
|
else
|
||||||
|
set_gc_used_type (f->type, GC_USED, allow_undefined_field_types);
|
||||||
|
}
|
||||||
|
@@ -2512,6 +2527,7 @@ output_mangled_typename (outf_p of, const_type_p t)
|
||||||
|
{
|
||||||
|
case TYPE_NONE:
|
||||||
|
case TYPE_UNDEFINED:
|
||||||
|
+ case TYPE_CALLBACK:
|
||||||
|
gcc_unreachable ();
|
||||||
|
break;
|
||||||
|
case TYPE_POINTER:
|
||||||
|
@@ -2712,6 +2728,8 @@ walk_type (type_p t, struct walk_type_data *d)
|
||||||
|
;
|
||||||
|
else if (strcmp (oo->name, "for_user") == 0)
|
||||||
|
;
|
||||||
|
+ else if (strcmp (oo->name, "callback") == 0)
|
||||||
|
+ ;
|
||||||
|
else
|
||||||
|
error_at_line (d->line, "unknown option `%s'\n", oo->name);
|
||||||
|
|
||||||
|
@@ -2737,6 +2755,7 @@ walk_type (type_p t, struct walk_type_data *d)
|
||||||
|
{
|
||||||
|
case TYPE_SCALAR:
|
||||||
|
case TYPE_STRING:
|
||||||
|
+ case TYPE_CALLBACK:
|
||||||
|
d->process_field (t, d);
|
||||||
|
break;
|
||||||
|
|
||||||
|
@@ -3268,6 +3287,7 @@ write_types_process_field (type_p f, const struct walk_type_data *d)
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TYPE_SCALAR:
|
||||||
|
+ case TYPE_CALLBACK:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TYPE_ARRAY:
|
||||||
|
@@ -3813,6 +3833,7 @@ write_types_local_user_process_field (type_p f, const struct walk_type_data *d)
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TYPE_SCALAR:
|
||||||
|
+ case TYPE_CALLBACK:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TYPE_ARRAY:
|
||||||
|
@@ -3899,6 +3920,13 @@ write_types_local_process_field (type_p f, const struct walk_type_data *d)
|
||||||
|
case TYPE_SCALAR:
|
||||||
|
break;
|
||||||
|
|
||||||
|
+ case TYPE_CALLBACK:
|
||||||
|
+ oprintf (d->of, "%*sif ((void *)(%s) == this_obj)\n", d->indent, "",
|
||||||
|
+ d->prev_val[3]);
|
||||||
|
+ oprintf (d->of, "%*s gt_pch_note_callback (&(%s), this_obj);\n",
|
||||||
|
+ d->indent, "", d->val);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
case TYPE_ARRAY:
|
||||||
|
case TYPE_NONE:
|
||||||
|
case TYPE_UNDEFINED:
|
||||||
|
@@ -4427,6 +4455,7 @@ write_root (outf_p f, pair_p v, type_p type, const char *name, int has_length,
|
||||||
|
case TYPE_UNDEFINED:
|
||||||
|
case TYPE_UNION:
|
||||||
|
case TYPE_LANG_STRUCT:
|
||||||
|
+ case TYPE_CALLBACK:
|
||||||
|
error_at_line (line, "global `%s' is unimplemented type", name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -4721,6 +4750,9 @@ dump_typekind (int indent, enum typekind kind)
|
||||||
|
case TYPE_ARRAY:
|
||||||
|
printf ("TYPE_ARRAY");
|
||||||
|
break;
|
||||||
|
+ case TYPE_CALLBACK:
|
||||||
|
+ printf ("TYPE_CALLBACK");
|
||||||
|
+ break;
|
||||||
|
case TYPE_LANG_STRUCT:
|
||||||
|
printf ("TYPE_LANG_STRUCT");
|
||||||
|
break;
|
||||||
|
@@ -4887,6 +4919,7 @@ dump_type (int indent, type_p t)
|
||||||
|
t->u.scalar_is_char ? "true" : "false");
|
||||||
|
break;
|
||||||
|
case TYPE_STRING:
|
||||||
|
+ case TYPE_CALLBACK:
|
||||||
|
break;
|
||||||
|
case TYPE_STRUCT:
|
||||||
|
case TYPE_UNION:
|
||||||
|
diff --git a/gcc/gengtype.h b/gcc/gengtype.h
|
||||||
|
index 4fe8f0f7232..c32faba2995 100644
|
||||||
|
--- a/gcc/gengtype.h
|
||||||
|
+++ b/gcc/gengtype.h
|
||||||
|
@@ -149,6 +149,9 @@ enum typekind {
|
||||||
|
TYPE_UNION, /* Type for GTY-ed discriminated unions. */
|
||||||
|
TYPE_POINTER, /* Pointer type to GTY-ed type. */
|
||||||
|
TYPE_ARRAY, /* Array of GTY-ed types. */
|
||||||
|
+ TYPE_CALLBACK, /* A function pointer that needs relocation if
|
||||||
|
+ the executable has been loaded at a different
|
||||||
|
+ address. */
|
||||||
|
TYPE_LANG_STRUCT, /* GCC front-end language specific structs.
|
||||||
|
Various languages may have homonymous but
|
||||||
|
different structs. */
|
||||||
|
@@ -326,6 +329,9 @@ extern struct type string_type;
|
||||||
|
extern struct type scalar_nonchar;
|
||||||
|
extern struct type scalar_char;
|
||||||
|
|
||||||
|
+/* The one and only TYPE_CALLBACK. */
|
||||||
|
+extern struct type callback_type;
|
||||||
|
+
|
||||||
|
/* Test if a type is a union, either a plain one or a language
|
||||||
|
specific one. */
|
||||||
|
#define UNION_P(x) \
|
||||||
|
diff --git a/gcc/ggc-common.c b/gcc/ggc-common.c
|
||||||
|
index 357bda13f97..88e1af4ba4a 100644
|
||||||
|
--- a/gcc/ggc-common.c
|
||||||
|
+++ b/gcc/ggc-common.c
|
||||||
|
@@ -249,6 +249,7 @@ saving_hasher::equal (const ptr_data *p1, const void *p2)
|
||||||
|
}
|
||||||
|
|
||||||
|
static hash_table<saving_hasher> *saving_htab;
|
||||||
|
+static vec<void *> callback_vec;
|
||||||
|
|
||||||
|
/* Register an object in the hash table. */
|
||||||
|
|
||||||
|
@@ -281,6 +282,23 @@ gt_pch_note_object (void *obj, void *note_ptr_cookie,
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* Register address of a callback pointer. */
|
||||||
|
+void
|
||||||
|
+gt_pch_note_callback (void *obj, void *base)
|
||||||
|
+{
|
||||||
|
+ void *ptr;
|
||||||
|
+ memcpy (&ptr, obj, sizeof (void *));
|
||||||
|
+ if (ptr != NULL)
|
||||||
|
+ {
|
||||||
|
+ struct ptr_data *data
|
||||||
|
+ = (struct ptr_data *)
|
||||||
|
+ saving_htab->find_with_hash (base, POINTER_HASH (base));
|
||||||
|
+ gcc_assert (data);
|
||||||
|
+ callback_vec.safe_push ((char *) data->new_addr
|
||||||
|
+ + ((char *) obj - (char *) base));
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Register an object in the hash table. */
|
||||||
|
|
||||||
|
void
|
||||||
|
@@ -443,6 +461,10 @@ gt_pch_save (FILE *f)
|
||||||
|
(The extra work goes in HOST_HOOKS_GT_PCH_GET_ADDRESS and
|
||||||
|
HOST_HOOKS_GT_PCH_USE_ADDRESS.) */
|
||||||
|
mmi.preferred_base = host_hooks.gt_pch_get_address (mmi.size, fileno (f));
|
||||||
|
+ /* If the host cannot supply any suitable address for this, we are stuck. */
|
||||||
|
+ if (mmi.preferred_base == NULL)
|
||||||
|
+ fatal_error (input_location,
|
||||||
|
+ "cannot write PCH file: required memory segment unavailable");
|
||||||
|
|
||||||
|
ggc_pch_this_base (state.d, mmi.preferred_base);
|
||||||
|
|
||||||
|
@@ -575,10 +597,20 @@ gt_pch_save (FILE *f)
|
||||||
|
ggc_pch_finish (state.d, state.f);
|
||||||
|
gt_pch_fixup_stringpool ();
|
||||||
|
|
||||||
|
+ unsigned num_callbacks = callback_vec.length ();
|
||||||
|
+ void (*pch_save) (FILE *) = >_pch_save;
|
||||||
|
+ if (fwrite (&pch_save, sizeof (pch_save), 1, f) != 1
|
||||||
|
+ || fwrite (&num_callbacks, sizeof (num_callbacks), 1, f) != 1
|
||||||
|
+ || (num_callbacks
|
||||||
|
+ && fwrite (callback_vec.address (), sizeof (void *), num_callbacks,
|
||||||
|
+ f) != num_callbacks))
|
||||||
|
+ fatal_error (input_location, "cannot write PCH file: %m");
|
||||||
|
+
|
||||||
|
XDELETE (state.ptrs);
|
||||||
|
XDELETE (this_object);
|
||||||
|
delete saving_htab;
|
||||||
|
saving_htab = NULL;
|
||||||
|
+ callback_vec.release ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read the state of the compiler back in from F. */
|
||||||
|
@@ -592,6 +624,13 @@ gt_pch_restore (FILE *f)
|
||||||
|
struct mmap_info mmi;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
+ /* We are about to reload the line maps along with the rest of the PCH
|
||||||
|
+ data, which means that the (loaded) ones cannot be guaranteed to be
|
||||||
|
+ in any valid state for reporting diagnostics that happen during the
|
||||||
|
+ load. Save the current table (and use it during the loading process
|
||||||
|
+ below). */
|
||||||
|
+ class line_maps *save_line_table = line_table;
|
||||||
|
+
|
||||||
|
/* Delete any deletable objects. This makes ggc_pch_read much
|
||||||
|
faster, as it can be sure that no GCable objects remain other
|
||||||
|
than the ones just read in. */
|
||||||
|
@@ -606,20 +645,40 @@ gt_pch_restore (FILE *f)
|
||||||
|
fatal_error (input_location, "cannot read PCH file: %m");
|
||||||
|
|
||||||
|
/* Read in all the global pointers, in 6 easy loops. */
|
||||||
|
+ bool error_reading_pointers = false;
|
||||||
|
for (rt = gt_ggc_rtab; *rt; rt++)
|
||||||
|
for (rti = *rt; rti->base != NULL; rti++)
|
||||||
|
for (i = 0; i < rti->nelt; i++)
|
||||||
|
if (fread ((char *)rti->base + rti->stride * i,
|
||||||
|
sizeof (void *), 1, f) != 1)
|
||||||
|
- fatal_error (input_location, "cannot read PCH file: %m");
|
||||||
|
+ error_reading_pointers = true;
|
||||||
|
+
|
||||||
|
+ /* Stash the newly read-in line table pointer - it does not point to
|
||||||
|
+ anything meaningful yet, so swap the old one back in. */
|
||||||
|
+ class line_maps *new_line_table = line_table;
|
||||||
|
+ line_table = save_line_table;
|
||||||
|
+ if (error_reading_pointers)
|
||||||
|
+ fatal_error (input_location, "cannot read PCH file: %m");
|
||||||
|
|
||||||
|
if (fread (&mmi, sizeof (mmi), 1, f) != 1)
|
||||||
|
fatal_error (input_location, "cannot read PCH file: %m");
|
||||||
|
|
||||||
|
result = host_hooks.gt_pch_use_address (mmi.preferred_base, mmi.size,
|
||||||
|
fileno (f), mmi.offset);
|
||||||
|
+
|
||||||
|
+ /* We could not mmap or otherwise allocate the required memory at the
|
||||||
|
+ address needed. */
|
||||||
|
if (result < 0)
|
||||||
|
- fatal_error (input_location, "had to relocate PCH");
|
||||||
|
+ {
|
||||||
|
+ sorry_at (input_location, "PCH relocation is not yet supported");
|
||||||
|
+ /* There is no point in continuing from here, we will only end up
|
||||||
|
+ with a crashed (most likely hanging) compiler. */
|
||||||
|
+ exit (-1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* (0) We allocated memory, but did not mmap the file, so we need to read
|
||||||
|
+ the data in manually. (>0) Otherwise the mmap succeed for the address
|
||||||
|
+ we wanted. */
|
||||||
|
if (result == 0)
|
||||||
|
{
|
||||||
|
if (fseek (f, mmi.offset, SEEK_SET) != 0
|
||||||
|
@@ -632,6 +691,34 @@ gt_pch_restore (FILE *f)
|
||||||
|
ggc_pch_read (f, mmi.preferred_base);
|
||||||
|
|
||||||
|
gt_pch_restore_stringpool ();
|
||||||
|
+
|
||||||
|
+ void (*pch_save) (FILE *);
|
||||||
|
+ unsigned num_callbacks;
|
||||||
|
+ if (fread (&pch_save, sizeof (pch_save), 1, f) != 1
|
||||||
|
+ || fread (&num_callbacks, sizeof (num_callbacks), 1, f) != 1)
|
||||||
|
+ fatal_error (input_location, "cannot read PCH file: %m");
|
||||||
|
+ if (pch_save != >_pch_save)
|
||||||
|
+ {
|
||||||
|
+ uintptr_t bias = (uintptr_t) >_pch_save - (uintptr_t) pch_save;
|
||||||
|
+ void **ptrs = XNEWVEC (void *, num_callbacks);
|
||||||
|
+ unsigned i;
|
||||||
|
+
|
||||||
|
+ if (fread (ptrs, sizeof (void *), num_callbacks, f) != num_callbacks)
|
||||||
|
+ fatal_error (input_location, "cannot read PCH file: %m");
|
||||||
|
+ for (i = 0; i < num_callbacks; ++i)
|
||||||
|
+ {
|
||||||
|
+ memcpy (&pch_save, ptrs[i], sizeof (pch_save));
|
||||||
|
+ pch_save = (void (*) (FILE *)) ((uintptr_t) pch_save + bias);
|
||||||
|
+ memcpy (ptrs[i], &pch_save, sizeof (pch_save));
|
||||||
|
+ }
|
||||||
|
+ XDELETE (ptrs);
|
||||||
|
+ }
|
||||||
|
+ else if (fseek (f, num_callbacks * sizeof (void *), SEEK_CUR) != 0)
|
||||||
|
+ fatal_error (input_location, "cannot read PCH file: %m");
|
||||||
|
+
|
||||||
|
+ /* Barring corruption of the PCH file, the restored line table should be
|
||||||
|
+ complete and usable. */
|
||||||
|
+ line_table = new_line_table;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Default version of HOST_HOOKS_GT_PCH_GET_ADDRESS when mmap is not present.
|
||||||
|
diff --git a/gcc/ggc.h b/gcc/ggc.h
|
||||||
|
index 65f6cb4d19d..3339394b547 100644
|
||||||
|
--- a/gcc/ggc.h
|
||||||
|
+++ b/gcc/ggc.h
|
||||||
|
@@ -46,6 +46,10 @@ typedef void (*gt_handle_reorder) (void *, void *, gt_pointer_operator,
|
||||||
|
/* Used by the gt_pch_n_* routines. Register an object in the hash table. */
|
||||||
|
extern int gt_pch_note_object (void *, void *, gt_note_pointers);
|
||||||
|
|
||||||
|
+/* Used by the gt_pch_p_* routines. Register address of a callback
|
||||||
|
+ pointer. */
|
||||||
|
+extern void gt_pch_note_callback (void *, void *);
|
||||||
|
+
|
||||||
|
/* Used by the gt_pch_n_* routines. Register that an object has a reorder
|
||||||
|
function. */
|
||||||
|
extern void gt_pch_note_reorder (void *, void *, gt_handle_reorder);
|
||||||
|
diff --git a/gcc/output.h b/gcc/output.h
|
||||||
|
index 2bfeed93c56..7412407c2c0 100644
|
||||||
|
--- a/gcc/output.h
|
||||||
|
+++ b/gcc/output.h
|
||||||
|
@@ -458,7 +458,7 @@ struct GTY(()) named_section {
|
||||||
|
|
||||||
|
/* A callback that writes the assembly code for switching to an unnamed
|
||||||
|
section. The argument provides callback-specific data. */
|
||||||
|
-typedef void (*unnamed_section_callback) (const void *);
|
||||||
|
+typedef void (*unnamed_section_callback) (const char *);
|
||||||
|
|
||||||
|
/* Information about a SECTION_UNNAMED section. */
|
||||||
|
struct GTY(()) unnamed_section {
|
||||||
|
@@ -466,8 +466,8 @@ struct GTY(()) unnamed_section {
|
||||||
|
|
||||||
|
/* The callback used to switch to the section, and the data that
|
||||||
|
should be passed to the callback. */
|
||||||
|
- unnamed_section_callback GTY ((skip)) callback;
|
||||||
|
- const void *GTY ((skip)) data;
|
||||||
|
+ unnamed_section_callback GTY ((callback)) callback;
|
||||||
|
+ const char *data;
|
||||||
|
|
||||||
|
/* The next entry in the chain of unnamed sections. */
|
||||||
|
section *next;
|
||||||
|
@@ -491,7 +491,7 @@ struct GTY(()) noswitch_section {
|
||||||
|
struct section_common common;
|
||||||
|
|
||||||
|
/* The callback used to assemble decls in this section. */
|
||||||
|
- noswitch_section_callback GTY ((skip)) callback;
|
||||||
|
+ noswitch_section_callback GTY ((callback)) callback;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Information about a section, which may be named or unnamed. */
|
||||||
|
@@ -526,8 +526,8 @@ extern GTY(()) section *bss_noswitch_section;
|
||||||
|
extern GTY(()) section *in_section;
|
||||||
|
extern GTY(()) bool in_cold_section_p;
|
||||||
|
|
||||||
|
-extern section *get_unnamed_section (unsigned int, void (*) (const void *),
|
||||||
|
- const void *);
|
||||||
|
+extern section *get_unnamed_section (unsigned int, void (*) (const char *),
|
||||||
|
+ const char *);
|
||||||
|
extern section *get_section (const char *, unsigned int, tree,
|
||||||
|
bool not_existing = false);
|
||||||
|
extern section *get_named_section (tree, const char *, int);
|
||||||
|
@@ -549,7 +549,7 @@ extern section *get_cdtor_priority_section (int, bool);
|
||||||
|
|
||||||
|
extern bool unlikely_text_section_p (section *);
|
||||||
|
extern void switch_to_section (section *, tree = nullptr);
|
||||||
|
-extern void output_section_asm_op (const void *);
|
||||||
|
+extern void output_section_asm_op (const char *);
|
||||||
|
|
||||||
|
extern void record_tm_clone_pair (tree, tree);
|
||||||
|
extern void finish_tm_clone_pairs (void);
|
||||||
|
diff --git a/gcc/tree-core.h b/gcc/tree-core.h
|
||||||
|
index c31b8ebf249..e2fd2e67440 100644
|
||||||
|
--- a/gcc/tree-core.h
|
||||||
|
+++ b/gcc/tree-core.h
|
||||||
|
@@ -1927,7 +1927,7 @@ struct GTY(()) tree_function_decl {
|
||||||
|
struct GTY(()) tree_translation_unit_decl {
|
||||||
|
struct tree_decl_common common;
|
||||||
|
/* Source language of this translation unit. Used for DWARF output. */
|
||||||
|
- const char * GTY((skip(""))) language;
|
||||||
|
+ const char *language;
|
||||||
|
/* TODO: Non-optimization used to build this translation unit. */
|
||||||
|
/* TODO: Root of a partial DWARF tree for global types and decls. */
|
||||||
|
};
|
||||||
|
diff --git a/gcc/varasm.c b/gcc/varasm.c
|
||||||
|
index a7ef9b8d9fe..baf9f1ba0e4 100644
|
||||||
|
--- a/gcc/varasm.c
|
||||||
|
+++ b/gcc/varasm.c
|
||||||
|
@@ -250,8 +250,8 @@ object_block_hasher::hash (object_block *old)
|
||||||
|
/* Return a new unnamed section with the given fields. */
|
||||||
|
|
||||||
|
section *
|
||||||
|
-get_unnamed_section (unsigned int flags, void (*callback) (const void *),
|
||||||
|
- const void *data)
|
||||||
|
+get_unnamed_section (unsigned int flags, void (*callback) (const char *),
|
||||||
|
+ const char *data)
|
||||||
|
{
|
||||||
|
section *sect;
|
||||||
|
|
||||||
|
@@ -7753,9 +7753,9 @@ file_end_indicate_split_stack (void)
|
||||||
|
a get_unnamed_section callback. */
|
||||||
|
|
||||||
|
void
|
||||||
|
-output_section_asm_op (const void *directive)
|
||||||
|
+output_section_asm_op (const char *directive)
|
||||||
|
{
|
||||||
|
- fprintf (asm_out_file, "%s\n", (const char *) directive);
|
||||||
|
+ fprintf (asm_out_file, "%s\n", directive);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Emit assembly code to switch to section NEW_SECTION. Do nothing if
|
||||||
|
diff --git a/libcpp/include/line-map.h b/libcpp/include/line-map.h
|
||||||
|
index 7d964172469..1073542681d 100644
|
||||||
|
--- a/libcpp/include/line-map.h
|
||||||
|
+++ b/libcpp/include/line-map.h
|
||||||
|
@@ -803,11 +803,11 @@ public:
|
||||||
|
unsigned int max_column_hint;
|
||||||
|
|
||||||
|
/* The allocator to use when resizing 'maps', defaults to xrealloc. */
|
||||||
|
- line_map_realloc reallocator;
|
||||||
|
+ line_map_realloc GTY((callback)) reallocator;
|
||||||
|
|
||||||
|
/* The allocators' function used to know the actual size it
|
||||||
|
allocated, for a certain allocation size requested. */
|
||||||
|
- line_map_round_alloc_size_func round_alloc_size;
|
||||||
|
+ line_map_round_alloc_size_func GTY((callback)) round_alloc_size;
|
||||||
|
|
||||||
|
struct location_adhoc_data_map location_adhoc_data_map;
|
||||||
|
|
@ -33,7 +33,7 @@ gcc/testsuite/
|
|||||||
|
|
||||||
--- libcpp/macro.c.jj
|
--- libcpp/macro.c.jj
|
||||||
+++ libcpp/macro.c
|
+++ libcpp/macro.c
|
||||||
@@ -295,7 +295,7 @@ static cpp_context *next_context (cpp_reader *);
|
@@ -295,7 +295,7 @@ static cpp_context *next_context (cpp_re
|
||||||
static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
|
static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
|
||||||
static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
|
static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
|
||||||
static const cpp_token *stringify_arg (cpp_reader *, const cpp_token **,
|
static const cpp_token *stringify_arg (cpp_reader *, const cpp_token **,
|
||||||
@ -42,7 +42,7 @@ gcc/testsuite/
|
|||||||
static void paste_all_tokens (cpp_reader *, const cpp_token *);
|
static void paste_all_tokens (cpp_reader *, const cpp_token *);
|
||||||
static bool paste_tokens (cpp_reader *, location_t,
|
static bool paste_tokens (cpp_reader *, location_t,
|
||||||
const cpp_token **, const cpp_token *);
|
const cpp_token **, const cpp_token *);
|
||||||
@@ -834,8 +834,7 @@ cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
|
@@ -826,8 +826,7 @@ cpp_quote_string (uchar *dest, const uch
|
||||||
/* Convert a token sequence FIRST to FIRST+COUNT-1 to a single string token
|
/* Convert a token sequence FIRST to FIRST+COUNT-1 to a single string token
|
||||||
according to the rules of the ISO C #-operator. */
|
according to the rules of the ISO C #-operator. */
|
||||||
static const cpp_token *
|
static const cpp_token *
|
||||||
@ -52,7 +52,7 @@ gcc/testsuite/
|
|||||||
{
|
{
|
||||||
unsigned char *dest;
|
unsigned char *dest;
|
||||||
unsigned int i, escape_it, backslash_count = 0;
|
unsigned int i, escape_it, backslash_count = 0;
|
||||||
@@ -852,24 +851,6 @@ stringify_arg (cpp_reader *pfile, const cpp_token **first, unsigned int count,
|
@@ -844,24 +843,6 @@ stringify_arg (cpp_reader *pfile, const
|
||||||
{
|
{
|
||||||
const cpp_token *token = first[i];
|
const cpp_token *token = first[i];
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ gcc/testsuite/
|
|||||||
if (token->type == CPP_PADDING)
|
if (token->type == CPP_PADDING)
|
||||||
{
|
{
|
||||||
if (source == NULL
|
if (source == NULL
|
||||||
@@ -1003,6 +984,7 @@ paste_tokens (cpp_reader *pfile, location_t location,
|
@@ -995,6 +976,7 @@ paste_tokens (cpp_reader *pfile, locatio
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,7 +85,7 @@ gcc/testsuite/
|
|||||||
*plhs = lhs;
|
*plhs = lhs;
|
||||||
_cpp_pop_buffer (pfile);
|
_cpp_pop_buffer (pfile);
|
||||||
return true;
|
return true;
|
||||||
@@ -1945,8 +1927,7 @@ replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro,
|
@@ -1937,8 +1919,7 @@ replace_args (cpp_reader *pfile, cpp_has
|
||||||
if (src->flags & STRINGIFY_ARG)
|
if (src->flags & STRINGIFY_ARG)
|
||||||
{
|
{
|
||||||
if (!arg->stringified)
|
if (!arg->stringified)
|
||||||
@ -95,7 +95,7 @@ gcc/testsuite/
|
|||||||
}
|
}
|
||||||
else if ((src->flags & PASTE_LEFT)
|
else if ((src->flags & PASTE_LEFT)
|
||||||
|| (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
|
|| (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
|
||||||
@@ -2066,11 +2047,46 @@ replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro,
|
@@ -2065,11 +2046,46 @@ replace_args (cpp_reader *pfile, cpp_has
|
||||||
{
|
{
|
||||||
unsigned int count
|
unsigned int count
|
||||||
= start ? paste_flag - start : tokens_buff_count (buff);
|
= start ? paste_flag - start : tokens_buff_count (buff);
|
||||||
|
@ -66,7 +66,7 @@ gcc/testsuite/
|
|||||||
|
|
||||||
/* The state variable:
|
/* The state variable:
|
||||||
0 means not parsing
|
0 means not parsing
|
||||||
@@ -284,7 +294,8 @@ static _cpp_buff *collect_args (cpp_reader *, const cpp_hashnode *,
|
@@ -284,7 +294,8 @@ static _cpp_buff *collect_args (cpp_read
|
||||||
static cpp_context *next_context (cpp_reader *);
|
static cpp_context *next_context (cpp_reader *);
|
||||||
static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
|
static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
|
||||||
static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
|
static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
|
||||||
@ -76,7 +76,7 @@ gcc/testsuite/
|
|||||||
static void paste_all_tokens (cpp_reader *, const cpp_token *);
|
static void paste_all_tokens (cpp_reader *, const cpp_token *);
|
||||||
static bool paste_tokens (cpp_reader *, location_t,
|
static bool paste_tokens (cpp_reader *, location_t,
|
||||||
const cpp_token **, const cpp_token *);
|
const cpp_token **, const cpp_token *);
|
||||||
@@ -818,10 +829,11 @@ cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
|
@@ -812,10 +823,11 @@ cpp_quote_string (uchar *dest, const uch
|
||||||
return dest;
|
return dest;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ gcc/testsuite/
|
|||||||
{
|
{
|
||||||
unsigned char *dest;
|
unsigned char *dest;
|
||||||
unsigned int i, escape_it, backslash_count = 0;
|
unsigned int i, escape_it, backslash_count = 0;
|
||||||
@@ -834,9 +846,27 @@ stringify_arg (cpp_reader *pfile, macro_arg *arg)
|
@@ -828,9 +840,27 @@ stringify_arg (cpp_reader *pfile, macro_
|
||||||
*dest++ = '"';
|
*dest++ = '"';
|
||||||
|
|
||||||
/* Loop, reading in the argument's tokens. */
|
/* Loop, reading in the argument's tokens. */
|
||||||
@ -121,7 +121,7 @@ gcc/testsuite/
|
|||||||
|
|
||||||
if (token->type == CPP_PADDING)
|
if (token->type == CPP_PADDING)
|
||||||
{
|
{
|
||||||
@@ -923,7 +953,7 @@ paste_tokens (cpp_reader *pfile, location_t location,
|
@@ -917,7 +947,7 @@ paste_tokens (cpp_reader *pfile, locatio
|
||||||
cpp_token *lhs;
|
cpp_token *lhs;
|
||||||
unsigned int len;
|
unsigned int len;
|
||||||
|
|
||||||
@ -130,7 +130,7 @@ gcc/testsuite/
|
|||||||
buf = (unsigned char *) alloca (len);
|
buf = (unsigned char *) alloca (len);
|
||||||
end = lhsend = cpp_spell_token (pfile, *plhs, buf, true);
|
end = lhsend = cpp_spell_token (pfile, *plhs, buf, true);
|
||||||
|
|
||||||
@@ -949,8 +979,10 @@ paste_tokens (cpp_reader *pfile, location_t location,
|
@@ -943,8 +973,10 @@ paste_tokens (cpp_reader *pfile, locatio
|
||||||
location_t saved_loc = lhs->src_loc;
|
location_t saved_loc = lhs->src_loc;
|
||||||
|
|
||||||
_cpp_pop_buffer (pfile);
|
_cpp_pop_buffer (pfile);
|
||||||
@ -143,7 +143,7 @@ gcc/testsuite/
|
|||||||
|
|
||||||
/* We have to remove the PASTE_LEFT flag from the old lhs, but
|
/* We have to remove the PASTE_LEFT flag from the old lhs, but
|
||||||
we want to keep the new location. */
|
we want to keep the new location. */
|
||||||
@@ -962,8 +994,10 @@ paste_tokens (cpp_reader *pfile, location_t location,
|
@@ -956,8 +988,10 @@ paste_tokens (cpp_reader *pfile, locatio
|
||||||
/* Mandatory error for all apart from assembler. */
|
/* Mandatory error for all apart from assembler. */
|
||||||
if (CPP_OPTION (pfile, lang) != CLK_ASM)
|
if (CPP_OPTION (pfile, lang) != CLK_ASM)
|
||||||
cpp_error_with_line (pfile, CPP_DL_ERROR, location, 0,
|
cpp_error_with_line (pfile, CPP_DL_ERROR, location, 0,
|
||||||
@ -156,7 +156,7 @@ gcc/testsuite/
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1039,7 +1073,10 @@ paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
|
@@ -1033,7 +1067,10 @@ paste_all_tokens (cpp_reader *pfile, con
|
||||||
abort ();
|
abort ();
|
||||||
}
|
}
|
||||||
if (!paste_tokens (pfile, virt_loc, &lhs, rhs))
|
if (!paste_tokens (pfile, virt_loc, &lhs, rhs))
|
||||||
@ -168,7 +168,7 @@ gcc/testsuite/
|
|||||||
}
|
}
|
||||||
while (rhs->flags & PASTE_LEFT);
|
while (rhs->flags & PASTE_LEFT);
|
||||||
|
|
||||||
@@ -1906,7 +1943,8 @@ replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro,
|
@@ -1900,7 +1937,8 @@ replace_args (cpp_reader *pfile, cpp_has
|
||||||
if (src->flags & STRINGIFY_ARG)
|
if (src->flags & STRINGIFY_ARG)
|
||||||
{
|
{
|
||||||
if (!arg->stringified)
|
if (!arg->stringified)
|
||||||
@ -178,11 +178,10 @@ gcc/testsuite/
|
|||||||
}
|
}
|
||||||
else if ((src->flags & PASTE_LEFT)
|
else if ((src->flags & PASTE_LEFT)
|
||||||
|| (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
|
|| (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
|
||||||
@@ -2029,7 +2067,24 @@ replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro,
|
@@ -2023,6 +2061,24 @@ replace_args (cpp_reader *pfile, cpp_has
|
||||||
paste_flag = tokens_buff_last_token_ptr (buff);
|
paste_flag = tokens_buff_last_token_ptr (buff);
|
||||||
}
|
}
|
||||||
|
|
||||||
- if (src->flags & PASTE_LEFT)
|
|
||||||
+ if (vaopt_tracker.stringify ())
|
+ if (vaopt_tracker.stringify ())
|
||||||
+ {
|
+ {
|
||||||
+ unsigned int count
|
+ unsigned int count
|
||||||
@ -199,12 +198,12 @@ gcc/testsuite/
|
|||||||
+ tokens_buff_add_token (buff, virt_locs,
|
+ tokens_buff_add_token (buff, virt_locs,
|
||||||
+ t, t->src_loc, t->src_loc,
|
+ t, t->src_loc, t->src_loc,
|
||||||
+ NULL, 0);
|
+ NULL, 0);
|
||||||
|
+ continue;
|
||||||
+ }
|
+ }
|
||||||
+ else if (src->flags & PASTE_LEFT)
|
if (start && paste_flag == start && (*start)->flags & PASTE_LEFT)
|
||||||
{
|
/* If __VA_OPT__ expands to nothing (either because __VA_ARGS__
|
||||||
/* With a non-empty __VA_OPT__ on the LHS of ##, the last
|
is empty or because it is __VA_OPT__() ), drop PASTE_LEFT
|
||||||
token should be flagged PASTE_LEFT. */
|
@@ -3584,7 +3640,10 @@ create_iso_definition (cpp_reader *pfile
|
||||||
@@ -3585,7 +3640,10 @@ create_iso_definition (cpp_reader *pfile)
|
|
||||||
function-like macros when lexing the subsequent token. */
|
function-like macros when lexing the subsequent token. */
|
||||||
if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
|
if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
|
||||||
{
|
{
|
||||||
|
284
SPECS/gcc.spec
284
SPECS/gcc.spec
@ -1,15 +1,13 @@
|
|||||||
%global DATE 20211203
|
%global DATE 20220127
|
||||||
%global gitrev e41308252e835ddedcabfd4a98240080c6583a43
|
%global gitrev 2fa6e5c54e782377faa4c9c1f0e0b16db27f266c
|
||||||
%global gcc_version 11.2.1
|
%global gcc_version 11.2.1
|
||||||
%global gcc_major 11
|
%global gcc_major 11
|
||||||
# Note, gcc_release must be integer, if you want to add suffixes to
|
# Note, gcc_release must be integer, if you want to add suffixes to
|
||||||
# %%{release}, append them after %%{gcc_release} on Release: line.
|
# %%{release}, append them after %%{gcc_release} on Release: line.
|
||||||
%global gcc_release 7
|
%global gcc_release 9
|
||||||
%global nvptx_tools_gitrev 5f6f343a302d620b0868edab376c00b15741e39e
|
%global nvptx_tools_gitrev 5f6f343a302d620b0868edab376c00b15741e39e
|
||||||
%global newlib_cygwin_gitrev 50e2a63b04bdd018484605fbb954fd1bd5147fa0
|
%global newlib_cygwin_gitrev 50e2a63b04bdd018484605fbb954fd1bd5147fa0
|
||||||
%global _unpackaged_files_terminate_build 0
|
%global _unpackaged_files_terminate_build 0
|
||||||
# Hardening slows the compiler way too much.
|
|
||||||
%undefine _hardened_build
|
|
||||||
%if 0%{?fedora} > 27 || 0%{?rhel} > 7
|
%if 0%{?fedora} > 27 || 0%{?rhel} > 7
|
||||||
# Until annobin is fixed (#1519165).
|
# Until annobin is fixed (#1519165).
|
||||||
%undefine _annotated_build
|
%undefine _annotated_build
|
||||||
@ -115,25 +113,6 @@
|
|||||||
%ifarch x86_64
|
%ifarch x86_64
|
||||||
%global multilib_32_arch i686
|
%global multilib_32_arch i686
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
# Use "--without annobin-plugin" to disable the building of the annobin plugin for GCC.
|
|
||||||
%bcond_without annobin_plugin
|
|
||||||
|
|
||||||
# Use "--without tests" to disable the testsuite.
|
|
||||||
# Not technically needed for building the annobin plugin, but this has been added
|
|
||||||
# because not running the testsuites makes building the gcc rpms a *lot* faster.
|
|
||||||
%bcond_without tests
|
|
||||||
|
|
||||||
# The next line has been stolen from redhat-rpm-config.spec.
|
|
||||||
# We install the version info into a file in this directory, rather than
|
|
||||||
# gcc's plugin directory, because there is no reliable way for redhat-rpm-config
|
|
||||||
# to determine the name of gcc's plugin directory.
|
|
||||||
# FIXME: We need a way to cope if more than one version of gcc is installed.
|
|
||||||
%global rrcdir /usr/lib/rpm/redhat
|
|
||||||
|
|
||||||
# A file that records information about the built gcc-annobin plugin.
|
|
||||||
%global gver %{rrcdir}/gcc-annobin-plugin-version-info
|
|
||||||
|
|
||||||
Summary: Various compilers (C, C++, Objective-C, ...)
|
Summary: Various compilers (C, C++, Objective-C, ...)
|
||||||
Name: gcc
|
Name: gcc
|
||||||
Version: %{gcc_version}
|
Version: %{gcc_version}
|
||||||
@ -224,14 +203,6 @@ BuildRequires: libunwind >= 0.98
|
|||||||
BuildRequires: doxygen >= 1.7.1
|
BuildRequires: doxygen >= 1.7.1
|
||||||
BuildRequires: graphviz, dblatex, texlive-collection-latex, docbook5-style-xsl
|
BuildRequires: graphviz, dblatex, texlive-collection-latex, docbook5-style-xsl
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%if %{with annobin_plugin}
|
|
||||||
# Starting with release 10.01 annobin fixed a bug in its configure scripts which prevented them from working with a built but not installed compiler
|
|
||||||
BuildRequires: annobin >= 10.01
|
|
||||||
# See The %%install phase for why we need xz.
|
|
||||||
BuildRequires: xz
|
|
||||||
%endif
|
|
||||||
|
|
||||||
Requires: cpp = %{version}-%{release}
|
Requires: cpp = %{version}-%{release}
|
||||||
# Need .eh_frame ld optimizations
|
# Need .eh_frame ld optimizations
|
||||||
# Need proper visibility support
|
# Need proper visibility support
|
||||||
@ -298,6 +269,11 @@ Patch16: gcc11-stringify-__VA_OPT__.patch
|
|||||||
Patch17: gcc11-stringify-__VA_OPT__-2.patch
|
Patch17: gcc11-stringify-__VA_OPT__-2.patch
|
||||||
Patch18: gcc11-Wbidi-chars.patch
|
Patch18: gcc11-Wbidi-chars.patch
|
||||||
Patch19: gcc11-dg-ice-fixes.patch
|
Patch19: gcc11-dg-ice-fixes.patch
|
||||||
|
Patch20: gcc11-relocatable-pch.patch
|
||||||
|
Patch21: gcc11-dejagnu-multiline.patch
|
||||||
|
Patch22: gcc11-libsanitizer-pthread.patch
|
||||||
|
Patch23: gcc11-pie.patch
|
||||||
|
Patch24: gcc11-bind-now.patch
|
||||||
|
|
||||||
Patch100: gcc11-fortran-fdec-duplicates.patch
|
Patch100: gcc11-fortran-fdec-duplicates.patch
|
||||||
Patch101: gcc11-fortran-flogical-as-integer.patch
|
Patch101: gcc11-fortran-flogical-as-integer.patch
|
||||||
@ -800,6 +776,25 @@ NVidia PTX. OpenMP and OpenACC programs linked with -fopenmp will
|
|||||||
by default add PTX code into the binaries, which can be offloaded
|
by default add PTX code into the binaries, which can be offloaded
|
||||||
to NVidia PTX capable devices if available.
|
to NVidia PTX capable devices if available.
|
||||||
|
|
||||||
|
%package plugin-annobin
|
||||||
|
Summary: The annobin plugin for gcc, built by the installed version of gcc
|
||||||
|
Requires: gcc = %{version}-%{release}
|
||||||
|
# Starting with release 10.01 annobin fixed a bug in its configure scripts
|
||||||
|
# which prevented them from working with a built but not installed compiler
|
||||||
|
BuildRequires: annobin >= 10.01
|
||||||
|
# Starting with release 9.93 annobin-plugin-gcc puts a copy of the sources
|
||||||
|
# in /usr/src/annobin
|
||||||
|
# FIXME: Currently the annobin-plugin-gcc subpackage only exists in Fedora.
|
||||||
|
# For RHEL-9 the annobin package does everything.
|
||||||
|
# BuildRequires: annobin-plugin-gcc
|
||||||
|
# Needed in order to be able to decompress the annobin source tarball.
|
||||||
|
BuildRequires: xz
|
||||||
|
|
||||||
|
%description plugin-annobin
|
||||||
|
This package adds a version of the annobin plugin for gcc. This version
|
||||||
|
of the plugin is explicitly built by the same version of gcc that is installed
|
||||||
|
so that there cannot be any synchronization problems.
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n gcc-%{version}-%{DATE} -a 1 -a 2 -a 3
|
%setup -q -n gcc-%{version}-%{DATE} -a 1 -a 2 -a 3
|
||||||
%patch0 -p0 -b .hack~
|
%patch0 -p0 -b .hack~
|
||||||
@ -826,6 +821,11 @@ to NVidia PTX capable devices if available.
|
|||||||
%patch17 -p0 -b .stringify-__VA_OPT__-2~
|
%patch17 -p0 -b .stringify-__VA_OPT__-2~
|
||||||
%patch18 -p1 -b .bidi~
|
%patch18 -p1 -b .bidi~
|
||||||
%patch19 -p1 -b .ice~
|
%patch19 -p1 -b .ice~
|
||||||
|
%patch20 -p1 -b .pch~
|
||||||
|
%patch21 -p1 -b .dejagnu-multiline~
|
||||||
|
%patch22 -p1 -b .libsanitizer-pthread~
|
||||||
|
%patch23 -p1 -b .pie~
|
||||||
|
%patch24 -p1 -b .now~
|
||||||
|
|
||||||
%if 0%{?rhel} >= 9
|
%if 0%{?rhel} >= 9
|
||||||
%patch100 -p1 -b .fortran-fdec-duplicates~
|
%patch100 -p1 -b .fortran-fdec-duplicates~
|
||||||
@ -874,6 +874,11 @@ fi
|
|||||||
# This test causes fork failures, because it spawns way too many threads
|
# This test causes fork failures, because it spawns way too many threads
|
||||||
rm -f gcc/testsuite/go.test/test/chan/goroutines.go
|
rm -f gcc/testsuite/go.test/test/chan/goroutines.go
|
||||||
|
|
||||||
|
# This test fails randomly.
|
||||||
|
%ifarch ppc64le
|
||||||
|
rm -f libstdc++-v3/testsuite/30_threads/future/members/poll.cc
|
||||||
|
%endif
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
|
||||||
# Undo the broken autoconf change in recent Fedora versions
|
# Undo the broken autoconf change in recent Fedora versions
|
||||||
@ -908,7 +913,7 @@ cd nvptx-tools-%{nvptx_tools_gitrev}
|
|||||||
rm -rf obj-%{gcc_target_platform}
|
rm -rf obj-%{gcc_target_platform}
|
||||||
mkdir obj-%{gcc_target_platform}
|
mkdir obj-%{gcc_target_platform}
|
||||||
cd obj-%{gcc_target_platform}
|
cd obj-%{gcc_target_platform}
|
||||||
CC="$CC" CXX="$CXX" CFLAGS="%{optflags}" CXXFLAGS="%{optflags}" \
|
CC="$CC" CXX="$CXX" CFLAGS="%{optflags} -fPIE" CXXFLAGS="%{optflags} -fPIE" LDFLAGS="-pie -Wl,-z,now" \
|
||||||
../configure --prefix=%{_prefix}
|
../configure --prefix=%{_prefix}
|
||||||
make %{?_smp_mflags}
|
make %{?_smp_mflags}
|
||||||
make install prefix=${IROOT}%{_prefix}
|
make install prefix=${IROOT}%{_prefix}
|
||||||
@ -930,7 +935,7 @@ CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \
|
|||||||
--prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \
|
--prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \
|
||||||
--with-bugurl=http://bugzilla.redhat.com/bugzilla \
|
--with-bugurl=http://bugzilla.redhat.com/bugzilla \
|
||||||
--enable-checking=release --with-system-zlib \
|
--enable-checking=release --with-system-zlib \
|
||||||
--with-gcc-major-version-only --without-isl
|
--with-gcc-major-version-only --without-isl --enable-host-pie --enable-host-bind-now
|
||||||
make %{?_smp_mflags}
|
make %{?_smp_mflags}
|
||||||
cd ..
|
cd ..
|
||||||
rm -f newlib
|
rm -f newlib
|
||||||
@ -1127,7 +1132,7 @@ CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \
|
|||||||
CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g' \
|
CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g' \
|
||||||
| sed 's/ -Wformat-security / -Wformat -Wformat-security /'`" \
|
| sed 's/ -Wformat-security / -Wformat -Wformat-security /'`" \
|
||||||
XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \
|
XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \
|
||||||
../configure --enable-bootstrap \
|
../configure --enable-bootstrap --enable-host-pie --enable-host-bind-now \
|
||||||
--enable-languages=c,c++,fortran${enablelobjc}${enablelada}${enablelgo}${enableld},lto \
|
--enable-languages=c,c++,fortran${enablelobjc}${enablelada}${enablelgo}${enableld},lto \
|
||||||
$CONFIGURE_OPTS
|
$CONFIGURE_OPTS
|
||||||
|
|
||||||
@ -1148,7 +1153,7 @@ CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \
|
|||||||
CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g' \
|
CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g' \
|
||||||
| sed 's/ -Wformat-security / -Wformat -Wformat-security /'`" \
|
| sed 's/ -Wformat-security / -Wformat -Wformat-security /'`" \
|
||||||
XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \
|
XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \
|
||||||
../../configure --disable-bootstrap --enable-host-shared \
|
../../configure --disable-bootstrap --enable-host-shared --enable-host-bind-now \
|
||||||
--enable-languages=jit $CONFIGURE_OPTS
|
--enable-languages=jit $CONFIGURE_OPTS
|
||||||
make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" all-gcc
|
make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" all-gcc
|
||||||
cp -a gcc/libgccjit.so* ../gcc/
|
cp -a gcc/libgccjit.so* ../gcc/
|
||||||
@ -1234,7 +1239,6 @@ done)
|
|||||||
rm -f rpm.doc/changelogs/gcc/ChangeLog.[1-9]
|
rm -f rpm.doc/changelogs/gcc/ChangeLog.[1-9]
|
||||||
find rpm.doc -name \*ChangeLog\* | xargs bzip2 -9
|
find rpm.doc -name \*ChangeLog\* | xargs bzip2 -9
|
||||||
|
|
||||||
%if %{with annobin_plugin}
|
|
||||||
# Get the annobin sources. Note these are not added to the rpm as SOURCE4
|
# Get the annobin sources. Note these are not added to the rpm as SOURCE4
|
||||||
# because if they were the build phase would try to include them as part of
|
# because if they were the build phase would try to include them as part of
|
||||||
# gcc itself, and this causes problems. Instead we locate the sources in
|
# gcc itself, and this causes problems. Instead we locate the sources in
|
||||||
@ -1250,65 +1254,63 @@ then
|
|||||||
echo "Unpacking annobin sources"
|
echo "Unpacking annobin sources"
|
||||||
rm -fr annobin-*
|
rm -fr annobin-*
|
||||||
tar xvf %{annobin_source_dir}/latest-annobin.tar.xz
|
tar xvf %{annobin_source_dir}/latest-annobin.tar.xz
|
||||||
else
|
|
||||||
echo "Unable to locate annobin sources (expected to find: %{annobin_source_dir}/latest-annobin.tar.xz)"
|
|
||||||
echo "These should be provided by installing the annobin-plugin-gcc package"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Setting this as a local symbol because using %%global does not appear to work.
|
# Setting this as a local symbol because using %%global does not appear to work.
|
||||||
annobin_dir=$(find . -maxdepth 1 -type d -name "annobin*")
|
annobin_dir=$(find . -maxdepth 1 -type d -name "annobin*")
|
||||||
|
|
||||||
# Now build the annobin plugin using the just built compiler.
|
# Now build the annobin plugin using the just built compiler.
|
||||||
echo "annobin directory = ${annobin_dir}"
|
echo "annobin directory = ${annobin_dir}"
|
||||||
cd ${annobin_dir}
|
cd ${annobin_dir}
|
||||||
|
|
||||||
# Work out where this version of gcc stores its plugins.
|
# Work out where this version of gcc stores its plugins.
|
||||||
%global ANNOBIN_GCC_PLUGIN_DIR %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/plugin
|
%global ANNOBIN_GCC_PLUGIN_DIR %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/plugin
|
||||||
|
|
||||||
CONFIG_ARGS="--quiet"
|
CONFIG_ARGS="--quiet"
|
||||||
CONFIG_ARGS="$CONFIG_ARGS --with-gcc-plugin-dir=%{ANNOBIN_GCC_PLUGIN_DIR}"
|
CONFIG_ARGS="$CONFIG_ARGS --with-gcc-plugin-dir=%{ANNOBIN_GCC_PLUGIN_DIR}"
|
||||||
CONFIG_ARGS="$CONFIG_ARGS --without-annocheck"
|
CONFIG_ARGS="$CONFIG_ARGS --without-annocheck"
|
||||||
CONFIG_ARGS="$CONFIG_ARGS --without-tests"
|
CONFIG_ARGS="$CONFIG_ARGS --without-tests"
|
||||||
|
CONFIG_ARGS="$CONFIG_ARGS --disable-rpath"
|
||||||
|
|
||||||
comp_dir="%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/gcc/"
|
comp_dir="%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/gcc/"
|
||||||
ccompiler="%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/gcc/xgcc -B $comp_dir"
|
ccompiler="%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/gcc/xgcc -B $comp_dir"
|
||||||
cxxcompiler="%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/gcc/xg++ -B $comp_dir"
|
cxxcompiler="%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/gcc/xg++ -B $comp_dir"
|
||||||
|
|
||||||
comp_flags="%build_cflags"
|
comp_flags="%build_cflags"
|
||||||
comp_flags="$comp_flags -I %{_builddir}/gcc-%{version}-%{DATE}/gcc"
|
comp_flags="$comp_flags -I %{_builddir}/gcc-%{version}-%{DATE}/gcc"
|
||||||
comp_flags="$comp_flags -I %{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/gcc/"
|
comp_flags="$comp_flags -I %{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/gcc/"
|
||||||
comp_flags="$comp_flags -I %{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/include"
|
comp_flags="$comp_flags -I %{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/include"
|
||||||
comp_flags="$comp_flags -I %{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/include/%{gcc_target_platform}"
|
comp_flags="$comp_flags -I %{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/include/%{gcc_target_platform}"
|
||||||
comp_flags="$comp_flags -I %{_builddir}/gcc-%{version}-%{DATE}/libstdc++-v3/libsupc++"
|
comp_flags="$comp_flags -I %{_builddir}/gcc-%{version}-%{DATE}/libstdc++-v3/libsupc++"
|
||||||
comp_flags="$comp_flags -I %{_builddir}/gcc-%{version}-%{DATE}/include"
|
comp_flags="$comp_flags -I %{_builddir}/gcc-%{version}-%{DATE}/include"
|
||||||
comp_flags="$comp_flags -I %{_builddir}/gcc-%{version}-%{DATE}/libcpp/include"
|
comp_flags="$comp_flags -I %{_builddir}/gcc-%{version}-%{DATE}/libcpp/include"
|
||||||
|
|
||||||
ld_flags="%build_ldflags"
|
ld_flags="%build_ldflags"
|
||||||
ld_flags="$ld_flags -L%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/libstdc++-v3/.libs"
|
ld_flags="$ld_flags -L%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/libstdc++-v3/.libs"
|
||||||
ld_flags="$ld_flags -L%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/.libs"
|
ld_flags="$ld_flags -L%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/.libs"
|
||||||
ld_flags="$ld_flags -L%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/src/.libs"
|
ld_flags="$ld_flags -L%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/src/.libs"
|
||||||
ld_flags="$ld_flags -L%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/libstdc++-v3/libsupc++/.libs"
|
ld_flags="$ld_flags -L%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/libstdc++-v3/libsupc++/.libs"
|
||||||
ld_flags="$ld_flags -L%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/libsupc++/.libs"
|
ld_flags="$ld_flags -L%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/libsupc++/.libs"
|
||||||
ld_flags="$ld_flags -L%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/%{gcc_target_platform}/libgcc/.libs"
|
ld_flags="$ld_flags -L%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/%{gcc_target_platform}/libgcc/.libs"
|
||||||
ld_flags="$ld_flags -Wl,-rpath,/usr/%{_lib}"
|
|
||||||
|
|
||||||
# libtool works with CFLAGS but ignores LDFLAGS, so we have to combine them.
|
# libtool works with CFLAGS but ignores LDFLAGS, so we have to combine them.
|
||||||
comp_flags="$comp_flags $ld_flags"
|
comp_flags="$comp_flags $ld_flags"
|
||||||
|
|
||||||
echo "Configuring the annobin plugin"
|
echo "Configuring the annobin plugin"
|
||||||
CC="${ccompiler}" CFLAGS="${comp_flags}" \
|
CC="${ccompiler}" CFLAGS="${comp_flags}" \
|
||||||
CXX="${cxxcompiler}" CXXFLAGS="${comp_flags}" \
|
CXX="${cxxcompiler}" CXXFLAGS="${comp_flags}" \
|
||||||
LDFLAGS="${ld_flags}" \
|
LDFLAGS="${ld_flags}" \
|
||||||
./configure ${CONFIG_ARGS} || cat config.log
|
./configure ${CONFIG_ARGS} || cat config.log
|
||||||
|
|
||||||
echo "Building the annobin plugin"
|
echo "Building the annobin plugin"
|
||||||
make
|
make
|
||||||
|
|
||||||
echo "Annobin plugin build complete"
|
echo "Annobin plugin build complete"
|
||||||
|
else
|
||||||
|
echo "Unable to locate annobin sources (expected to find: %{annobin_source_dir}/latest-annobin.tar.xz)"
|
||||||
|
echo "These should be provided by installing the annobin package"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
popd
|
popd
|
||||||
# endif for %{with annobin_plugin}
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%install
|
%install
|
||||||
rm -rf %{buildroot}
|
rm -rf %{buildroot}
|
||||||
@ -2106,9 +2108,7 @@ echo gcc-%{version}-%{release}.%{_arch} > $FULLPATH/rpmver
|
|||||||
ln -s ../../libexec/gcc/%{gcc_target_platform}/%{gcc_major}/liblto_plugin.so \
|
ln -s ../../libexec/gcc/%{gcc_target_platform}/%{gcc_major}/liblto_plugin.so \
|
||||||
%{buildroot}%{_libdir}/bfd-plugins/
|
%{buildroot}%{_libdir}/bfd-plugins/
|
||||||
|
|
||||||
%if %{with annobin_plugin}
|
# Rename the annobin plugin to gcc-annobin.
|
||||||
|
|
||||||
# Rename the plugin to gcc-annobin.
|
|
||||||
mkdir -p %{buildroot}%{ANNOBIN_GCC_PLUGIN_DIR}
|
mkdir -p %{buildroot}%{ANNOBIN_GCC_PLUGIN_DIR}
|
||||||
pushd %{buildroot}%{ANNOBIN_GCC_PLUGIN_DIR}
|
pushd %{buildroot}%{ANNOBIN_GCC_PLUGIN_DIR}
|
||||||
|
|
||||||
@ -2116,64 +2116,12 @@ annobin_dir=$(find %{_builddir} -maxdepth 1 -type d -name "annobin*")
|
|||||||
echo "annobin directory = ${annobin_dir}"
|
echo "annobin directory = ${annobin_dir}"
|
||||||
|
|
||||||
cp ${annobin_dir}/gcc-plugin/.libs/annobin.so.0.0.0 gcc-annobin.so.0.0.0
|
cp ${annobin_dir}/gcc-plugin/.libs/annobin.so.0.0.0 gcc-annobin.so.0.0.0
|
||||||
# Compress the plugin so that it cannot be stripped or examined by check-rpath.
|
|
||||||
# The problem with check-rpath is that the plugin contains a path to the built
|
|
||||||
# but not installed version of the libstdc++ library, and this is insecure.
|
|
||||||
# In practice this is not a problem as the plugin does not load the library, but
|
|
||||||
# there is no way to tell check-rpath this fact.
|
|
||||||
xz -9 gcc-annobin.so.0.0.0
|
|
||||||
|
|
||||||
rm -f gcc-annobin.so.0 gcc-annobin.so
|
rm -f gcc-annobin.so.0 gcc-annobin.so
|
||||||
ln -s gcc-annobin.so.0.0.0 gcc-annobin.so.0
|
ln -s gcc-annobin.so.0.0.0 gcc-annobin.so.0
|
||||||
ln -s gcc-annobin.so.0.0.0 gcc-annobin.so
|
ln -s gcc-annobin.so.0.0.0 gcc-annobin.so
|
||||||
|
|
||||||
# Record information about the version of the compiler that built the plugin.
|
|
||||||
#
|
|
||||||
# Note - we cannot just store %%{gcc_version} and %%{gcc_release} as sometimes
|
|
||||||
# the gcc rpm version changes without the NVR being altered. See BZ #2030671
|
|
||||||
# for more discussion on this.
|
|
||||||
#
|
|
||||||
# Note that when performing a scratch build %%{release} will not contain
|
|
||||||
# a distribution tag. Ie it would be "1-7" rather than "1-7.fc36". This means
|
|
||||||
# that if a scratch build is installed, eg into a mock chroot, then the logic
|
|
||||||
# in redhat-rpm-config's redhat-annobin-plugin-select.sh script will always
|
|
||||||
# select the gcc built plugin no matter what. (Since the version string for
|
|
||||||
# the gcc built plugin can never match the version string for the annobin
|
|
||||||
# built plugin, as the annobin version string always includes a distribution
|
|
||||||
# tag). Sadly this is unavoidable.
|
|
||||||
|
|
||||||
mkdir -p %{buildroot}%{rrcdir}
|
|
||||||
echo "%{version}-%{release}" > %{buildroot}%{gver}
|
|
||||||
|
|
||||||
# Provide a more complete version information string on the second line.
|
|
||||||
# This is not used by the comparison logic in the redhat-annobin-plugin-select.sh
|
|
||||||
# script, but it does make the file more useful to humans.
|
|
||||||
echo "%{ANNOBIN_GCC_PLUGIN_DIR}/gcc-annobin.so.0.0.0 was built by gcc version %{gcc_version}-%{gcc_release} from the ${annobin_dir} sources" >> %{buildroot}%{gver}
|
|
||||||
popd
|
popd
|
||||||
# endif for %{with annobin_plugin}
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%if %{with annobin_plugin}
|
|
||||||
%post
|
|
||||||
pushd %{ANNOBIN_GCC_PLUGIN_DIR} > /dev/null
|
|
||||||
# Uncompress the annobin plugin now that the %%install phase is over.
|
|
||||||
xz -d gcc-annobin.so.0.0.0.xz
|
|
||||||
rm -f gcc-annobin.so.0 gcc-annobin.so
|
|
||||||
ln -s gcc-annobin.so.0.0.0 gcc-annobin.so.0
|
|
||||||
ln -s gcc-annobin.so.0.0.0 gcc-annobin.so
|
|
||||||
popd > /dev/null
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%if %{with annobin_plugin}
|
|
||||||
%preun
|
|
||||||
pushd %{ANNOBIN_GCC_PLUGIN_DIR} > /dev/null
|
|
||||||
# Compress the annobin plugin before it is removed. This avoids a warning from rpm.
|
|
||||||
rm -f gcc-annobin.so.0 gcc-annobin.so
|
|
||||||
xz -9 gcc-annobin.so.0.0.0
|
|
||||||
popd > /dev/null
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%if %{with tests}
|
|
||||||
%check
|
%check
|
||||||
cd obj-%{gcc_target_platform}
|
cd obj-%{gcc_target_platform}
|
||||||
|
|
||||||
@ -2226,9 +2174,6 @@ tar cf - testlogs-%{_target_platform}-%{version}-%{release} | xz -9e \
|
|||||||
| uuencode testlogs-%{_target_platform}.tar.xz || :
|
| uuencode testlogs-%{_target_platform}.tar.xz || :
|
||||||
rm -rf testlogs-%{_target_platform}-%{version}-%{release}
|
rm -rf testlogs-%{_target_platform}-%{version}-%{release}
|
||||||
|
|
||||||
# endif for the if {with tests} above.
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%post go
|
%post go
|
||||||
%{_sbindir}/update-alternatives --install \
|
%{_sbindir}/update-alternatives --install \
|
||||||
%{_prefix}/bin/go go %{_prefix}/bin/go.gcc 92 \
|
%{_prefix}/bin/go go %{_prefix}/bin/go.gcc 92 \
|
||||||
@ -2295,10 +2240,6 @@ end
|
|||||||
%ldconfig_scriptlets -n libgo
|
%ldconfig_scriptlets -n libgo
|
||||||
|
|
||||||
%files -f %{name}.lang
|
%files -f %{name}.lang
|
||||||
%if %{with annobin_plugin}
|
|
||||||
%{ANNOBIN_GCC_PLUGIN_DIR}
|
|
||||||
%{gver}
|
|
||||||
%endif
|
|
||||||
%{_prefix}/bin/cc
|
%{_prefix}/bin/cc
|
||||||
%{_prefix}/bin/c89
|
%{_prefix}/bin/c89
|
||||||
%{_prefix}/bin/c99
|
%{_prefix}/bin/c99
|
||||||
@ -3324,7 +3265,66 @@ end
|
|||||||
%{_prefix}/%{_lib}/libgomp-plugin-nvptx.so.*
|
%{_prefix}/%{_lib}/libgomp-plugin-nvptx.so.*
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%files plugin-annobin
|
||||||
|
%{ANNOBIN_GCC_PLUGIN_DIR}/gcc-annobin.so
|
||||||
|
%{ANNOBIN_GCC_PLUGIN_DIR}/gcc-annobin.so.0
|
||||||
|
%{ANNOBIN_GCC_PLUGIN_DIR}/gcc-annobin.so.0.0.0
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Feb 10 2022 Marek Polacek <polacek@redhat.com> 11.2.1-9.4
|
||||||
|
- add --enable-host-bind-now, use it (#2044917)
|
||||||
|
|
||||||
|
* Tue Feb 8 2022 Marek Polacek <polacek@redhat.com> 11.2.1-9.3
|
||||||
|
- use _thread_db_sizeof_pthread to obtain struct pthread size (#2034494)
|
||||||
|
- add --enable-host-pie, build the compilers as PIE (#2044917)
|
||||||
|
|
||||||
|
* Mon Feb 7 2022 Marek Polacek <polacek@redhat.com> 11.2.1-9.2
|
||||||
|
- add support for relocation of the PCH data (pch/71934, #2044917)
|
||||||
|
- remove 30_threads/future/members/poll.cc (#2050090)
|
||||||
|
- avoid overly-greedy match in dejagnu regexp (#2050089)
|
||||||
|
|
||||||
|
* Mon Jan 31 2022 Marek Polacek <polacek@redhat.com> 11.2.1-9.1
|
||||||
|
- don't set -Wl,-rpath when building annobin (#2047356)
|
||||||
|
|
||||||
|
* Fri Jan 28 2022 Marek Polacek <polacek@redhat.com> 11.2.1-9
|
||||||
|
- update from releases/gcc-11-branch (#2047296)
|
||||||
|
- PRs fortran/104127, fortran/104212, fortran/104227, target/101529
|
||||||
|
- fix up va-opt-6.c testcase
|
||||||
|
|
||||||
|
* Fri Jan 28 2022 Marek Polacek <polacek@redhat.com> 11.2.1-8
|
||||||
|
- update from releases/gcc-11-branch (#2047296)
|
||||||
|
- PRs ada/103538, analyzer/101962, bootstrap/103688, c++/85846, c++/95009,
|
||||||
|
c++/98394, c++/99911, c++/100493, c++/101715, c++/102229, c++/102933,
|
||||||
|
c++/103012, c++/103198, c++/103480, c++/103703, c++/103714,
|
||||||
|
c++/103758, c++/103783, c++/103831, c++/103912, c++/104055, c/97548,
|
||||||
|
c/101289, c/101537, c/103587, c/103881, d/103604, debug/103838,
|
||||||
|
debug/103874, fortran/67804, fortran/83079, fortran/101329,
|
||||||
|
fortran/101762, fortran/102332, fortran/102717, fortran/102787,
|
||||||
|
fortran/103411, fortran/103412, fortran/103418, fortran/103473,
|
||||||
|
fortran/103505, fortran/103588, fortran/103591, fortran/103606,
|
||||||
|
fortran/103607, fortran/103609, fortran/103610, fortran/103692,
|
||||||
|
fortran/103717, fortran/103718, fortran/103719, fortran/103776,
|
||||||
|
fortran/103777, fortran/103778, fortran/103782, fortran/103789,
|
||||||
|
ipa/101354, jit/103562, libfortran/103634, libstdc++/100017,
|
||||||
|
libstdc++/102994, libstdc++/103453, libstdc++/103501,
|
||||||
|
libstdc++/103549, libstdc++/103877, libstdc++/103919,
|
||||||
|
middle-end/101751, middle-end/102860, middle-end/103813, objc/103639,
|
||||||
|
preprocessor/89971, preprocessor/102432, rtl-optimization/102478,
|
||||||
|
rtl-optimization/103837, rtl-optimization/103860,
|
||||||
|
rtl-optimization/103908, sanitizer/102911, target/102347,
|
||||||
|
target/103465, target/103661, target/104172, target/104188,
|
||||||
|
tree-optimization/101615, tree-optimization/103523,
|
||||||
|
tree-optimization/103603, tree-optimization/103995
|
||||||
|
|
||||||
|
* Tue Jan 25 2022 Marek Polacek <polacek@redhat.com> 11.2.1-7.7
|
||||||
|
- do not undefine _hardened_build (#2044917)
|
||||||
|
|
||||||
|
* Mon Jan 24 2022 Marek Polacek <polacek@redhat.com> 11.2.1-7.6
|
||||||
|
- update annobin plugin patch (#2030667)
|
||||||
|
|
||||||
|
* Thu Jan 13 2022 Marek Polacek <polacek@redhat.com> 11.2.1-7.5
|
||||||
|
- update annobin plugin patch (#2030667)
|
||||||
|
|
||||||
* Fri Jan 7 2022 Marek Polacek <polacek@redhat.com> 11.2.1-7.4
|
* Fri Jan 7 2022 Marek Polacek <polacek@redhat.com> 11.2.1-7.4
|
||||||
- update annobin plugin patch (#2030667)
|
- update annobin plugin patch (#2030667)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user