X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/1c79356b52d46aa6b508fb032f5ae709b1f2897b..ff6e181ae92fc6f1e89841290f461d1f2f9badd9:/osfmk/mach/ppc/thread_status.h diff --git a/osfmk/mach/ppc/thread_status.h b/osfmk/mach/ppc/thread_status.h index 6dd8ba95d..eb5148bd5 100644 --- a/osfmk/mach/ppc/thread_status.h +++ b/osfmk/mach/ppc/thread_status.h @@ -1,21 +1,22 @@ /* - * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2005 Apple Computer, Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * - * The contents of this file constitute Original Code as defined in and - * are subject to the Apple Public Source License Version 1.1 (the - * "License"). You may not use this file except in compliance with the - * License. Please obtain a copy of the License at - * http://www.apple.com/publicsource and read it before using this file. + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. * - * This Original Code and all software distributed under the License are - * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the - * License for the specific language governing rights and limitations - * under the License. + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. * * @APPLE_LICENSE_HEADER_END@ */ @@ -26,6 +27,9 @@ #ifndef _MACH_PPC_THREAD_STATUS_H_ #define _MACH_PPC_THREAD_STATUS_H_ +#include +#include + /* * ppc_thread_state is the structure that is exported to user threads for * use in status/mutate calls. This structure should never change. @@ -36,6 +40,8 @@ #define PPC_FLOAT_STATE 2 #define PPC_EXCEPTION_STATE 3 #define PPC_VECTOR_STATE 4 +#define PPC_THREAD_STATE64 5 +#define PPC_EXCEPTION_STATE64 6 #define THREAD_STATE_NONE 7 /* @@ -48,130 +54,52 @@ #define VALID_THREAD_STATE_FLAVOR(x) \ ((x == PPC_THREAD_STATE) || \ (x == PPC_FLOAT_STATE) || \ - (x == PPC_EXCEPTION_STATE) || \ + (x == PPC_EXCEPTION_STATE) || \ (x == PPC_VECTOR_STATE) || \ + (x == PPC_THREAD_STATE64) || \ + (x == PPC_EXCEPTION_STATE64) || \ (x == THREAD_STATE_NONE)) -typedef struct ppc_thread_state { - unsigned int srr0; /* Instruction address register (PC) */ - unsigned int srr1; /* Machine state register (supervisor) */ - unsigned int r0; - unsigned int r1; - unsigned int r2; - unsigned int r3; - unsigned int r4; - unsigned int r5; - unsigned int r6; - unsigned int r7; - unsigned int r8; - unsigned int r9; - unsigned int r10; - unsigned int r11; - unsigned int r12; - unsigned int r13; - unsigned int r14; - unsigned int r15; - unsigned int r16; - unsigned int r17; - unsigned int r18; - unsigned int r19; - unsigned int r20; - unsigned int r21; - unsigned int r22; - unsigned int r23; - unsigned int r24; - unsigned int r25; - unsigned int r26; - unsigned int r27; - unsigned int r28; - unsigned int r29; - unsigned int r30; - unsigned int r31; - - unsigned int cr; /* Condition register */ - unsigned int xer; /* User's integer exception register */ - unsigned int lr; /* Link register */ - unsigned int ctr; /* Count register */ - unsigned int mq; /* MQ register (601 only) */ - - unsigned int vrsave; /* Vector Save Register */ -} ppc_thread_state_t; - -/* This structure should be double-word aligned for performance */ - -typedef struct ppc_float_state { - double fpregs[32]; - - unsigned int fpscr_pad; /* fpscr is 64 bits, 32 bits of rubbish */ - unsigned int fpscr; /* floating point status register */ -} ppc_float_state_t; - -typedef struct ppc_vector_state { - unsigned long save_vr[32][4]; - unsigned long save_vscr[4]; - unsigned int save_pad5[4]; - unsigned int save_vrvalid; /* VRs that have been saved */ - unsigned int save_pad6[7]; -} ppc_vector_state_t; +#ifndef _POSIX_C_SOURCE +typedef struct ppc_thread_state ppc_thread_state_t; +#else /* _POSIX_C_SOURCE */ +typedef struct __darwin_ppc_thread_state ppc_thread_state_t; +#endif /* _POSIX_C_SOURCE */ + +#ifndef _POSIX_C_SOURCE +typedef struct ppc_thread_state64 ppc_thread_state64_t; +#endif /* _POSIX_C_SOURCE */ + +#ifndef _POSIX_C_SOURCE +typedef struct ppc_float_state ppc_float_state_t; +#else /* _POSIX_C_SOURCE */ +typedef struct __darwin_ppc_float_state ppc_float_state_t; +#endif /* _POSIX_C_SOURCE */ + +#ifndef _POSIX_C_SOURCE +typedef struct ppc_vector_state ppc_vector_state_t; +#else /* _POSIX_C_SOURCE */ +typedef struct __darwin_ppc_vector_state ppc_vector_state_t; +#endif /* _POSIX_C_SOURCE */ /* * saved state structure * - * This structure corresponds to the state of the user registers as saved - * on the stack upon kernel entry (saved in pcb). On interrupts and exceptions - * we save all registers. On system calls we only save the registers not - * saved by the caller. + * This structure corresponds to the saved state. * */ -typedef struct ppc_saved_state { - unsigned int srr0; /* Instruction address register (PC) */ - unsigned int srr1; /* Machine state register (supervisor) */ - unsigned int r0; - unsigned int r1; - unsigned int r2; - unsigned int r3; - unsigned int r4; - unsigned int r5; - unsigned int r6; - unsigned int r7; - unsigned int r8; - unsigned int r9; - unsigned int r10; - unsigned int r11; - unsigned int r12; - unsigned int r13; - unsigned int r14; - unsigned int r15; - unsigned int r16; - unsigned int r17; - unsigned int r18; - unsigned int r19; - unsigned int r20; - unsigned int r21; - unsigned int r22; - unsigned int r23; - unsigned int r24; - unsigned int r25; - unsigned int r26; - unsigned int r27; - unsigned int r28; - unsigned int r29; - unsigned int r30; - unsigned int r31; - - unsigned int cr; /* Condition register */ - unsigned int xer; /* User's integer exception register */ - unsigned int lr; /* Link register */ - unsigned int ctr; /* Count register */ - unsigned int mq; /* MQ register (601 only) */ - unsigned int vrsave; /* Vector Register Save */ - -/* These are extra. Remove them from the count */ - - unsigned int sr_copyin; /* SR_COPYIN is used for remapping */ - unsigned int pad2[7]; /* struct alignment */ -} ppc_saved_state_t; +#ifdef MACH__POSIX_C_SOURCE_PRIVATE + +#include + +typedef struct savearea ppc_saved_state_t; + +#else /* MACH__POSIX_C_SOURCE_PRIVATE */ + +typedef struct ppc_thread_state ppc_saved_state_t; + +#endif /* MACH__POSIX_C_SOURCE_PRIVATE */ /* * ppc_exception_state @@ -186,30 +114,38 @@ typedef struct ppc_saved_state { * compatiblity. */ -typedef struct ppc_exception_state { - unsigned long dar; /* Fault registers for coredump */ - unsigned long dsisr; - unsigned long exception;/* number of powerpc exception taken */ - unsigned long pad0; /* align to 16 bytes */ +/* Exception state for 32-bit thread (on 32-bit processor) */ +/* Still available on 64-bit processors, but may fall short */ +/* of covering the full potential state (hi half available). */ - unsigned long pad1[4]; /* space in PCB "just in case" */ -} ppc_exception_state_t; +#ifndef _POSIX_C_SOURCE +typedef struct ppc_exception_state ppc_exception_state_t; +typedef struct ppc_exception_state64 ppc_exception_state64_t; +#else /* _POSIX_C_SOURCE */ +typedef struct __darwin_ppc_exception_state ppc_exception_state_t; +#endif /* _POSIX_C_SOURCE */ /* * Save State Flags */ -#define PPC_THREAD_STATE_COUNT \ - (sizeof(struct ppc_thread_state) / sizeof(int)) +#define PPC_THREAD_STATE_COUNT ((mach_msg_type_number_t) \ + (sizeof(ppc_thread_state_t) / sizeof(int))) + +#define PPC_THREAD_STATE64_COUNT ((mach_msg_type_number_t) \ + (sizeof(ppc_thread_state64_t) / sizeof(int))) + +#define PPC_EXCEPTION_STATE_COUNT ((mach_msg_type_number_t) \ + (sizeof(ppc_exception_state_t) / sizeof(int))) -#define PPC_EXCEPTION_STATE_COUNT \ - (sizeof(struct ppc_exception_state) / sizeof(int)) +#define PPC_EXCEPTION_STATE64_COUNT ((mach_msg_type_number_t) \ + (sizeof(ppc_exception_state64_t) / sizeof(int))) -#define PPC_FLOAT_STATE_COUNT \ - (sizeof(struct ppc_float_state) / sizeof(int)) +#define PPC_FLOAT_STATE_COUNT ((mach_msg_type_number_t) \ + (sizeof(ppc_float_state_t) / sizeof(int))) -#define PPC_VECTOR_STATE_COUNT \ - (sizeof(struct ppc_vector_state) / sizeof(int)) +#define PPC_VECTOR_STATE_COUNT ((mach_msg_type_number_t) \ + (sizeof(ppc_vector_state_t) / sizeof(int))) /* * Machine-independent way for servers and Mach's exception mechanism to @@ -221,6 +157,6 @@ typedef struct ppc_exception_state { /* * Largest state on this machine: */ -#define THREAD_MACHINE_STATE_MAX PPC_VECTOR_STATE_COUNT +#define THREAD_MACHINE_STATE_MAX THREAD_STATE_MAX #endif /* _MACH_PPC_THREAD_STATUS_H_ */