| /* 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 |