ld auto-import

Ralf Habacker Ralf.Habacker@freenet.de
Mon Feb 4 08:32:00 GMT 2002


>
> > >Seems to me the auto-import feature of ld is extremely broken; a separate
> > >DLL reference seems to be made for every auto-imported symbol. It's hard
> to
> > >describe, but look at the output from Dependancy Walker to see what I
> mean.
> > >Note: dependancy walker falls over on a whole load of Cygwin DLLs for
> this
> > >very reason :-(
> >
> > That means there is a different way possible to reference
> > symbols?  Would that speed up the loading of symbols?
> >
> > BTW, which version of ld are you using?
> >
> > And what do you suggest to change in the code base to get
> > around this 'problem'?
> >
> > The better place to discuss this issue is the binutils list (I
> > guess).
> >
> > What is 'dependancy walker', is it available for download
> > somewhere or what do I need to buy to get it?
> The Dependancy Walker (depends.exe) is part of the Platform SDK which you
> get with MSVC++ or you can download from MSDN.
>
> I don't know anything about ld internals, but I observed that normally, for
> Windows executable files, there is one entry for each DLL the executable
> file is dependant upon and for each DLL there is a list of imports from that
> DLL that need to be patched up. ld, on the other hand, under some
> circumstances ends up creating a separate DLL entry for each function that
> is imported. I don't know whether this is a side effect of the way object
> files are merged.
> To give you an idea of how many superfluous entries there are,
> cygkdecore-3.dll has 8564 references to qt-2-3.dll. The attached file
> demonstrates the problem. Notice how there is one entry for qt-2-3.dll at
> the top with a number of imported symbols in it. Then under that there are
> 8563 entries, all for qt-2-3.dll again, each with a single symbol under it.
> These symbols, I believe, are the ones imported using the auto-import
> mechanism, although I may be wrong. These symbols should be merged and
> appear under a single qt-2-3.dll entry.

This is done by the linux objprelink tool, which is used by currently kde development to reduce needed relocations.
Unfortually I hadn't time to check if this tool works with the cygwin object files.
>
> I am using GNU ld version 2.11.90. I think it's the version from the
> kde-cygwin sourceforge page.
> The attached output was generated using dumpbin.exe from MSVC++.
>
> Regards
> Chris
>
>




More information about the Binutils mailing list