141041Swilliam/*- 2*61128Sbostic * Copyright (c) 1990, 1993 3*61128Sbostic * The Regents of the University of California. All rights reserved. 441041Swilliam * 541041Swilliam * This code is derived from software contributed to Berkeley by 641041Swilliam * William Jolitz. 741041Swilliam * 841041Swilliam * %sccs.include.redist.c% 941041Swilliam */ 1041041Swilliam 1141041Swilliam#if defined(LIBC_SCCS) && !defined(lint) 12*61128Sbostic .asciz "@(#)setjmp.s 8.1 (Berkeley) 06/04/93" 1341041Swilliam#endif /* LIBC_SCCS and not lint */ 1441041Swilliam 1541041Swilliam/* 1641041Swilliam * C library -- _setjmp, _longjmp 1741041Swilliam * 1841041Swilliam * longjmp(a,v) 1941041Swilliam * will generate a "return(v)" from the last call to 2041041Swilliam * setjmp(a) 2141041Swilliam * by restoring registers from the stack. 2241041Swilliam * The previous signal state is restored. 2341041Swilliam */ 2441041Swilliam 2541041Swilliam#include "DEFS.h" 2641041Swilliam 2741041SwilliamENTRY(setjmp) 2841041Swilliam pushl $0 2941041Swilliam call _sigblock 3041041Swilliam popl %edx 3141041Swilliam movl 4(%esp),%ecx 3241041Swilliam movl 0(%esp),%edx 3341041Swilliam movl %edx, 0(%ecx) 3441041Swilliam movl %ebx, 4(%ecx) 3541041Swilliam movl %esp, 8(%ecx) 3641041Swilliam movl %ebp,12(%ecx) 3741041Swilliam movl %esi,16(%ecx) 3841041Swilliam movl %edi,20(%ecx) 3941041Swilliam movl %eax,24(%ecx) 4041041Swilliam movl $0,%eax 4141041Swilliam ret 4241041Swilliam 4341041SwilliamENTRY(longjmp) 4441041Swilliam movl 4(%esp),%edx 4541041Swilliam pushl 24(%edx) 4641041Swilliam call _sigsetmask 4741041Swilliam popl %eax 4841041Swilliam movl 4(%esp),%edx 4941041Swilliam movl 8(%esp),%eax 5041041Swilliam movl 0(%edx),%ecx 5141041Swilliam movl 4(%edx),%ebx 5241041Swilliam movl 8(%edx),%esp 5341041Swilliam movl 12(%edx),%ebp 5441041Swilliam movl 16(%edx),%esi 5541041Swilliam movl 20(%edx),%edi 5641041Swilliam cmpl $0,%eax 5741041Swilliam jne 1f 5841041Swilliam movl $1,%eax 5941041Swilliam1: movl %ecx,0(%esp) 6041041Swilliam ret 61