1405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham/* $OpenBSD: sigsetjmp.S,v 1.5 2005/08/07 16:40:15 espie Exp $ */
2405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham/*-
3405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * Copyright (c) 1991, 1993, 1995,
4405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham *	The Regents of the University of California.  All rights reserved.
5405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham *
6405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * This code is derived from software contributed to Berkeley by
7405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * Havard Eidnes.
8405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham *
9405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * Redistribution and use in source and binary forms, with or without
10405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * modification, are permitted provided that the following conditions
11405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * are met:
12405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * 1. Redistributions of source code must retain the above copyright
13405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham *    notice, this list of conditions and the following disclaimer.
14405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * 2. Redistributions in binary form must reproduce the above copyright
15405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham *    notice, this list of conditions and the following disclaimer in the
16405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham *    documentation and/or other materials provided with the distribution.
17405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * 3. Neither the name of the University nor the names of its contributors
18405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham *    may be used to endorse or promote products derived from this software
19405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham *    without specific prior written permission.
20405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham *
21405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * SUCH DAMAGE.
32405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham */
33405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham
34405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham#include <machine/asm.h>
35405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham#include <machine/regnum.h>
36405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham#include <machine/setjmp.h>
37405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham
38405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham/*
39405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham * trampolines for sigsetjmp and  siglongjmp save and restore mask.
40405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham *
41405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham */
42405b8029a6888f386adf3512113a33546141d1c8Raghu GandhamFRAMESZ= MKFSIZ(1,1)
43405b8029a6888f386adf3512113a33546141d1c8Raghu GandhamGPOFF= FRAMESZ-2*REGSZ
44405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham
45405b8029a6888f386adf3512113a33546141d1c8Raghu GandhamLEAF(sigsetjmp, FRAMESZ)
46405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	PTR_SUBU sp, FRAMESZ
47405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	SETUP_GP64(GPOFF, sigsetjmp)
48405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	.set	reorder
49405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	REG_S	a1, (_JBLEN*REGSZ)(a0)		# save "savemask"
50405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	bne	a1, 0x0, 1f			# do saving of signal mask?
51405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	LA	t9, _setjmp
52405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	RESTORE_GP64
53405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	PTR_ADDU sp, FRAMESZ
54405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	jr t9
55405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham
56405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham1:	LA	t9, setjmp
57405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	RESTORE_GP64
58405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	PTR_ADDU sp, FRAMESZ
59405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	jr t9
60405b8029a6888f386adf3512113a33546141d1c8Raghu GandhamEND(sigsetjmp)
61405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham
62405b8029a6888f386adf3512113a33546141d1c8Raghu GandhamLEAF(siglongjmp, FRAMESZ)
63405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	PTR_SUBU sp, FRAMESZ
64405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	SETUP_GP64(GPOFF, siglongjmp)
65405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	.set	reorder
66405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	REG_L	t0, (_JBLEN*REGSZ)(a0)		# get "savemask"
67405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	bne	t0, 0x0, 1f			# restore signal mask?
68405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	LA	t9, _longjmp
69405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	RESTORE_GP64
70405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	PTR_ADDU sp, FRAMESZ
71405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	jr	t9
72405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham1:
73405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	LA	t9, longjmp
74405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	RESTORE_GP64
75405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	PTR_ADDU sp, FRAMESZ
76405b8029a6888f386adf3512113a33546141d1c8Raghu Gandham	jr	t9
77405b8029a6888f386adf3512113a33546141d1c8Raghu GandhamEND(siglongjmp)
78