]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/kern/syscall_sw.c
xnu-2050.22.13.tar.gz
[apple/xnu.git] / osfmk / kern / syscall_sw.c
index ab27953213c99321a26cf6ef5be77d04c54ab842..9abedea98eb33fd83f125dd4bd6a4ea0e1ed0ff6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2005 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
@@ -60,6 +60,7 @@
 #include <mach/mach_traps.h>
 
 #include <kern/syscall_sw.h>
+#include <sys/munge.h>
 
 /* Forwards */
 
  *
  * WARNING:    Don't use numbers 0 through -9.  They (along with
  *             the positive numbers) are reserved for Unix.
+ *
+ * WARNING:    The 'arg_count' parameter in the list below is poorly named.
+ *             It doesn't refer to the number of arguments the trap takes -
+ *             it actually refers to the number of 32-bit words that need
+ *             to be copied in from userspace.  The munging of words to trap
+ *             arguments is done in mach_call_munger().
  */
 
 int kern_invalid_debug = 0;
@@ -91,7 +98,7 @@ int kern_invalid_debug = 0;
 #include <kern/clock.h>
 #include <mach/mk_timer.h>
 
-mach_trap_t    mach_trap_table[MACH_TRAP_TABLE_COUNT] = {
+const mach_trap_t      mach_trap_table[MACH_TRAP_TABLE_COUNT] = {
 /* 0 */                MACH_TRAP(kern_invalid, 0, NULL, NULL),
 /* 1 */                MACH_TRAP(kern_invalid, 0, NULL, NULL),
 /* 2 */                MACH_TRAP(kern_invalid, 0, NULL, NULL),
@@ -102,20 +109,20 @@ mach_trap_t       mach_trap_table[MACH_TRAP_TABLE_COUNT] = {
 /* 7 */                MACH_TRAP(kern_invalid, 0, NULL, NULL),
 /* 8 */                MACH_TRAP(kern_invalid, 0, NULL, NULL),
 /* 9 */                MACH_TRAP(kern_invalid, 0, NULL, NULL),
-/* 10 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
+/* 10 */       MACH_TRAP(_kernelrpc_mach_vm_allocate_trap, 5, munge_wwlw, munge_dddd),
 /* 11 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
-/* 12 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
+/* 12 */       MACH_TRAP(_kernelrpc_mach_vm_deallocate_trap, 5, munge_wll, munge_ddd),
 /* 13 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
-/* 14 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
+/* 14 */       MACH_TRAP(_kernelrpc_mach_vm_protect_trap, 7, munge_wllww, munge_ddddd),
 /* 15 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
-/* 16 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
-/* 17 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
-/* 18 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
-/* 19 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
-/* 20 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
-/* 21 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
-/* 22 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
-/* 23 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
+/* 16 */       MACH_TRAP(_kernelrpc_mach_port_allocate_trap, 3, munge_www, munge_ddd),
+/* 17 */       MACH_TRAP(_kernelrpc_mach_port_destroy_trap, 2, munge_ww, munge_dd),
+/* 18 */       MACH_TRAP(_kernelrpc_mach_port_deallocate_trap, 2, munge_ww, munge_dd),
+/* 19 */       MACH_TRAP(_kernelrpc_mach_port_mod_refs_trap, 4, munge_wwww, munge_dddd),
+/* 20 */       MACH_TRAP(_kernelrpc_mach_port_move_member_trap, 3, munge_www, munge_ddd),
+/* 21 */       MACH_TRAP(_kernelrpc_mach_port_insert_right_trap, 4, munge_wwww, munge_dddd),
+/* 22 */       MACH_TRAP(_kernelrpc_mach_port_insert_member_trap, 3, munge_www, munge_ddd),
+/* 23 */       MACH_TRAP(_kernelrpc_mach_port_extract_member_trap, 3, munge_www, munge_ddd),
 /* 24 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
 /* 25 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
 /* 26 */       MACH_TRAP(mach_reply_port, 0, NULL, NULL),
@@ -133,15 +140,19 @@ mach_trap_t       mach_trap_table[MACH_TRAP_TABLE_COUNT] = {
 /* 38 */       MACH_TRAP(semaphore_timedwait_trap, 3, munge_www, munge_ddd),
 /* 39 */       MACH_TRAP(semaphore_timedwait_signal_trap, 4, munge_wwww, munge_dddd),
 /* 40 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
-/* 41 */       MACH_TRAP(init_process, 0, NULL, NULL),
+/* 41 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
 /* 42 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
+#if    !defined(CONFIG_EMBEDDED)
 /* 43 */       MACH_TRAP(map_fd, 5, munge_wwwww, munge_ddddd),
-/* 44 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
+#else
+/* 43 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
+#endif /* !defined(CONFIG_EMBEDDED) */
+/* 44 */       MACH_TRAP(task_name_for_pid, 3, munge_www, munge_ddd),
 /* 45 */       MACH_TRAP(task_for_pid, 3, munge_www, munge_ddd),
 /* 46 */       MACH_TRAP(pid_for_task, 2, munge_ww,munge_dd),
 /* 47 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
-/* 48 */       MACH_TRAP(macx_swapon, 4, munge_wwww, munge_dddd),
-/* 49 */       MACH_TRAP(macx_swapoff, 2, munge_ww, munge_dd),
+/* 48 */       MACH_TRAP(macx_swapon, 5, munge_lwww, munge_dddd),
+/* 49 */       MACH_TRAP(macx_swapoff, 3, munge_lw, munge_dd),
 /* 50 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
 /* 51 */       MACH_TRAP(macx_triggers, 4, munge_wwww, munge_dddd),
 /* 52 */       MACH_TRAP(macx_backing_store_suspend, 1, munge_w, munge_d),
@@ -150,7 +161,7 @@ mach_trap_t mach_trap_table[MACH_TRAP_TABLE_COUNT] = {
 /* 55 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
 /* 56 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
 /* 57 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
-/* 58 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
+/* 58 */       MACH_TRAP(pfz_exit, 0, NULL, NULL),
 /* 59 */       MACH_TRAP(swtch_pri, 0, NULL, NULL),
 /* 60 */       MACH_TRAP(swtch, 0, NULL, NULL),
 /* 61 */       MACH_TRAP(thread_switch, 3, munge_www, munge_ddd),
@@ -188,7 +199,7 @@ mach_trap_t mach_trap_table[MACH_TRAP_TABLE_COUNT] = {
 /* 92 */       MACH_TRAP(mk_timer_destroy_trap, 1, munge_w, munge_d),
 /* 93 */       MACH_TRAP(mk_timer_arm_trap, 3, munge_wl, munge_dd),
 /* 94 */       MACH_TRAP(mk_timer_cancel_trap, 2, munge_ww, munge_dd),         
-/* 95 */       MACH_TRAP(mk_timebase_info_trap, 5, munge_wwwww, munge_ddddd),          
+/* 95 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),         
 /* traps 64 - 95 reserved (debo) */
 /* 96 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
 /* 97 */       MACH_TRAP(kern_invalid, 0, NULL, NULL),
@@ -226,6 +237,142 @@ mach_trap_t       mach_trap_table[MACH_TRAP_TABLE_COUNT] = {
 /* 127 */      MACH_TRAP(kern_invalid, 0, NULL, NULL),                 
 };
 
+const char * mach_syscall_name_table[MACH_TRAP_TABLE_COUNT] = {
+/* 0 */                "kern_invalid",
+/* 1 */                "kern_invalid",
+/* 2 */                "kern_invalid",
+/* 3 */                "kern_invalid",
+/* 4 */                "kern_invalid",
+/* 5 */                "kern_invalid",
+/* 6 */                "kern_invalid",
+/* 7 */                "kern_invalid",
+/* 8 */                "kern_invalid",
+/* 9 */                "kern_invalid",
+/* 10 */       "_kernelrpc_mach_vm_allocate_trap",
+/* 11 */       "kern_invalid",
+/* 12 */       "_kernelrpc_mach_vm_deallocate_trap",
+/* 13 */       "kern_invalid",
+/* 14 */       "_kernelrpc_mach_vm_protect_trap",
+/* 15 */       "kern_invalid",
+/* 16 */       "_kernelrpc_mach_port_allocate_trap",
+/* 17 */       "_kernelrpc_mach_port_destroy_trap",
+/* 18 */       "_kernelrpc_mach_port_deallocate_trap",
+/* 19 */       "_kernelrpc_mach_port_mod_refs_trap",
+/* 20 */       "_kernelrpc_mach_port_move_member_trap",
+/* 21 */       "_kernelrpc_mach_port_insert_right_trap",
+/* 22 */       "_kernelrpc_mach_port_insert_member_trap",
+/* 23 */       "_kernelrpc_mach_port_extract_member_trap",
+/* 24 */       "kern_invalid",
+/* 25 */       "kern_invalid",
+/* 26 */       "mach_reply_port",
+/* 27 */       "thread_self_trap",
+/* 28 */       "task_self_trap",
+/* 29 */       "host_self_trap",
+/* 30 */       "kern_invalid",
+/* 31 */       "mach_msg_trap",
+/* 32 */       "mach_msg_overwrite_trap",
+/* 33 */       "semaphore_signal_trap",
+/* 34 */       "semaphore_signal_all_trap",
+/* 35 */       "semaphore_signal_thread_trap",
+/* 36 */       "semaphore_wait_trap",
+/* 37 */       "semaphore_wait_signal_trap",
+/* 38 */       "semaphore_timedwait_trap",
+/* 39 */       "semaphore_timedwait_signal_trap",
+/* 40 */       "kern_invalid",
+/* 41 */       "kern_invalid",
+/* 42 */       "kern_invalid",
+/* 43 */       "map_fd",
+/* 44 */       "task_name_for_pid",
+/* 45 */       "task_for_pid",
+/* 46 */       "pid_for_task",
+/* 47 */       "kern_invalid",
+/* 48 */       "macx_swapon",
+/* 49 */       "macx_swapoff",
+/* 50 */       "kern_invalid",
+/* 51 */       "macx_triggers",
+/* 52 */       "macx_backing_store_suspend",
+/* 53 */       "macx_backing_store_recovery",
+/* 54 */       "kern_invalid",
+/* 55 */       "kern_invalid",
+/* 56 */       "kern_invalid",
+/* 57 */       "kern_invalid",
+/* 58 */       "pfz_exit",
+/* 59 */       "swtch_pri",
+/* 60 */       "swtch",
+/* 61 */       "thread_switch",
+/* 62 */       "clock_sleep_trap",
+/* 63 */       "kern_invalid",
+/* traps 64 - 95 reserved (debo) */
+/* 64 */       "kern_invalid",
+/* 65 */       "kern_invalid",
+/* 66 */       "kern_invalid",
+/* 67 */       "kern_invalid",
+/* 68 */       "kern_invalid",
+/* 69 */       "kern_invalid",
+/* 70 */       "kern_invalid",
+/* 71 */       "kern_invalid",
+/* 72 */       "kern_invalid",
+/* 73 */       "kern_invalid",
+/* 74 */       "kern_invalid",
+/* 75 */       "kern_invalid",
+/* 76 */       "kern_invalid",
+/* 77 */       "kern_invalid",
+/* 78 */       "kern_invalid",
+/* 79 */       "kern_invalid",
+/* 80 */       "kern_invalid",
+/* 81 */       "kern_invalid",
+/* 82 */       "kern_invalid",
+/* 83 */       "kern_invalid",
+/* 84 */       "kern_invalid",
+/* 85 */       "kern_invalid",
+/* 86 */       "kern_invalid",
+/* 87 */       "kern_invalid",
+/* 88 */       "kern_invalid",
+/* 89 */       "mach_timebase_info_trap",
+/* 90 */       "mach_wait_until_trap",
+/* 91 */       "mk_timer_create_trap",
+/* 92 */       "mk_timer_destroy_trap",
+/* 93 */       "mk_timer_arm_trap",
+/* 94 */       "mk_timer_cancel_trap",
+/* 95 */       "kern_invalid",
+/* traps 64 - 95 reserved (debo) */
+/* 96 */       "kern_invalid",
+/* 97 */       "kern_invalid",
+/* 98 */       "kern_invalid",
+/* 99 */       "kern_invalid",
+/* traps 100-107 reserved for iokit (esb) */ 
+/* 100 */      "kern_invalid",
+/* 100 */      //"iokit_user_client_trap",
+/* 101 */      "kern_invalid",
+/* 102 */      "kern_invalid",
+/* 103 */      "kern_invalid",
+/* 104 */      "kern_invalid",
+/* 105 */      "kern_invalid",
+/* 106 */      "kern_invalid",
+/* 107 */      "kern_invalid",
+/* traps 108-127 unused */                     
+/* 108 */      "kern_invalid",
+/* 109 */      "kern_invalid",
+/* 110 */      "kern_invalid",
+/* 111 */      "kern_invalid",
+/* 112 */      "kern_invalid",
+/* 113 */      "kern_invalid",
+/* 114 */      "kern_invalid",
+/* 115 */      "kern_invalid",
+/* 116 */      "kern_invalid",
+/* 117 */      "kern_invalid",
+/* 118 */      "kern_invalid",
+/* 119 */      "kern_invalid",
+/* 120 */      "kern_invalid",
+/* 121 */      "kern_invalid",
+/* 122 */      "kern_invalid",
+/* 123 */      "kern_invalid",
+/* 124 */      "kern_invalid",
+/* 125 */      "kern_invalid",
+/* 126 */      "kern_invalid",
+/* 127 */      "kern_invalid",
+};
+
 int    mach_trap_count = (sizeof(mach_trap_table) / sizeof(mach_trap_table[0]));
 
 kern_return_t