This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch] skipping import libraries for performance reasons - direct auto-import of dll's


Please separate policy arguments from functional arguments. Whether cygwin/mingw should drop import libs is policy. Whether libtool should use/create import libs is policy. Whether ld should support auto-import when doing "link-directly-to-dll" is functional.

[Note: I haven't tested your patch, but it looks mostly ok]

I think the ability to do auto-import when using ld's virtual, on-the-fly import lib feature (e.g. link-directly-to-dll) is valuable, and complete support (once achieved) should be accepted.

However...

There does not seem to be any support in your patch for the most recent auto-import capabilities -- the runtime-pseudo-reloc stuff added by Egor. So, if your patch is accepted as-is, then we have:

(1) if linking to implib, then "full" auto-import support is available; --enable-pseudo-reloc allows auto-import of "complex" data (see ld.info).

(2) if linking directly to the dll without an implib, then "partial" auto-import is available; --enable-pseudo-reloc has no effect. And doesn't warn that it fails. I *think* you'd end up with a runtime error, if attempting to import "complex" data.

Bad.

Two solutions:

(1) add support for runtime-pseudo-relocs to your patch, and resubmit. You might want to work with Egor on this.

(2) When doing "link-directly-to-dll" AND a symbol has a non-zero addend (e.g. "complex" data import), then behave as if link_info.pei386_runtime_pseudo_reloc = 0, even if --enable-pseudo-reloc has been specified. (Of course, IF --enable-pseudo-reloc has been specified and the current link obj is an import lib, then psuedo-reloc should occur). This complex behavior may actually be more difficult -- and more confusing -- than simply implementing solution (1).

Minor nit about patch format: watch out for your tab/indentation. It doesn't match the surrounding text in many cases.

Note: yes, I realize that the runtime-pseudo-reloc stuff requires actual runtime support (extra code in crt0.o for mingw, extra code in cygwin1.dll for cygwin) which does not yet exist. But it will, eventually -- and that's outside ld's purview. If "normal" import-lib-based linking includes support for --enable-pseudo-relocs, then "virtual on-the-fly direct" linking should support it too. Let mingw/crt0.o and cygwin/cygwin1.dll take care of themselves. Downside: it's hard for you, Ralf, test test whether you have properly implemented the runtime-pseudo-reloc support for virtual on-the-fly direct linking, unless you build your own cygwin kernel with the appropriate support...talk to Egor...

--
Chuck


--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Bug reporting: http://cygwin.com/bugs.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]