/* setjmp and longjmp. Use of these functions is deprecated. */ FILE_LICENCE ( GPL2_OR_LATER ) .text .arch i386 .code32 /************************************************************************** SETJMP - Save stack context for non-local goto **************************************************************************/ .globl setjmp setjmp: movl 4(%esp),%ecx /* jmpbuf */ movl 0(%esp),%edx /* return address */ movl %edx,0(%ecx) movl %ebx,4(%ecx) movl %esp,8(%ecx) movl %ebp,12(%ecx) movl %esi,16(%ecx) movl %edi,20(%ecx) movl $0,%eax ret /************************************************************************** LONGJMP - Non-local jump to a saved stack context **************************************************************************/ .globl longjmp longjmp: movl 4(%esp),%edx /* jumpbuf */ movl 8(%esp),%eax /* result */ movl 0(%edx),%ecx movl 4(%edx),%ebx movl 8(%edx),%esp movl 12(%edx),%ebp movl 16(%edx),%esi movl 20(%edx),%edi cmpl $0,%eax jne 1f movl $1,%eax 1: movl %ecx,0(%esp) ret