> > @@ -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.
This is because the -flinker-output may be specified by user and then it goes to decoded options or by linker plugin (because we default to non-lto objects of there is non-IL .o file linker in and only plugin knows). These options comes in in different ways, but we know that either the first hunk matches or the second hunk, they never match together. So I hope it is OK (extending linker plugin to update passed options is probably unnecesary work. We do same trick for -fresolution and other stuff). I have added explanatory comment. Honza > > 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)