65 lines
879 B
ArmAsm
65 lines
879 B
ArmAsm
.global setjmp
|
|
.type setjmp, STT_FUNC
|
|
setjmp:
|
|
|
|
pushl %ebp
|
|
movl %esp,%ebp
|
|
|
|
pushl %edi
|
|
movl 8(%ebp),%edi
|
|
|
|
movl %eax,0 (%edi)
|
|
movl %ebx,4 (%edi)
|
|
movl %ecx,8 (%edi)
|
|
movl %edx,12 (%edi)
|
|
movl %esi,16 (%edi)
|
|
|
|
movl -4 (%ebp),%eax
|
|
movl %eax,20 (%edi)
|
|
|
|
movl 0 (%ebp),%eax
|
|
movl %eax,24 (%edi)
|
|
|
|
movl %esp,%eax
|
|
addl $12,%eax
|
|
movl %eax,28 (%edi)
|
|
|
|
movl 4 (%ebp),%eax
|
|
movl %eax,32 (%edi)
|
|
|
|
popl %edi
|
|
movl $0,%eax
|
|
leave
|
|
ret
|
|
|
|
.global longjmp
|
|
.type longjmp, STT_FUNC
|
|
longjmp:
|
|
pushl %ebp
|
|
movl %esp,%ebp
|
|
|
|
movl 8(%ebp),%edi /* get jmp_buf */
|
|
movl 12(%ebp),%eax /* store retval in j->eax */
|
|
testl %eax,%eax
|
|
jne 0f
|
|
incl %eax
|
|
0:
|
|
movl %eax,0(%edi)
|
|
|
|
movl 24(%edi),%ebp
|
|
|
|
/*__CLI */
|
|
movl 28(%edi),%esp
|
|
|
|
pushl 32(%edi)
|
|
|
|
movl 0 (%edi),%eax
|
|
movl 4 (%edi),%ebx
|
|
movl 8 (%edi),%ecx
|
|
movl 12(%edi),%edx
|
|
movl 16(%edi),%esi
|
|
movl 20(%edi),%edi
|
|
/*__STI */
|
|
|
|
ret
|