YunQiang Su <s...@gcc.gnu.org> 于2024年5月22日周三 17:54写道: > > If `find_a_program` cannot find `as/ld/objcopy` and we are a cross toolchain, > the final fallback is `as/ld` of system. In fact, we can have a try with > <triple>-as/ld/objcopy before fallback to native as/ld/objcopy. > > This patch is derivatived from Debian's patch: > gcc-search-prefixed-as-ld.diff > > gcc > * gcc.cc(execute): Looks for <triple>-as/ld/objcopy before fallback > to native as/ld/objcopy.
ping. OK for the trunk? > --- > gcc/gcc.cc | 20 ++++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/gcc/gcc.cc b/gcc/gcc.cc > index 830a4700a87..3dc6348d761 100644 > --- a/gcc/gcc.cc > +++ b/gcc/gcc.cc > @@ -3293,6 +3293,26 @@ execute (void) > string = find_a_program(commands[0].prog); > if (string) > commands[0].argv[0] = string; > + else if (*cross_compile != '0' > + && !strcmp (commands[0].argv[0], commands[0].prog) > + && (!strcmp (commands[0].prog, "as") > + || !strcmp (commands[0].prog, "ld") > + || !strcmp (commands[0].prog, "objcopy"))) > + { > + string = concat (DEFAULT_REAL_TARGET_MACHINE, "-", > + commands[0].prog, NULL); > + const char *string_args[] = {string, "--version", NULL}; > + int exit_status = 0; > + int err = 0; > + const char *errmsg = pex_one (PEX_SEARCH, string, > + CONST_CAST (char **, string_args), string, > + NULL, NULL, &exit_status, &err); > + if (errmsg == NULL && exit_status == 0 && err == 0) > + { > + commands[0].argv[0] = string; > + commands[0].prog = string; > + } > + } > } > > for (n_commands = 1, i = 0; argbuf.iterate (i, &arg); i++) > -- > 2.39.2 >