1*41041Swilliam/*- 2*41041Swilliam * Copyright (c) 1990 The Regents of the University of California. 3*41041Swilliam * All rights reserved. 4*41041Swilliam * 5*41041Swilliam * This code is derived from software contributed to Berkeley by 6*41041Swilliam * William Jolitz. 7*41041Swilliam * 8*41041Swilliam * %sccs.include.redist.c% 9*41041Swilliam */ 10*41041Swilliam 11*41041Swilliam#if defined(LIBC_SCCS) && !defined(lint) 12*41041Swilliam .asciz "@(#)setjmp.s 5.1 (Berkeley) 04/23/90" 13*41041Swilliam#endif /* LIBC_SCCS and not lint */ 14*41041Swilliam 15*41041Swilliam/* 16*41041Swilliam * C library -- _setjmp, _longjmp 17*41041Swilliam * 18*41041Swilliam * longjmp(a,v) 19*41041Swilliam * will generate a "return(v)" from the last call to 20*41041Swilliam * setjmp(a) 21*41041Swilliam * by restoring registers from the stack. 22*41041Swilliam * The previous signal state is restored. 23*41041Swilliam */ 24*41041Swilliam 25*41041Swilliam#include "DEFS.h" 26*41041Swilliam 27*41041SwilliamENTRY(setjmp) 28*41041Swilliam pushl $0 29*41041Swilliam call _sigblock 30*41041Swilliam popl %edx 31*41041Swilliam movl 4(%esp),%ecx 32*41041Swilliam movl 0(%esp),%edx 33*41041Swilliam movl %edx, 0(%ecx) 34*41041Swilliam movl %ebx, 4(%ecx) 35*41041Swilliam movl %esp, 8(%ecx) 36*41041Swilliam movl %ebp,12(%ecx) 37*41041Swilliam movl %esi,16(%ecx) 38*41041Swilliam movl %edi,20(%ecx) 39*41041Swilliam movl %eax,24(%ecx) 40*41041Swilliam movl $0,%eax 41*41041Swilliam ret 42*41041Swilliam 43*41041SwilliamENTRY(longjmp) 44*41041Swilliam movl 4(%esp),%edx 45*41041Swilliam pushl 24(%edx) 46*41041Swilliam call _sigsetmask 47*41041Swilliam popl %eax 48*41041Swilliam movl 4(%esp),%edx 49*41041Swilliam movl 8(%esp),%eax 50*41041Swilliam movl 0(%edx),%ecx 51*41041Swilliam movl 4(%edx),%ebx 52*41041Swilliam movl 8(%edx),%esp 53*41041Swilliam movl 12(%edx),%ebp 54*41041Swilliam movl 16(%edx),%esi 55*41041Swilliam movl 20(%edx),%edi 56*41041Swilliam cmpl $0,%eax 57*41041Swilliam jne 1f 58*41041Swilliam movl $1,%eax 59*41041Swilliam1: movl %ecx,0(%esp) 60*41041Swilliam ret 61