|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.