diff mbox series

[v2,2/2] driver: Search <triple>-as/ld/objcopy before non-triple ones

Message ID 20240522095404.1825269-2-syq@gcc.gnu.org
State New
Headers show
Series [v2,1/2] driver: Use <triple>-as/ld/objcopy as final fallback instead of native ones for cross | expand

Commit Message

YunQiang Su May 22, 2024, 9:54 a.m. UTC
When looking for as/ld/objcopy, `find_a_program/file_at_path` only
try to find the raw name, but won't find the one with <triple>-
prefix.

This patch is derivatived from Debian's patch:
    gcc-search-prefixed-as-ld.diff

gcc
	* gcc.cc(for_each_path): Add more space for <triple>-.
	(file_at_path): Search <triple>-as/ld/objcopy before
	non-triple ones.
---
 gcc/gcc.cc | 13 +++++++++++++
 1 file changed, 13 insertions(+)
diff mbox series

Patch

diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index 3dc6348d761..0fa2eafea84 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -2820,6 +2820,8 @@  for_each_path (const struct path_prefix *paths,
 	{
 	  len = paths->max_len + extra_space + 1;
 	  len += MAX (MAX (suffix_len, multi_os_dir_len), multiarch_len);
+	  /* triplet prefix for as, ld.  */
+	  len += MAX (strlen (DEFAULT_REAL_TARGET_MACHINE), multiarch_len) + 2;
 	  path = XNEWVEC (char, len);
 	}
 
@@ -3033,6 +3035,17 @@  file_at_path (char *path, void *data)
   struct file_at_path_info *info = (struct file_at_path_info *) data;
   size_t len = strlen (path);
 
+  /* search for the <triple>-as / -ld / objcopy first.  */
+  if (! strcmp (info->name, "as") || ! strcmp (info->name, "ld")
+	|| ! strcmp (info->name, "objcopy"))
+    {
+      struct file_at_path_info prefix_info = *info;
+      prefix_info.name = concat (DEFAULT_REAL_TARGET_MACHINE, "-",
+				info->name, NULL);
+      prefix_info.name_len = strlen (prefix_info.name);
+      if (file_at_path (path, &prefix_info))
+	return path;
+    }
   memcpy (path + len, info->name, info->name_len);
   len += info->name_len;