delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin-developers/2002/11/08/05:28:50

Mailing-List: contact cygwin-developers-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-developers-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin-developers/>
List-Post: <mailto:cygwin-developers AT cygwin DOT com>
List-Help: <mailto:cygwin-developers-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-developers-owner AT cygwin DOT com
Delivered-To: mailing list cygwin-developers AT cygwin DOT com
X-Authentication-Warning: atacama.four-d.de: mail set sender to <tpfaff AT gmx DOT net> using -f
Date: Fri, 8 Nov 2002 11:28:26 +0100 (=?ISO-8859-1?Q?Westeurop=E4ische_Normalzeit?=)
From: Thomas Pfaff <tpfaff AT gmx DOT net>
To: Danny Smith <danny_r_smith_2001 AT yahoo DOT co DOT nz>
cc: mingw-dvlpr AT lists DOT sourceforge DOT net, <cygwin-developers AT cygwin DOT com>
Subject: Exception handling in gcc-3
Message-ID: <Pine.WNT.4.44.0211081100010.308-400000@algeria.intern.net>
X-X-Sender: pfaff AT antarctica DOT intern DOT net
MIME-Version: 1.0

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime AT docserver DOT cac DOT washington DOT edu for more info.

--1332970-2562-1036750926=:308
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine DOT WNT DOT 4 DOT 44 DOT 0211081124021 DOT 308 AT algeria DOT intern DOT net>


Hi Danny,

i just had the time to look at the eh changes in gcc-3 for throwing
exceptions across DLL/EXE boundaries.
While the code works in 99% for cygwin and mingw it has one disadvantage
for cygwin: The atom name is lost after a fork.
See following example:

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <pthread.h>

#include <iostream>
using namespace std;

#define WIN32_LEAN_AND_MEAN
#include <windows.h>

#define SHAREDPTR_LETTER0   'a'
#define SHAREDPTR_LETTER1   'A'

int main (void)
{
  char s[sizeof(void*) * 8 + 1];
  ATOM atom;

  try
    {
      memset (s, SHAREDPTR_LETTER0, sizeof(void*) * 8);
      s[sizeof(void*) * 8] = '\0';

      switch (fork ())
        {
        case -1:
          return 0;
        case 0:
          atom = FindAtomA (s);
          throw "child";
        default:
          atom = FindAtomA (s);
          throw "parent";
        }
    }

  catch (const char *str)
    {
      char szAtom[16];
      sprintf( szAtom, "0x%08x", (int) atom );
      cout << "got " << str << "s exception, atom " << szAtom << endl;
    }

  catch (...)
    {
      cout << "got exception" << endl;
    }

  return 0;
}

If a dll is loaded dynamically after a fork the shared information is lost
and throwing exceptions from a dll does not work anymore.

For that reason i have created a different version that uses a shared
pointer that is contained in the cygwin1.dll, now it works in all test
cases. (And since i always link against libmingwthrd.a i added this
function to mthr.c too, but this is not applicable for all mingw users).

I have attached my code.

You may notice that i have moved 2 additional static vars in the shared
area (object_mutex and marker from unwind-dw2-fde.c) and that i have
modified the shared pointer allocation a bit.

Comments are welcome.

Thomas

--1332970-2562-1036750926=:308
Content-Type: TEXT/PLAIN; NAME="eh_shared.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine DOT WNT DOT 4 DOT 44 DOT 0211081122060 DOT 308 AT algeria DOT intern DOT net>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME="eh_shared.c"

