Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 2745 → Rev 2773

/trunk/uspace/lib/libc/arch/ia32/include/setjmp.h
File deleted
/trunk/uspace/lib/libc/arch/ia32/src/setjmp.S
26,6 → 26,8
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
 
#include <kernel/arch/context_offset.h>
 
.text
.global setjmp
.global longjmp
32,18 → 34,13
 
.type setjmp,@function
setjmp:
movl 0(%esp), %ecx # save current pc
leal 4(%esp), %edx # save stack pointer
movl (%edx), %eax # get jmp_buf pointer
movl 0(%esp),%eax # save pc value into eax
movl 4(%esp),%edx # address of the context variable to save context to
 
# Save registers
movl %ebx, 0(%eax)
movl %esi, 4(%eax)
movl %edi, 8(%eax)
movl %ebp, 12(%eax)
movl %edx, 16(%eax)
# save registers to given structure
CONTEXT_SAVE_ARCH_CORE %edx %eax
 
movl %ecx, 20(%eax) # save pc
xorl %eax,%eax # set_jmp returns 0
ret
 
.type longjmp,@function
52,12 → 49,9
movl 4(%esp), %ecx # put address of jmp_buf into ecx
movl 8(%esp), %eax # put return value into eax
 
# restore all registers
movl 0(%ecx), %ebx
movl 4(%ecx), %esi
movl 8(%ecx), %edi
movl 12(%ecx), %ebp
movl 16(%ecx), %esp
movl 20(%ecx), %edx # saved return address
jmp *%edx
# restore registers from jmp_buf
CONTEXT_RESTORE_ARCH_CORE %ecx %edx
 
movl %edx,0(%esp) # put saved pc on stack
ret