gccNGPackages_15.gcc: Fetch more patches (#436085)

-137
pkgs/development/compilers/gcc/ng/15/gcc/0001-find_a_program-First-search-with-machine-prefix.patch
···
-
From 3af17de3a5f6acd5a2f9340d84b8667459f43eea Mon Sep 17 00:00:00 2001
-
From: John Ericson <git@JohnEricson.me>
-
Date: Wed, 18 Aug 2021 01:55:31 -0400
-
Subject: [PATCH 1/3] find_a_program: First search with machine prefix
-
-
This matches the behavior of Clang, and makes it easier to work with
-
cross compilers without heeding to hard-code paths at build time.
-
---
-
gcc/gcc.cc | 78 +++++++++++++++++++++++++++++++++++++++++++++++-------
-
1 file changed, 68 insertions(+), 10 deletions(-)
-
-
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
-
index 4fd87f2c4a1..55738d258b3 100644
-
--- a/gcc/gcc.cc
-
+++ b/gcc/gcc.cc
-
@@ -1600,6 +1600,11 @@ static const char *machine_suffix = 0;
-
-
static const char *just_machine_suffix = 0;
-
-
+/* Prefix to attach to *basename* of commands being searched.
-
+ This is just `MACHINE-'. */
-
+
-
+static const char *just_machine_prefix = 0;
-
+
-
/* Adjusted value of GCC_EXEC_PREFIX envvar. */
-
-
static const char *gcc_exec_prefix;
-
@@ -3043,15 +3048,6 @@ file_at_path (char *path, void *data)
-
memcpy (path + len, info->name, info->name_len);
-
len += info->name_len;
-
-
- /* Some systems have a suffix for executable files.
-
- So try appending that first. */
-
- if (info->suffix_len)
-
- {
-
- memcpy (path + len, info->suffix, info->suffix_len + 1);
-
- if (access_check (path, info->mode) == 0)
-
- return path;
-
- }
-
-
-
path[len] = '\0';
-
if (access_check (path, info->mode) == 0)
-
return path;
-
@@ -3091,12 +3087,52 @@ find_a_file (const struct path_prefix *pprefix, const char *name, int mode,
-
file_at_path, &info);
-
}
-
-
+/* Callback for find_a_program. Appends the file name to the directory
-
+ path. Like file_at_path but tries machine prefix and exe suffix too. */
-
+
-
+static void *
-
+program_at_path (char *path, void *data)
-
+{
-
+ /* try first with machine-prefixed name */
-
+ struct file_at_path_info *info = (struct file_at_path_info *) data;
-
+ size_t path_len = strlen (path);
-
+
-
+ for (auto prefix : { just_machine_prefix, "" })
-
+ {
-
+ auto len = path_len;
-
+
-
+ auto prefix_len = strlen(prefix);
-
+ memcpy (path + len, prefix, prefix_len);
-
+ len += prefix_len;
-
+
-
+ memcpy (path + len, info->name, info->name_len);
-
+ len += info->name_len;
-
+
-
+ /* Some systems have a suffix for executable files.
-
+ So try appending that first. */
-
+ if (info->suffix_len)
-
+ {
-
+ memcpy (path + len, info->suffix, info->suffix_len + 1);
-
+ if (access_check (path, info->mode) == 0)
-
+ return path;
-
+ }
-
+
-
+ path[len] = '\0';
-
+ if (access_check (path, info->mode) == 0)
-
+ return path;
-
+ }
-
+
-
+ return NULL;
-
+}
-
+
-
/* Specialization of find_a_file for programs that also takes into account
-
configure-specified default programs. */
-
-
static char*
-
find_a_program (const char *name)
-
{
-
+ const int mode = X_OK;
-
+
-
/* Do not search if default matches query. */
-
-
#ifdef DEFAULT_ASSEMBLER
-
@@ -3114,7 +3150,28 @@ find_a_program (const char *name)
-
return xstrdup (DEFAULT_DSYMUTIL);
-
#endif
-
-
- return find_a_file (&exec_prefixes, name, X_OK, false);
-
+ /* Find the filename in question (special case for absolute paths). */
-
+
-
+ if (IS_ABSOLUTE_PATH (name))
-
+ {
-
+ if (access (name, mode) == 0)
-
+ return xstrdup (name);
-
+
-
+ return NULL;
-
+ }
-
+
-
+ struct file_at_path_info info;
-
+
-
+ info.name = name;
-
+ info.suffix = HOST_EXECUTABLE_SUFFIX;
-
+ info.name_len = strlen (info.name);
-
+ info.suffix_len = strlen (info.suffix);
-
+ info.mode = mode;
-
+
-
+ return (char*) for_each_path (
-
+ &exec_prefixes, false,
-
+ info.name_len + info.suffix_len + strlen(just_machine_prefix),
-
+ program_at_path, &info);
-
}
-
-
/* Ranking of prefixes in the sort list. -B prefixes are put before
-
@@ -8492,6 +8549,7 @@ driver::set_up_specs () const
-
machine_suffix = concat (spec_host_machine, dir_separator_str, spec_version,
-
accel_dir_suffix, dir_separator_str, NULL);
-
just_machine_suffix = concat (spec_machine, dir_separator_str, NULL);
-
+ just_machine_prefix = concat (spec_machine, "-", NULL);
-
-
specs_file = find_a_file (&startfile_prefixes, "specs", R_OK, true);
-
/* Read the specs file unless it is a default one. */
-
--
-
2.47.2
-
-103
pkgs/development/compilers/gcc/ng/15/gcc/0002-driver-for_each_pass-Pass-to-callback-whether-dir-is.patch
···
-
From 8e1b7a128a69393c6d3f53b8f66bd52c6bbce908 Mon Sep 17 00:00:00 2001
-
From: John Ericson <git@JohnEricson.me>
-
Date: Wed, 18 Aug 2021 01:55:45 -0400
-
Subject: [PATCH 2/3] driver: for_each_pass: Pass to callback whether dir is
-
machine-disambiguated
-
-
We will use this in the subsequent diff to control what basenames we
-
search for. In machine-specific subdirectories, we should just look for
-
the original basename, but in machine-agnostic subdirectories, we might
-
additionally look for prefixed disambiguated names, as an alternate
-
method of keeping targets apart.
-
---
-
gcc/gcc.cc | 18 +++++++++---------
-
1 file changed, 9 insertions(+), 9 deletions(-)
-
-
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
-
index 55738d258b3..f9f83d1a804 100644
-
--- a/gcc/gcc.cc
-
+++ b/gcc/gcc.cc
-
@@ -2783,7 +2783,7 @@ static void *
-
for_each_path (const struct path_prefix *paths,
-
bool do_multi,
-
size_t extra_space,
-
- void *(*callback) (char *, void *),
-
+ void *(*callback) (char *, bool, void *),
-
void *callback_info)
-
{
-
struct prefix_list *pl;
-
@@ -2844,7 +2844,7 @@ for_each_path (const struct path_prefix *paths,
-
if (!skip_multi_dir)
-
{
-
memcpy (path + len, multi_suffix, suffix_len + 1);
-
- ret = callback (path, callback_info);
-
+ ret = callback (path, true, callback_info);
-
if (ret)
-
break;
-
}
-
@@ -2855,7 +2855,7 @@ for_each_path (const struct path_prefix *paths,
-
&& pl->require_machine_suffix == 2)
-
{
-
memcpy (path + len, just_multi_suffix, just_suffix_len + 1);
-
- ret = callback (path, callback_info);
-
+ ret = callback (path, true, callback_info);
-
if (ret)
-
break;
-
}
-
@@ -2865,7 +2865,7 @@ for_each_path (const struct path_prefix *paths,
-
&& !pl->require_machine_suffix && multiarch_dir)
-
{
-
memcpy (path + len, multiarch_suffix, multiarch_len + 1);
-
- ret = callback (path, callback_info);
-
+ ret = callback (path, true, callback_info);
-
if (ret)
-
break;
-
}
-
@@ -2893,7 +2893,7 @@ for_each_path (const struct path_prefix *paths,
-
else
-
path[len] = '\0';
-
-
- ret = callback (path, callback_info);
-
+ ret = callback (path, false, callback_info);
-
if (ret)
-
break;
-
}
-
@@ -2948,7 +2948,7 @@ struct add_to_obstack_info {
-
};
-
-
static void *
-
-add_to_obstack (char *path, void *data)
-
+add_to_obstack (char *path, bool, void *data)
-
{
-
struct add_to_obstack_info *info = (struct add_to_obstack_info *) data;
-
-
@@ -3040,7 +3040,7 @@ struct file_at_path_info {
-
};
-
-
static void *
-
-file_at_path (char *path, void *data)
-
+file_at_path (char *path, bool, void *data)
-
{
-
struct file_at_path_info *info = (struct file_at_path_info *) data;
-
size_t len = strlen (path);
-
@@ -3091,7 +3091,7 @@ find_a_file (const struct path_prefix *pprefix, const char *name, int mode,
-
path. Like file_at_path but tries machine prefix and exe suffix too. */
-
-
static void *
-
-program_at_path (char *path, void *data)
-
+program_at_path (char *path, bool machine_specific, void *data)
-
{
-
/* try first with machine-prefixed name */
-
struct file_at_path_info *info = (struct file_at_path_info *) data;
-
@@ -6074,7 +6074,7 @@ struct spec_path_info {
-
};
-
-
static void *
-
-spec_path (char *path, void *data)
-
+spec_path (char *path, bool, void *data)
-
{
-
struct spec_path_info *info = (struct spec_path_info *) data;
-
size_t len = 0;
-
--
-
2.47.2
-
-75
pkgs/development/compilers/gcc/ng/15/gcc/0003-find_a_program-Only-search-for-prefixed-paths-in-und.patch
···
-
From e1ee1a2df1ad32de24e8fdaeac0a533681710578 Mon Sep 17 00:00:00 2001
-
From: John Ericson <git@JohnEricson.me>
-
Date: Wed, 18 Aug 2021 01:55:52 -0400
-
Subject: [PATCH 3/3] find_a_program: Only search for prefixed paths in
-
undisambiguated dirs
-
-
This means, we might search for:
-
-
- path/$machine/$version/prog
-
- path/$machine/prog
-
- path/$machine-prog
-
-
But not
-
-
- path/$machine/$version/$machine-prog
-
-
because disambiguating $machine twice is unnecessary.
-
-
This does mean we less liberal in what we accept than LLVM, but that's
-
OK. The down side of always Postel's law is everyone converges on
-
accepting all sorts of garbage, which makes debugging end-to-end hard
-
when mistakes are not caught early.
-
---
-
gcc/gcc.cc | 25 ++++++++++++++++---------
-
1 file changed, 16 insertions(+), 9 deletions(-)
-
-
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
-
index f9f83d1a804..d837b6ea779 100644
-
--- a/gcc/gcc.cc
-
+++ b/gcc/gcc.cc
-
@@ -3097,15 +3097,9 @@ program_at_path (char *path, bool machine_specific, void *data)
-
struct file_at_path_info *info = (struct file_at_path_info *) data;
-
size_t path_len = strlen (path);
-
-
- for (auto prefix : { just_machine_prefix, "" })
-
+ auto search = [=](size_t len) -> void *
-
{
-
- auto len = path_len;
-
-
-
- auto prefix_len = strlen(prefix);
-
- memcpy (path + len, prefix, prefix_len);
-
- len += prefix_len;
-
-
-
- memcpy (path + len, info->name, info->name_len);
-
+ memcpy (path + len, info->name, info->name_len + 1);
-
len += info->name_len;
-
-
/* Some systems have a suffix for executable files.
-
@@ -3120,9 +3114,22 @@ program_at_path (char *path, bool machine_specific, void *data)
-
path[len] = '\0';
-
if (access_check (path, info->mode) == 0)
-
return path;
-
+
-
+ return NULL;
-
+ };
-
+
-
+ /* Additionally search for $target-prog in machine-agnostic dirs, as an
-
+ additional way to disambiguate targets. Do not do this in machine-specific
-
+ dirs because so further disambiguation is needed. */
-
+ if (!machine_specific)
-
+ {
-
+ auto prefix_len = strlen(just_machine_prefix);
-
+ memcpy (path + path_len, just_machine_prefix, prefix_len);
-
+ auto res = search(path_len + prefix_len);
-
+ if (res) return res;
-
}
-
-
- return NULL;
-
+ return search(path_len);
-
}
-
-
/* Specialization of find_a_file for programs that also takes into account
-
--
-
2.47.2
-
+26 -3
pkgs/development/compilers/gcc/ng/common/gcc/default.nix
···
release_version,
version,
monorepoSrc ? null,
+
fetchpatch,
langAda ? false,
langC ? true,
langCC ? true,
···
];
patches = [
-
(getVersionFile "gcc/0001-find_a_program-First-search-with-machine-prefix.patch")
-
(getVersionFile "gcc/0002-driver-for_each_pass-Pass-to-callback-whether-dir-is.patch")
-
(getVersionFile "gcc/0003-find_a_program-Only-search-for-prefixed-paths-in-und.patch")
+
(fetchpatch {
+
name = "for_each_path-functional-programming.patch";
+
url = "https://github.com/gcc-mirror/gcc/commit/f23bac62f46fc296a4d0526ef54824d406c3756c.diff";
+
hash = "sha256-J7SrypmVSbvYUzxWWvK2EwEbRsfGGLg4vNZuLEe6Xe0=";
+
})
+
(fetchpatch {
+
name = "find_a_program-separate-from-find_a_file.patch";
+
url = "https://inbox.sourceware.org/gcc-patches/20250822234120.1988059-1-git@JohnEricson.me/raw";
+
hash = "sha256-0gaWaeFZq+a8q7Bcr3eILNjHh1LfzL/Lz4F+W+H6XIU=";
+
})
+
(fetchpatch {
+
name = "simplify-find_a_program-and-find_a_file.patch";
+
url = "https://inbox.sourceware.org/gcc-patches/20250822234120.1988059-2-git@JohnEricson.me/raw";
+
hash = "sha256-ojdyszxLGL+njHK4eAaeBkxAhFTDI57j6lGuAf0A+N0=";
+
})
+
(fetchpatch {
+
name = "for_each_path-pass-machine-specific.patch";
+
url = "https://inbox.sourceware.org/gcc-patches/20250822234120.1988059-3-git@JohnEricson.me/raw";
+
hash = "sha256-C5jUSyNchmZcE8RTXc2dHfCqNKuBHeiouLruK9UooSM=";
+
})
+
(fetchpatch {
+
name = "find_a_program-search-with-machine-prefix.patch";
+
url = "https://inbox.sourceware.org/gcc-patches/20250822234120.1988059-4-git@JohnEricson.me/raw";
+
hash = "sha256-MwcO4OXPlcdaSYivsh5ru+Cfq6qybeAtgCgTEPGYg40=";
+
})
(getVersionFile "gcc/fix-collect2-paths.diff")
];
-25
pkgs/development/compilers/gcc/ng/common/patches.nix
···
}
];
-
# Submitted (001--003):
-
# - https://gcc.gnu.org/pipermail/gcc-patches/2021-August/577639.html
-
# - https://gcc.gnu.org/pipermail/gcc-patches/2021-August/577640.html
-
# - https://gcc.gnu.org/pipermail/gcc-patches/2021-August/577638.html
-
#
-
# In Git: https://github.com/Ericson2314/gcc/tree/prog-target-15
-
"gcc/0001-find_a_program-First-search-with-machine-prefix.patch" = [
-
{
-
after = "15";
-
path = ../15;
-
}
-
];
-
"gcc/0002-driver-for_each_pass-Pass-to-callback-whether-dir-is.patch" = [
-
{
-
after = "15";
-
path = ../15;
-
}
-
];
-
"gcc/0003-find_a_program-Only-search-for-prefixed-paths-in-und.patch" = [
-
{
-
after = "15";
-
path = ../15;
-
}
-
];
-
# In Git: https://github.com/Ericson2314/gcc/tree/regular-dirs-in-libgcc-15
"libgcc/force-regular-dirs.patch" = [
{