This is the mail archive of the
mailing list for the Cygwin project.
Re: libtcl8.5.dll collides with Cygwin DLL by default
- From: "Yaakov (Cygwin/X)" <yselkowitz at users dot sourceforge dot net>
- To: cygwin-apps at cygwin dot com
- Date: Wed, 07 Mar 2012 17:57:07 -0600
- Subject: Re: libtcl8.5.dll collides with Cygwin DLL by default
- References: <20120307104237.GB5159@calimero.vinschen.de>
On 2012-03-07 04:42, Corinna Vinschen wrote:
the default base address of libtcl8.5.dll collides with the address
space of the Cygwin DLL. Sure, we can't quite avoid DLL collisions,
but this kind of collision results with high probability in a crash,
rather than a collision detection message from Cygwin.
Tcl does not use any special linker options, so this is a result of
--enable-auto-image-base, which gcc has been using by default for some
time. See ld/emultempl/pe.em:
static unsigned long
compute_dll_image_base (const char *ofile)
unsigned long hash = strhash (ofile);
return 0x61300000 + ((hash << 16) & 0x0FFC0000);
This would be based on an assumption that cygwin1.dll's ImageBase is
0x6100000 and its SizeOfImage 0x00300000. That was correct through
1.7.7, but since then:
I'm not sure what is causing this continuous change, but the
now-incorrect assumption is the real problem: any DLL with a strhash()
within a certain range will have the same issue. So unless there is a
way to get our SizeOfImage back down to 0x00300000, the correct fix
needs to be there (keeping in mind future growth).
Do you think it's ok if you create a new tcl package with another
default base address for libtcl8.5.dll?
With a patched binutils, I suppose. But this begs the question, how
many other DLLs are affected?