Wikipedia seems to agree:

Similarly, C99 <http://en.wikipedia.org/wiki/C99> does not require that
longjmp preserve the current stack frame. This means that jumping into a
function which was exited via a call to longjmp is undefined.[6]
<http://en.wikipedia.org/wiki/Setjmp.h#cite_note-ISO.2FIEC_9899:1999-6>
However,
most implementations of longjmp leave the stack frame intact, allowingsetjmp
 and longjmp to be used to jump back-and-forth between two or more
functions—a feature exploited for multitasking
<http://en.wikipedia.org/wiki/Setjmp.h#Cooperative_multitasking>.

http://en.wikipedia.org/wiki/Setjmp.h

On Wed, Jun 11, 2014 at 1:03 AM, Chad Austin <[email protected]> wrote:

> I think Alon is correct here: longjmp is only legal up the stack.  At
> least, my reading of the spec agrees with Alon's argument:
>
> The longjmp function restores the environment saved by the most recent
> invocation of
> the setjmp macro in the same invocation of the program with the
> corresponding
> jmp_buf argument. If there has been no such invocation, or if the function
> containing
> the invocation of the setjmp macro has terminated execution217) in the
> interim, or if the
> invocation of the setjmp macro was within the scope of an identifier with
> variably
> modified type and execution has left that scope in the interim, the
> behavior is undefined.
>
> 217) For example, by executing a return statement or because another
> longjmp call has caused a
> transfer to a setjmp invocation in a function earlier in the set of nested
> calls.
>
> On Tue, Jun 10, 2014 at 8:23 PM, Nikos Chantziaras <[email protected]>
> wrote:
>
>> It's not undefined behavior. You can save stack contexts at any point and
>> jump to them. Coroutines and threads can be implemented with this.
>>
>> Unwinding the stack due to an exception, which only goes up the stack, is
>> only one use case of longjmp.
>>
>>
>>
>> On 11/06/14 02:06, Alon Zakai wrote:
>>
>>> You can use longjmp only to unwind the stack. I believe that to jump the
>>> in the other direction is undefined behavior, and we don't support it -
>>> a very different model would be needed for that.
>>>
>>> - Alon
>>>
>>>
>>>
>>> On Tue, Jun 10, 2014 at 8:07 AM, Stanislav Tsukrov
>>> <[email protected]
>>> <mailto:[email protected]>> wrote:
>>>
>>>     Is there a way to jump with longjmp to a setjmp-point outside of the
>>>     current stack?
>>>
>>>     As far I can see longjmp is implemented with exceptions, so the
>>>     jump-point must be upwards on the current stack.
>>>     Any way to jump "down"?
>>>
>>>     --
>>>     You received this message because you are subscribed to the Google
>>>     Groups "emscripten-discuss" group.
>>>     To unsubscribe from this group and stop receiving emails from it,
>>>     send an email to
>>>     [email protected]
>>>     <mailto:[email protected]>.
>>>
>>>     For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "emscripten-discuss" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> --
> Chad Austin
> Technical Director, IMVU
> http://engineering.imvu.com <http://www.imvu.com/members/Chad/>
> http://chadaustin.me
>
>
>


-- 
Chad Austin
Technical Director, IMVU
http://engineering.imvu.com <http://www.imvu.com/members/Chad/>
http://chadaustin.me

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to