Annotation of XNU/osfmk/i386/idt.s, revision 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.