Why are the 32- and 64-bit cygwin1.dlls incompatible?

Warren Young warren@etr-usa.com
Thu Aug 22 15:22:00 GMT 2013


If you try something like this from a Cygwin 64 install:

     $ /cygdrive/c/cygwin32/bin/ls

you get an error like this:

     3 [main] ls (8168) C:\cygwin32\bin\ls.exe: *** fatal error -
     cygheap base mismatch detected - 0x0/0x612A0950.

It goes on to explain that this is due to trying to load an incompatible 
cygwin1.dll.

My best guess is that this happens because the standard Windows DLL 
search logic[1] says "oh, I already have a CYGWIN1 module loaded, I will 
use that one."  And boom.

Yet, if that were truly what's going on, DLL redirection[2] should fix 
it.  From Cygwin 64 again:

     $ touch /cygdrive/c/cygwin32/bin/ls.exe.local
     $ /cygdrive/c/cygwin32/bin/ls
     same complaint as before

Another oddity is that the inverse test succeeds.  From Cygwin 32:

     $ /cygdrive/c/cygwin64/bin/ls
     all   my   base
     $

In another forum[3], Yaakov told me that Windows is supposed to be 
taking CPU bitness into account here, which should be another way for it 
to work without special help.  I don't see mention of such a rule in 
[1], however.

What is really going on here?

Understand, I'm not asking because I want it fixed.  I mean, it'd be 
*nice* if it were fixed, but I'm more interested in knowing why it is 
the way it is.



[1] http://goo.gl/j2g1EL
[2] http://goo.gl/IVI6CE
[3] http://goo.gl/2HcAZk

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list