LyogZWhfc2hhcmVkLmM6IGV4Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0IGZv
ciBnY2MtM3guCgogICBDb3B5cmlnaHQgMjAwMiBSZWQgSGF0LCBJbmMuCgpU
aGlzIGZpbGUgaXMgcGFydCBvZiBDeWd3aW4uCgpUaGlzIHNvZnR3YXJlIGlz
IGEgY29weXJpZ2h0ZWQgd29yayBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlCkN5Z3dpbiBsaWNlbnNlLiAgUGxlYXNlIGNvbnN1bHQgdGhlIGZp
bGUgIkNZR1dJTl9MSUNFTlNFIiBmb3IKZGV0YWlscy4gKi8KCnZvaWQgKiog
X19nZXRfdzMyX2VoX3NoYXJlZHB0ciAodm9pZCkKewogICBzdGF0aWMgdm9p
ZCAqdzMyX2VoX3NoYXJlZHB0cjsKCiAgIHJldHVybiAmdzMyX2VoX3NoYXJl
ZHB0cjsKfQoK
--1332970-2562-1036750926=:308
Content-Type: TEXT/PLAIN; NAME="w32-shared-ptr.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine DOT WNT DOT 4 DOT 44 DOT 0211081122061 DOT 308 AT algeria DOT intern DOT net>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME="w32-shared-ptr.c"

