|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: /* ! 23: * Copyright (c) 1992 NeXT Computer, Inc. ! 24: * ! 25: * Intel386 Family: Processor exception frame. ! 26: * ! 27: * HISTORY ! 28: * ! 29: * 31 August 1992 ? at NeXT ! 30: * Added v86 mode stuff. ! 31: * ! 32: * 8 June 1992 ? at NeXT ! 33: * Changed name of write field in err_code_t ! 34: * which collided with write() in shlib. ! 35: * ! 36: * 30 March 1992 ? at NeXT ! 37: * Created. ! 38: */ ! 39: ! 40: /* ! 41: * Format of the error code ! 42: * generated by the hardware ! 43: * for certain exceptions. ! 44: */ ! 45: ! 46: typedef union err_code { ! 47: struct err_code_normal { ! 48: unsigned int ext :1, ! 49: tbl :2, ! 50: #define ERR_GDT 0 ! 51: #define ERR_IDT 1 ! 52: #define ERR_LDT 2 ! 53: index :13, ! 54: :16; ! 55: } normal; ! 56: struct err_code_pgfault { ! 57: unsigned int prot :1, ! 58: wrtflt :1, ! 59: user :1, ! 60: :29; ! 61: } pgfault; ! 62: } err_code_t; ! 63: ! 64: #import <architecture/i386/sel.h> ! 65: ! 66: /* ! 67: * The actual hardware exception frame ! 68: * is variable in size. An error code is ! 69: * only pushed for certain exceptions. ! 70: * Previous stack information is only ! 71: * pushed for exceptions that cause a ! 72: * change in privilege level. The dpl ! 73: * field of the saved CS selector can be ! 74: * used to determine whether this is the ! 75: * case. If the interrupted task was ! 76: * executing in v86 mode, then the data ! 77: * segment registers are also present in ! 78: * the exception frame (in addition to ! 79: * previous stack information). This ! 80: * case can be determined by examining ! 81: * eflags. ! 82: */ ! 83: ! 84: typedef struct except_frame { ! 85: err_code_t err; ! 86: unsigned int eip; ! 87: sel_t cs; ! 88: unsigned int :0; ! 89: unsigned int eflags; ! 90: unsigned int esp; ! 91: sel_t ss; ! 92: unsigned int :0; ! 93: unsigned short v_es; ! 94: unsigned int :0; ! 95: unsigned short v_ds; ! 96: unsigned int :0; ! 97: unsigned short v_fs; ! 98: unsigned int :0; ! 99: unsigned short v_gs; ! 100: unsigned int :0; ! 101: } except_frame_t; ! 102: ! 103: /* ! 104: * Values in eflags. ! 105: */ ! 106: ! 107: #ifndef EFL_CF /* FIXME */ ! 108: #define EFL_CF 0x00001 ! 109: #define EFL_PF 0x00004 ! 110: #define EFL_AF 0x00010 ! 111: #define EFL_ZF 0x00040 ! 112: #define EFL_SF 0x00080 ! 113: #define EFL_TF 0x00100 ! 114: #define EFL_IF 0x00200 ! 115: #define EFL_DF 0x00400 ! 116: #define EFL_OF 0x00800 ! 117: #define EFL_IOPL 0x03000 ! 118: #define EFL_NT 0x04000 ! 119: #define EFL_RF 0x10000 ! 120: #define EFL_VM 0x20000 ! 121: #define EFL_AC 0x40000 ! 122: #endif ! 123: ! 124: #define EFL_CLR 0xfff88028 ! 125: #define EFL_SET 0x00000002
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.