Mail Archives: cygwin-developers/1998/09/01/10:38:31
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.
--1915750185-2096489607-904669424=:5590
Content-Type: TEXT/PLAIN; charset=US-ASCII
On Tue, 1 Sep 1998, Christopher Faylor wrote:
> Is this using a coolview version of a b19 version?
Release, Coolview and Geoffrey's snapshots. The bug has always been
there.
>
> This should be handled when global constructors are run, right?
> Would this be for the global constructors of the .dll or the
> user code?
The trouble is the incorrect ordering of the global constructors, and
instead of the iostreams constructors getting called first, the user
global constructor is getting called in __do_global_constructors
and we get the crash. Here's a stack dump:
#0 global constructors keyed to foo1 () at foo.cc:9
#1 0x100053fa in __do_global_ctors () at ../../../winsup/dcrt0.cc:746
#2 0x10005433 in __main () at ../../../winsup/dcrt0.cc:758
#3 0x401084 in main () at foo.cc:18
#4 0x100052d0 in dll_crt0_1 (uptr=0x418018) at ../../../winsup/dcrt0.cc:694
#5 0x1000533d in dll_crt0 (uptr=0x418018) at ../../../winsup/dcrt0.cc:715
#6 0x417361 in cygwin_crt0 (f=0x40107c <main>)
at ../../../winsup/libccrt0.cc:99
Note that #0 shows the *first* global constructor, but it should *NOT* be.
Now let's take a look at the global constructor list, pfunc, in
dcrt0.cc:__do_global_ctors():
(gdb) print pfunc[0]@5
print pfunc[0]@5
$10 = {0xffffffff, 0x4010b8 <global constructors keyed to foo1>,
0x40230c <global constructors keyed to ios::tie(void) const>,
0x407598 <global constructors keyed to _IO_stdin_>, 0}
(gdb)
Now you see the problem!
So, why is this happening?? It's in __do_global_ctors, which calls the
functions pointers registered in __CTOR_LIST__ in the incorrect order.
Ditto for __do_global_dtors. I'm attaching a patch.
Those in doubt of the order should see gcc/libgcc2.c and gcc/gbl-ctors.h
for further info. One of those reasons it's best to use these functions
from libgcc.a instead of having local copies in winsup.
Regards,
Mumit
--1915750185-2096489607-904669424=:5590
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="c++gbl.diff"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine DOT SUN DOT 3 DOT 93 DOT 980901120344 DOT 5590B AT modi DOT xraylith DOT wisc DOT edu>
Content-Description: Global constr/destr fix
VHVlIFNlcCAgMSAxMTo0MToyNCAxOTk4ICBNdW1pdCBLaGFuICA8a2hhbkB4
cmF5bGl0aC53aXNjLmVkdT4NCg0KCSogZGNydDAuY2MgKGRsbF9jcnQwKTog
Rml4IG9yZGVyaW5nIG9mIGdsb2JhbCBjb25zdHJ1Y3RvcnMuDQoJKF9fZG9f
Z2xvYmFsX2N0b3JzKTogTGlrZXdpc2UuDQoJKF9fZG9fZ2xvYmFsX2R0b3Jz
KTogRml4IG9yZGVyaW5nIG9mIGdsb2JhbCBkZXN0cnVjdG9ycy4NCg0KSW5k
ZXg6IGRjcnQwLmNjDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmls
ZTogL21vdW50cy9zZGE3L3NyYy9nbnUvQ1ZTUk9PVC9jeWd3aW4zMi93aW5z
dXAvZGNydDAuY2Msdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xDQpk
aWZmIC11IC0zIC1wIC1yMS4xLjEuMSBkY3J0MC5jYw0KLS0tIGRjcnQwLmNj
CTE5OTgvMDgvMzAgMDM6NDY6NDMJMS4xLjEuMQ0KKysrIGRjcnQwLmNjCTE5
OTgvMDkvMDEgMTY6Mzg6MzENCkBAIC03MDcsNyArNzA3LDEyIEBAIGRsbF9j
cnQwIChwZXJfcHJvY2VzcyAqdXB0cikNCiAgIGludCBpOw0KICAgdm9pZCAo
KipwZnVuYykoKSA9ICZfX0NUT1JfTElTVF9fOw0KIA0KKyAgLyogUnVuIGN0
b3JzIGJhY2t3YXJkcywgc28gc2tpcCB0aGUgZmlyc3QgZW50cnkgYW5kIGZp
bmQgaG93IG1hbnkNCisgICAgIHRoZXJlIGFyZSwgdGhlbiBydW4gdGhlbS4g
Ki8NCisNCiAgIGZvciAoaSA9IDE7IHBmdW5jW2ldOyBpKyspDQorICAgIDsN
CisgIGZvciAoaSA9IGkgLSAxOyBpID4gMDsgaS0tKQ0KICAgICB7DQogICAg
ICAgKHBmdW5jW2ldKSAoKTsNCiAgICAgfQ0KQEAgLTcyMSwxNyArNzI2LDkg
QEAgX19kb19nbG9iYWxfZHRvcnMgKHZvaWQpDQogICBpbnQgaTsNCiAgIHZv
aWQgKCoqcGZ1bmMpKCkgPSB1c2VyX2RhdGEtPmR0b3JzOw0KIA0KLSAgLyog
UnVuIGR0b3JzIGJhY2t3YXJkcywgc28gc2tpcCB0aGUgZmlyc3QgZW50cnkg
YW5kIGZpbmQgaG93IG1hbnkNCi0gICAgIHRoZXJlIGFyZSwgdGhlbiBydW4g
dGhlbS4gKi8NCi0NCi0gIGlmIChwZnVuYykNCisgIGZvciAoaSA9IDE7IHBm
dW5jW2ldOyBpKyspDQogICAgIHsNCi0gICAgICBmb3IgKGkgPSAxOyBwZnVu
Y1tpXTsgaSsrKQ0KLQk7DQotICAgICAgZm9yIChpID0gaSAtIDE7IGkgPiAw
OyBpLS0pDQotCXsNCi0JICAocGZ1bmNbaV0pICgpOw0KLQl9DQorICAgICAg
KHBmdW5jW2ldKSAoKTsNCiAgICAgfQ0KIH0NCiANCkBAIC03NDEsNyArNzM4
LDEyIEBAIF9fZG9fZ2xvYmFsX2N0b3JzICh2b2lkKQ0KICAgaW50IGk7DQog
ICB2b2lkICgqKnBmdW5jKSgpID0gdXNlcl9kYXRhLT5jdG9yczsNCiANCisg
IC8qIFJ1biBjdG9ycyBiYWNrd2FyZHMsIHNvIHNraXAgdGhlIGZpcnN0IGVu
dHJ5IGFuZCBmaW5kIGhvdyBtYW55DQorICAgICB0aGVyZSBhcmUsIHRoZW4g
cnVuIHRoZW0uICovDQorDQogICBmb3IgKGkgPSAxOyBwZnVuY1tpXTsgaSsr
KQ0KKyAgICA7DQorICBmb3IgKGkgPSBpIC0gMTsgaSA+IDA7IGktLSkNCiAg
ICAgew0KICAgICAgIChwZnVuY1tpXSkgKCk7DQogICAgIH0NCg==
--1915750185-2096489607-904669424=:5590--
- Raw text -