On Fri, Aug 23, 2024, 4:02 AM Prathamesh Kulkarni <prathame...@nvidia.com> wrote:
> > > > -----Original Message----- > > From: Richard Biener <richard.guent...@gmail.com> > > Sent: Thursday, August 22, 2024 2:16 PM > > To: H.J. Lu <hjl.to...@gmail.com> > > Cc: gcc-patches@gcc.gnu.org; josmy...@redhat.com > > Subject: Re: [PATCH v3] Update LDPT_REGISTER_CLAIM_FILE_HOOK_V2 linker > > plugin hook > > > > External email: Use caution opening links or attachments > > > > > > On Wed, Aug 21, 2024 at 4:25 PM H.J. Lu <hjl.to...@gmail.com> wrote: > > > > > > This hook allows the BFD linker plugin to distinguish calls to > > > claim_file_handler that know the object is being used by the linker > > > (from ldmain.c:add_archive_element), from calls that don't know it's > > > being used by the linker (from elf_link_is_defined_archive_symbol); > > in > > > the latter case, the plugin should avoid including the unused LTO > > > archive members in link output. To get the proper support for > > > archives with LTO common symbols, the linker fix > > > > OK. > Hi, > After this commit: > > https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=a98dd536b1017c2b814a3465206c6c01b2890998 > I am no longer able to see mkoffload (and accel compiler) being invoked > for nvptx (-save-temps also doesn't show accel dumps). > I have attached -v output before and after the commit for x86_64->nvptx > offloading for the following simple test (host doesn't really matter, can > also reproduce with aarch64 host): > Please open a bug report with exact steps to reproduce the issue. > int main() > { > int x = 1; > #pragma omp target map(x) > x = 5; > return x; > } > > Thanks, > Prathamesh > > > > Thanks, > > Richard. > > > > > commit a6f8fe0a9e9cbe871652e46ba7c22d5e9fb86208 > > > Author: H.J. Lu <hjl.to...@gmail.com> > > > Date: Wed Aug 14 20:50:02 2024 -0700 > > > > > > lto: Don't include unused LTO archive members in output > > > > > > is required. > > > > > > PR lto/116361 > > > * lto-plugin.c (claim_file_handler_v2): Rename claimed to > > > can_be_claimed. Include the LTO object only if it is known > > to > > > be included in link output. > > > > > > Signed-off-by: H.J. Lu <hjl.to...@gmail.com> > > > --- > > > lto-plugin/lto-plugin.c | 53 > > > ++++++++++++++++++++++++----------------- > > > 1 file changed, 31 insertions(+), 22 deletions(-) > > > > > > diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c index > > > 152648338b9..61b0de62f52 100644 > > > --- a/lto-plugin/lto-plugin.c > > > +++ b/lto-plugin/lto-plugin.c > > > @@ -1191,16 +1191,19 @@ process_offload_section (void *data, const > > char *name, off_t offset, off_t len) > > > return 1; > > > } > > > > > > -/* Callback used by a linker to check if the plugin will claim > > FILE. Writes > > > - the result in CLAIMED. If KNOWN_USED, the object is known by > > the linker > > > - to be used, or an older API version is in use that does not > > provide that > > > - information; otherwise, the linker is only determining whether > > this is > > > - a plugin object and it should not be registered as having > > offload data if > > > - not claimed by the plugin. */ > > > +/* Callback used by a linker to check if the plugin can claim FILE. > > > + Writes the result in CAN_BE_CLAIMED. If KNOWN_USED != 0, the > > object > > > + is known by the linker to be included in link output, or an > > older API > > > + version is in use that does not provide that information. > > Otherwise, > > > + the linker is only determining whether this is a plugin object > > and > > > + only the symbol table is needed by the linker. In this case, > > the > > > + object should not be included in link output and this function > > will > > > + be called by the linker again with KNOWN_USED != 0 after the > > linker > > > + decides the object should be included in link output. */ > > > > > > static enum ld_plugin_status > > > -claim_file_handler_v2 (const struct ld_plugin_input_file *file, int > > *claimed, > > > - int known_used) > > > +claim_file_handler_v2 (const struct ld_plugin_input_file *file, > > > + int *can_be_claimed, int known_used) > > > { > > > enum ld_plugin_status status; > > > struct plugin_objfile obj; > > > @@ -1229,7 +1232,7 @@ claim_file_handler_v2 (const struct > > ld_plugin_input_file *file, int *claimed, > > > } > > > lto_file.handle = file->handle; > > > > > > - *claimed = 0; > > > + *can_be_claimed = 0; > > > obj.file = file; > > > obj.found = 0; > > > obj.offload = false; > > > @@ -1286,15 +1289,19 @@ claim_file_handler_v2 (const struct > > ld_plugin_input_file *file, int *claimed, > > > lto_file.symtab.syms); > > > check (status == LDPS_OK, LDPL_FATAL, "could not add > > symbols"); > > > > > > - LOCK_SECTION; > > > - num_claimed_files++; > > > - claimed_files = > > > - xrealloc (claimed_files, > > > - num_claimed_files * sizeof (struct > > plugin_file_info)); > > > - claimed_files[num_claimed_files - 1] = lto_file; > > > - UNLOCK_SECTION; > > > + /* Include it only if it is known to be used for link output. > > */ > > > + if (known_used) > > > + { > > > + LOCK_SECTION; > > > + num_claimed_files++; > > > + claimed_files = > > > + xrealloc (claimed_files, > > > + num_claimed_files * sizeof (struct > > plugin_file_info)); > > > + claimed_files[num_claimed_files - 1] = lto_file; > > > + UNLOCK_SECTION; > > > + } > > > > > > - *claimed = 1; > > > + *can_be_claimed = 1; > > > } > > > > > > LOCK_SECTION; > > > @@ -1310,10 +1317,10 @@ claim_file_handler_v2 (const struct > > ld_plugin_input_file *file, int *claimed, > > > /* If this is an LTO file without offload, and it is the first > > LTO file, save > > > the pointer to the last offload file in the list. Further > > offload LTO > > > files will be inserted after it, if any. */ > > > - if (*claimed && !obj.offload && offload_files_last_lto == NULL) > > > + if (*can_be_claimed && !obj.offload && offload_files_last_lto == > > > + NULL) > > > offload_files_last_lto = offload_files_last; > > > > > > - if (obj.offload && (known_used || obj.found > 0)) > > > + if (obj.offload && known_used && obj.found > 0) > > > { > > > /* Add file to the list. The order must be exactly the same > > as the final > > > order after recompilation and linking, otherwise host and > > > target tables @@ -1324,7 +1331,9 @@ claim_file_handler_v2 (const > > struct ld_plugin_input_file *file, int *claimed, > > > ofld->name = lto_file.name; > > > ofld->next = NULL; > > > > > > - if (*claimed && offload_files_last_lto == NULL && file- > > >offset != 0 > > > + if (*can_be_claimed > > > + && offload_files_last_lto == NULL > > > + && file->offset != 0 > > > && gold_version == -1) > > > { > > > /* ld only: insert first LTO file from the archive after > > the > > > last real @@ -1341,7 +1350,7 @@ claim_file_handler_v2 (const struct > > ld_plugin_input_file *file, int *claimed, > > > offload_files->next = ofld; > > > } > > > } > > > - else if (*claimed && offload_files_last_lto != NULL) > > > + else if (*can_be_claimed && offload_files_last_lto != NULL) > > > { > > > /* Insert LTO file after the last LTO file in the list. > > */ > > > ofld->next = offload_files_last_lto->next; @@ -1356,7 > > > +1365,7 @@ claim_file_handler_v2 (const struct ld_plugin_input_file > > *file, int *claimed, > > > offload_files_last = ofld; > > > if (file->offset == 0) > > > offload_files_last_obj = ofld; > > > - if (*claimed) > > > + if (*can_be_claimed) > > > offload_files_last_lto = ofld; > > > num_offload_files++; > > > } > > > -- > > > 2.46.0 > > > > >