aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Trofimovich <slyfox@gentoo.org>2019-02-11 21:58:50 +0000
committerSergei Trofimovich <slyfox@gentoo.org>2019-02-11 21:58:50 +0000
commitd3e7c05cbf9c7590bb3a21158613e24a05036c83 (patch)
tree36f191772de72b1199138dc1828dc53a703c95ec
parent8.2.0: lto: fix target-specific option leak into global constructors (diff)
downloadgcc-patches-d3e7c05cbf9c7590bb3a21158613e24a05036c83.tar.gz
gcc-patches-d3e7c05cbf9c7590bb3a21158613e24a05036c83.tar.bz2
gcc-patches-d3e7c05cbf9c7590bb3a21158613e24a05036c83.zip
7.4.0: lto: fix target-specific option leak into global constructors
Picked upstream patch as-is: https://github.com/gcc-mirror/gcc/commit/332446ac24e5b37f441f7c9cb0b97fc36f9f0aa3 Bug: https://bugs.gentoo.org/677724 Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
-rw-r--r--7.4.0/gentoo/22_all_lto-ctor-dtor-target.patch64
-rw-r--r--7.4.0/gentoo/README.history1
2 files changed, 65 insertions, 0 deletions
diff --git a/7.4.0/gentoo/22_all_lto-ctor-dtor-target.patch b/7.4.0/gentoo/22_all_lto-ctor-dtor-target.patch
new file mode 100644
index 0000000..206daae
--- /dev/null
+++ b/7.4.0/gentoo/22_all_lto-ctor-dtor-target.patch
@@ -0,0 +1,64 @@
+https://bugs.gentoo.org/677724
+
+Apply file-specific target-specific optimisation to constructors and
+destructors. Fixes leaking of target-specific options from one unit
+to another. On firefox this change fixes -mavx2 leak from files guarded
+by CPU flag detection into other files.
+
+From 332446ac24e5b37f441f7c9cb0b97fc36f9f0aa3 Mon Sep 17 00:00:00 2001
+From: hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Sat, 15 Dec 2018 10:31:37 +0000
+Subject: [PATCH] * ipa.c (cgraph_build_static_cdtor_1): Add
+ OPTIMIZATION and TARGET parameters. (cgraph_build_static_cdtor):
+ Update. (build_cdtor): Use OPTIMIZATION and TARGET of the first real
+ cdtor callsed.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@267168 138bc75d-0d04-0410-961f-82ee72b054a4
+---
+ gcc/ipa.c | 12 +++++++++---
+
+--- a/gcc/ipa.c
++++ b/gcc/ipa.c
+@@ -831,7 +831,9 @@ ipa_discover_variable_flags (void)
+ be produced. */
+
+ static void
+-cgraph_build_static_cdtor_1 (char which, tree body, int priority, bool final)
++cgraph_build_static_cdtor_1 (char which, tree body, int priority, bool final,
++ tree optimization,
++ tree target)
+ {
+ static int counter = 0;
+ char which_buf[16];
+@@ -862,6 +864,8 @@ cgraph_build_static_cdtor_1 (char which, tree body, int priority, bool final)
+
+ TREE_STATIC (decl) = 1;
+ TREE_USED (decl) = 1;
++ DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl) = optimization;
++ DECL_FUNCTION_SPECIFIC_TARGET (decl) = target;
+ DECL_ARTIFICIAL (decl) = 1;
+ DECL_IGNORED_P (decl) = 1;
+ DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
+@@ -911,7 +915,7 @@ cgraph_build_static_cdtor_1 (char which, tree body, int priority, bool final)
+ void
+ cgraph_build_static_cdtor (char which, tree body, int priority)
+ {
+- cgraph_build_static_cdtor_1 (which, body, priority, false);
++ cgraph_build_static_cdtor_1 (which, body, priority, false, NULL, NULL);
+ }
+
+ /* When target does not have ctors and dtors, we call all constructor
+@@ -993,7 +997,9 @@ build_cdtor (bool ctor_p, const vec<tree> &cdtors)
+ gcc_assert (body != NULL_TREE);
+ /* Generate a function to call all the function of like
+ priority. */
+- cgraph_build_static_cdtor_1 (ctor_p ? 'I' : 'D', body, priority, true);
++ cgraph_build_static_cdtor_1 (ctor_p ? 'I' : 'D', body, priority, true,
++ DECL_FUNCTION_SPECIFIC_OPTIMIZATION (cdtors[0]),
++ DECL_FUNCTION_SPECIFIC_TARGET (cdtors[0]));
+ }
+ }
+
+--
+2.20.1
+
diff --git a/7.4.0/gentoo/README.history b/7.4.0/gentoo/README.history
index b6f486d..54c6d3d 100644
--- a/7.4.0/gentoo/README.history
+++ b/7.4.0/gentoo/README.history
@@ -1,6 +1,7 @@
1.2 2 Feb 2019
U 01_all_default-fortify-source.patch
+ 21_all_kr-decl-PR88214.patch
+ + 22_all_lto-ctor-dtor-target.patch
1.1 9 Dec 2018
+ 01_all_default-fortify-source.patch