41 lines
1001 B
ArmAsm
41 lines
1001 B
ArmAsm
/* setjmp and longjmp. Use of these functions is deprecated. */
|
|
|
|
.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
|