]> git.saurik.com Git - apple/xnu.git/blame - osfmk/kern/syscall_sw.c
xnu-792.6.56.tar.gz
[apple/xnu.git] / osfmk / kern / syscall_sw.c
CommitLineData
1c79356b 1/*
91447636 2 * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved.
1c79356b
A
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
ff6e181a
A
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
e5568f75 12 *
ff6e181a
A
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
1c79356b
A
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
ff6e181a
A
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
1c79356b
A
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23/*
24 * @OSF_COPYRIGHT@
25 */
26/*
27 * Mach Operating System
28 * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University
29 * All Rights Reserved.
30 *
31 * Permission to use, copy, modify and distribute this software and its
32 * documentation is hereby granted, provided that both the copyright
33 * notice and this permission notice appear in all copies of the
34 * software, derivative works or modified versions, and any portions
35 * thereof, and that both notices appear in supporting documentation.
36 *
37 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
38 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
39 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
40 *
41 * Carnegie Mellon requests users of this software to return to
42 *
43 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
44 * School of Computer Science
45 * Carnegie Mellon University
46 * Pittsburgh PA 15213-3890
47 *
48 * any improvements or extensions that they make and grant Carnegie Mellon
49 * the rights to redistribute these changes.
50 */
51/*
52 */
53
54#include <mach/mach_types.h>
91447636 55#include <mach/mach_traps.h>
1c79356b
A
56
57#include <kern/syscall_sw.h>
58
59/* Forwards */
91447636 60
1c79356b
A
61
62/*
63 * To add a new entry:
64 * Add an "MACH_TRAP(routine, arg count)" to the table below.
65 *
66 * Add trap definition to mach/syscall_sw.h and
67 * recompile user library.
68 *
69 * WARNING: If you add a trap which requires more than 7
70 * parameters, mach/{machine}/syscall_sw.h and {machine}/trap.c
71 * and/or {machine}/locore.s may need to be modified for it
72 * to work successfully.
73 *
74 * WARNING: Don't use numbers 0 through -9. They (along with
75 * the positive numbers) are reserved for Unix.
76 */
77
78int kern_invalid_debug = 0;
79
80/* Include declarations of the trap functions. */
81
82#include <mach/mach_traps.h>
83#include <mach/mach_syscalls.h>
84#include <kern/syscall_subr.h>
85
86#include <kern/clock.h>
87#include <mach/mk_timer.h>
88
55e303ae 89mach_trap_t mach_trap_table[MACH_TRAP_TABLE_COUNT] = {
91447636
A
90/* 0 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
91/* 1 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
92/* 2 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
93/* 3 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
94/* 4 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
95/* 5 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
96/* 6 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
97/* 7 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
98/* 8 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
99/* 9 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
100/* 10 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
101/* 11 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
102/* 12 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
103/* 13 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
104/* 14 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
105/* 15 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
106/* 16 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
107/* 17 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
108/* 18 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
109/* 19 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
110/* 20 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
111/* 21 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
112/* 22 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
113/* 23 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
114/* 24 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
115/* 25 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
116/* 26 */ MACH_TRAP(mach_reply_port, 0, NULL, NULL),
117/* 27 */ MACH_TRAP(thread_self_trap, 0, NULL, NULL),
118/* 28 */ MACH_TRAP(task_self_trap, 0, NULL, NULL),
119/* 29 */ MACH_TRAP(host_self_trap, 0, NULL, NULL),
120/* 30 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
121/* 31 */ MACH_TRAP(mach_msg_trap, 7, munge_wwwwwww, munge_ddddddd),
122/* 32 */ MACH_TRAP(mach_msg_overwrite_trap, 8, munge_wwwwwwww, munge_dddddddd),
123/* 33 */ MACH_TRAP(semaphore_signal_trap, 1, munge_w, munge_d),
124/* 34 */ MACH_TRAP(semaphore_signal_all_trap, 1, munge_w, munge_d),
125/* 35 */ MACH_TRAP(semaphore_signal_thread_trap, 2, munge_ww, munge_dd),
126/* 36 */ MACH_TRAP(semaphore_wait_trap, 1, munge_w, munge_d),
127/* 37 */ MACH_TRAP(semaphore_wait_signal_trap, 2, munge_ww, munge_dd),
128/* 38 */ MACH_TRAP(semaphore_timedwait_trap, 3, munge_www, munge_ddd),
129/* 39 */ MACH_TRAP(semaphore_timedwait_signal_trap, 4, munge_wwww, munge_dddd),
130/* 40 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
131/* 41 */ MACH_TRAP(init_process, 0, NULL, NULL),
132/* 42 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
133/* 43 */ MACH_TRAP(map_fd, 5, munge_wwwww, munge_ddddd),
134/* 44 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
135/* 45 */ MACH_TRAP(task_for_pid, 3, munge_www, munge_ddd),
136/* 46 */ MACH_TRAP(pid_for_task, 2, munge_ww,munge_dd),
137/* 47 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
138/* 48 */ MACH_TRAP(macx_swapon, 4, munge_wwww, munge_dddd),
139/* 49 */ MACH_TRAP(macx_swapoff, 2, munge_ww, munge_dd),
140/* 50 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
141/* 51 */ MACH_TRAP(macx_triggers, 4, munge_wwww, munge_dddd),
142/* 52 */ MACH_TRAP(macx_backing_store_suspend, 1, munge_w, munge_d),
143/* 53 */ MACH_TRAP(macx_backing_store_recovery, 1, munge_w, munge_d),
144/* 54 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
145/* 55 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
146/* 56 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
147/* 57 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
148/* 58 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
149/* 59 */ MACH_TRAP(swtch_pri, 0, NULL, NULL),
150/* 60 */ MACH_TRAP(swtch, 0, NULL, NULL),
151/* 61 */ MACH_TRAP(thread_switch, 3, munge_www, munge_ddd),
152/* 62 */ MACH_TRAP(clock_sleep_trap, 5, munge_wwwww, munge_ddddd),
153/* 63 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
1c79356b 154/* traps 64 - 95 reserved (debo) */
91447636
A
155/* 64 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
156/* 65 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
157/* 66 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
158/* 67 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
159/* 68 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
160/* 69 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
161/* 70 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
162/* 71 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
163/* 72 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
164/* 73 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
165/* 74 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
166/* 75 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
167/* 76 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
168/* 77 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
169/* 78 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
170/* 79 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
171/* 80 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
172/* 81 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
173/* 82 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
174/* 83 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
175/* 84 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
176/* 85 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
177/* 86 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
178/* 87 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
179/* 88 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
180/* 89 */ MACH_TRAP(mach_timebase_info_trap, 1, munge_w, munge_d),
181/* 90 */ MACH_TRAP(mach_wait_until_trap, 2, munge_l, munge_d),
182/* 91 */ MACH_TRAP(mk_timer_create_trap, 0, NULL, NULL),
183/* 92 */ MACH_TRAP(mk_timer_destroy_trap, 1, munge_w, munge_d),
184/* 93 */ MACH_TRAP(mk_timer_arm_trap, 3, munge_wl, munge_dd),
185/* 94 */ MACH_TRAP(mk_timer_cancel_trap, 2, munge_ww, munge_dd),
186/* 95 */ MACH_TRAP(mk_timebase_info_trap, 5, munge_wwwww, munge_ddddd),
1c79356b 187/* traps 64 - 95 reserved (debo) */
91447636
A
188/* 96 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
189/* 97 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
190/* 98 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
191/* 99 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
1c79356b 192/* traps 100-107 reserved for iokit (esb) */
91447636
A
193/* 100 */ MACH_TRAP(iokit_user_client_trap, 8, munge_wwwwwwww, munge_dddddddd),
194/* 101 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
195/* 102 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
196/* 103 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
197/* 104 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
198/* 105 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
199/* 106 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
200/* 107 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
201/* traps 108-127 unused */
202/* 108 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
203/* 109 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
204/* 110 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
205/* 111 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
206/* 112 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
207/* 113 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
208/* 114 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
209/* 115 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
210/* 116 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
211/* 117 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
212/* 118 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
213/* 119 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
214/* 120 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
215/* 121 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
216/* 122 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
217/* 123 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
218/* 124 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
219/* 125 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
220/* 126 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
221/* 127 */ MACH_TRAP(kern_invalid, 0, NULL, NULL),
1c79356b
A
222};
223
224int mach_trap_count = (sizeof(mach_trap_table) / sizeof(mach_trap_table[0]));
225
1c79356b 226kern_return_t
91447636
A
227kern_invalid(
228 __unused struct kern_invalid_args *args)
1c79356b
A
229{
230 if (kern_invalid_debug) Debugger("kern_invalid mach trap");
231 return(KERN_INVALID_ARGUMENT);
232}
233