diff options
Diffstat (limited to 'boot-proxy-exc/mach_impl.c~')
-rw-r--r-- | boot-proxy-exc/mach_impl.c~ | 906 |
1 files changed, 906 insertions, 0 deletions
diff --git a/boot-proxy-exc/mach_impl.c~ b/boot-proxy-exc/mach_impl.c~ new file mode 100644 index 00000000..a5c53197 --- /dev/null +++ b/boot-proxy-exc/mach_impl.c~ @@ -0,0 +1,906 @@ +/* + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Zheng Da. + + This file is part of the GNU Hurd. + + The GNU Hurd is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + The GNU Hurd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the GNU Hurd; see the file COPYING. If not, write to + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/* This file implements the server-side RPC functions of mach_host. */ + +#include <string.h> +#include <mach.h> +#include <hurd.h> +#include <assert.h> + +#include "util.h" +#include "mach_proxy.h" +#include "list.h" + +/* Routine task_create */ +kern_return_t +S_task_create (mach_port_t target_task, boolean_t inherit_memory, + mach_port_t *child_task, mach_msg_type_name_t *child_taskPoly) +{ + struct task_info *target_task_pi; + task_t real_child_task; + task_t pseudo_child_task; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + err = task_create (target_task_pi->task_port, + inherit_memory, &real_child_task); + debug ("get a request from task %d: %s", + target_task_pi->task_port, strerror (err)); + ports_port_deref (target_task_pi); + if (err) + return err; + + err = create_pseudo_task (real_child_task, &pseudo_child_task); + if (err) + { + task_terminate (real_child_task); + return err; + } + + *child_task = pseudo_child_task; + *child_taskPoly = MACH_MSG_TYPE_COPY_SEND; + + debug ("new task: %d", real_child_task); + return err; +} + +/* Routine task_terminate */ +kern_return_t +S_task_terminate (mach_port_t target_task) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + err = task_terminate (target_task_pi->task_port); + debug ("get request from task %d: %s", + target_task_pi->task_port, strerror (err)); + ports_destroy_right (target_task_pi); + ports_port_deref (target_task_pi); + return err; +} + +/* Routine task_info */ +kern_return_t +S_task_info (mach_port_t target_task, int flavor, + task_info_t task_info_out, + mach_msg_type_number_t *task_info_outCnt) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + + err = task_info (target_task_pi->task_port, flavor, + task_info_out, task_info_outCnt); + debug ("%s", strerror (err)); + ports_port_deref (target_task_pi); + return err; +} + +/* Routine vm_allocate */ +kern_return_t +S_vm_allocate (mach_port_t target_task, vm_address_t *address, + vm_size_t size, boolean_t anywhere) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + + /* This should be enough. */ + err = vm_allocate (target_task_pi->task_port, address, size, anywhere); + debug ("request is from task %d, address: %d, size: %d, anywhere: %d, %s", + target_task_pi->task_port, *address, size, anywhere, strerror (err)); + ports_port_deref (target_task_pi); + return err; +} + +/* Routine vm_deallocate */ +kern_return_t +S_vm_deallocate (mach_port_t target_task, + vm_address_t address, vm_size_t size) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + err = vm_deallocate (target_task_pi->task_port, address, size); + debug ("get a request from task %d: %s", + target_task_pi->task_port, strerror (err)); + ports_port_deref (target_task_pi); + return err; +} + +/* Routine vm_protect */ +kern_return_t +S_vm_protect (mach_port_t target_task, vm_address_t address, + vm_size_t size, boolean_t set_maximum, + vm_prot_t new_protection) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + err = vm_protect (target_task_pi->task_port, address, + size, set_maximum, new_protection); + debug ("request is from task %d: %s", + target_task_pi->task_port, strerror (err)); + ports_port_deref (target_task_pi); + return err; +} + +/* Routine vm_inherit */ +kern_return_t +S_vm_inherit (mach_port_t target_task, vm_address_t address, + vm_size_t size, vm_inherit_t new_inheritance) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + err = vm_inherit (target_task_pi->task_port, address, + size, new_inheritance); + debug ("%s", strerror (err)); + ports_port_deref (target_task_pi); + return err; +} + +/* Routine vm_read */ +kern_return_t +S_vm_read (mach_port_t target_task, vm_address_t address, + vm_size_t size, vm_offset_t *data, + mach_msg_type_number_t *dataCnt) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + + err = vm_read (target_task_pi->task_port, address, size, data, dataCnt); + debug ("get a request from task %d: %s", + target_task_pi->task_port, strerror (err)); + ports_port_deref (target_task_pi); + /* The deallocation bit is set.*/ + return err; +} + +/* Routine vm_write */ +kern_return_t +S_vm_write (mach_port_t target_task, vm_address_t address, + vm_offset_t data, mach_msg_type_number_t dataCnt) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + err = vm_write (target_task_pi->task_port, address, data, dataCnt); + debug ("get a request from task %d: %s", + target_task_pi->task_port, strerror (err)); + ports_port_deref (target_task_pi); + /* the proxy get the mapped pages from the client, + * deallocate it here. */ + vm_deallocate (mach_task_self (), data, dataCnt); + return err; +} + +/* Routine vm_copy */ +kern_return_t +S_vm_copy (mach_port_t target_task, vm_address_t source_address, + vm_size_t size, vm_address_t dest_address) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + + err = vm_copy (target_task_pi->task_port, source_address, + size, dest_address); + debug ("%s", strerror (err)); + ports_port_deref (target_task_pi); + return err; +} + +/* Routine vm_region */ +kern_return_t +S_vm_region (mach_port_t target_task, vm_address_t *address, + vm_size_t *size, vm_prot_t *protection, + vm_prot_t *max_protection, vm_inherit_t *inheritance, + boolean_t *is_shared, mach_port_t *object_name, + vm_offset_t *offset) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + + err = vm_region (target_task_pi->task_port, address, size, protection, + max_protection, inheritance, is_shared, object_name, offset); + debug ("get a request from task %d: %s, object: %d", + target_task_pi->task_port, strerror (err), *object_name); + ports_port_deref (target_task_pi); + return err; +} + +/* Routine vm_statistics */ +kern_return_t +S_vm_statistics (mach_port_t target_task, vm_statistics_data_t *vm_stats) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + + err = vm_statistics (target_task_pi->task_port, vm_stats); + debug ("request is from task %d: %s", + target_task_pi->task_port, strerror (err)); + ports_port_deref (target_task_pi); + return err; +} + +/* Routine mach_ports_register */ +kern_return_t +S_mach_ports_register (mach_port_t target_task, + mach_port_array_t init_port_set, + mach_msg_type_number_t init_port_setCnt) +{ + debug (""); + assert (0); + // not used by Hurd + return EOPNOTSUPP; +} + +/* Routine mach_ports_lookup */ +kern_return_t +S_mach_ports_lookup (mach_port_t target_task, + mach_port_array_t *init_port_set, + mach_msg_type_number_t *init_port_setCnt) +{ + debug (""); + assert (0); + // not used by Hurd + return EOPNOTSUPP; +} + +/* Routine vm_set_default_memory_manager */ +kern_return_t +S_vm_set_default_memory_manager (mach_port_t host_priv, + mach_port_t *default_manager) +{ + extern mach_port_t defpager; + debug (""); + *default_manager = defpager; + return 0; +} + + +/* Routine xxx_task_info */ +kern_return_t +S_xxx_task_info (mach_port_t target_task, int flavor, + task_info_t task_info_out, + mach_msg_type_number_t *task_info_outCnt) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine xxx_host_info */ +kern_return_t +S_xxx_host_info (mach_port_t target_task, machine_info_data_t *info) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine xxx_slot_info */ +kern_return_t +S_xxx_slot_info (mach_port_t target_task, int slot, machine_slot_data_t *info) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine xxx_cpu_control */ +kern_return_t +S_xxx_cpu_control (mach_port_t target_task, int cpu, boolean_t running) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine task_suspend */ +kern_return_t +S_task_suspend (mach_port_t target_task) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + err = task_suspend (target_task_pi->task_port); + debug ("get request from task %d: %s", + target_task_pi->task_port, strerror (err)); + ports_port_deref (target_task_pi); + return err; +} + +/* Routine task_resume */ +kern_return_t +S_task_resume (mach_port_t target_task) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + + err = task_resume (target_task_pi->task_port); + debug ("get request from task %d: %s", + target_task_pi->task_port, strerror (err)); + ports_port_deref (target_task_pi); + return err; +} + +/* Routine task_get_special_port */ +kern_return_t +S_task_get_special_port (mach_port_t target_task, int which_port, + mach_port_t *special_port, + mach_msg_type_name_t *special_portPoly) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + + err = task_get_special_port (target_task_pi->task_port, + which_port, special_port); + debug ("request is from task %d (%d, %d): %s\n", + target_task_pi->task_port, which_port, *special_port, strerror (err)); + ports_port_deref (target_task_pi); + if (err) + return err; + *special_portPoly = MACH_MSG_TYPE_MOVE_SEND; + return err; +} + +/* Routine task_set_special_port */ +kern_return_t +S_task_set_special_port (mach_port_t target_task, int which_port, + mach_port_t special_port) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + + if (which_port == TASK_EXCEPTION_PORT) + { + struct port_info *new_exc_pi; + struct port_info *old_exc_pi; + mach_port_t old_user_exc_port; + mach_port_t new_exc_port; + + err = ports_create_port (exc_portclass, port_bucket, + sizeof (new_exc_pi), &new_exc_pi); + if (err) + { + ports_port_deref (target_task_pi); + return err; + } + new_exc_port = ports_get_send_right (new_exc_pi); + + mutex_lock (&target_task_pi->lock); + old_exc_pi = target_task_pi->exc_pi; + old_user_exc_port = target_task_pi->user_exc_port; + err = task_set_special_port (target_task_pi->task_port, + which_port, new_exc_port); + target_task_pi->user_exc_port = special_port; + target_task_pi->exc_pi = new_exc_pi; + mutex_unlock (&target_task_pi->lock); + + ports_port_deref (new_exc_pi); + if (old_user_exc_port) + mach_port_deallocate (mach_task_self (), old_user_exc_port); + if (old_exc_pi) + ports_destroy_right (old_exc_pi); + } + else + { + err = task_set_special_port (target_task_pi->task_port, + which_port, special_port); + debug ("get request from task %d (%d, %d): %s", + target_task_pi->task_port, which_port, + special_port, strerror (err)); + mach_port_deallocate (mach_task_self (), special_port); + } + ports_port_deref (target_task_pi); + return err; +} + +/* Routine task_ras_control */ +kern_return_t +S_task_ras_control (mach_port_t target_task, vm_address_t basepc, + vm_address_t boundspc, int flavor) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + err = task_ras_control (target_task_pi->task_port, basepc, boundspc, flavor); + debug ("%s", strerror (err)); + ports_port_deref (target_task_pi); + return err; +} + +/* Routine vm_map */ +kern_return_t +S_vm_map (mach_port_t target_task, vm_address_t *address, vm_size_t size, + vm_address_t mask, boolean_t anywhere, mach_port_t memory_object, + vm_offset_t offset, boolean_t copy, vm_prot_t cur_protection, + vm_prot_t max_protection, vm_inherit_t inheritance) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + err = vm_map (target_task_pi->task_port, address, size, mask, + anywhere, memory_object, offset, copy, + cur_protection, max_protection, inheritance); + debug ("request is from task %d, anywhere: %d: %s", + target_task_pi->task_port, anywhere, strerror (err)); + ports_port_deref (target_task_pi); + mach_port_deallocate (mach_task_self (), memory_object); + return err; +} + +/* Routine vm_machine_attribute */ +kern_return_t +S_vm_machine_attribute (mach_port_t target_task, vm_address_t address, + vm_size_t size, vm_machine_attribute_t attribute, + vm_machine_attribute_val_t *value) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + err = vm_machine_attribute (target_task_pi->task_port, address, + size, attribute, value); + debug ("%s", strerror (err)); + ports_port_deref (target_task_pi); + return err; +} + +/* Routine task_threads */ +kern_return_t +S_task_threads (mach_port_t target_task, thread_array_t *thread_list, + mach_msg_type_number_t *thread_listCnt) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + target_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + + // TODO: use move send + err = task_threads (target_task_pi->task_port, + thread_list, thread_listCnt); + debug ("get a request from task %d: %s", + target_task_pi->task_port, strerror (err)); +// info ("task_threads: %s, number of threads: %d", +// strerror (err), *thread_listCnt); + ports_port_deref (target_task_pi); + return err; +} + +/* Routine thread_create */ +kern_return_t +S_thread_create (mach_port_t parent_task, mach_port_t *child_thread, + mach_msg_type_name_t *child_threadPoly) +{ + struct task_info *target_task_pi; + error_t err; + + target_task_pi = ports_lookup_port (port_bucket, + parent_task, task_portclass); + if (target_task_pi == NULL) + return EOPNOTSUPP; + err = thread_create (target_task_pi->task_port, child_thread); + debug ("get a request from task %d: thread port: %d: %s", + target_task_pi->task_port, *child_thread, strerror (err)); + ports_port_deref (target_task_pi); + *child_threadPoly = MACH_MSG_TYPE_MOVE_SEND; + return err; +} + +////////////////////it doesn't forward thread request//////////////// + +/* Routine thread_suspend */ +kern_return_t +S_thread_suspend (mach_port_t target_thread) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine thread_resume */ +kern_return_t +S_thread_resume (mach_port_t target_thread) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine thread_abort */ +kern_return_t +S_thread_abort (mach_port_t target_thread) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine xxx_thread_get_state */ +kern_return_t +S_xxx_thread_get_state (mach_port_t target_thread, int flavor, + thread_state_t old_state, + mach_msg_type_number_t *old_stateCnt) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine xxx_thread_set_state */ +kern_return_t +S_xxx_thread_set_state (mach_port_t target_thread, int flavor, + thread_state_t new_state, + mach_msg_type_number_t new_stateCnt) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine xxx_thread_info */ +kern_return_t +S_xxx_thread_info (mach_port_t target_thread, int flavor, + thread_info_t thread_info_out, + mach_msg_type_number_t *thread_info_outCnt) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine thread_get_special_port */ +kern_return_t +S_thread_get_special_port (mach_port_t thread, int which_port, + mach_port_t *special_port) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine thread_set_special_port */ +kern_return_t +S_thread_set_special_port (mach_port_t thread, int which_port, + mach_port_t special_port) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine thread_terminate */ +kern_return_t +S_thread_terminate (mach_port_t target_thread) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine thread_get_state */ +kern_return_t +S_thread_get_state (mach_port_t target_thread, int flavor, + thread_state_t old_state, + mach_msg_type_number_t *old_stateCnt) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine thread_set_state */ +kern_return_t +S_thread_set_state (mach_port_t target_thread, int flavor, + thread_state_t new_state, + mach_msg_type_number_t new_stateCnt) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine thread_info */ +kern_return_t +S_thread_info (mach_port_t target_thread, int flavor, + thread_info_t thread_info_out, + mach_msg_type_number_t *thread_info_outCnt) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/////////////////////RPC related to memory object//////////////////// +//////////////////they are not needed to be forwarded//////////////// + +/* SimpleRoutine memory_object_data_provided */ +kern_return_t +S_memory_object_data_provided (mach_port_t memory_control, + vm_offset_t offset, vm_offset_t data, + mach_msg_type_number_t dataCnt, + vm_prot_t lock_value) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* SimpleRoutine memory_object_data_unavailable */ +kern_return_t +S_memory_object_data_unavailable (mach_port_t memory_control, + vm_offset_t offset, vm_size_t size) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine memory_object_get_attributes */ +kern_return_t +S_memory_object_get_attributes (mach_port_t memory_control, + boolean_t *object_ready, boolean_t *may_cache, + memory_object_copy_strategy_t *copy_strategy) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* SimpleRoutine xxx_memory_object_lock_request */ +kern_return_t +S_xxx_memory_object_lock_request (mach_port_t memory_control, + vm_offset_t offset, vm_size_t size, + boolean_t should_clean, + boolean_t should_flush, + vm_prot_t lock_value, + mach_port_t reply_to, + mach_msg_type_name_t reply_toPoly) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* SimpleRoutine memory_object_lock_request */ +kern_return_t +S_memory_object_lock_request ( mach_port_t memory_control, + vm_offset_t offset, vm_size_t size, + memory_object_return_t should_return, + boolean_t should_flush, + vm_prot_t lock_value, mach_port_t reply_to, + mach_msg_type_name_t reply_toPoly) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* SimpleRoutine memory_object_data_error */ +kern_return_t +S_memory_object_data_error (mach_port_t memory_control, + vm_offset_t offset, vm_size_t size, + kern_return_t error_value) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* SimpleRoutine memory_object_set_attributes */ +kern_return_t +S_memory_object_set_attributes (mach_port_t memory_control, + boolean_t object_ready, boolean_t may_cache, + memory_object_copy_strategy_t copy_strategy) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* SimpleRoutine memory_object_destroy */ +kern_return_t +S_memory_object_destroy (mach_port_t memory_control, kern_return_t reason) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* SimpleRoutine memory_object_data_supply */ +kern_return_t +S_memory_object_data_supply (mach_port_t memory_control, + vm_offset_t offset, vm_offset_t data, + mach_msg_type_number_t dataCnt, + vm_prot_t lock_value, boolean_t precious, + mach_port_t reply_to, + mach_msg_type_name_t reply_toPoly) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* SimpleRoutine memory_object_ready */ +kern_return_t +S_memory_object_ready (mach_port_t memory_control, boolean_t may_cache, + memory_object_copy_strategy_t copy_strategy) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* SimpleRoutine memory_object_change_attributes */ +kern_return_t +S_memory_object_change_attributes (mach_port_t memory_control, + boolean_t may_cache, + memory_object_copy_strategy_t copy_strategy, + mach_port_t reply_to, + mach_msg_type_name_t reply_toPoly) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +///////////////////////RPCs related to emulation///////////////////// +//////////////////////subhurd doesn't support it.//////////////////// + +/* Routine task_get_emulation_vector */ +kern_return_t +S_task_get_emulation_vector (mach_port_t task, int *vector_start, + emulation_vector_t *emulation_vector, + mach_msg_type_number_t *emulation_vectorCnt) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine task_set_emulation_vector */ +kern_return_t +S_task_set_emulation_vector (mach_port_t task, int vector_start, + emulation_vector_t emulation_vector, + mach_msg_type_number_t emulation_vectorCnt) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine xxx_task_get_emulation_vector */ +kern_return_t +S_xxx_task_get_emulation_vector (mach_port_t task, int *vector_start, + emulation_vector_t emulation_vector, + mach_msg_type_number_t *emulation_vectorCnt) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine xxx_task_set_emulation_vector */ +kern_return_t +S_xxx_task_set_emulation_vector (mach_port_t task, int vector_start, + emulation_vector_t emulation_vector, + mach_msg_type_number_t emulation_vectorCnt) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} + +/* Routine task_set_emulation */ +kern_return_t +S_task_set_emulation (mach_port_t target_port, + vm_address_t routine_entry_pt, int routine_number) +{ + debug (""); + assert (0); + return EOPNOTSUPP; +} |