https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104416

            Bug ID: 104416
           Summary: 'lto-wrapper' invoking 'mkoffload's with duplicated
                    command-line options
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: other
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tschwinge at gcc dot gnu.org
                CC: jakub at gcc dot gnu.org
  Target Milestone: ---

If you compile offloading code for example with
'-foffload=nvptx-none=-Wl,foo.o\ -Wl,bar.o' where these '*.o' files intend to
override things from GCC target libraries, you'll get duplicate symbols errors
(at run time in case of nvptx offloading).  The reason is these options end up
twice on the nvptx offloading compilation command line.

Per '-v -save-temps', we see the 'lto-wrapper' invoke '[...]/mkoffload
@./a.offload_args', and 'a.offload_args' ends with:

    [...]
    -dumpbase
    ./a.xnvptx-none
    -Wl,foo.o
    -Wl,bar.o
    -Wl,foo.o
    -Wl,bar.o

That's (I suppose) not a problem for flags (because even if a later one
overrides an earlier, the same then happens again for the duplicated set of
flags), but it may be problematic for other options, as per above.

These command-line options are built in
'gcc/lto-wrapper.cc:compile_offload_image':

    [...]
      obstack_ptr_grow (&argv_obstack, "-dumpbase");
      obstack_ptr_grow (&argv_obstack, dumpbase);

      /* Append options specified by -foffload last.  In case of conflicting    
         options we expect offload compiler to choose the latest.  */
      append_offload_options (&argv_obstack, target, compiler_opts);
      append_offload_options (&argv_obstack, target, linker_opts);

      obstack_ptr_grow (&argv_obstack, NULL);
      argv = XOBFINISH (&argv_obstack, char **);
      fork_execute (argv[0], argv, true, "offload_args");
    [...]

I have not yet looked into 'compiler_opts', 'linker_opts'.

Per a quick check, this problem also exists for GCC 11, 10, 9, 8.
  • [Bug other/104416] New: 'lto-wra... tschwinge at gcc dot gnu.org via Gcc-bugs

Reply via email to