On Fri, Dec 4, 2020 at 5:45 AM Martin Liška <mli...@suse.cz> wrote:
>
> PING
>
> May I please ping the patch, it's waiting here for a review
> for quite some time.
>
> Thanks,
> Martin

Ping. I think Martin LGTMed this patch and was waiting for a
maintainer to merge it

> On 7/23/20 12:17 PM, Martin Liška wrote:
> > On 7/21/20 6:07 AM, Fangrui Song wrote:
> >> If the value does not contain any path component separator (e.g. a
> >> slash), the linker will be searched for using COMPILER_PATH followed by
> >> PATH. Otherwise, it is either an absolute path or a path relative to the
> >> current working directory.
> >>
> >> --ld-path= complements and overrides -fuse-ld={bfd,gold,lld}. If in the
> >> future, we want to make dfferent linker option decisions we can let
> >> -fuse-ld= represent the linker flavor and --ld-path= the linker path.
> >
> > Hello.
> >
> > I have just few nits:
> >
> > === ERROR type #3: trailing operator (1 error(s)) ===
> > gcc/collect2.c:1155:14:    ld_file_name =
> >
> >>
> >>     PR driver/93645
> >>     * common.opt (--ld-path=): Add --ld-path=
> >>     * opts.c (common_handle_option): Handle OPT__ld_path_.
> >>     * gcc.c (driver_handle_option): Likewise.
> >>     * collect2.c (main): Likewise.
> >>     * doc/invoke.texi: Document --ld-path=.
> >>
> >> ---
> >> Changes in v2:
> >> * Renamed -fld-path= to --ld-path= (clang 12.0.0 new option).
> >>    The option does not affect code generation and is not a language 
> >> feature,
> >>    -f* is not suitable. Additionally, clang has other similar --*-path=
> >>    options, e.g. --cuda-path=.
> >> ---
> >>   gcc/collect2.c      | 63 +++++++++++++++++++++++++++++++++++----------
> >>   gcc/common.opt      |  4 +++
> >>   gcc/doc/invoke.texi |  9 +++++++
> >>   gcc/gcc.c           |  2 +-
> >>   gcc/opts.c          |  1 +
> >>   5 files changed, 64 insertions(+), 15 deletions(-)
> >>
> >> diff --git a/gcc/collect2.c b/gcc/collect2.c
> >> index f8a5ce45994..caa1b96ab52 100644
> >> --- a/gcc/collect2.c
> >> +++ b/gcc/collect2.c
> >> @@ -844,6 +844,7 @@ main (int argc, char **argv)
> >>     const char **ld1;
> >>     bool use_plugin = false;
> >>     bool use_collect_ld = false;
> >> +  const char *ld_path = NULL;
> >>     /* The kinds of symbols we will have to consider when scanning the
> >>        outcome of a first pass link.  This is ALL to start with, then might
> >> @@ -961,12 +962,21 @@ main (int argc, char **argv)
> >>           if (selected_linker == USE_DEFAULT_LD)
> >>             selected_linker = USE_PLUGIN_LD;
> >>         }
> >> -    else if (strcmp (argv[i], "-fuse-ld=bfd") == 0)
> >> -      selected_linker = USE_BFD_LD;
> >> -    else if (strcmp (argv[i], "-fuse-ld=gold") == 0)
> >> -      selected_linker = USE_GOLD_LD;
> >> -    else if (strcmp (argv[i], "-fuse-ld=lld") == 0)
> >> -      selected_linker = USE_LLD_LD;
> >> +    else if (strncmp (argv[i], "-fuse-ld=", 9) == 0
> >> +         && selected_linker != USE_LD_MAX)
> >> +      {
> >> +        if (strcmp (argv[i] + 9, "bfd") == 0)
> >> +          selected_linker = USE_BFD_LD;
> >> +        else if (strcmp (argv[i] + 9, "gold") == 0)
> >> +          selected_linker = USE_GOLD_LD;
> >> +        else if (strcmp (argv[i] + 9, "lld") == 0)
> >> +          selected_linker = USE_LLD_LD;
> >> +      }
> >> +    else if (strncmp (argv[i], "--ld-path=", 10) == 0)
> >> +      {
> >> +        ld_path = argv[i] + 10;
> >> +        selected_linker = USE_LD_MAX;
> >> +      }
> >>       else if (strncmp (argv[i], "-o", 2) == 0)
> >>         {
> >>           /* Parse the output filename if it's given so that we can make
> >> @@ -1117,14 +1127,34 @@ main (int argc, char **argv)
> >>         ld_file_name = find_a_file (&cpath, collect_ld_suffix, X_OK);
> >>         use_collect_ld = ld_file_name != 0;
> >>       }
> >> -  /* Search the compiler directories for `ld'.  We have protection against
> >> -     recursive calls in find_a_file.  */
> >> -  if (ld_file_name == 0)
> >> -    ld_file_name = find_a_file (&cpath, ld_suffixes[selected_linker], 
> >> X_OK);
> >> -  /* Search the ordinary system bin directories
> >> -     for `ld' (if native linking) or `TARGET-ld' (if cross).  */
> >> -  if (ld_file_name == 0)
> >> -    ld_file_name = find_a_file (&path, full_ld_suffixes[selected_linker], 
> >> X_OK);
> >> +  if (selected_linker == USE_LD_MAX)
> >> +    {
> >> +      /* If --ld-path= does not contain a path component separator, 
> >> search for
> >> +     the command using cpath, then using path.  Otherwise find the linker
> >> +     relative to the current working directory.  */
> >> +      if (lbasename (ld_path) == ld_path)
> >> +    {
> >> +      ld_file_name = find_a_file (&cpath, ld_path, X_OK);
> >> +      if (ld_file_name == 0)
> >> +        ld_file_name = find_a_file (&path, ld_path, X_OK);
> >> +    }
> >> +      else if (file_exists (ld_path))
> >> +    {
> >
> > ^^^ these braces are not needed.
> >
> >> +      ld_file_name = ld_path;
> >> +    }
> >> +    }
> >> +  else
> >> +    {
> >> +      /* Search the compiler directories for `ld'.  We have protection 
> >> against
> >> +     recursive calls in find_a_file.  */
> >> +      if (ld_file_name == 0)
> >
> > I would prefer '== NULL'.
> >
> >> +    ld_file_name = find_a_file (&cpath, ld_suffixes[selected_linker], 
> >> X_OK);
> >> +      /* Search the ordinary system bin directories
> >> +     for `ld' (if native linking) or `TARGET-ld' (if cross).  */
> >> +      if (ld_file_name == 0)
> >> +    ld_file_name =
> >> +      find_a_file (&path, full_ld_suffixes[selected_linker], X_OK);
> >> +    }
> >>   #ifdef REAL_NM_FILE_NAME
> >>     nm_file_name = find_a_file (&path, REAL_NM_FILE_NAME, X_OK);
> >> @@ -1461,6 +1491,11 @@ main (int argc, char **argv)
> >>             ld2--;
> >>   #endif
> >>           }
> >> +          else if (strncmp (arg, "--ld-path=", 10) == 0)
> >> +        {
> >> +          ld1--;
> >> +          ld2--;
> >> +        }
> >
> > Can you please explain more this change?
> >
> > Thank you,
> > Martin
> >
> >>             else if (strncmp (arg, "--sysroot=", 10) == 0)
> >>           target_system_root = arg + 10;
> >>             else if (strcmp (arg, "--version") == 0)
> >> diff --git a/gcc/common.opt b/gcc/common.opt
> >> index a3893a4725e..5adbd8c18a3 100644
> >> --- a/gcc/common.opt
> >> +++ b/gcc/common.opt
> >> @@ -2940,6 +2940,10 @@ fuse-ld=lld
> >>   Common Driver Negative(fuse-ld=lld)
> >>   Use the lld LLVM linker instead of the default linker.
> >> +-ld-path=
> >> +Common Driver Joined
> >> +Use the specified executable instead of the default linker.
> >> +
> >>   fuse-linker-plugin
> >>   Common Undocumented Var(flag_use_linker_plugin)
> >> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> >> index ba18e05fb1a..e185e40ffac 100644
> >> --- a/gcc/doc/invoke.texi
> >> +++ b/gcc/doc/invoke.texi
> >> @@ -14718,6 +14718,15 @@ Use the @command{gold} linker instead of the 
> >> default linker.
> >>   @opindex fuse-ld=lld
> >>   Use the LLVM @command{lld} linker instead of the default linker.
> >> +@item --ld-path=@var{linker}
> >> +@opindex -ld-path=linker
> >> +Use the specified executable named @var{linker} instead of the default 
> >> linker.
> >> +If @var{linker} does not contain any path component separator (e.g. a 
> >> slash),
> >> +the linker will be searched for using @env{COMPILER_PATH} followed by
> >> +@env{PATH}. Otherwise, it is either an absolute path or a path relative 
> >> to the
> >> +current working directory.  If @option{-fuse-ld=} is also specified, the 
> >> linker
> >> +path is specified by @option{--ld-path=}.
> >> +
> >>   @cindex Libraries
> >>   @item -l@var{library}
> >>   @itemx -l @var{library}
> >> diff --git a/gcc/gcc.c b/gcc/gcc.c
> >> index c0eb3c10cfd..05fa5375f06 100644
> >> --- a/gcc/gcc.c
> >> +++ b/gcc/gcc.c
> >> @@ -1077,7 +1077,7 @@ proper position among the other output files.  */
> >>       LINK_PLUGIN_SPEC \
> >>      "%{flto|flto=*:%<fcompare-debug*} \
> >>       %{flto} %{fno-lto} %{flto=*} %l " LINK_PIE_SPEC \
> >> -   "%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \
> >> +   "%{fuse-ld=*:-fuse-ld=%*} %{-ld-path=*:--ld-path=%*} " 
> >> LINK_COMPRESS_DEBUG_SPEC \
> >>      "%X %{o*} %{e*} %{N} %{n} %{r}\
> >>       %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!r:%{!nostartfiles:%S}}} \
> >>       %{static|no-pie|static-pie:} %@{L*} %(mfwrap) %(link_libgcc) " \
> >> diff --git a/gcc/opts.c b/gcc/opts.c
> >> index 499eb900643..5cbf9b85549 100644
> >> --- a/gcc/opts.c
> >> +++ b/gcc/opts.c
> >> @@ -2755,6 +2755,7 @@ common_handle_option (struct gcc_options *opts,
> >>         dc->max_errors = value;
> >>         break;
> >> +    case OPT__ld_path_:
> >>       case OPT_fuse_ld_bfd:
> >>       case OPT_fuse_ld_gold:
> >>       case OPT_fuse_ld_lld:
> >>
> >
>


-- 
宋方睿

Reply via email to