LyoKICogdzMyLXNoYXJlZC1wdHIuYwogKgogKiBTaGFyZSBpbmZvcm1hdGlv
bnMgYmV0d2VlbiBFWEUvRExMcy4KICoKICogQ29udHJpYnV0b3JzOgogKiAg
Q3JlYXRlZCBieSBUaG9tYXMgUGZhZmYgPHRwZmFmZkBnbXgubmV0PgogKgog
KiAgVEhJUyBTT0ZUV0FSRSBJUyBOT1QgQ09QWVJJR0hURUQKICoKICogIFRo
aXMgc291cmNlIGNvZGUgaXMgb2ZmZXJlZCBmb3IgdXNlIGluIHRoZSBwdWJs
aWMgZG9tYWluLiBZb3UgbWF5CiAqICB1c2UsIG1vZGlmeSBvciBkaXN0cmli
dXRlIGl0IGZyZWVseS4KICoKICogIFRoaXMgY29kZSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsIGJ1dAogKiAg
V0lUSE9VVCBBTlkgV0FSUkFOVFkuIEFMTCBXQVJSRU5USUVTLCBFWFBSRVNT
IE9SIElNUExJRUQgQVJFIEhFUkVCWQogKiAgRElTQ0xBTUVELiBUaGlzIGlu
Y2x1ZGVzIGJ1dCBpcyBub3QgbGltaXRlZCB0byB3YXJyZW50aWVzIG9mCiAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuCiAqCiAqLwoKI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVk
ZSA8c3RyaW5nLmg+CiNpZmRlZiBERUJVRwojaW5jbHVkZSA8c3RkaW8uaD4K
I2VuZGlmCiNpbmNsdWRlICJndGhyLmgiCgp0eXBlZGVmIHN0cnVjdAp7CiAg
aW50IHNpemU7CiAgdm9pZCAqIHRlcm1pbmF0ZTsKICB2b2lkICogdW5leHBl
Y3RlZDsKICB2b2lkICogdW5zZWVuX29iamVjdHM7CiAgdm9pZCAqIHNlZW5f
b2JqZWN0czsKICAgX19ndGhyZWFkX211dGV4X3Qgb2JqZWN0X211dGV4Owoj
aWZkZWYgX19HVEhSRUFEX01VVEVYX0lOSVRfRlVOQ1RJT04KICBfX2d0aHJl
YWRfb25jZV90IGluaXRfb2JqZWN0X211dGV4X29uY2U7CiNlbmRpZgogIHZv
aWQgKiBtYXJrZXI7Cn0gVzMyX0VIX1NIQVJFRDsKCmV4dGVybiB2b2lkICoq
IF9fZ2V0X3czMl9laF9zaGFyZWRwdHIgKHZvaWQpOwojZGVmaW5lIHczMl9l
aF9zaGFyZWRwdHIgKCooKFczMl9FSF9TSEFSRUQgKiopIF9fZ2V0X3czMl9l
aF9zaGFyZWRwdHIgKCkpKQoKZXh0ZXJuIHZvaWQgX193MzJfc2hhcmVkcHRy
X2luaXRpYWxpemUgKHZvaWQpOwoKdm9pZCAqKiBfX3czMl9zaGFyZWRwdHJf
dGVybWluYXRlID0gTlVMTDsKdm9pZCAqKiBfX3czMl9zaGFyZWRwdHJfdW5l
eHBlY3RlZCAgPSBOVUxMOwp2b2lkICoqIF9fdzMyX3NoYXJlZHB0cl91bnNl
ZW5fb2JqZWN0cyAgPSBOVUxMOwp2b2lkICoqIF9fdzMyX3NoYXJlZHB0cl9z
ZWVuX29iamVjdHMgID0gTlVMTDsKdm9pZCAqICBfX3czMl9zaGFyZWRwdHJf
b2JqZWN0X211dGV4ID0gTlVMTDsKI2lmZGVmICBfX0dUSFJFQURfTVVURVhf
SU5JVF9GVU5DVElPTgp2b2lkICogIF9fdzMyX3NoYXJlZHB0cl9pbml0X29i
amVjdF9tdXRleF9vbmNlOwojZW5kaWYKdm9pZCAqKiBfX3czMl9zaGFyZWRw
dHJfbWFya2VyOwoKdm9pZCBfX3czMl9zaGFyZWRwdHJfaW5pdGlhbGl6ZSAo
dm9pZCkgCnsKICBpZiAoIXczMl9laF9zaGFyZWRwdHIpCiAgICB7CiNpZmRl
ZiBfX0dUSFJFQURfTVVURVhfSU5JVAogICAgICBzdGF0aWMgX19ndGhyZWFk
X211dGV4X3Qgb2JqZWN0X211dGV4ID0gX19HVEhSRUFEX01VVEVYX0lOSVQ7
CiNlbHNlCiAgICAgIHN0YXRpYyBfX2d0aHJlYWRfbXV0ZXhfdCBvYmplY3Rf
bXV0ZXg7CiNlbmRpZgojaWZkZWYgX19HVEhSRUFEX01VVEVYX0lOSVRfRlVO
Q1RJT04KICAgICAgc3RhdGljIF9fZ3RocmVhZF9vbmNlX3Qgb25jZSA9IF9f
R1RIUkVBRF9PTkNFX0lOSVQ7CiNlbmRpZgoKICAgICAgdzMyX2VoX3NoYXJl
ZHB0ciA9IChXMzJfRUhfU0hBUkVEICopIG1hbGxvYyAoc2l6ZW9mKFczMl9F
SF9TSEFSRUQpKTsKICAgICAgbWVtc2V0KHczMl9laF9zaGFyZWRwdHIsIDAs
IHNpemVvZihXMzJfRUhfU0hBUkVEKSk7CgogICAgICB3MzJfZWhfc2hhcmVk
cHRyLT5zaXplID0gc2l6ZW9mKFczMl9FSF9TSEFSRUQpOwogICAgICB3MzJf
ZWhfc2hhcmVkcHRyLT50ZXJtaW5hdGUgPSAodm9pZCopYWJvcnQ7CiAgICAg
IHczMl9laF9zaGFyZWRwdHItPnVuZXhwZWN0ZWQgPSAodm9pZCopYWJvcnQ7
CiAgICAgIHczMl9laF9zaGFyZWRwdHItPm9iamVjdF9tdXRleCA9IG9iamVj
dF9tdXRleDsKI2lmZGVmIF9fR1RIUkVBRF9NVVRFWF9JTklUX0ZVTkNUSU9O
CiAgICAgIHczMl9laF9zaGFyZWRwdHItPmluaXRfb2JqZWN0X211dGV4X29u
Y2UgPSBvbmNlOwojZW5kaWYKICAgIH0KCiAgX193MzJfc2hhcmVkcHRyX3Rl
cm1pbmF0ZSAgPSAmdzMyX2VoX3NoYXJlZHB0ci0+dGVybWluYXRlOwogIF9f
dzMyX3NoYXJlZHB0cl91bmV4cGVjdGVkID0gJnczMl9laF9zaGFyZWRwdHIt
PnVuZXhwZWN0ZWQ7CiAgX193MzJfc2hhcmVkcHRyX3Vuc2Vlbl9vYmplY3Rz
ID0gJnczMl9laF9zaGFyZWRwdHItPnVuc2Vlbl9vYmplY3RzOwogIF9fdzMy
X3NoYXJlZHB0cl9zZWVuX29iamVjdHMgID0gJnczMl9laF9zaGFyZWRwdHIt
PnNlZW5fb2JqZWN0czsKICBfX3czMl9zaGFyZWRwdHJfb2JqZWN0X211dGV4
ID0gJnczMl9laF9zaGFyZWRwdHItPm9iamVjdF9tdXRleDsKI2lmZGVmIF9f
R1RIUkVBRF9NVVRFWF9JTklUX0ZVTkNUSU9OCiAgX193MzJfc2hhcmVkcHRy
X2luaXRfb2JqZWN0X211dGV4X29uY2UgPSAmdzMyX2VoX3NoYXJlZHB0ci0+
aW5pdF9vYmplY3RfbXV0ZXhfb25jZTsKI2VuZGlmCiAgX193MzJfc2hhcmVk
cHRyX21hcmtlciA9ICZ3MzJfZWhfc2hhcmVkcHRyLT5tYXJrZXI7Cn0K
--1332970-2562-1036750926=:308
Content-Type: TEXT/PLAIN; NAME="unwind.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine DOT WNT DOT 4 DOT 44 DOT 0211081122062 DOT 308 AT algeria DOT intern DOT net>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME="unwind.patch"

