Setjmp/longjmp updates and cleanup.
This commit is contained in:
@@ -2,9 +2,7 @@
|
||||
LIBRARIES=libc
|
||||
|
||||
libc_FILES=" \
|
||||
_longjmp.gs \
|
||||
_setjmp.gs \
|
||||
longjmp.gs \
|
||||
setjmp.gs"
|
||||
__setjmp.gs \
|
||||
longjmp.gs"
|
||||
|
||||
TYPE=gnu
|
||||
|
||||
31
lib/gnu/rts/__setjmp.gs
Normal file
31
lib/gnu/rts/__setjmp.gs
Normal file
@@ -0,0 +1,31 @@
|
||||
/ __setjmp.gnu.s
|
||||
/
|
||||
/ Created: Oct 14, 1993 by Philip Homburg <philip@cs.vu.nl>
|
||||
|
||||
.text
|
||||
.globl ___setjmp
|
||||
___setjmp:
|
||||
movl 4(%esp), %eax # jmp_buf
|
||||
movl %edx, 28(%eax) # save edx
|
||||
movl 0(%esp), %edx
|
||||
movl %edx, 8(%eax) # save program counter
|
||||
movl %esp, 12(%eax) # save stack pointer
|
||||
movl %ebp, 16(%eax) # save frame pointer
|
||||
movl %ebx, 20(%eax)
|
||||
movl %ecx, 24(%eax)
|
||||
movl %esi, 32(%eax)
|
||||
movl %edi, 36(%eax)
|
||||
|
||||
movl 8(%esp), %edx # save mask?
|
||||
movl %edx, 0(%eax) # save whether to restore mask
|
||||
testl %edx, %edx
|
||||
jz 1f
|
||||
leal 4(%eax), %edx # pointer to sigset_t
|
||||
pushl %edx
|
||||
call ___newsigset # save mask
|
||||
addl $4, %esp
|
||||
1:
|
||||
movl $0, %eax
|
||||
ret
|
||||
|
||||
/ $PchId: __setjmp.gnu.s,v 1.4 1996/03/12 19:30:54 philip Exp $
|
||||
@@ -1,38 +0,0 @@
|
||||
/ _longjmp.gnu.s
|
||||
/
|
||||
/ Created: Oct 15, 1993 by Philip Homburg <philip@cs.vu.nl>
|
||||
|
||||
.text
|
||||
.globl __longjmp
|
||||
__longjmp:
|
||||
movl 4(%esp), %eax # jmp_buf
|
||||
cmpl $0, 0(%eax) # save mask?
|
||||
je 1f
|
||||
leal 4(%eax), %ebx # pointer to sigset_t
|
||||
pushl %ebx
|
||||
call ___oldsigset # restore mask
|
||||
addl $4, %esp
|
||||
movl 4(%esp), %eax # jmp_buf
|
||||
1:
|
||||
movl 8(%esp), %ecx # result value
|
||||
movl 12(%eax), %esp # restore stack pointer
|
||||
|
||||
movl 8(%eax), %ebx # restore program counter
|
||||
movl %ebx, 0(%esp)
|
||||
|
||||
pushl %ecx # save result code
|
||||
|
||||
movl 16(%eax), %ebp # restore frame pointer
|
||||
movl 20(%eax), %ebx
|
||||
movl 24(%eax), %ecx
|
||||
movl 28(%eax), %edx
|
||||
movl 32(%eax), %esi
|
||||
movl 36(%eax), %edi
|
||||
pop %eax
|
||||
testl %eax, %eax
|
||||
jz 1f
|
||||
ret
|
||||
1: movl $1, %eax
|
||||
ret
|
||||
|
||||
/ $PchId: _longjmp.gnu.s,v 1.4 1996/03/12 19:30:02 philip Exp $
|
||||
@@ -1,35 +0,0 @@
|
||||
/ _setjmp.gnu.s
|
||||
/
|
||||
/ Created: Oct 14, 1993 by Philip Homburg <philip@cs.vu.nl>
|
||||
|
||||
.text
|
||||
.globl ___setjmp
|
||||
___setjmp:
|
||||
movl 4(%esp), %eax # jmp_buf
|
||||
movl %ebx, 20(%eax) # save ebx
|
||||
movl 0(%esp), %ebx
|
||||
movl %ebx, 8(%eax) # save program counter
|
||||
movl %esp, 12(%eax) # save stack pointer
|
||||
movl %ebp, 16(%eax) # save frame pointer
|
||||
movl %ecx, 24(%eax)
|
||||
movl %edx, 28(%eax)
|
||||
movl %esi, 32(%eax)
|
||||
movl %edi, 36(%eax)
|
||||
|
||||
movl 8(%esp), %ebx # save mask?
|
||||
movl %ebx, 0(%eax) # save whether to restore mask
|
||||
|
||||
pushl 20(%eax) # save ebx
|
||||
|
||||
testl %ebx, %ebx
|
||||
jz 1f
|
||||
leal 4(%eax), %ebx # pointer to sigset_t
|
||||
pushl %ebx
|
||||
call ___newsigset # save mask
|
||||
addl $4, %esp
|
||||
1:
|
||||
popl %ebx
|
||||
movl $0, %eax
|
||||
ret
|
||||
|
||||
/ $PchId: _setjmp.gnu.s,v 1.4 1996/03/12 19:30:54 philip Exp $
|
||||
@@ -1,6 +1,38 @@
|
||||
.text
|
||||
.globl _longjmp
|
||||
_longjmp:
|
||||
jmp __longjmp
|
||||
/ longjmp.gnu.s
|
||||
/
|
||||
/ Created: Oct 15, 1993 by Philip Homburg <philip@cs.vu.nl>
|
||||
|
||||
/ $PchId: longjmp.gnu.s,v 1.4 1996/03/12 19:31:18 philip Exp $
|
||||
.text
|
||||
.globl _longjmp
|
||||
_longjmp:
|
||||
movl 4(%esp), %eax # jmp_buf
|
||||
cmpl $0, 0(%eax) # save mask?
|
||||
je 1f
|
||||
leal 4(%eax), %edx # pointer to sigset_t
|
||||
pushl %edx
|
||||
call ___oldsigset # restore mask
|
||||
addl $4, %esp
|
||||
movl 4(%esp), %eax # jmp_buf
|
||||
1:
|
||||
movl 8(%esp), %ecx # result value
|
||||
movl 12(%eax), %esp # restore stack pointer
|
||||
|
||||
movl 8(%eax), %edx # restore program counter
|
||||
movl %edx, 0(%esp)
|
||||
|
||||
pushl %ecx # save result code
|
||||
|
||||
movl 16(%eax), %ebp # restore frame pointer
|
||||
movl 20(%eax), %ebx
|
||||
movl 24(%eax), %ecx
|
||||
movl 28(%eax), %edx
|
||||
movl 32(%eax), %esi
|
||||
movl 36(%eax), %edi
|
||||
pop %eax
|
||||
testl %eax, %eax
|
||||
jz 1f
|
||||
ret
|
||||
1: movl $1, %eax
|
||||
ret
|
||||
|
||||
/ $PchId: longjmp.gnu.s,v 1.4 1996/03/12 19:30:02 philip Exp $
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
.text
|
||||
.globl _setjmp
|
||||
_setjmp:
|
||||
jmp ___setjmp
|
||||
|
||||
/ $PchId: setjmp.gnu.s,v 1.4 1996/03/12 19:31:18 philip Exp $
|
||||
Reference in New Issue
Block a user