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 --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; -- 2.39.2