1/* 2 * Copyright (c) 2004 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 29#include <sys/cdefs.h> 30 31#ifdef __need_mcontext_t 32#ifndef __need_struct_mcontext 33#define __need_struct_mcontext 34#endif /* __need_struct_mcontext */ 35#endif /* __need_mcontext_t */ 36 37#ifdef __need_mcontext64_t 38#ifndef __need_struct_mcontext64 39#define __need_struct_mcontext64 40#endif /* __need_struct_mcontext64 */ 41#endif /* __need_mcontext64_t */ 42 43#if defined(__need_struct_mcontext) || defined(__need_struct_mcontext64) 44#include <mach/ppc/_structs.h> 45#endif /* __need_struct_mcontext || __need_struct_mcontext64 */ 46 47#ifdef __need_struct_mcontext 48#undef __need_struct_mcontext 49#ifndef _STRUCT_MCONTEXT 50#if __DARWIN_UNIX03 51#define _STRUCT_MCONTEXT struct __darwin_mcontext 52_STRUCT_MCONTEXT 53{ 54 _STRUCT_PPC_EXCEPTION_STATE __es; 55 _STRUCT_PPC_THREAD_STATE __ss; 56 _STRUCT_PPC_FLOAT_STATE __fs; 57 _STRUCT_PPC_VECTOR_STATE __vs; 58}; 59#else /* !__DARWIN_UNIX03 */ 60#define _STRUCT_MCONTEXT struct mcontext 61_STRUCT_MCONTEXT 62{ 63 _STRUCT_PPC_EXCEPTION_STATE es; 64 _STRUCT_PPC_THREAD_STATE ss; 65 _STRUCT_PPC_FLOAT_STATE fs; 66 _STRUCT_PPC_VECTOR_STATE vs; 67}; 68#endif /* __DARWIN_UNIX03 */ 69#endif /* _STRUCT_MCONTEXT */ 70#endif /* __need_struct_mcontext */ 71 72#ifdef __need_struct_mcontext64 73#undef __need_struct_mcontext64 74#ifndef _STRUCT_MCONTEXT64 75#if __DARWIN_UNIX03 76#define _STRUCT_MCONTEXT64 struct __darwin_mcontext64 77_STRUCT_MCONTEXT64 78{ 79 _STRUCT_PPC_EXCEPTION_STATE64 __es; 80 _STRUCT_PPC_THREAD_STATE64 __ss; 81 _STRUCT_PPC_FLOAT_STATE __fs; 82 _STRUCT_PPC_VECTOR_STATE __vs; 83}; 84#else /* !__DARWIN_UNIX03 */ 85#define _STRUCT_MCONTEXT64 struct mcontext64 86_STRUCT_MCONTEXT64 87{ 88 _STRUCT_PPC_EXCEPTION_STATE64 es; 89 _STRUCT_PPC_THREAD_STATE64 ss; 90 _STRUCT_PPC_FLOAT_STATE fs; 91 _STRUCT_PPC_VECTOR_STATE vs; 92}; 93#endif /* __DARWIN_UNIX03 */ 94#endif /* _STRUCT_MCONTEXT64 */ 95#endif /* __need_struct_mcontext64 */ 96 97#ifdef __need_mcontext_t 98#undef __need_mcontext_t 99#ifndef _MCONTEXT_T 100#define _MCONTEXT_T 101typedef _STRUCT_MCONTEXT *mcontext_t; 102#endif /* _MCONTEXT_T */ 103#endif /* __need_mcontext_t */ 104 105#ifdef __need_mcontext64_t 106#undef __need_mcontext64_t 107#ifndef _MCONTEXT64_T 108#define _MCONTEXT64_T 109typedef _STRUCT_MCONTEXT64 *mcontext64_t; 110#endif /* _MCONTEXT64_T */ 111#endif /* __need_mcontext64_t */ 112 113#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 114#ifndef PPC_MCONTEXT_SIZE 115#define PPC_MCONTEXT_SIZE (PPC_THREAD_STATE_COUNT + PPC_FLOAT_STATE_COUNT + PPC_EXCEPTION_STATE_COUNT + PPC_VECTOR_STATE_COUNT) * sizeof(int) 116#endif /* PPC_MCONTEXT_SIZE */ 117#ifndef PPC_MCONTEXT64_SIZE 118#define PPC_MCONTEXT64_SIZE (PPC_THREAD_STATE64_COUNT + PPC_FLOAT_STATE_COUNT + PPC_EXCEPTION_STATE_COUNT + PPC_VECTOR_STATE_COUNT) * sizeof(int) 119#endif /* PPC_MCONTEXT64_SIZE */ 120#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */ 121 122/* 123 * LP64todo - Have to decide how to handle this. 124 * For now, just duplicate the 32-bit context as the generic one. 125 */ 126#ifdef __need_struct_sigcontext 127#undef __need_struct_sigcontext 128#ifndef _STRUCT_SIGCONTEXT 129#if __DARWIN_UNIX03 /* signal.h needs struct sigcontext visible */ 130#define _STRUCT_SIGCONTEXT struct __darwin_sigcontext 131_STRUCT_SIGCONTEXT 132{ 133 int __sc_onstack; /* sigstack state to restore */ 134 int __sc_mask; /* signal mask to restore */ 135 int __sc_ir; /* pc */ 136 int __sc_psw; /* processor status word */ 137 int __sc_sp; /* stack pointer if sc_regs == NULL */ 138 void *__sc_regs; /* (kernel private) saved state */ 139}; 140#else /* !__DARWIN_UNIX03 */ 141#define _STRUCT_SIGCONTEXT struct sigcontext 142_STRUCT_SIGCONTEXT 143{ 144 int sc_onstack; /* sigstack state to restore */ 145 int sc_mask; /* signal mask to restore */ 146 int sc_ir; /* pc */ 147 int sc_psw; /* processor status word */ 148 int sc_sp; /* stack pointer if sc_regs == NULL */ 149 void *sc_regs; /* (kernel private) saved state */ 150}; 151#endif /* __DARWIN_UNIX03 */ 152#endif /* _STRUCT_SIGCONTEXT */ 153#endif /* __need_struct_sigcontext */ 154 155/* 156 * Information pushed on stack when a signal is delivered. 157 * This is used by the kernel to restore state following 158 * execution of the signal handler. It is also made available 159 * to the handler to allow it to properly restore state if 160 * a non-standard exit is performed. 161 */ 162#ifdef __need_struct_sigcontext32 163#undef __need_struct_sigcontext32 164#ifndef _STRUCT_SIGCONTEXT32 165#if __DARWIN_UNIX03 166#define _STRUCT_SIGCONTEXT32 struct __darwin_sigcontext32 167_STRUCT_SIGCONTEXT32 168{ 169 int __sc_onstack; /* sigstack state to restore */ 170 int __sc_mask; /* signal mask to restore */ 171 int __sc_ir; /* pc */ 172 int __sc_psw; /* processor status word */ 173 int __sc_sp; /* stack pointer if sc_regs == NULL */ 174 void *__sc_regs; /* (kernel private) saved state */ 175}; 176#else /* !__DARWIN_UNIX03 */ 177#define _STRUCT_SIGCONTEXT32 struct sigcontext32 178_STRUCT_SIGCONTEXT32 179{ 180 int sc_onstack; /* sigstack state to restore */ 181 int sc_mask; /* signal mask to restore */ 182 int sc_ir; /* pc */ 183 int sc_psw; /* processor status word */ 184 int sc_sp; /* stack pointer if sc_regs == NULL */ 185 void *sc_regs; /* (kernel private) saved state */ 186}; 187#endif /* __DARWIN_UNIX03 */ 188#endif /* _STRUCT_SIGCONTEXT32 */ 189#endif /* __need_struct_sigcontext32 */ 190 191#ifdef __need_struct_sigcontext64 192#undef __need_struct_sigcontext64 193#ifndef _STRUCT_SIGCONTEXT64 194#if __DARWIN_UNIX03 195#define _STRUCT_SIGCONTEXT64 struct __darwin_sigcontext64 196_STRUCT_SIGCONTEXT64 197{ 198 int __sc_onstack; /* sigstack state to restore */ 199 int __sc_mask; /* signal mask to restore */ 200 long long __sc_ir; /* pc */ 201 long long __sc_psw; /* processor status word */ 202 long long __sc_sp; /* stack pointer if sc_regs == NULL */ 203 void *__sc_regs; /* (kernel private) saved state */ 204}; 205#else /* !__DARWIN_UNIX03 */ 206#define _STRUCT_SIGCONTEXT64 struct sigcontext64 207_STRUCT_SIGCONTEXT64 208{ 209 int sc_onstack; /* sigstack state to restore */ 210 int sc_mask; /* signal mask to restore */ 211 long long sc_ir; /* pc */ 212 long long sc_psw; /* processor status word */ 213 long long sc_sp; /* stack pointer if sc_regs == NULL */ 214 void *sc_regs; /* (kernel private) saved state */ 215}; 216#endif /* __DARWIN_UNIX03 */ 217#endif /* _STRUCT_SIGCONTEXT64 */ 218#endif /* __need_struct_sigcontext64 */ 219