Annotation of XNU/osfmk/i386/idt.s, 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:  * @OSF_COPYRIGHT@
                     24:  */
                     25: /* 
                     26:  * Mach Operating System
                     27:  * Copyright (c) 1991,1990 Carnegie Mellon University
                     28:  * All Rights Reserved.
                     29:  * 
                     30:  * Permission to use, copy, modify and distribute this software and its
                     31:  * documentation is hereby granted, provided that both the copyright
                     32:  * notice and this permission notice appear in all copies of the
                     33:  * software, derivative works or modified versions, and any portions
                     34:  * thereof, and that both notices appear in supporting documentation.
                     35:  * 
                     36:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
                     37:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
                     38:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     39:  * 
                     40:  * Carnegie Mellon requests users of this software to return to
                     41:  * 
                     42:  *  Software Distribution Coordinator  or  [email protected]
                     43:  *  School of Computer Science
                     44:  *  Carnegie Mellon University
                     45:  *  Pittsburgh PA 15213-3890
                     46:  * 
                     47:  * any improvements or extensions that they make and grant Carnegie Mellon
                     48:  * the rights to redistribute these changes.
                     49:  */
                     50: /*
                     51:  */
                     52: #include <i386/asm.h>
                     53: #include <assym.s>
                     54: #include <mach_kdb.h>
                     55: 
                     56: /*
                     57:  * Interrupt descriptor table and code vectors for it.
                     58:  */
                     59: #define        IDT_BASE_ENTRY(vec,seg,type) \
                     60:        .data                   ;\
                     61:        .long   vec             ;\
                     62:        .word   seg             ;\
                     63:        .byte   0               ;\
                     64:        .byte   type            ;\
                     65:        .text
                     66: 
                     67: #define        IDT_ENTRY(vec,type)     IDT_BASE_ENTRY(vec,KERNEL_CS,type)
                     68: 
                     69: /*
                     70:  * No error code.  Clear error code and push trap number.
                     71:  */
                     72: #define        EXCEPTION(n,name) \
                     73:        IDT_ENTRY(EXT(name),K_TRAP_GATE);\
                     74: Entry(name)                            ;\
                     75:        pushl   $0                      ;\
                     76:        pushl   $(n)                    ;\
                     77:        jmp     EXT(alltraps)
                     78: 
                     79: /*
                     80:  * Interrupt from user.  Clear error code and push trap number.
                     81:  */
                     82: #define        EXCEP_USR(n,name) \
                     83:        IDT_ENTRY(EXT(name),U_TRAP_GATE);\
                     84: Entry(name)                            ;\
                     85:        pushl   $0                      ;\
                     86:        pushl   $(n)                    ;\
                     87:        jmp     EXT(alltraps)
                     88: 
                     89: /*
                     90:  * Special interrupt code.
                     91:  */
                     92: #define        EXCEP_SPC(n,name)  \
                     93:        IDT_ENTRY(EXT(name),K_TRAP_GATE)
                     94: 
                     95: /*
                     96:  * Special interrupt code from user.
                     97:  */
                     98: #define EXCEP_SPC_USR(n,name)  \
                     99:        IDT_ENTRY(EXT(name),U_TRAP_GATE)
                    100: 
                    101: /*
                    102:  * Extra-special interrupt code.  Note that no offset may be
                    103:  * specified in a task gate descriptor, so name is ignored.
                    104:  */
                    105: #define        EXCEP_TASK(n,name)  \
                    106:        IDT_BASE_ENTRY(0,DEBUG_TSS,K_TASK_GATE)
                    107: 
                    108: /*
                    109:  * Error code has been pushed.  Push trap number.
                    110:  */
                    111: #define        EXCEP_ERR(n,name) \
                    112:        IDT_ENTRY(EXT(name),K_TRAP_GATE);\
                    113: Entry(name)                            ;\
                    114:        pushl   $(n)                    ;\
                    115:        jmp     EXT(alltraps)
                    116: 
                    117: /*
                    118:  * Interrupt.
                    119:  */
                    120: #define        INTERRUPT(n) \
                    121:        IDT_ENTRY(0f,K_INTR_GATE)       ;\
                    122: 0:                                     ;\
                    123:        pushl   %eax                    ;\
                    124:        movl    $(n),%eax               ;\
                    125:        jmp     EXT(all_intrs)
                    126: 
                    127:        .data
                    128: Entry(idt)
                    129:        .text
                    130: 
                    131: EXCEPTION(0x00,t_zero_div)
                    132: EXCEP_SPC(0x01,t_debug)
                    133: INTERRUPT(0x02)                        /* NMI */
                    134: EXCEP_USR(0x03,t_int3)
                    135: EXCEP_USR(0x04,t_into)
                    136: EXCEP_USR(0x05,t_bounds)
                    137: EXCEPTION(0x06,t_invop)
                    138: EXCEPTION(0x07,t_nofpu)
                    139: #if    MACH_KDB
                    140: EXCEP_TASK(0x08,db_task_dbl_fault)
                    141: #else
                    142: EXCEPTION(0x08,a_dbl_fault)
                    143: #endif
                    144: EXCEPTION(0x09,a_fpu_over)
                    145: EXCEPTION(0x0a,a_inv_tss)
                    146: EXCEP_SPC(0x0b,t_segnp)
                    147: #if    MACH_KDB
                    148: EXCEP_TASK(0x0c,db_task_stk_fault)
                    149: #else
                    150: EXCEP_ERR(0x0c,t_stack_fault)
                    151: #endif
                    152: EXCEP_SPC(0x0d,t_gen_prot)
                    153: EXCEP_SPC(0x0e,t_page_fault)
                    154: EXCEPTION(0x0f,t_trap_0f)
                    155: EXCEPTION(0x10,t_fpu_err)
                    156: EXCEPTION(0x11,t_trap_11)
                    157: EXCEPTION(0x12,t_trap_12)
                    158: EXCEPTION(0x13,t_trap_13)
                    159: EXCEPTION(0x14,t_trap_14)
                    160: EXCEPTION(0x15,t_trap_15)
                    161: EXCEPTION(0x16,t_trap_16)
                    162: EXCEPTION(0x17,t_trap_17)
                    163: EXCEPTION(0x18,t_trap_18)
                    164: EXCEPTION(0x19,t_trap_19)
                    165: EXCEPTION(0x1a,t_trap_1a)
                    166: EXCEPTION(0x1b,t_trap_1b)
                    167: EXCEPTION(0x1c,t_trap_1c)
                    168: EXCEPTION(0x1d,t_trap_1d)
                    169: EXCEPTION(0x1e,t_trap_1e)
                    170: EXCEPTION(0x1f,t_trap_1f)
                    171: 
                    172: INTERRUPT(0x20)
                    173: INTERRUPT(0x21)
                    174: INTERRUPT(0x22)
                    175: INTERRUPT(0x23)
                    176: INTERRUPT(0x24)
                    177: INTERRUPT(0x25)
                    178: INTERRUPT(0x26)
                    179: INTERRUPT(0x27)
                    180: INTERRUPT(0x28)
                    181: INTERRUPT(0x29)
                    182: INTERRUPT(0x2a)
                    183: INTERRUPT(0x2b)
                    184: INTERRUPT(0x2c)
                    185: INTERRUPT(0x2d)
                    186: INTERRUPT(0x2e)
                    187: INTERRUPT(0x2f)
                    188: 
                    189: INTERRUPT(0x30)
                    190: INTERRUPT(0x31)
                    191: INTERRUPT(0x32)
                    192: INTERRUPT(0x33)
                    193: INTERRUPT(0x34)
                    194: INTERRUPT(0x35)
                    195: INTERRUPT(0x36)
                    196: INTERRUPT(0x37)
                    197: INTERRUPT(0x38)
                    198: INTERRUPT(0x39)
                    199: INTERRUPT(0x3a)
                    200: INTERRUPT(0x3b)
                    201: INTERRUPT(0x3c)
                    202: INTERRUPT(0x3d)
                    203: INTERRUPT(0x3e)
                    204: INTERRUPT(0x3f)
                    205: 
                    206: INTERRUPT(0x40)
                    207: INTERRUPT(0x41)
                    208: INTERRUPT(0x42)
                    209: INTERRUPT(0x43)
                    210: INTERRUPT(0x44)
                    211: INTERRUPT(0x45)
                    212: INTERRUPT(0x46)
                    213: INTERRUPT(0x47)
                    214: INTERRUPT(0x48)
                    215: INTERRUPT(0x49)
                    216: INTERRUPT(0x4a)
                    217: INTERRUPT(0x4b)
                    218: INTERRUPT(0x4c)
                    219: INTERRUPT(0x4d)
                    220: INTERRUPT(0x4e)
                    221: INTERRUPT(0x4f)
                    222: 
                    223: INTERRUPT(0x50)
                    224: INTERRUPT(0x51)
                    225: INTERRUPT(0x52)
                    226: INTERRUPT(0x53)
                    227: INTERRUPT(0x54)
                    228: INTERRUPT(0x55)
                    229: INTERRUPT(0x56)
                    230: INTERRUPT(0x57)
                    231: INTERRUPT(0x58)
                    232: INTERRUPT(0x59)
                    233: INTERRUPT(0x5a)
                    234: INTERRUPT(0x5b)
                    235: INTERRUPT(0x5c)
                    236: INTERRUPT(0x5d)
                    237: INTERRUPT(0x5e)
                    238: INTERRUPT(0x5f)
                    239: 
                    240: INTERRUPT(0x60)
                    241: INTERRUPT(0x61)
                    242: INTERRUPT(0x62)
                    243: INTERRUPT(0x63)
                    244: INTERRUPT(0x64)
                    245: INTERRUPT(0x65)
                    246: INTERRUPT(0x66)
                    247: INTERRUPT(0x67)
                    248: INTERRUPT(0x68)
                    249: INTERRUPT(0x69)
                    250: INTERRUPT(0x6a)
                    251: INTERRUPT(0x6b)
                    252: INTERRUPT(0x6c)
                    253: INTERRUPT(0x6d)
                    254: INTERRUPT(0x6e)
                    255: INTERRUPT(0x6f)
                    256: 
                    257: INTERRUPT(0x70)
                    258: INTERRUPT(0x71)
                    259: INTERRUPT(0x72)
                    260: INTERRUPT(0x73)
                    261: INTERRUPT(0x74)
                    262: INTERRUPT(0x75)
                    263: INTERRUPT(0x76)
                    264: INTERRUPT(0x77)
                    265: INTERRUPT(0x78)
                    266: INTERRUPT(0x79)
                    267: INTERRUPT(0x7a)
                    268: INTERRUPT(0x7b)
                    269: INTERRUPT(0x7c)
                    270: INTERRUPT(0x7d)
                    271: INTERRUPT(0x7e)
                    272: INTERRUPT(0x7f)
                    273: 
                    274: EXCEP_SPC_USR(0x80,syscall_int80)
                    275: INTERRUPT(0x81)
                    276: INTERRUPT(0x82)
                    277: INTERRUPT(0x83)
                    278: INTERRUPT(0x84)
                    279: INTERRUPT(0x85)
                    280: INTERRUPT(0x86)
                    281: INTERRUPT(0x87)
                    282: INTERRUPT(0x88)
                    283: INTERRUPT(0x89)
                    284: INTERRUPT(0x8a)
                    285: INTERRUPT(0x8b)
                    286: INTERRUPT(0x8c)
                    287: INTERRUPT(0x8d)
                    288: INTERRUPT(0x8e)
                    289: INTERRUPT(0x8f)
                    290: 
                    291: INTERRUPT(0x90)
                    292: INTERRUPT(0x91)
                    293: INTERRUPT(0x92)
                    294: INTERRUPT(0x93)
                    295: INTERRUPT(0x94)
                    296: INTERRUPT(0x95)
                    297: INTERRUPT(0x96)
                    298: INTERRUPT(0x97)
                    299: INTERRUPT(0x98)
                    300: INTERRUPT(0x99)
                    301: INTERRUPT(0x9a)
                    302: INTERRUPT(0x9b)
                    303: INTERRUPT(0x9c)
                    304: INTERRUPT(0x9d)
                    305: INTERRUPT(0x9e)
                    306: INTERRUPT(0x9f)
                    307: 
                    308: INTERRUPT(0xa0)
                    309: INTERRUPT(0xa1)
                    310: INTERRUPT(0xa2)
                    311: INTERRUPT(0xa3)
                    312: INTERRUPT(0xa4)
                    313: INTERRUPT(0xa5)
                    314: INTERRUPT(0xa6)
                    315: INTERRUPT(0xa7)
                    316: INTERRUPT(0xa8)
                    317: INTERRUPT(0xa9)
                    318: INTERRUPT(0xaa)
                    319: INTERRUPT(0xab)
                    320: INTERRUPT(0xac)
                    321: INTERRUPT(0xad)
                    322: INTERRUPT(0xae)
                    323: INTERRUPT(0xaf)
                    324: 
                    325: INTERRUPT(0xb0)
                    326: INTERRUPT(0xb1)
                    327: INTERRUPT(0xb2)
                    328: INTERRUPT(0xb3)
                    329: INTERRUPT(0xb4)
                    330: INTERRUPT(0xb5)
                    331: INTERRUPT(0xb6)
                    332: INTERRUPT(0xb7)
                    333: INTERRUPT(0xb8)
                    334: INTERRUPT(0xb9)
                    335: INTERRUPT(0xba)
                    336: INTERRUPT(0xbb)
                    337: INTERRUPT(0xbc)
                    338: INTERRUPT(0xbd)
                    339: INTERRUPT(0xbe)
                    340: INTERRUPT(0xbf)
                    341: 
                    342: INTERRUPT(0xc0)
                    343: INTERRUPT(0xc1)
                    344: INTERRUPT(0xc2)
                    345: INTERRUPT(0xc3)
                    346: INTERRUPT(0xc4)
                    347: INTERRUPT(0xc5)
                    348: INTERRUPT(0xc6)
                    349: INTERRUPT(0xc7)
                    350: INTERRUPT(0xc8)
                    351: INTERRUPT(0xc9)
                    352: INTERRUPT(0xca)
                    353: INTERRUPT(0xcb)
                    354: INTERRUPT(0xcc)
                    355: INTERRUPT(0xcd)
                    356: INTERRUPT(0xce)
                    357: INTERRUPT(0xcf)
                    358: 
                    359: INTERRUPT(0xd0)
                    360: INTERRUPT(0xd1)
                    361: INTERRUPT(0xd2)
                    362: INTERRUPT(0xd3)
                    363: INTERRUPT(0xd4)
                    364: INTERRUPT(0xd5)
                    365: INTERRUPT(0xd6)
                    366: INTERRUPT(0xd7)
                    367: INTERRUPT(0xd8)
                    368: INTERRUPT(0xd9)
                    369: INTERRUPT(0xda)
                    370: INTERRUPT(0xdb)
                    371: INTERRUPT(0xdc)
                    372: INTERRUPT(0xdd)
                    373: INTERRUPT(0xde)
                    374: INTERRUPT(0xdf)
                    375: 
                    376: INTERRUPT(0xe0)
                    377: INTERRUPT(0xe1)
                    378: INTERRUPT(0xe2)
                    379: INTERRUPT(0xe3)
                    380: INTERRUPT(0xe4)
                    381: INTERRUPT(0xe5)
                    382: INTERRUPT(0xe6)
                    383: INTERRUPT(0xe7)
                    384: INTERRUPT(0xe8)
                    385: INTERRUPT(0xe9)
                    386: INTERRUPT(0xea)
                    387: INTERRUPT(0xeb)
                    388: INTERRUPT(0xec)
                    389: INTERRUPT(0xed)
                    390: INTERRUPT(0xee)
                    391: INTERRUPT(0xef)
                    392: 
                    393: INTERRUPT(0xf0)
                    394: INTERRUPT(0xf1)
                    395: INTERRUPT(0xf2)
                    396: INTERRUPT(0xf3)
                    397: INTERRUPT(0xf4)
                    398: INTERRUPT(0xf5)
                    399: INTERRUPT(0xf6)
                    400: INTERRUPT(0xf7)
                    401: INTERRUPT(0xf8)
                    402: INTERRUPT(0xf9)
                    403: INTERRUPT(0xfa)
                    404: INTERRUPT(0xfb)
                    405: INTERRUPT(0xfc)
                    406: INTERRUPT(0xfd)
                    407: INTERRUPT(0xfe)
                    408: EXCEPTION(0xff,t_preempt)
                    409: 

unix.superglobalmegacorp.com

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