[LLVMdev] setjmp - longjmp

Jakob Stoklund Olesen stoklund at 2pi.dk
Tue Oct 4 15:50:20 PDT 2011


On Oct 4, 2011, at 3:10 PM, Khaled ElWazeer wrote:

> Hi, 
> 
> I have some code which has sigsetjmp / longjmp. After a longjmp, unreachable is inserted, which is fine. The problem is that in the backend before calling longjmp, some register was spilled to a stack location which is live across the jmp. I mean, it will be live after jumping. The stack location was initialized before the call to setjmp, and is used afterwards.
> 
> Is there any bug in handling such a case? I mean, how do LLVM knows about CFG in case of longjmp / setjmp calls?

It shouldn't need to know because you are only allowed to use volatile variables:

     All accessible objects have values as of the time longjmp() routine was called, except that
     the values of objects of automatic storage invocation duration that do not have the volatile
     type and have been changed between the setjmp() invocation and longjmp() call are indetermi-
     nate.

Are you seeing wrong values in volatile variables after the jump? If so, please file a bug.

We may need to disable stack slot sharing in functions that call setjmp.

/jakob




More information about the llvm-dev mailing list