LS0tIHVud2luZC1kdzItZmRlLmMub3JnCTIwMDItMDgtMTYgMTY6NTU6MTcu
MDAwMDAwMDAwICswMjAwCisrKyB1bndpbmQtZHcyLWZkZS5jCTIwMDItMTAt
MTYgMDk6MzA6NDcuMDAwMDAwMDAwICswMjAwCkBAIC01MywxMSArNTMsMTcg
QEAgZXh0ZXJuIHZvaWQqKiBfX3czMl9zaGFyZWRwdHJfc2Vlbl9vYmplYwog
I2RlZmluZSBzZWVuX29iamVjdHMgICAgKCooc3RydWN0IG9iamVjdCoqKSgg
X193MzJfc2hhcmVkcHRyX3NlZW5fb2JqZWN0cykpCiAjZW5kaWYKIAorI2lm
ICEoZGVmaW5lZCAoX19NSU5HVzMyX18gKSB8fCBkZWZpbmVkIChfX0NZR1dJ
Tl9fKSkKICNpZmRlZiBfX0dUSFJFQURfTVVURVhfSU5JVAogc3RhdGljIF9f
Z3RocmVhZF9tdXRleF90IG9iamVjdF9tdXRleCA9IF9fR1RIUkVBRF9NVVRF
WF9JTklUOwogI2Vsc2UKIHN0YXRpYyBfX2d0aHJlYWRfbXV0ZXhfdCBvYmpl
Y3RfbXV0ZXg7CiAjZW5kaWYKKyNlbHNlCitleHRlcm4gdm9pZCAqIF9fdzMy
X3NoYXJlZHB0cl9vYmplY3RfbXV0ZXg7CisjZGVmaW5lIG9iamVjdF9tdXRl
eCAgKCooX19ndGhyZWFkX211dGV4X3QqKSggX193MzJfc2hhcmVkcHRyX29i
amVjdF9tdXRleCkpCisjZW5kaWYKKwogCiAjaWZkZWYgX19HVEhSRUFEX01V
VEVYX0lOSVRfRlVOQ1RJT04KIHN0YXRpYyB2b2lkIApAQCAtNjksOCArNzUs
MTYgQEAgaW5pdF9vYmplY3RfbXV0ZXggKHZvaWQpCiBzdGF0aWMgdm9pZAog
aW5pdF9vYmplY3RfbXV0ZXhfb25jZSAodm9pZCkKIHsKKyNpZiAhKGRlZmlu
ZWQgKF9fTUlOR1czMl9fICkgfHwgZGVmaW5lZCAoX19DWUdXSU5fXykpCiAg
IHN0YXRpYyBfX2d0aHJlYWRfb25jZV90IG9uY2UgPSBfX0dUSFJFQURfT05D
RV9JTklUOworI2Vsc2UKK2V4dGVybiB2b2lkICogX193MzJfc2hhcmVkcHRy
X2luaXRfb2JqZWN0X211dGV4X29uY2U7CisjZGVmaW5lIG9uY2UgICgqKF9f
Z3RocmVhZF9vbmNlX3QqKSggX193MzJfc2hhcmVkcHRyX2luaXRfb2JqZWN0
X211dGV4X29uY2UpKQorI2VuZGlmCiAgIF9fZ3RocmVhZF9vbmNlICgmb25j
ZSwgaW5pdF9vYmplY3RfbXV0ZXgpOworI2lmIChkZWZpbmVkIChfX01JTkdX
MzJfXyApIHx8IGRlZmluZWQgKF9fQ1lHV0lOX18pKQorI3VuZGVmIG9uY2UK
KyNlbmRpZgogfQogI2Vsc2UKICNkZWZpbmUgaW5pdF9vYmplY3RfbXV0ZXhf
b25jZSgpCkBAIC00MzEsNyArNDQ1LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZAogZmRlX3NwbGl0IChzdHJ1Y3Qgb2JqZWN0ICpvYiwgZmRlX2NvbXBhcmVf
dCBmZGVfY29tcGFyZSwKIAkgICBzdHJ1Y3QgZmRlX3ZlY3RvciAqbGluZWFy
LCBzdHJ1Y3QgZmRlX3ZlY3RvciAqZXJyYXRpYykKIHsKKyNpZiAhKGRlZmlu
ZWQgKF9fTUlOR1czMl9fICkgfHwgZGVmaW5lZCAoX19DWUdXSU5fXykpCiAg
IHN0YXRpYyBmZGUgKm1hcmtlcjsKKyNlbHNlCitleHRlcm4gdm9pZCAqKiBf
X3czMl9zaGFyZWRwdHJfbWFya2VyOworI2RlZmluZSBtYXJrZXIgICgqKGZk
ZSAqKikoIF9fdzMyX3NoYXJlZHB0cl9tYXJrZXIpKQorI2VuZGlmCiAgIHNp
emVfdCBjb3VudCA9IGxpbmVhci0+Y291bnQ7CiAgIGZkZSAqKmNoYWluX2Vu
ZCA9ICZtYXJrZXI7CiAgIHNpemVfdCBpLCBqLCBrOwpAQCAtNDY3LDYgKzQ4
Niw5IEBAIGZkZV9zcGxpdCAoc3RydWN0IG9iamVjdCAqb2IsIGZkZV9jb21w
YXIKICAgICAgIGVycmF0aWMtPmFycmF5W2srK10gPSBsaW5lYXItPmFycmF5
W2ldOwogICBsaW5lYXItPmNvdW50ID0gajsKICAgZXJyYXRpYy0+Y291bnQg
PSBrOworI2lmIChkZWZpbmVkIChfX01JTkdXMzJfXyApIHx8IGRlZmluZWQg
KF9fQ1lHV0lOX18pKQorI3VuZGVmIG1hcmtlcgorI2VuZGlmCiB9CiAKIC8q
IFRoaXMgaXMgTyhuIGxvZyhuKSkuICBCU0QvT1MgZGVmaW5lcyBoZWFwc29y
dCBpbiBzdGRsaWIuaCwgc28gd2UgbXVzdAo=
--1332970-2562-1036750926=:308--

- Raw text -


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