17c478bdstevel@tonic-gate/*
27c478bdstevel@tonic-gate * CDDL HEADER START
37c478bdstevel@tonic-gate *
47c478bdstevel@tonic-gate * The contents of this file are subject to the terms of the
53cd8a1aRoger A. Faulkner * Common Development and Distribution License (the "License").
63cd8a1aRoger A. Faulkner * You may not use this file except in compliance with the License.
77c478bdstevel@tonic-gate *
87c478bdstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bdstevel@tonic-gate * or http://www.opensolaris.org/os/licensing.
107c478bdstevel@tonic-gate * See the License for the specific language governing permissions
117c478bdstevel@tonic-gate * and limitations under the License.
127c478bdstevel@tonic-gate *
137c478bdstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each
147c478bdstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bdstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the
167c478bdstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying
177c478bdstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bdstevel@tonic-gate *
197c478bdstevel@tonic-gate * CDDL HEADER END
207c478bdstevel@tonic-gate */
213cd8a1aRoger A. Faulkner
227c478bdstevel@tonic-gate/*
233cd8a1aRoger A. Faulkner * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
247c478bdstevel@tonic-gate */
257c478bdstevel@tonic-gate
267c478bdstevel@tonic-gate#ifndef _SIGJMP_STRUCT_H
277c478bdstevel@tonic-gate#define	_SIGJMP_STRUCT_H
287c478bdstevel@tonic-gate
297c478bdstevel@tonic-gate#ifdef	__cplusplus
307c478bdstevel@tonic-gateextern "C" {
317c478bdstevel@tonic-gate#endif
327c478bdstevel@tonic-gate
337c478bdstevel@tonic-gate#include <sys/types.h>
347c478bdstevel@tonic-gate#include <sys/stack.h>
357c478bdstevel@tonic-gate#include <ucontext.h>
367c478bdstevel@tonic-gate#include <setjmp.h>
377c478bdstevel@tonic-gate
387c478bdstevel@tonic-gate#if defined(__sparc)
397c478bdstevel@tonic-gate
407c478bdstevel@tonic-gate/*
417c478bdstevel@tonic-gate * The following structure MUST match the ABI size specifier _SIGJBLEN.
427c478bdstevel@tonic-gate * This is 19 (longs).  The ABI value for _JBLEN is 12 (longs).
437c478bdstevel@tonic-gate * A greg_t is a long.  A sigset_t is 4 ints and a stack_t is 3 longs.
447c478bdstevel@tonic-gate *
457c478bdstevel@tonic-gate * The layout of this structure must match the layout of the same
467c478bdstevel@tonic-gate * structures defined in usr/src/lib/libbc/libc/sys/common/ucontext.h
477c478bdstevel@tonic-gate * and usr/src/ucblib/libucb/sparc/sys/setjmp.c.  Other than that,
487c478bdstevel@tonic-gate * the layout is private, not known to applications.
497c478bdstevel@tonic-gate *
507c478bdstevel@tonic-gate * We make the first 5 members match the implementations of
517c478bdstevel@tonic-gate * setjmp()/longjmp(), so that an application could (stupidly)
527c478bdstevel@tonic-gate * do sigsetjmp(env) followed by longjmp(env) (but not setjmp(env)
537c478bdstevel@tonic-gate * followed by siglongjmp(env)).
547c478bdstevel@tonic-gate */
557c478bdstevel@tonic-gatetypedef struct {
567c478bdstevel@tonic-gate	int		sjs_flags;	/* JBUF[ 0]	*/
577c478bdstevel@tonic-gate	greg_t		sjs_sp;		/* JBUF[ 1]	*/
587c478bdstevel@tonic-gate	greg_t		sjs_pc;		/* JBUF[ 2]	*/
597c478bdstevel@tonic-gate	greg_t		sjs_fp;		/* JBUF[ 3]	*/
607c478bdstevel@tonic-gate	greg_t		sjs_i7;		/* JBUF[ 4]	*/
617c478bdstevel@tonic-gate	ucontext_t	*sjs_uclink;
627c478bdstevel@tonic-gate	ulong_t		sjs_pad[_JBLEN - 6];
637c478bdstevel@tonic-gate	sigset_t	sjs_sigmask;
647c478bdstevel@tonic-gate#if defined(_LP64)
653cd8a1aRoger A. Faulkner	greg_t		sjs_asi;
663cd8a1aRoger A. Faulkner	greg_t		sjs_fprs;
677c478bdstevel@tonic-gate#endif
687c478bdstevel@tonic-gate	stack_t		sjs_stack;
697c478bdstevel@tonic-gate} sigjmp_struct_t;
707c478bdstevel@tonic-gate
717c478bdstevel@tonic-gate#define	JB_SAVEMASK	0x1
727c478bdstevel@tonic-gate#define	JB_FRAMEPTR	0x2
737c478bdstevel@tonic-gate
747c478bdstevel@tonic-gate#endif	/* __sparc */
757c478bdstevel@tonic-gate
767c478bdstevel@tonic-gate#ifdef	__cplusplus
777c478bdstevel@tonic-gate}
787c478bdstevel@tonic-gate#endif
797c478bdstevel@tonic-gate
807c478bdstevel@tonic-gate#endif /* _SIGJMP_STRUCT_H */
81