From d182e15bbb3333f34afd4a6396108c1e581e4872 Mon Sep 17 00:00:00 2001 From: Sam James Date: Sun, 25 Dec 2022 16:57:30 +0000 Subject: 12.2.0: drop upstreamed make 4.4 patches Bug: https://bugs.gentoo.org/884633 Signed-off-by: Sam James --- .../78_all_Factor-out-jobserver_active_p.patch | 284 --------------------- ...-jobserver-style-fifo-for-recent-GNU-make.patch | 64 ----- ...spect-jobserver-in-parallel-WPA-streaming.patch | 225 ---------------- ...ix-fifo-mode-by-opening-pipe-in-proper-mo.patch | 31 --- 12.2.0/gentoo/README.history | 6 + 5 files changed, 6 insertions(+), 604 deletions(-) delete mode 100644 12.2.0/gentoo/78_all_Factor-out-jobserver_active_p.patch delete mode 100644 12.2.0/gentoo/79_all_lto-support-jobserver-style-fifo-for-recent-GNU-make.patch delete mode 100644 12.2.0/gentoo/80_all_lto-respect-jobserver-in-parallel-WPA-streaming.patch delete mode 100644 12.2.0/gentoo/81_all_jobserver-fix-fifo-mode-by-opening-pipe-in-proper-mo.patch (limited to '12.2.0') diff --git a/12.2.0/gentoo/78_all_Factor-out-jobserver_active_p.patch b/12.2.0/gentoo/78_all_Factor-out-jobserver_active_p.patch deleted file mode 100644 index a4ae458..0000000 --- a/12.2.0/gentoo/78_all_Factor-out-jobserver_active_p.patch +++ /dev/null @@ -1,284 +0,0 @@ -https://bugs.gentoo.org/884633 - -https://build.opensuse.org/package/view_file/devel:gcc/gcc12/gcc12-fifo-jobserver-support.patch -https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=1270ccda70ca09f7d4fe76b5156dca8992bd77a6 - -From 5037b72e71bac3bf15b16597e149601930094d4f Mon Sep 17 00:00:00 2001 -From: Martin Liska -Date: Tue, 9 Aug 2022 13:59:32 +0200 -Subject: [PATCH 1/4] Factor out jobserver_active_p. - -gcc/ChangeLog: - - * gcc.cc (driver::detect_jobserver): Remove and move to - jobserver.h. - * lto-wrapper.cc (jobserver_active_p): Likewise. - (run_gcc): Likewise. - * opts-jobserver.h: New file. - * opts-common.cc (jobserver_info::jobserver_info): New function. ---- a/gcc/gcc.cc -+++ b/gcc/gcc.cc -@@ -27,6 +27,7 @@ CC recognizes how to compile each input file by suffixes in the file names. - Once it knows which kind of compilation to perform, the procedure for - compilation is specified by a string called a "spec". */ - -+#define INCLUDE_STRING - #include "config.h" - #include "system.h" - #include "coretypes.h" -@@ -42,7 +43,7 @@ compilation is specified by a string called a "spec". */ - #include "flags.h" - #include "opts.h" - #include "filenames.h" --#include "spellcheck.h" -+#include "opts-jobserver.h" - - - -@@ -9178,38 +9179,9 @@ driver::final_actions () const - void - driver::detect_jobserver () const - { -- /* Detect jobserver and drop it if it's not working. */ -- const char *makeflags = env.get ("MAKEFLAGS"); -- if (makeflags != NULL) -- { -- const char *needle = "--jobserver-auth="; -- const char *n = strstr (makeflags, needle); -- if (n != NULL) -- { -- int rfd = -1; -- int wfd = -1; -- -- bool jobserver -- = (sscanf (n + strlen (needle), "%d,%d", &rfd, &wfd) == 2 -- && rfd > 0 -- && wfd > 0 -- && is_valid_fd (rfd) -- && is_valid_fd (wfd)); -- -- /* Drop the jobserver if it's not working now. */ -- if (!jobserver) -- { -- unsigned offset = n - makeflags; -- char *dup = xstrdup (makeflags); -- dup[offset] = '\0'; -- -- const char *space = strchr (makeflags + offset, ' '); -- if (space != NULL) -- strcpy (dup + offset, space); -- xputenv (concat ("MAKEFLAGS=", dup, NULL)); -- } -- } -- } -+ jobserver_info jinfo; -+ if (!jinfo.is_active && !jinfo.skipped_makeflags.empty ()) -+ xputenv (jinfo.skipped_makeflags.c_str ()); - } - - /* Determine what the exit code of the driver should be. */ ---- a/gcc/lto-wrapper.cc -+++ b/gcc/lto-wrapper.cc -@@ -37,6 +37,7 @@ along with GCC; see the file COPYING3. If not see - ./ccCJuXGv.lto.ltrans.o - */ - -+#define INCLUDE_STRING - #include "config.h" - #include "system.h" - #include "coretypes.h" -@@ -49,6 +50,8 @@ along with GCC; see the file COPYING3. If not see - #include "lto-section-names.h" - #include "collect-utils.h" - #include "opts-diagnostic.h" -+#include "opt-suggestions.h" -+#include "opts-jobserver.h" - - /* Environment variable, used for passing the names of offload targets from GCC - driver to lto-wrapper. */ -@@ -1336,35 +1339,6 @@ init_num_threads (void) - #endif - } - --/* Test and return reason why a jobserver cannot be detected. */ -- --static const char * --jobserver_active_p (void) --{ -- #define JS_PREFIX "jobserver is not available: " -- #define JS_NEEDLE "--jobserver-auth=" -- -- const char *makeflags = getenv ("MAKEFLAGS"); -- if (makeflags == NULL) -- return JS_PREFIX "% environment variable is unset"; -- -- const char *n = strstr (makeflags, JS_NEEDLE); -- if (n == NULL) -- return JS_PREFIX "%<" JS_NEEDLE "%> is not present in %"; -- -- int rfd = -1; -- int wfd = -1; -- -- if (sscanf (n + strlen (JS_NEEDLE), "%d,%d", &rfd, &wfd) == 2 -- && rfd > 0 -- && wfd > 0 -- && is_valid_fd (rfd) -- && is_valid_fd (wfd)) -- return NULL; -- else -- return JS_PREFIX "cannot access %<" JS_NEEDLE "%> file descriptors"; --} -- - /* Print link to -flto documentation with a hint message. */ - - void -@@ -1422,7 +1396,6 @@ run_gcc (unsigned argc, char *argv[]) - bool jobserver_requested = false; - int auto_parallel = 0; - bool no_partition = false; -- const char *jobserver_error = NULL; - bool fdecoded_options_first = true; - vec fdecoded_options; - fdecoded_options.create (16); -@@ -1654,14 +1627,14 @@ run_gcc (unsigned argc, char *argv[]) - } - else - { -- jobserver_error = jobserver_active_p (); -- if (jobserver && jobserver_error != NULL) -+ jobserver_info jinfo; -+ if (jobserver && !jinfo.is_active) - { - /* Fall back to auto parallelism. */ - jobserver = 0; - auto_parallel = 1; - } -- else if (!jobserver && jobserver_error == NULL) -+ else if (!jobserver && jinfo.is_active) - { - parallel = 1; - jobserver = 1; -@@ -1976,9 +1949,10 @@ cont: - - if (nr > 1) - { -- if (jobserver_requested && jobserver_error != NULL) -+ jobserver_info jinfo; -+ if (jobserver_requested && !jinfo.is_active) - { -- warning (0, jobserver_error); -+ warning (0, jinfo.error_msg.c_str ()); - print_lto_docs_link (); - } - else if (parallel == 0) ---- a/gcc/opts-common.cc -+++ b/gcc/opts-common.cc -@@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING3. If not see - . */ - -+#define INCLUDE_STRING - #include "config.h" - #include "system.h" - #include "intl.h" -@@ -25,6 +26,7 @@ along with GCC; see the file COPYING3. If not see - #include "options.h" - #include "diagnostic.h" - #include "spellcheck.h" -+#include "opts-jobserver.h" - - static void prune_options (struct cl_decoded_option **, unsigned int *); - -@@ -2003,3 +2005,42 @@ void prepend_xassembler_to_collect_as_options (const char *collect_as_options, - obstack_1grow (o, '\''); - } - } -+ -+jobserver_info::jobserver_info () -+{ -+ /* Detect jobserver and drop it if it's not working. */ -+ string js_needle = "--jobserver-auth="; -+ -+ const char *envval = getenv ("MAKEFLAGS"); -+ if (envval != NULL) -+ { -+ string makeflags = envval; -+ size_t n = makeflags.rfind (js_needle); -+ if (n != string::npos) -+ { -+ if (sscanf (makeflags.c_str () + n + js_needle.size (), -+ "%d,%d", &rfd, &wfd) == 2 -+ && rfd > 0 -+ && wfd > 0 -+ && is_valid_fd (rfd) -+ && is_valid_fd (wfd)) -+ is_active = true; -+ else -+ { -+ string dup = makeflags.substr (0, n); -+ size_t pos = makeflags.find (' ', n); -+ if (pos != string::npos) -+ dup += makeflags.substr (pos); -+ skipped_makeflags = "MAKEFLAGS=" + dup; -+ error_msg -+ = "cannot access %<" + js_needle + "%> file descriptors"; -+ } -+ } -+ error_msg = "%<" + js_needle + "%> is not present in %"; -+ } -+ else -+ error_msg = "% environment variable is unset"; -+ -+ if (!error_msg.empty ()) -+ error_msg = "jobserver is not available: " + error_msg; -+} ---- /dev/null -+++ b/gcc/opts-jobserver.h -@@ -0,0 +1,44 @@ -+/* GNU make's jobserver related functionality. -+ Copyright (C) 2022 Free Software Foundation, Inc. -+ -+This file is part of GCC. -+ -+GCC is free software; you can redistribute it and/or modify it under -+the terms of the GNU General Public License as published by the Free -+Software Foundation; either version 3, or (at your option) any later -+version. -+ -+GCC is distributed in the hope that it will be useful, but WITHOUT ANY -+WARRANTY; without even the implied warranty of MERCHANTABILITY or -+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+for more details. -+ -+You should have received a copy of the GNU General Public License -+along with GCC; see the file COPYING3. If not see -+. -+ -+See dbgcnt.def for usage information. */ -+ -+#ifndef GCC_JOBSERVER_H -+#define GCC_JOBSERVER_H -+ -+using namespace std; -+ -+struct jobserver_info -+{ -+ /* Default constructor. */ -+ jobserver_info (); -+ -+ /* Error message if there is a problem. */ -+ string error_msg = ""; -+ /* Skipped MAKEFLAGS where --jobserver-auth is skipped. */ -+ string skipped_makeflags = ""; -+ /* File descriptor for reading used for jobserver communication. */ -+ int rfd = -1; -+ /* File descriptor for writing used for jobserver communication. */ -+ int wfd = -1; -+ /* Return true if jobserver is active. */ -+ bool is_active = false; -+}; -+ -+#endif /* GCC_JOBSERVER_H */ --- -2.38.1 - diff --git a/12.2.0/gentoo/79_all_lto-support-jobserver-style-fifo-for-recent-GNU-make.patch b/12.2.0/gentoo/79_all_lto-support-jobserver-style-fifo-for-recent-GNU-make.patch deleted file mode 100644 index aa76db7..0000000 --- a/12.2.0/gentoo/79_all_lto-support-jobserver-style-fifo-for-recent-GNU-make.patch +++ /dev/null @@ -1,64 +0,0 @@ -https://bugs.gentoo.org/884633 - -https://build.opensuse.org/package/view_file/devel:gcc/gcc12/gcc12-fifo-jobserver-support.patch -https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=53e3b2bf16a486c15c20991c6095f7be09012b55 - -From 3e8b90a00ddfe9cbf5416842b19b84b1ab561e08 Mon Sep 17 00:00:00 2001 -From: Martin Liska -Date: Tue, 9 Aug 2022 13:59:36 +0200 -Subject: [PATCH 2/4] lto: support --jobserver-style=fifo for recent GNU make - -gcc/ChangeLog: - - * opts-jobserver.h: Add one member. - * opts-common.cc (jobserver_info::jobserver_info): Parse FIFO - format of --jobserver-auth. ---- a/gcc/opts-common.cc -+++ b/gcc/opts-common.cc -@@ -2008,8 +2008,14 @@ void prepend_xassembler_to_collect_as_options (const char *collect_as_options, - - jobserver_info::jobserver_info () - { -+ /* Traditionally, GNU make uses opened pipes for jobserver-auth, -+ e.g. --jobserver-auth=3,4. -+ Starting with GNU make 4.4, one can use --jobserver-style=fifo -+ and then named pipe is used: --jobserver-auth=fifo:/tmp/hcsparta. */ -+ - /* Detect jobserver and drop it if it's not working. */ - string js_needle = "--jobserver-auth="; -+ string fifo_prefix = "fifo:"; - - const char *envval = getenv ("MAKEFLAGS"); - if (envval != NULL) -@@ -2018,8 +2024,15 @@ jobserver_info::jobserver_info () - size_t n = makeflags.rfind (js_needle); - if (n != string::npos) - { -- if (sscanf (makeflags.c_str () + n + js_needle.size (), -- "%d,%d", &rfd, &wfd) == 2 -+ string ending = makeflags.substr (n + js_needle.size ()); -+ if (ending.find (fifo_prefix) == 0) -+ { -+ ending = ending.substr (fifo_prefix.size ()); -+ pipe_path = ending.substr (0, ending.find (' ')); -+ is_active = true; -+ } -+ else if (sscanf (makeflags.c_str () + n + js_needle.size (), -+ "%d,%d", &rfd, &wfd) == 2 - && rfd > 0 - && wfd > 0 - && is_valid_fd (rfd) ---- a/gcc/opts-jobserver.h -+++ b/gcc/opts-jobserver.h -@@ -37,6 +37,8 @@ struct jobserver_info - int rfd = -1; - /* File descriptor for writing used for jobserver communication. */ - int wfd = -1; -+ /* Named pipe path. */ -+ string pipe_path = ""; - /* Return true if jobserver is active. */ - bool is_active = false; - }; --- -2.38.1 - diff --git a/12.2.0/gentoo/80_all_lto-respect-jobserver-in-parallel-WPA-streaming.patch b/12.2.0/gentoo/80_all_lto-respect-jobserver-in-parallel-WPA-streaming.patch deleted file mode 100644 index 587d9f8..0000000 --- a/12.2.0/gentoo/80_all_lto-respect-jobserver-in-parallel-WPA-streaming.patch +++ /dev/null @@ -1,225 +0,0 @@ -https://bugs.gentoo.org/884633 - -https://build.opensuse.org/package/view_file/devel:gcc/gcc12/gcc12-fifo-jobserver-support.patch -https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=fed766af32ed6cd371016cc24e931131e19b4eb1 - -From e8b2576a98e7c8ce374c179cd650f1f9422ec1ca Mon Sep 17 00:00:00 2001 -From: Martin Liska -Date: Tue, 9 Aug 2022 13:59:39 +0200 -Subject: [PATCH 3/4] lto: respect jobserver in parallel WPA streaming - - PR lto/106328 - -gcc/ChangeLog: - - * opts-jobserver.h (struct jobserver_info): Add pipefd. - (jobserver_info::connect): New. - (jobserver_info::disconnect): Likewise. - (jobserver_info::get_token): Likewise. - (jobserver_info::return_token): Likewise. - * opts-common.cc: Implement the new functions. - -gcc/lto/ChangeLog: - - * lto.cc (wait_for_child): Decrement nruns once a process - finishes. - (stream_out_partitions): Use job server if active. - (do_whole_program_analysis): Likewise. ---- a/gcc/lto/lto.cc -+++ b/gcc/lto/lto.cc -@@ -18,6 +18,7 @@ You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING3. If not see - . */ - -+#define INCLUDE_STRING - #include "config.h" - #include "system.h" - #include "coretypes.h" -@@ -54,11 +55,17 @@ along with GCC; see the file COPYING3. If not see - #include "attribs.h" - #include "builtins.h" - #include "lto-common.h" -+#include "opts-jobserver.h" - -- --/* Number of parallel tasks to run, -1 if we want to use GNU Make jobserver. */ -+/* Number of parallel tasks to run. */ - static int lto_parallelism; - -+/* Number of active WPA streaming processes. */ -+static int nruns = 0; -+ -+/* GNU make's jobserver info. */ -+static jobserver_info *jinfo = NULL; -+ - /* Return true when NODE has a clone that is analyzed (i.e. we need - to load its body even if the node itself is not needed). */ - -@@ -205,6 +212,12 @@ wait_for_child () - "streaming subprocess was killed by signal"); - } - while (!WIFEXITED (status) && !WIFSIGNALED (status)); -+ -+ --nruns; -+ -+ /* Return token to the jobserver if active. */ -+ if (jinfo != NULL && jinfo->is_active) -+ jinfo->return_token (); - } - #endif - -@@ -228,25 +241,35 @@ stream_out_partitions (char *temp_filename, int blen, int min, int max, - bool ARG_UNUSED (last)) - { - #ifdef HAVE_WORKING_FORK -- static int nruns; -- - if (lto_parallelism <= 1) - { - stream_out_partitions_1 (temp_filename, blen, min, max); - return; - } - -- /* Do not run more than LTO_PARALLELISM streamings -- FIXME: we ignore limits on jobserver. */ - if (lto_parallelism > 0 && nruns >= lto_parallelism) -- { -- wait_for_child (); -- nruns --; -- } -+ wait_for_child (); -+ - /* If this is not the last parallel partition, execute new - streaming process. */ - if (!last) - { -+ if (jinfo != NULL && jinfo->is_active) -+ while (true) -+ { -+ if (jinfo->get_token ()) -+ break; -+ if (nruns > 0) -+ wait_for_child (); -+ else -+ { -+ /* There are no free tokens, lets do the job outselves. */ -+ stream_out_partitions_1 (temp_filename, blen, min, max); -+ asm_nodes_output = true; -+ return; -+ } -+ } -+ - pid_t cpid = fork (); - - if (!cpid) -@@ -264,10 +287,12 @@ stream_out_partitions (char *temp_filename, int blen, int min, int max, - /* Last partition; stream it and wait for all children to die. */ - else - { -- int i; - stream_out_partitions_1 (temp_filename, blen, min, max); -- for (i = 0; i < nruns; i++) -+ while (nruns > 0) - wait_for_child (); -+ -+ if (jinfo != NULL && jinfo->is_active) -+ jinfo->disconnect (); - } - asm_nodes_output = true; - #else -@@ -460,9 +485,14 @@ do_whole_program_analysis (void) - - lto_parallelism = 1; - -- /* TODO: jobserver communication is not supported, yet. */ - if (!strcmp (flag_wpa, "jobserver")) -- lto_parallelism = param_max_lto_streaming_parallelism; -+ { -+ jinfo = new jobserver_info (); -+ if (jinfo->is_active) -+ jinfo->connect (); -+ -+ lto_parallelism = param_max_lto_streaming_parallelism; -+ } - else - { - lto_parallelism = atoi (flag_wpa); ---- a/gcc/opts-common.cc -+++ b/gcc/opts-common.cc -@@ -2057,3 +2057,43 @@ jobserver_info::jobserver_info () - if (!error_msg.empty ()) - error_msg = "jobserver is not available: " + error_msg; - } -+ -+void -+jobserver_info::connect () -+{ -+ if (!pipe_path.empty ()) -+ pipefd = open (pipe_path.c_str (), O_RDWR); -+} -+ -+void -+jobserver_info::disconnect () -+{ -+ if (!pipe_path.empty ()) -+ { -+ gcc_assert (close (pipefd) == 0); -+ pipefd = -1; -+ } -+} -+ -+bool -+jobserver_info::get_token () -+{ -+ int fd = pipe_path.empty () ? rfd : pipefd; -+ char c; -+ unsigned n = read (fd, &c, 1); -+ if (n != 1) -+ { -+ gcc_assert (errno == EAGAIN); -+ return false; -+ } -+ else -+ return true; -+} -+ -+void -+jobserver_info::return_token () -+{ -+ int fd = pipe_path.empty () ? wfd : pipefd; -+ char c = 'G'; -+ gcc_assert (write (fd, &c, 1) == 1); -+} ---- a/gcc/opts-jobserver.h -+++ b/gcc/opts-jobserver.h -@@ -29,6 +29,18 @@ struct jobserver_info - /* Default constructor. */ - jobserver_info (); - -+ /* Connect to the server. */ -+ void connect (); -+ -+ /* Disconnect from the server. */ -+ void disconnect (); -+ -+ /* Get token from the server. */ -+ bool get_token (); -+ -+ /* Return token to the server. */ -+ void return_token (); -+ - /* Error message if there is a problem. */ - string error_msg = ""; - /* Skipped MAKEFLAGS where --jobserver-auth is skipped. */ -@@ -39,6 +51,8 @@ struct jobserver_info - int wfd = -1; - /* Named pipe path. */ - string pipe_path = ""; -+ /* Pipe file descriptor. */ -+ int pipefd = -1; - /* Return true if jobserver is active. */ - bool is_active = false; - }; --- -2.38.1 - diff --git a/12.2.0/gentoo/81_all_jobserver-fix-fifo-mode-by-opening-pipe-in-proper-mo.patch b/12.2.0/gentoo/81_all_jobserver-fix-fifo-mode-by-opening-pipe-in-proper-mo.patch deleted file mode 100644 index de5626f..0000000 --- a/12.2.0/gentoo/81_all_jobserver-fix-fifo-mode-by-opening-pipe-in-proper-mo.patch +++ /dev/null @@ -1,31 +0,0 @@ -https://bugs.gentoo.org/884633 - -https://build.opensuse.org/package/view_file/devel:gcc/gcc12/gcc12-fifo-jobserver-support.patch -https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=3f1c2f89f6b8b8d23a9072f8549b0a2c1de06b03 - -From 9474892bb967747637d7f4e45320a93e726824c3 Mon Sep 17 00:00:00 2001 -From: Martin Liska -Date: Tue, 16 Aug 2022 08:22:29 +0200 -Subject: [PATCH 4/4] jobserver: fix fifo mode by opening pipe in proper mode - -The current jobserver_info relies on non-blocking FDs, -thus one the pipe in such mode. - -gcc/ChangeLog: - - * opts-common.cc (jobserver_info::connect): Open fifo - in non-blocking mode. ---- a/gcc/opts-common.cc -+++ b/gcc/opts-common.cc -@@ -2062,7 +2062,7 @@ void - jobserver_info::connect () - { - if (!pipe_path.empty ()) -- pipefd = open (pipe_path.c_str (), O_RDWR); -+ pipefd = open (pipe_path.c_str (), O_RDWR | O_NONBLOCK); - } - - void --- -2.38.1 - diff --git a/12.2.0/gentoo/README.history b/12.2.0/gentoo/README.history index 9d111f5..29fd78e 100644 --- a/12.2.0/gentoo/README.history +++ b/12.2.0/gentoo/README.history @@ -1,3 +1,9 @@ +7 25 Dec 2022 + - 78_all_Factor-out-jobserver_active_p.patch + - 79_all_lto-support-jobserver-style-fifo-for-recent-GNU-make.patch + - 80_all_lto-respect-jobserver-in-parallel-WPA-streaming.patch + - 81_all_jobserver-fix-fifo-mode-by-opening-pipe-in-proper-mo.patch + 6 17 Dec 2022 U 30_all_tar_libstdc++-link.patch -- cgit v1.2.3-65-gdbad