Mail Archives: cygwin/1998/01/16/21:35:39
Hi,
The function longjmp() does not work in Mingw32 (egcs-1.00 release)
on WinNT 3.51. Instead, the process exits, without any error message.
Here is a test example:
==========================================
#include <stdio.h>
#include <setjmp.h>
void foo1 (jmp_buf buf)
{
printf("entering foo1\n");
longjmp(buf,1);
printf("exiting foo1\n");
}
void foo2 (jmp_buf buf)
{
printf("entering foo2\n");
foo1(buf);
printf("exiting foo2\n");
}
void foo3 (jmp_buf buf)
{
printf("entering foo3\n");
foo2(buf);
printf("exiting foo3\n");
}
int main ()
{
jmp_buf buf;
printf("entering main\n");
if (setjmp(buf)==0)
foo3(buf);
else
printf("returned from longjmp\n");
printf("exiting main\n");
return 0;
}
============================================
On any reasonable Unix machine, this prints:
entering main
entering foo3
entering foo2
entering foo1
returned from longjmp
exiting main
On mingw32, WinNT 3.51, it prints:
entering main
entering foo3
entering foo2
entering foo1
Note that gdb from mingw32 on this system has the same behaviour:
Anything which makes a gdb command abort (like typing `q' or any error)
kills gdb.
Can someone try to track this down?
I tried the following:
- On Win95 longjmp works ok.
- copying the Win95 crtdll.dll to WinNT's SYSTEM32 directory doesn't help.
- bzero'ing the jmp_buf before the setjmp doesn't help.
- removing lib\gcc-lib\i386-mingw32\egcs-2.90.21\ld doesn't help.
- using the specs.crt instead of specs doesn't help; the other two specs.*
files yield link errors.
Bruno <haible AT ilog DOT fr>
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".
- Raw text -