On Tue, 8 May 2018, Jan Hubicka wrote:

> Hi,
> this patch makes lto-wrapper to look for -flinker-output=rel and in this
> case confiugre lto1 in non-WHOPR mode + disable section renaming.
> 
> Bootstrapped/regtested x86_64-linux with rest of incremental link patchset.
> OK?
> 
>       * lto-wrapper.c (debug_objcopy): Add rename parameter; pass
>       it down to simple_object_copy_lto_debug_sections.
>       (run_gcc): Determine incremental LTO link time and configure
>       lto1 into non-wpa mode, disable renaming of debug sections.
> 
> Index: lto-wrapper.c
> ===================================================================
> --- lto-wrapper.c     (revision 260042)
> +++ lto-wrapper.c     (working copy)
> @@ -966,7 +966,7 @@
>     is returned.  Return NULL on error.  */
>  
>  const char *
> -debug_objcopy (const char *infile)
> +debug_objcopy (const char *infile, bool rename)
>  {
>    const char *outfile;
>    const char *errmsg;
> @@ -1008,7 +1008,7 @@
>      }
>  
>    outfile = make_temp_file ("debugobjtem");
> -  errmsg = simple_object_copy_lto_debug_sections (inobj, outfile, &err);
> +  errmsg = simple_object_copy_lto_debug_sections (inobj, outfile, &err, 
> rename);
>    if (errmsg)
>      {
>        unlink_if_ordinary (outfile);
> @@ -1056,6 +1056,7 @@
>    bool have_offload = false;
>    unsigned lto_argc = 0, ltoobj_argc = 0;
>    char **lto_argv, **ltoobj_argv;
> +  bool linker_output_rel = false;
>    bool skip_debug = false;
>    unsigned n_debugobj;
>  
> @@ -1108,9 +1109,12 @@
>         file_offset = (off_t) loffset;
>       }
>        fd = open (filename, O_RDONLY | O_BINARY);
> +      /* Linker plugin passes -fresolution and -flinker-output options.  */
>        if (fd == -1)
>       {
>         lto_argv[lto_argc++] = argv[i];
> +       if (strcmp (argv[i], "-flinker-output=rel") == 0)
> +         linker_output_rel = true;
>         continue;
>       }

Why do you need this?

>  
> @@ -1175,6 +1179,11 @@
>         lto_mode = LTO_MODE_WHOPR;
>         break;
>  
> +     case OPT_flinker_output_:
> +       linker_output_rel = !strcmp (option->arg, "rel");
> +       break;
> +
> +

And this?  It looks to me either should suffice and if not then
what about conflicting options here?

Otherwise looks ok.

Richard.

>       default:
>         break;
>       }
> @@ -1191,6 +1200,9 @@
>        fputc ('\n', stderr);
>      }
>  
> +  if (linker_output_rel)
> +    no_partition = true;
> +
>    if (no_partition)
>      {
>        lto_mode = LTO_MODE_LTO;
> @@ -1435,7 +1447,7 @@
>      for (i = 0; i < ltoobj_argc; ++i)
>        {
>       const char *tem;
> -     if ((tem = debug_objcopy (ltoobj_argv[i])))
> +     if ((tem = debug_objcopy (ltoobj_argv[i], !linker_output_rel)))
>         {
>           obstack_ptr_grow (&argv_obstack, tem);
>           n_debugobj++;
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 
21284 (AG Nuernberg)

Reply via email to