xref: /freebsd/stand/libsa/i386/_setjmp.S (revision b1cfcffa89e66caedb84d6e92a92e3828bc08f04)
1ca987d46SWarner Losh/*-
2ca987d46SWarner Losh * Copyright (c) 1990 The Regents of the University of California.
3ca987d46SWarner Losh * All rights reserved.
4ca987d46SWarner Losh *
5ca987d46SWarner Losh * This code is derived from software contributed to Berkeley by
6ca987d46SWarner Losh * William Jolitz.
7ca987d46SWarner Losh *
8ca987d46SWarner Losh * Redistribution and use in source and binary forms, with or without
9ca987d46SWarner Losh * modification, are permitted provided that the following conditions
10ca987d46SWarner Losh * are met:
11ca987d46SWarner Losh * 1. Redistributions of source code must retain the above copyright
12ca987d46SWarner Losh *    notice, this list of conditions and the following disclaimer.
13ca987d46SWarner Losh * 2. Redistributions in binary form must reproduce the above copyright
14ca987d46SWarner Losh *    notice, this list of conditions and the following disclaimer in the
15ca987d46SWarner Losh *    documentation and/or other materials provided with the distribution.
16ca987d46SWarner Losh * 3. Neither the name of the University nor the names of its contributors
17ca987d46SWarner Losh *    may be used to endorse or promote products derived from this software
18ca987d46SWarner Losh *    without specific prior written permission.
19ca987d46SWarner Losh *
20ca987d46SWarner Losh * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21ca987d46SWarner Losh * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22ca987d46SWarner Losh * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23ca987d46SWarner Losh * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24ca987d46SWarner Losh * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25ca987d46SWarner Losh * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26ca987d46SWarner Losh * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27ca987d46SWarner Losh * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28ca987d46SWarner Losh * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29ca987d46SWarner Losh * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30ca987d46SWarner Losh * SUCH DAMAGE.
31ca987d46SWarner Losh */
32ca987d46SWarner Losh
33ca987d46SWarner Losh#if defined(LIBC_RCS) && !defined(lint)
34ca987d46SWarner Losh	.text
35ca987d46SWarner Losh#endif /* LIBC_RCS and not lint */
36ca987d46SWarner Losh
37ca987d46SWarner Losh/*
38ca987d46SWarner Losh * C library -- _setjmp, _longjmp
39ca987d46SWarner Losh *
40ca987d46SWarner Losh *	_longjmp(a,v)
41ca987d46SWarner Losh * will generate a "return(v)" from the last call to
42ca987d46SWarner Losh *	_setjmp(a)
43ca987d46SWarner Losh * by restoring registers from the environment 'a'.
44ca987d46SWarner Losh * The previous signal state is NOT restored.
45ca987d46SWarner Losh */
46ca987d46SWarner Losh
47ca987d46SWarner Losh#include <machine/asm.h>
48ca987d46SWarner Losh
49ca987d46SWarner LoshENTRY(_setjmp)
50ca987d46SWarner Losh	movl	4(%esp),%eax
51ca987d46SWarner Losh	movl	0(%esp),%edx
52ca987d46SWarner Losh	movl	%edx, 0(%eax)		/* rta */
53ca987d46SWarner Losh	movl	%ebx, 4(%eax)
54ca987d46SWarner Losh	movl	%esp, 8(%eax)
55ca987d46SWarner Losh	movl	%ebp,12(%eax)
56ca987d46SWarner Losh	movl	%esi,16(%eax)
57ca987d46SWarner Losh	movl	%edi,20(%eax)
58ca987d46SWarner Losh	xorl	%eax,%eax
59ca987d46SWarner Losh	ret
60ca987d46SWarner LoshEND(_setjmp)
61ca987d46SWarner Losh
62ca987d46SWarner LoshENTRY(_longjmp)
63ca987d46SWarner Losh	movl	4(%esp),%edx
64ca987d46SWarner Losh	movl	8(%esp),%eax
65ca987d46SWarner Losh	movl	0(%edx),%ecx
66ca987d46SWarner Losh	movl	4(%edx),%ebx
67ca987d46SWarner Losh	movl	8(%edx),%esp
68ca987d46SWarner Losh	movl	12(%edx),%ebp
69ca987d46SWarner Losh	movl	16(%edx),%esi
70ca987d46SWarner Losh	movl	20(%edx),%edi
71ca987d46SWarner Losh	testl	%eax,%eax
72ca987d46SWarner Losh	jnz	1f
73ca987d46SWarner Losh	incl	%eax
74ca987d46SWarner Losh1:	movl	%ecx,0(%esp)
75ca987d46SWarner Losh	ret
76ca987d46SWarner LoshEND(_longjmp)
77*69f6399cSJohn Baldwin
78*69f6399cSJohn Baldwin	.section .note.GNU-stack,"",%progbits
79