On February 4, 2015 5:49:13 AM CET, Cary Coutant <ccout...@google.com> wrote: >The plugin is not supposed to call release_input_file from the >claim_file handler. That interface is only for releasing a file >descriptor obtained via get_input_file during the all_symbols_read >callback. When the linker calls the claim_file handler, the file >descriptor is open, and the plugin is required to leave it open; the >linker manages the file descriptor at that point. The >get_input_file/release_input_file pair of interfaces was added later, >for the benefit of another (non-LTO) plugin (although I think the LLVM >LTO plugin does use that pair during the all_symbols_read callback). > >This is described here: > > https://gcc.gnu.org/wiki/whopr/driver > >If you're going to insist on calling the release_input_file API from >the claim_file handler, I'm going to have to fix gold to ignore the >call to avoid a premature unlock of the object file.
What's the proper solution for not leaking those filedescriptors? Richard. >-cary > > > >On Wed, Jan 28, 2015 at 4:02 PM, H.J. Lu <hjl.to...@gmail.com> wrote: >> On Wed, Jan 28, 2015 at 11:37 AM, H.J. Lu <hjl.to...@gmail.com> >wrote: >>> On Wed, Jan 28, 2015 at 11:19 AM, Richard Biener >>> <richard.guent...@gmail.com> wrote: >>>> On January 28, 2015 7:12:43 PM CET, "H.J. Lu" ><hongjiu...@intel.com> wrote: >>>>>Hi, >>>>> >>>>>This patch makes claim_file_handler to call release_input_file >after it >>>>>finishes processing input file. OK for trunk? >>>> >>>> OK. How did you test this? >>> >>> I did normal bootstrap and "make check" on Linux/x86-64. >>> I also run ld.bfd and ld.gold by hand to verify that >release_input_file >>> is called. >>> >> >> This is needed for LTO build. ar/nm/ranlib don't provide >> release_input_file. I checked it in as an obvious fix. >> >> -- >> H.J. >> --- >> Index: ChangeLog >> =================================================================== >> --- ChangeLog (revision 220212) >> +++ ChangeLog (working copy) >> @@ -1,5 +1,10 @@ >> 2015-01-28 H.J. Lu <hongjiu...@intel.com> >> >> + * lto-plugin.c (claim_file_handler): Call release_input_file only >> + if it is not NULL. >> + >> +2015-01-28 H.J. Lu <hongjiu...@intel.com> >> + >> PR lto/64837 >> * lto-plugin.c (release_input_file): New. >> (claim_file_handler): Call release_input_file. >> Index: lto-plugin.c >> =================================================================== >> --- lto-plugin.c (revision 220212) >> +++ lto-plugin.c (working copy) >> @@ -1007,7 +1007,8 @@ claim_file_handler (const struct ld_plug >> if (obj.objfile) >> simple_object_release_read (obj.objfile); >> >> - release_input_file (file); >> + if (release_input_file) >> + release_input_file (file); >> >> return LDPS_OK; >> }