setjmp, longjmp and unwind

I'm trying to get unwind to work.

I was unable to get an unwind example to work directly,
so I decided to compile a c program that uses setjmp
and longjmp and work backwards.

I keep running into a "Abort trap" problem, whatever "Abort trap" is.

Anyway, here's an example of a C program that compiles
and works properly under normal gcc, but that fails with
an "Abort trap" under LLVM:

#include <setjmp.h>

long (*g_pfunc) ();
jmp_buf g_jbuf;

long foo() {
     printf("Hello World!\n");
     longjmp(g_jbuf, 0);
     return 0;
}

main () {
     g_pfunc = foo;

     setjmp(g_jbuf);
     g_pfunc();
}

I'm using Mac OS X version 10.3.8
I just installed and build LLVM yesterday from CVS.

How are you compiling and running this program?

-Chris

First I try it with bytecodes:
~/compiler/temp$ llvmgcc sjmp01.c -o sjmp01
~/compiler/temp$ ./sjmp01
Hello World!
Abort trap

Same results for lli sjmp01.bc

Now I try converting to native code:
~/compiler/temp$ llc sjmp01.bc -enable-correct-eh-support -o sjmp01.s
~/compiler/temp$ gcc sjmp01.s -o sjmp01.native
~/compiler/temp$ ./sjmp01.native
Hello World!
Bus error
~/compiler/temp$

First I try it with bytecodes:
~/compiler/temp$ llvmgcc sjmp01.c -o sjmp01
~/compiler/temp$ ./sjmp01
Hello World!
Abort trap

Same results for lli sjmp01.bc

Now I try converting to native code:
~/compiler/temp$ llc sjmp01.bc -enable-correct-eh-support -o sjmp01.s
~/compiler/temp$ gcc sjmp01.s -o sjmp01.native
~/compiler/temp$ ./sjmp01.native
Hello World!
Bus error
~/compiler/temp$

Ooops, sorry about that. It turns out that this was a bug in our handling of setjmp. Please try this patch:
http://mail.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20050418/025529.html

Sorry again, but thanks for reporting the bug! :slight_smile:

-Chris