delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2013/08/22/13:15:01

X-Recipient: archive-cygwin AT delorie DOT com
DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:date:from:to:subject:message-id:reply-to
:references:mime-version:content-type:in-reply-to; q=dns; s=
default; b=akX0ovG9tjUJG/zm6Q+RTF9R7kE4Akhx4DBnKQhdB5qc32byEZ/pJ
6aYN/Xln21g4P6C/v9aXywq0ARbys3/Z8+rGQN6iY1SN0aiwUPEzBU/QJOsoH9sh
zOSu6p3F46rJ9tWW+Cw7INFvHG7Wejvhrt2+tGp3Bzi+W1fAgAwSj4=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:date:from:to:subject:message-id:reply-to
:references:mime-version:content-type:in-reply-to; s=default;
bh=XicXkvs7nTPLC3GIzAKQxgmBb4s=; b=rTwOoVWFje3mmAUY07ePGGioqytz
cRaqAZiLAjlLbOAd3sRAWDrCSOZ7FdxeW892OUxL9kfFoop3fx5k6fGjQYx1cmYD
dqD01rdjrmuzM1flzly5egqXSTAxmz5jUwgXFYi2tMr93mq8HbLv3pHS3UBngMdx
cyc3UbwCpxKQraY=
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
X-Spam-SWARE-Status: No, score=-4.5 required=5.0 tests=AWL,BAYES_00,KHOP_PGP_SIGNED autolearn=ham version=3.3.2
Date: Thu, 22 Aug 2013 19:14:19 +0200
From: Corinna Vinschen <corinna-cygwin AT cygwin DOT com>
To: cygwin AT cygwin DOT com
Subject: Re: Why are the 32- and 64-bit cygwin1.dlls incompatible?
Message-ID: <20130822171419.GQ2562@calimero.vinschen.de>
Reply-To: cygwin AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
References: <52162CA9 DOT 9080002 AT etr-usa DOT com>
MIME-Version: 1.0
In-Reply-To: <52162CA9.9080002@etr-usa.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
X-Virus-Found: No

--Pes7OZCOzfZhFQfq
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Aug 22 09:22, Warren Young wrote:
> If you try something like this from a Cygwin 64 install:
>=20
>     $ /cygdrive/c/cygwin32/bin/ls
>=20
> you get an error like this:
>=20
>     3 [main] ls (8168) C:\cygwin32\bin\ls.exe: *** fatal error -
>     cygheap base mismatch detected - 0x0/0x612A0950.
>=20
> It goes on to explain that this is due to trying to load an
> incompatible cygwin1.dll.
>=20
> 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.
>=20
> Yet, if that were truly what's going on, DLL redirection[2] should
> fix it.  From Cygwin 64 again:
>=20
>     $ touch /cygdrive/c/cygwin32/bin/ls.exe.local
>     $ /cygdrive/c/cygwin32/bin/ls
>     same complaint as before
>=20
> Another oddity is that the inverse test succeeds.  From Cygwin 32:
>=20
>     $ /cygdrive/c/cygwin64/bin/ls
>     all   my   base
>     $
>=20
> 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.
>=20
> What is really going on here?
>=20
> 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.

When execveing a Cygwin process, a lot of data is submitted via shared
memory, via data copying, and via a special parameter to the
CreateProcess call with the mysterious name "lpReserved2".

One problem is the differences in basic datatypes, which results in
incompatible datastructures between 32 and 64 bit.  While this could be
worked around, this doesn't help for the shared memory stuff, which
depends on the installation path of the cygwin DLL.  The Cygwin DLL in
C:\cygwin1 would use a different name for the shared mem regions than
the Cygwin DLL installed into C:\cygwin2, independent of the target
architecture.  This is by design since Cygwin 1.7.  One effect:  No tty
sharing.

Therefore, interaction between the 32 and 64 bit DLLs is not supported.
This was an early design goal when we discussed the 64 bit DLL on the
cygwin-developers list two years ago, but I was almost the only one
favoring this approach, AFAIR.  It also turned out that the complexity
of this approach was pretty high, so we discussed it again early 2013
and I dropped it, otherwise we would very likely not have a 64 bit
distro at this time.


Corinna

--=20
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

--Pes7OZCOzfZhFQfq
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.14 (GNU/Linux)

iQIcBAEBAgAGBQJSFkbrAAoJEPU2Bp2uRE+gFk0P/ioddK6gP4DVipxlWvaOgx/a
yqLNnoyFHrL15wHfzYd3EVFAFsOAzxFwfS5r/FIUoo/xfakeft8//SS3HlVjmB3R
tUPARtjLo0dzt+ou40zfx8S0ZaY4y+15QxnGjoSfxcph66XL3g7bHzpqraVnSX3f
WN4/NnAO1kBK+drQWeiL6cJ2NCzzpCea6rW7lYGsc517ztTTNBC5C8hrzhn/qTyH
QH5c0cyTC+2XSuWOIv1oAgJ9e7uqh/8piivNt8GqoTCYR+6Kys4xR0UU238kKE2P
21di0uFBaR3dp1DdLhFFZe7LJF+hd32d4uTzrhVHWBnL6O3qhn8rmCsiP6lfCN9X
s1Cf5o08vIVABNt904mN75hbeP9Rh6q2hicqP8dM3ZxW0E0cX+SR5ftY9W5DMICC
2HGDvyMy4Wr9ROzrIhncmOGGz/r7tB2L7LoeKJnmXIVIjH6PgWIA8OA2l0UEokNx
gJNQbKgNeMwssGwcToUebr7qvKWu3i1HAvWvtXu57K4RN5q7IRqfOQYk0zPpbfgW
zh53zzKeBW4Hpw967dro51bFlQ1kYq/IQ1TD2b2OAgsMpPFTWz5BnsYwcaj4Wwe8
qU8ZM4F88jaa52k1oPURfTaThtHvys1P283TFisnZsq7gkB4rm92GqePb29DQjyc
AuYGuB7ZiSMJB7TYm910
=Udt3
-----END PGP SIGNATURE-----

--Pes7OZCOzfZhFQfq--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019