Annotation of XNU/EXTERNAL_HEADERS/architecture/i386/frame.h, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.