1*4d12bfcdSjoerg/* $NetBSD: sigsetjmp.S,v 1.7 2013/09/12 15:36:16 joerg Exp $ */ 27530512aSpk/* 37530512aSpk * Copyright (c) 1995 Paul Kranenburg 47530512aSpk * All rights reserved. 57530512aSpk * 67530512aSpk * Redistribution and use in source and binary forms, with or without 77530512aSpk * modification, are permitted provided that the following conditions 87530512aSpk * are met: 97530512aSpk * 1. Redistributions of source code must retain the above copyright 107530512aSpk * notice, this list of conditions and the following disclaimer. 117530512aSpk * 2. Redistributions in binary form must reproduce the above copyright 127530512aSpk * notice, this list of conditions and the following disclaimer in the 137530512aSpk * documentation and/or other materials provided with the distribution. 147530512aSpk * 3. All advertising materials mentioning features or use of this software 157530512aSpk * must display the following acknowledgement: 167530512aSpk * This product includes software developed by Paul Kranenburg. 177530512aSpk * 4. The name of the author may not be used to endorse or promote products 187530512aSpk * derived from this software without specific prior written permission 197530512aSpk * 207530512aSpk * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 217530512aSpk * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 227530512aSpk * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 237530512aSpk * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 247530512aSpk * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 257530512aSpk * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 267530512aSpk * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 277530512aSpk * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 287530512aSpk * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 297530512aSpk * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 307530512aSpk * 317530512aSpk */ 327530512aSpk 337530512aSpk#include "SYS.h" 347530512aSpk 35*4d12bfcdSjoerg#ifdef __PIC__ 367530512aSpk 37eb9395f8SuweENTRY(__sigsetjmp14) 387aa78977Spk PIC_PROLOGUE(%g1, %g2) ! %g1 = _GLOBAL_OFFSET_TABLE 39a34b3f87Suwe tst %o1 40a34b3f87Suwe bnz 1f 41a34b3f87Suwe st %o1, [%o0 + 56] ! jmpbuf[JBLEN] = savemask 42a34b3f87Suwe 43a34b3f87Suwe !! if (savemask == 0) goto _setjmp 44a34b3f87Suwe set _C_LABEL(_setjmp), %g2 45a34b3f87Suwe ld [%g1 + %g2], %g1 467aa78977Spk jmp %g1 477aa78977Spk nop 487530512aSpk 49a34b3f87Suwe !! if (savemask != 0) goto setjmp 50a34b3f87Suwe1: set _C_LABEL(__setjmp14), %g2 51a34b3f87Suwe ld [%g1 + %g2], %g1 52a34b3f87Suwe jmp %g1 53a34b3f87Suwe nop 54a34b3f87Suwe 55a34b3f87Suwe 56eb9395f8SuweENTRY(__siglongjmp14) 577aa78977Spk PIC_PROLOGUE(%g1, %g2) ! %g1 = _GLOBAL_OFFSET_TABLE 58a34b3f87Suwe ld [%o0 + 56], %g2 ! restoremask = jmpbuf[JBLEN] 59a34b3f87Suwe tst %g2 60a34b3f87Suwe bnz 1f 61a34b3f87Suwe nop 62a34b3f87Suwe 63a34b3f87Suwe !! if (restoremask == 0) goto _longjmp 64a34b3f87Suwe set _C_LABEL(_longjmp), %g2 65a34b3f87Suwe ld [%g1 + %g2], %g1 667530512aSpk jmp %g1 677530512aSpk nop 687aa78977Spk 69a34b3f87Suwe !! if (restoremask != 0) goto longjmp 70a34b3f87Suwe1: set _C_LABEL(__longjmp14), %g2 71a34b3f87Suwe ld [%g1 + %g2], %g1 72a34b3f87Suwe jmp %g1 73a34b3f87Suwe nop 74a34b3f87Suwe 75*4d12bfcdSjoerg#else /* !__PIC__ */ 767530512aSpk 77eb9395f8SuweENTRY(__sigsetjmp14) 787530512aSpk cmp %o1,0 79131c70b1Stv be _C_LABEL(_setjmp) 80eb9395f8Suwe st %o1,[%o0+56] ! jmpbuf[JBLEN] 817530512aSpk nop 82eb9395f8Suwe ba,a _C_LABEL(__setjmp14) 837530512aSpk unimp 0 847530512aSpk 85eb9395f8SuweENTRY(__siglongjmp14) 86eb9395f8Suwe ld [%o0+56],%g1 877530512aSpk cmp %g1,0 88131c70b1Stv be _C_LABEL(_longjmp) 897530512aSpk nop 90eb9395f8Suwe ba,a _C_LABEL(__longjmp14) 917530512aSpk unimp 0 927aa78977Spk 93*4d12bfcdSjoerg#endif /* !__PIC__ */ 94