summaryrefslogtreecommitdiff
path: root/boot-proxy-exc
diff options
context:
space:
mode:
Diffstat (limited to 'boot-proxy-exc')
-rw-r--r--boot-proxy-exc/ChangeLog998
-rw-r--r--boot-proxy-exc/Makefile56
-rw-r--r--boot-proxy-exc/backup/ourmach.defs770
-rw-r--r--boot-proxy-exc/backup/ourmach_host.defs381
-rw-r--r--boot-proxy-exc/backup/ourmach_port.defs349
-rw-r--r--boot-proxy-exc/boot.c2150
-rw-r--r--boot-proxy-exc/boot_script.c791
-rw-r--r--boot-proxy-exc/boot_script.h116
-rw-r--r--boot-proxy-exc/exc_impl.c69
-rw-r--r--boot-proxy-exc/frank1.ld94
-rw-r--r--boot-proxy-exc/frankemul.ld107
-rw-r--r--boot-proxy-exc/list.c52
-rw-r--r--boot-proxy-exc/list.h40
-rw-r--r--boot-proxy-exc/mach-crt0.c158
-rw-r--r--boot-proxy-exc/mach_host_impl.c544
-rw-r--r--boot-proxy-exc/mach_impl.c909
-rw-r--r--boot-proxy-exc/mach_port_impl.c375
-rw-r--r--boot-proxy-exc/mach_proxy.c97
-rw-r--r--boot-proxy-exc/mach_proxy.h60
-rw-r--r--boot-proxy-exc/ourmach.defs772
-rw-r--r--boot-proxy-exc/ourmach_host.defs381
-rw-r--r--boot-proxy-exc/ourmach_port.defs349
-rw-r--r--boot-proxy-exc/sigvec.S23
-rw-r--r--boot-proxy-exc/syscall.S35
-rw-r--r--boot-proxy-exc/userland-boot.c122
-rw-r--r--boot-proxy-exc/util.h113
-rw-r--r--boot-proxy-exc/ux.c303
-rw-r--r--boot-proxy-exc/ux.h114
28 files changed, 0 insertions, 10328 deletions
diff --git a/boot-proxy-exc/ChangeLog b/boot-proxy-exc/ChangeLog
deleted file mode 100644
index 39dc9f7a..00000000
--- a/boot-proxy-exc/ChangeLog
+++ /dev/null
@@ -1,998 +0,0 @@
-2009-04-19 Zheng Da <zhengda1936@gmail.com>
-
- * boot.c (init_kernel_task): Create a pseudo kernel task.
- (main): Create the port bucket, initialize the kernel task and fork a
- thread after the arguments of boot are parsed.
-
-2009-04-19 Zheng Da <zhengda1936@gmail.com>
-
- * boot.c (thread_portclass): Removed variable.
- (is_user): Added variable.
- (options): Add option 'u'.
- (parse_opt): Handle option 'u'.
- (logfile): Added variabled.
- (main): Handle the cases differently when the user is root.
- (do_bootstrap_privileged_ports): Likewise.
- (bootstrap_compat): Likewise.
- (do_mach_notify_no_senders): Likewise.
- (ds_device_open): If the user is root, open the kernel device
- directly.
-
- * userland-boot.c (boot_script_task_create): Create the pseudo task
- port if it's the normal user.
- (boot_script_free_task): Deallocate the task port if it's root.
-
-2009-04-05 Zheng Da <zhengda1936@gmail.com>
-
- * Makefile (SRCS): Add list.c, mach_proxy.c.
- (COMMON-OBJS): Add ourmach_hostServer.o, ourmachServer.o,
- ourmach_portServer.o, excServer.o.
- (OBJS): Add mach_host_impl.o, mach_impl.o, mach_port_impl.o,
- exc_impl.o, list.o, mach_proxy.o.
- (LCLHDRS): Add util.h.
- (HURDLIBS): Add ports.
-
- * boot.c: Include hurd/ports.h, util.h, mach_proxy.h.
- (port_bucket): New variable.
- (task_portclass): Likewise.
- (thread_portclass): Likewise.
- (privileged_host_port): Removed variable.
- (master_device_port): Likewise.
- (pseudo_privileged_host_port): New variable.
- (request_server): Call mach_host_server() and mach_server().
- (mach_proxy_demuxer): New function.
- (mach_proxy_thread): Likewise.
- (options): Add option -p.
- (pager_file): New variable.
- (parse_opt): Handle option -p.
- (init_kernel_task): New function.
- (main): Create port bucket, port class, new thread;
- get default memory manager; get the pseudo privileged host port;
- set 'host-port' with the pseudo privileged host port.
- (do_bootstrap_privileged_ports): Return the pseudo privileged host port.
- (bootstrap_compat): Use the pseudo privileged host port.
- (ds_device_open): Return D_NO_SUCH_DEVICE if the device isn't specified.
- (do_mach_notify_no_senders): Call ports_do_mach_notify_no_senders();
- check the pseudo privileged host port.
-
- * boot_script.c (add_arg): Convert 'cmd->args' to 'void *' pointer first.
- (sym_enter): Convert 'symtab' to 'void *' pointer first.
- (boot_script_parse_line): Convert 'cmds' to to 'void *' pointer first;
- Convert 'cmd->exec_funcs' to to 'void *' pointer first.
-
- * exc_impl.c: New file. Implement the server-side RPCs of exc.
-
- * list.c: New file. Implement a double linked list.
-
- * list.h: New file. Define a double linked list.
-
- * mach_host_impl.c: New file. Implement the server-side RPCs of mach_host.
-
- * mach_impl.c: New file. Implement the server-side RPCs of mach.
-
- * mach_port_impl.c: New file. Implement the server-side RPCs of mach_port.
-
- * mach_proxy.c: New file.
-
- * mach_proxy.h: New file.
-
- * ourmach.defs: New file. A modified mach/mach.defs.
-
- * ourmach_host.defs: New file. A modified mach/mach_host.defs.
-
- * ourmach_port.defs: New file. A modified mach/mach_port.defs.
-
- * userland-boot.c: Include mach_proxy.h and util.h.
- (boot_script_task_create): Create a pseudo task port.
- (boot_script_free_task): Don't deallocate the task port.
-
- * util.h: New file.
-
-2008-09-21 Zheng Da <zhengda1936@gmail.com>
-
- * boot.c (options): Change the long option and the description of
- its argument.
-
-2008-08-28 Zheng Da <zhengda1936@gmail.com>
-
- * boot.c: Add '-m' option.
- (dev_map): New structure.
- (dev_map_head): New variable.
- (add_dev_map): New function.
- (lookup_dev): New function.
- (parse_opt): Handle the '-m' option.
- (ds_device_open): Open the device from the device file.
-
-2006-03-15 Thomas Schwinge <tschwinge@gnu.org>
-
- * boot.c (boot_script_exec_cmd): Fix invalid lvalues.
-
-2003-01-04 Roland McGrath <roland@frob.com>
-
- * boot_script.c (boot_script_parse_line): Copy the file name into
- malloc'd storage.
- (add_arg): New arg TEXTLEN. Store malloc'd copy of TEXT.
- (boot_script_parse_line): Update callers.
-
-2002-06-13 Roland McGrath <roland@frob.com>
-
- * boot.c (ds_device_write): int -> size_t in store_write call.
- (ds_device_write_inband): Likewise.
-
-2002-06-08 Roland McGrath <roland@frob.com>
-
- * boot.c (S_io_identity): Use ino_t for FILENO.
-
-2002-05-31 Roland McGrath <roland@frob.com>
-
- * boot.c: Don't include "exec_S.h".
-
- * boot.c (boot_script_exec_cmd): Fix typos:
- {I386,ALPHA}_THREAD_STATE -> {i386,ALPHA}_THREAD_STATE_COUNT
-
-2002-05-28 Roland McGrath <roland@frob.com>
-
- * boot_script.c (boot_script_set_variable): Values int -> integer_t.
- (boot_script_define_function): Likewise.
- (boot_script_parse_line): Likewise.
- (struct sym, struct arg): Likewise.
- (boot_script_exec): Likewise.
- (builtin_symbols): Likewise.
- * boot.c (main): Likewise.
- * boot_script.h: Update decls.
-
- * boot.c (boot_script_exec_cmd)
- [I386_THREAD_STATE]: Conditionalize i386 thread setup code on this.
- [ALPHA_THREAD_STATE]: Add Alpha thread setup code.
- (set_mach_stack_args): Obsolete function removed.
-
- * boot.c (load_image): u_int -> vm_address_t
- (ds_xxx_device_get_status, ds_xxx_device_set_status): u_int -> size_t
- (S_io_restrict_auth, S_io_reauthenticate): Likewise.
- (ds_device_write, ds_device_read_inband): Likewise.
- (ds_device_get_status): Likewise.
- (ds_device_set_status): Likewise.
- (boot_script_exec_cmd): Likewise.
- (ds_device_read, ds_device_write_inband): Likewise.
- (ds_xxx_device_set_filter): Likewise.
- (ds_device_set_filter): Likewise.
-
-2002-05-13 Marcus Brinkmann <marcus@gnu.org>
-
- * boot.c: Include <version.h>
- (argp_program_version): New variable.
-
-2002-03-23 James A. Morrison <ja2morri@uwaterloo.ca>
-
- * boot.c (main): Use error, not perror and exit.
-
-2001-10-07 Neal H Walfield <neal@cs.uml.edu>
-
- * boot.c (main): Set the boot script variables based on
- the KERNEL_COMMAND_LINE value.
-
-2001-08-23 Roland McGrath <roland@frob.com>
-
- * boot.c (kernel_command_line): New variable.
- (options): Add --kernel-command-line/-K.
- (parse_opt): Parse it, set kernel_command_line.
- (main): If unset, default it to "argv[0] bootstrap_args bootdevice".
- Set ${kernel-command-line} boot script variable to kernel_command_line.
-
-2001-08-17 Neal H Walfield <neal@cs.uml.edu>
-
- * userland-boot.c (boot_script_task_create): Suspend the newly
- created task as the protocol requires.
- (boot_script_insert_right): Fix the error message.
-
-2001-08-17 Roland McGrath <roland@frob.com>
-
- * userland-boot.c (boot_script_insert_right): Take new result
- parameter for send right name in target task.
- (boot_script_insert_task_port): New function.
-
- * boot_script.h: Update those two decls.
- (VAL_TASK): New macro.
- * boot_script.c (VAL_SYM, VAL_FUNC): Increase these constants.
- (builtin_symbols): Use VAL_TASK for "task-create".
- (boot_script_exec): Update caller of boot_script_insert_right.
- Treat VAL_TASK like VAL_PORT, but call boot_script_insert_task_port.
-
- * boot_script.h: size_t -> unsigned int
- * boot_script.c: Don't #include <string.h>.
-
-2001-08-16 Roland McGrath <roland@frob.com>
-
- * userland-boot.c (boot_script_insert_right): New function.
- * boot_script.h: Declare it.
- * boot_script.c (boot_script_exec): Use that instead of
- mach_port_insert_right.
-
- * boot_script.h: Protect from multiple inclusion.
- (safe_gets): Remove decl.
-
- * boot_script.h (boot_script_exec_cmd): Change TASK arg type to task_t.
- * userland-boot.c: Likewise.
-
- * boot_script.h (struct cmd): Change `task' member type to `task_t'.
- (boot_script_task_create, boot_script_task_resume,
- boot_script_prompt_task_resume, boot_script_free_task): Declare new
- functions that callers must define.
- * userland-boot.c: Define those.
- * boot_script.c (create_task, resume_task, prompt_resume_task): Use
- those instead of direct Mach calls.
- (free_cmd): Likewise.
- (read_file): Function removed.
- (builtin_symbols): Remove the "read-file" element.
-
- * boot_script.h (boot_script_malloc, boot_script_free): Declare new
- functions that callers must define.
- * boot_script.c: All uses of malloc/free changed to use those instead.
- * userland-boot.c: New file. Defines them using malloc/free.
- * Makefile (SRCS, OBJS): Add it.
- * boot.c (boot_script_malloc, boot_script_free): Old cruft functions
- removed.
-
- * boot_script.c (boot_script_parse_line): Take new first argument HOOK.
- Store it in CMD->hook.
- (main): Update caller.
- (boot_script_exec): Pass CMD->hook as 1st arg to boot_script_exec_cmd.
- (boot_script_exec_cmd): Take new first argument HOOK.
- * boot.c (boot_script_exec_cmd): Likewise.
- * boot_script.h (struct cmd): New member `void *hook'.
- Update decls for HOOK arguments added.
-
-2001-02-25 Roland McGrath <roland@frob.com>
-
- * Makefile (ourdevice.defs): Loosen up regexp since some whitespace in
- the file changed.
-
-2000-12-21 Marcus Brinkmann <marcus@gnu.org>
-
- * boot.c (main): If malloc or realloc fails, print diagnostic
- message and exit.
- (queue_read): Change return type from void to kern_return_t.
- If malloc fails, return D_NO_MEMORY, otherwise D_SUCCESS (to simplify
- code flow, malloc before acquiring the queuelock).
- (ds_device_read): New variable err (local to the block in which it is
- used). If queue_read fails, pass through error.
- (ds_device_read_inband): Likewise.
- (S_io_read): Likewise.
- Reported by Igor Khavkine <i_khavki@alcor.concordia.ca>.
-
-2000-03-17 Roland McGrath <roland@baalperazim.frob.com>
-
- * boot.c (S_io_reauthenticate): Check mach_port_insert_right result
- with assert_perror.
-
-2000-03-17 Thomas Bushnell, BSG <tb@mit.edu>
-
- * boot.c (S_io_reauthenticate): Don't use MACH_MSG_TYPE_MAKE_SEND
- in Hurd RPC.
-
-2000-02-28 Roland McGrath <roland@baalperazim.frob.com>
-
- * boot.c (ds_device_get_status): Accept *STATUSLEN greater than needed.
-
-1999-09-13 Roland McGrath <roland@baalperazim.frob.com>
-
- * boot.c: Reverted changes related to io_map_segment.
-
-1999-09-07 Thomas Bushnell, BSG <tb@mit.edu>
-
- * boot.c (S_io_map_segment): New function.
-
-1999-07-11 Roland McGrath <roland@baalperazim.frob.com>
-
- * boot.c (ds_device_read, S_io_read): Fix sloppy bugs in last change.
-
-1999-07-06 Thomas Bushnell, BSG <tb@mit.edu>
-
- * boot.c (load_image): Use mmap instead of vm_allocate, when
- allocating in mach_task_self ().
- (boot_script_exec_cmd): Likewise.
- (set_mach_stack_args): Likewise.
- (read_reply): Likewise.
- (S_io_read): Likewise.
-
-1999-07-10 Roland McGrath <roland@baalperazim.frob.com>
-
- * boot.c: Add #include <sys/mman.h> for munmap decl.
-
-Mon Jul 5 20:04:06 1999 Thomas Bushnell, BSG <tb@mit.edu>
-
- * boot.c (load_image): Fix typo in cast. Reported by Yamashita
- TAKAO <jargon@lares.dti.ne.jp>.
-
-1999-07-03 Thomas Bushnell, BSG <tb@mit.edu>
-
- * boot.c (load_image): Use munmap instead of vm_deallocate when
- it's from our own task.
- (boot_script_read_file): Likewise.
- (boot_script_exec_cmd): Likewise.
- (set_mach_stack_args): Likewise.
- (ds_device_read_inband): Likewise.
-
-1999-03-20 Roland McGrath <roland@baalperazim.frob.com>
-
- * boot.c (S_term_get_peername): New function.
-
-1999-03-14 Roland McGrath <roland@baalperazim.frob.com>
-
- * boot.c: Fix typo in last change.
-
-1999-03-10 Roland McGrath <roland@baalperazim.frob.com>
-
- * boot.c (main): Only use real device name if root_store is for an
- enforced single run starting at the beginning of the device.
-
-1999-03-09 Roland McGrath <roland@baalperazim.frob.com>
-
- * boot.c (main): Add newline to error msg.
- Patch by Marcus Brinkmann <Marcus.Brinkmann@ruhr-uni-bochum.de>.
-
-1999-02-16 Roland McGrath <roland@baalperazim.frob.com>
-
- * boot.c (S_io_revoke): Add reply, replyPoly args.
-
-Tue Feb 16 05:06:12 1999 Thomas Bushnell, BSG <tb@mit.edu>
-
- * boot.c (S_io_revoke): New (unsupported) routine.
-
-1998-12-26 Roland McGrath <roland@baalperazim.frob.com>
-
- * boot.c (isig): New variable.
- (init_termstate): If it's set, set ISIG flag in c_lflag.
- (options): New option -I/--isig.
- (parse_opt): Make -I set `isig'.
- (boot_script_exec_cmd): Print out args as well as file name.
-
-1998-09-04 Roland McGrath <roland@baalperazim.frob.com>
-
- * boot_script.c: Include <string.h> instead of declaring memset here.
- Include <stdlib.h> instead of declaring malloc, free here.
-
-1997-07-08 Miles Bader <miles@gnu.ai.mit.edu>
-
- * boot_script.c (prompt_resume_task): Pass more than a single
- character buffer to safe_gets.
-
-Mon Jul 7 16:25:49 1997 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
-
- * boot.c: Include <fcntl.h> instead of <fcntlbits.h>. Suggested
- by Marcus G. Daniels (marcus@cathcart.sysc.pdx.edu).
-
-1997-06-20 Miles Bader <miles@gnu.ai.mit.edu>
-
- * boot.c (bootscript): Made global.
- (parse_opt): New function.
- (options, doc, args_doc): New variables.
- (bootscript_args): Now an array.
- (ds_device_open, ds_device_close, ds_device_write,
- ds_device_write_inband, ds_device_read, ds_device_read_inband,
- ds_device_get_status, ds_device_set_status, ds_device_map,
- ds_xxx_device_set_filter, ds_xxx_device_get_status,
- ds_xxx_device_set_status, ds_device_set_filter):
- Handle "pseudo-root" device.
- (pseudo_root, root_store): New variables.
- (main): Use argp to parse args, and implement the pseudo-root device.
- Include <argp.h> & <hurd/store.h>
- * Makefile (HURDLIBS): Include libstore & libshouldbeinlibc.
-
-Thu Apr 10 11:53:57 1997 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
-
- * boot.c: Don't include varargs.h.
- (set_mach_stack_args): Use stdarg instead of vararg.
-
-Mon Mar 17 13:12:45 1997 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
-
- * boot_script.c (boot_script_parse_line): Don't print gratuitous
- output noise.
-
-Thu Sep 12 16:28:47 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
-
- * Makefile (HURDLIBS): New variable.
- (boot): Delete special depedencies.
-
-Tue Aug 13 16:57:22 1996 Miles Bader <miles@gnu.ai.mit.edu>
-
- * Makefile (device.defs): Rule removed.
- (ourdevice.defs): Fix rule to work with Makeconf-generated device.defs.
-
-Tue Aug 13 15:09:45 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
-
- * Makefile (ourdevice.defs): Depend on local device.defs.
- (device.defs): New rule.
-
-Mon Aug 12 11:11:08 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
-
- * Makefile (ourdevice.defs): Find device.defs under
- install_includedir now.
-
- * Makefile (all): No longer build uxboot by default.
-
-Thu Aug 1 14:38:38 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
-
- * boot_script.h (safe_gets): Declare second parm as type `int'.
- * boot.c (safe_gets): Likewise.
-
-Sun Jul 7 21:10:08 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
-
- * boot.c (S_io_reauthenticate): Don't use unsafe MOVE_SEND in
- auth_server_authenticate.
-
-Fri May 10 16:11:49 1996 Miles Bader <miles@gnu.ai.mit.edu>
-
- * boot.c (S_io_identity): Typo.
-
-Fri May 10 09:18:53 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
-
- * boot.c (S_io_identity): New function.
-
-Thu May 9 18:57:34 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
-
- * boot.c (S_io_select): No longer has TAG parm.
-
- * boot.c (S_io_reauthenticate): Use new interface.
-
-Sun Apr 28 22:50:38 1996 Miles Bader <miles@gnu.ai.mit.edu>
-
- * boot.c (main): Use select instead of SIGIO.
-
-Mon Apr 15 12:57:29 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
-
- * Makefile (uxboot): Permit errors because people might not have
- the a.out-mach3 target installed, and that's OK for many users.
-
- * Makefile (uxboot.0): Find frank1.ld in #(srcdir).
-
- * boot_script.h (safe_gets): Add decl.
- * boot_script.c: Include <stdio.h>.
-
-Wed Apr 3 18:54:22 1996 Miles Bader <miles@gnu.ai.mit.edu>
-
- * ux.c (printf): Add %d.
-
-Wed Mar 27 11:30:29 1996 Miles Bader <miles@gnu.ai.mit.edu>
-
- * boot.c [notanymore] (S_tioctl_tiocgeta, S_tioctl_tiocseta,
- S_tioctl_tiocsetaf, term_modes, term_ccs, term_speeds):
- Functions & variables removed.
- * Makefile (COMMON-OBJS): Remove tcattr.o.
- (SRCS): Remove tcattr.c.
-
-Thu Mar 14 10:10:20 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
-
- * Makefile (boot): Depend on libthreads.so, nothing wrong with shared
- libs.
- (uxboot.0, uxboot.1): Use automatic vars in cmds instead of gratuitous
- redundancy.
- (LDFLAGS-uxboot.0): Remove useless indirection through variable.
-
-Wed Feb 14 16:50:05 1996 Miles Bader <miles@gnu.ai.mit.edu>
-
- * boot.c [!UX]
- (orig_tty_state): New variable.
- (init_termstate, restore_termstate): New hurd versions of these funcs.
- * ux.c (init_termstate, restore_termstate, term_sgb, localbits):
- Moved here from boot.c
-
-Tue Feb 13 18:49:26 1996 Miles Bader <miles@gnu.ai.mit.edu>
-
- * boot.c (load_image, boot_script_read_file, main): Use O_RDONLY,
- not 0 (kind of ironic, this...).
- (load_image): Give the filename with the error message (and a newline).
-
- * ux.h (O_RDONLY, O_WRONLY, O_RDWR): New macros.
-
- * ux.c, ux.h: New files.
- * boot.c: Move all the ux-specific grot into ux.c & ux.h.
- If UX is defined, include "ux.h", else define hurdish stuff.
- (main): Use get_privileged_ports instead of task_by_pid.
- (load_image, boot_script_read_file, main, do_mach_notify_no_senders,
- do_mach_notify_dead_name): Use host_exit instead of uxexit.
- (boot_script_read_file): Use host_stat instead of uxstat.
- (init_termstate, S_tioctl_tiocseta): Use sg_flags fld in struct sgttyb.
-
- * Makefile (all): Depend on `boot' and `uxboot'.
- (COMMON-OBJS, UX-OBJS): New macros.
- (OBJS): Inherit most names from $(COMMON-OBJS).
- (LCLHDRS): Add ux.h.
- (LDFLAGS): Use target-specific value.
- (uxboot.0-LDFLAGS): New macro (with contents from old LDFLAGS).
- (uxboot.o, uxboot.0): New targets.
- (uxboot): Target renamed from boot.a.
-
-Sun Dec 10 18:05:14 1995 Miles Bader <miles@gnu.ai.mit.edu>
-
- * boot.c (read_reply): Don't call clear_should_read(), just do
- things ourselves.
- (should_read_lock): Variable deleted.
- (service_sigio): Function deleted.
- (main): Use read_reply to service SIGIO again, not service_sigio.
-
- * boot.c (service_sigio): New function, replacing set_should_read.
- Calls read_reply() itself too.
- (unlock_readlock): New function.
- (ds_device_read, ds_device_read_inband, S_io_read): Call
- unlock_readlock instead of directly unlocking READLOCK.
- (request_server, main): Don't call read_reply() anymore.
-
- * boot.c (should_read): New variable.
- (main): SIGIO uses set_should_read instead of read_reply.
- Call read_reply() after sigpause() returns.
- (read_reply): Call clear_should_read(), and don't do anything if
- SHOULD_READ wasn't set.
- (set_should_read): New function.
- (clear_should_read): New function.
- (request_server): Call read_reply() before returning.
-
-Sat Dec 9 19:01:10 1995 Miles Bader <miles@gnu.ai.mit.edu>
-
- * boot.c (S_io_read, ds_device_read_inband, ds_device_read): Don't
- block SIGIO.
- (main): Don't trap SIGMSG & SIGEMSG.
-
-Mon Dec 4 23:54:18 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- * boot.c (main): Request no-senders notification on
- pseudo_master_device_port.
- Deallocate our send right to it when we no longer need it.
- (do_mach_notify_no_senders): Exit only when both pseudo_console and
- pseudo_master_device_port have no senders.
- (ds_device_read_inband): Unlock readlock properly.
-
-Thu Nov 30 15:58:47 1995 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
-
- * boot.c (readlock): New variable.
- (read_reply): Check FIONREAD before dequeueing QR so that we don't
- abandon requests. Lock READLOCK around FIONREAD/read pair.
- (ds_device_read): Lock READLOCK around FIONREAD/read pair.
- (ds_device_read_inband): Likewise.
- (S_io_read): Likewise.
-
-Nov 22 16:25:01 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- * boot.c (request_server): Don't call exec_server.
- (S_exec_*): Functions removed.
- (boot_script_task_port): Variable removed.
- (boot_script_task_*, boot_script_port_*): Functions removed.
-
-Tue Nov 14 12:07:24 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- * Makefile (OBJS): Remove execServer.o.
-
-Thu Sep 28 14:47:46 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- * boot_script.c (read_file): Pass CMD->path for file name.
- (CHECK_CMDLINE_LEN): Update ARGV pointers after reallocating the line
- buffer.
-
-Wed Sep 27 14:01:03 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- * boot.c (struct uxstat): New type.
- (uxfstat): Renamed from fstat; use struct uxstat * for arg.
- (boot_script_read_file): Use those.
- Return the memory object port, not zero.
-
- * boot.c (fstat): New syscall function.
-
- * boot_script.c (read_file): New function.
- (builtin_symbols): Add $(read-file) builtin.
- * boot_script.h (boot_script_read_file): Declare it.
- * boot.c (close): New syscall function.
- (defpager): New variable.
- (main): Set it up.
- (boot_script_read_file): New function.
- (useropen_dir): New variable.
- (useropen): New function.
- (load_image): Call it instead of open.
- (main): Grok -D arg to set useropen_dir.
-
-Sat Sep 23 00:53:51 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- * syscall.S: Restore entry SP before return.
-
- * boot.c (main): Use static const for constant strings.
- On boot script error, write script line with error msg.
-
- * boot_script.c (boot_script_parse_line): Ignore line beginning
- with #.
-
- * boot.c (S_io_pathconf): New function.
-
- * Makefile (LDFLAGS): Add -static.
-
-Fri Sep 22 14:14:23 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- * mach-crt0.c (__data_start): New variable.
-
-Tue Aug 29 10:41:29 1995 Michael I. Bushnell, p/BSG <mib@duality.gnu.ai.mit.edu>
-
- * boot.c (mig_dealloc_reply_port): Remove __ from call to
- mach_port_mod_refs.
- (main): Look for -d in bootstrap_args, not (nonexistent)
- boot_args. Remove `const' keyword from decl of MSG.
-
- * boot.c (sigblock, sigsetmask): New functions.
- (sigmask): New macro.
- (ds_device_read): Block SIGIO around critical section.
- (ds_device_read_inband): Likewise.
- (S_io_read): Likewise.
-
-Mon Aug 28 17:16:48 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- * boot_script.h, boot_script.c: Updated by Shantanu Goel, to
- accept action keywords only inside $(...) and only variable values
- inside ${...}.
- * boot.c: Updated for changes in boot_script.h protocol by
- Shantanu Goel.
- (main): Use boot_script_set_variable instead of magic variables.
- Under -d, pause between parsing bootscript and executing it.
-
-Wed Aug 23 16:08:04 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- New script-driven boot mechanism, mostly implemented by Shantanu Goel.
- * Makefile (SRCS): Add boot_script.c.
- (OBJS): Add boot_script.o.
- (LCLHDRS): New variable.
- (HURDLIBS): Variable removed.
- (boot): Depend on ../libthreads/libthreads.a.
- * boot_script.c, boot_script.h: New files.
- * boot.c (boot_like_kernel, boot_like_cmudef, boot_like_hurd):
- Variables removed.
- (main): Don't interpret switches. Instead of servers, take
- command line argument of boot script file name. Read the file and
- use boot_script functions to parse and execute its directives.
- (boot_script_*): New variables and functions for boot_script callbacks.
-
-Sun Jul 30 23:50:53 1995 Michael I. Bushnell, p/BSG <mib@geech.gnu.ai.mit.edu>
-
- * Makefile: DISTFILES -> DIST_FILES.
-
-Sat Jul 8 11:37:32 1995 Miles Bader <miles@churchy.gnu.ai.mit.edu>
-
- * boot.c (free_reply_ports, free_reply_ports_lock): New variables.
- (__mig_get_reply_port, __mig_put_reply_port, __mig_dealloc_reply_port,
- mig_get_reply_port, mig_put_reply_port, mig_dealloc_reply_port):
- Provide better versions of these routines that won't leak reply ports.
-
-Fri Jul 7 15:55:18 1995 Miles Bader <miles@churchy.gnu.ai.mit.edu>
-
- * mach-crt0.c: New file, from mach4-i386/libmach/standalone.
- * boot.c (mach_init_routine): New variable, wanted by mach-crt0.o.
- (__mig_get_reply_port, __mig_dealloc_reply_port, __mig_put_reply_port):
- New functions, to avoid using hurdish versions.
- * Makefile (OBJS): Add mach-crt0.o.
- (SRCS): Add mach-crt0.c.
- (LDFLAGS): Add -nostartfiles (as we now use mach-crt0.o).
-
-Thu Jul 6 15:30:18 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
-
- * Makefile (boot.1, boot.a): Use $(LD) and $(OBJCOPY) instead of
- explicit names.
-
- * boot.c: Include <mach/mig_support.h>.
- (S_io_reauthenticate): Cast first arg to mig_deallocate.
- (load_image): Cast second arg to read.
- * tcattr.c: Undo last change; add private decl of ioctl.
-
- * boot.c (bootdevice): Initialize to hard-coded `sd0a' instead of
- DEFAULT_BOOTDEVICE.
-
- * Makefile (all): Depend on boot.a too.
-
- * Makefile: Removed dependencies that are now automatically
- generated.
-
-Wed May 31 10:02:11 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- * Makefile (DISTFILES): New variable; include frank1.ld and
- frankemul.ld.
- (CPPFLAGS): Variable removed.
- (LDFLAGS): Append -T frank1.ld.
- (boot.1, boot.a): New targets.
-
- * syscall.S: Omit .globl decl for errno; it caused some as
- complaint.
-
-Mon May 22 11:48:58 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
-
- * sigvec.S: Remove copyright notice.
-
-Wed May 17 13:10:27 1995 Miles Bader <miles@churchy.gnu.ai.mit.edu>
-
- * boot.c (load_image): Make sure we actually allocate enough
- memory to read into, including the offset into the buffer at which
- the segment is read.
-
- * sigvec.S (sigreturn, _sigreturn, sigvec): Remove the explicit
- underscore prefixes from these names, now that we're using elf.
- Instead we use the various macros from <i386/asm.h>. Also, return
- errors correctly. [Also added a copyright notice]
-
-Sat May 13 03:37:24 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- * boot.c (load_image): Fixed alignment calculation in ELF segment
- loading.
-
- * syscall.S: Include i386/asm.h and use ENTRY and EXT macros,
- instead of explicit _s.
-
-Fri May 12 18:36:39 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- * boot.c (load_image): Grok ELF executables as well as a.out.
- (main): Load multiple servers. Suspend all but the first.
- The first gets an extra arg, its name for the task port of the
- second.
-
-Wed Apr 12 09:18:50 1995 Miles Bader <miles@churchy.gnu.ai.mit.edu>
-
- * Makefile: Don't try and install boot in /usr/local/bin.
-
-Wed Apr 5 17:25:19 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- * boot.c: Don't include <errno.h>. Define `errno' variable.
- * Makefile (SRCS): Add syscall.S.
- (OBJS): Add syscall.o.
- * syscall.S: Check for errors.
-
-Thu Jan 19 01:21:24 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- * boot.c (S_io_select): Updated to new io_select protocol.
-
-Fri Dec 9 01:23:22 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- * boot.c: Use mach_msg_type_number_t in place of unsigned int and
- int.
-
-Fri Nov 11 14:05:43 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
-
- * boot.c (main): Always set `f' flag (signifying "fake" because we
- aren't a real native bootstrap).
-
-Thu Nov 3 17:26:37 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
-
- * Makefile (boot.o): Depend on bootstrap_S.h.
-
-Fri Oct 28 17:08:12 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- * boot.c (main): Create the thread before setting it up.
- (bootstrap_compat): Make a send right for psuedo_master_device_port.
- (main): Explicitly clear NEWTASK's bootstrap port for boot_like_kernel.
- (main): Format strings for port names for boot_like_kernel.
-
-Fri Oct 28 15:26:48 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
-
- * boot.c (boot_like_kernel, boot_like_cmudef, boot_like_hurd): New
- global vars.
- (set_mach_stack_args): New function.
- (main): If the -k flag is given, set BOOT_LIKE_KERNEL.
- If the -p flag is given, set BOOT_LIKE_CMUDEF. If neither is
- given, set BOOT_LIKE_HURD.
- Only set a bootstrap port if BOOT_LIKE_CMUDEF or BOOT_LIKE_HURD.
- If BOOT_LIKE_KERNEL or BOOT_LIKE_CMUDEF, set up the stack the
- Mach way using set_mach_stack_args.
- (request_server): Declare and call bootstrap_server.
- (do_bootstrap_priveleged_ports, bootstrap_compat): New functions.
- * Makefile (OBJS): Require bootstrapServer.o.
- * bootstrap.defs: New file.
-
-Tue Aug 30 11:41:33 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
-
- * boot.c (S_io_reauthenticate): Use new authentication protocol.
-
-Mon Aug 22 13:43:32 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
-
- * boot.c: Include <cthreads.h>.
- (main): Run msg_thread fork; don't call
- mach_msg_server_timeout here. Use sigpause instead of getpid.
- (msg_thread): New function.
- (queuelock): New variable.
- (queue_read): Acquire queuelock.
- (read_reply): Acquire queuelock.
- * Makefile (HURDLIBS): New var to get threads.
-
-Thu Aug 18 18:04:36 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
-
- * boot.c (restore_termstate): New function.
- (do_mach_notify_no_senders): Call restore_termstate before exiting.
-
- * boot.c (main): New var `usagemsg'; print it if args are wrong.
- Allow flags and disk device to be given on command line.
- New var `bootfile'.
- (bootdevice, bootstrap_args): New vars.
- (load_image): Exit nicely if the startup file can't be found.
- (S_exec_startup): Use `bootdevice' instead of hardcoded name.
- Use `bootstrap_args' instead of hardcoded "-x".
- (main): Only do `pausing' hack if -d was provided.
-
- * Makefile (CPPFLAGS): Define DEFAULT_BOOTDEVICE.
-
- * Makefile (/usr/local/bin/boot): Depend on boot.
-
- * boot.c (S_termctty_open_terminal): New "function".
- (S_io_select): Added `rettype' arg.
-
-Sat Jul 23 02:58:05 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
-
- * Makefile (io-MIGSFLAGS): Renamed from ioMIGSFLAGS.
-
-Fri Jul 22 15:10:45 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
-
- * boot.c (request_server): Remove S_ from io_server and
- term_server.
-
-Thu Jul 21 19:00:36 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
-
- * Makefile: Rewritten to use new scheme.
- * boot.c: Include io_reply_U.h and device_reply_U.h instead
- of io_repl.h and device_reply.h.
-
-Wed Jul 20 13:19:45 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
-
- * boot.c: Comment out bits relating to tioctl interface.
- * Makefile: Likewise.
-
-Tue Jul 19 12:41:46 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
-
- * Makefile (boot): Don't use variable $(link) anymore.
-
-Tue Jul 5 14:19:36 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
-
- * Makefile (SRCS): New variable.
-
-Sun Jul 3 17:20:07 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
-
- * tcattr.c: New file.
- * boot.c (S_tioctl_tiocgeta): Call tcgetattr.
- (S_tioctl_tiocseta): Call tcsetattr.
- * Makefile (OBJS): Add tcattr.o.
- (DIST_FILES): Add tcattr.c.
-
-Fri Jul 1 11:16:27 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
-
- * boot.c (init_termstate): Enter raw mode here.
-
-Fri Jun 24 14:27:56 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
-
- * boot.c (S_term_open_ctty): Renamed from term_become_ctty.
- Deleted SIGPT arg. Add msg type arg for NEWTTY.
-
-Fri Jun 17 13:46:07 1994 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
-
- * boot.c (request_server): Remove S_ prefix from exec_server
- and notify_server.
-
-Fri Jun 17 00:12:16 1994 Roland McGrath (roland@geech.gnu.ai.mit.edu)
-
- * Makefile (boot.o): Depend on term_S.h.
-
-Tue Jun 14 01:28:10 1994 Roland McGrath (roland@geech.gnu.ai.mit.edu)
-
- * boot.c (request_server): Add S_ prefix to demuxer functions.
-
-Wed Jun 8 18:02:19 1994 Roland McGrath (roland@geech.gnu.ai.mit.edu)
-
- * boot.c (S_tioctl_tiocseta): Turn off ECHO.
- (S_io_select): Implement.
-
-Tue Jun 7 04:33:42 1994 Roland McGrath (roland@geech.gnu.ai.mit.edu)
-
- * Makefile (tioctlServer.o): Depend on ../hurd/ioctl_types.h.
-
-Mon Jun 6 20:33:39 1994 Roland McGrath (roland@geech.gnu.ai.mit.edu)
-
- * boot.c (authserver): New variable.
- (S_io_reauthenticate): Do auth_server_authenticate and throw away
- the returned info.
- (S_exec_init): Set authserver to the passed port.
-
-Sat Jun 4 02:32:03 1994 Roland McGrath (roland@geech.gnu.ai.mit.edu)
-
- * boot.c: Include term_S.h and tioctl_S.h.
- (S_term_getctty): New function.
- (S_term_*): Stub functions.
- (request_server): Use S_term_server.
-
- * Makefile (termServer.c term_S.h): New rule.
- (OBJS): Add termServer.o.
-
- * boot.c (S_exec_setexecdata, S_exec_exec): Fix prototypes.
-
-Tue May 17 18:44:29 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
-
- * boot.c (ds_device_write): DATA arg is char *; don't dereference
- it in call to write.
-
-Mon May 16 14:34:15 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
-
- * boot.c (fsname): New variable.
- (main): Set fsname to argv[1].
- (S_exec_startup): Include fsname in child's argv[0].
-
- * boot.c (init_termstate): Add forward declaration.
- (struct sigvec): Make SV_HANDLER member void (*)().
- (sigvec): Add declaration to avoid warning.
-
-Tue May 10 18:14:39 1994 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
-
- * boot.c (tioctl_tiocseta, tioctl_tiocsetw, tioctl_tiocsetf,
- tioctl_tiocgeta, init_termstate): New functions.
- (term_modes, term_ccs, term_speeds, term_sgb, localbits): Nev
- vars.
- Also added new bits from ioctl.h.
- (main): Call init_termstate.
- (request_server): Call tioctl_server.
- * Makefile (tioctlServer.c tioctl_S.h): New targets.
- (OBJS): Include tioctlServer.o.
- (boot.o): Depend on tioctl_S.h
-
-Fri May 6 13:56:58 1994 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
-
- * boot.c (main): Restore braindamage of yesterday relating to
- signals; that is, restore declaration of VEC and calls to sigvec.
- * Makefile (DIST_FILES): Add sigvec.S.
-
-Thu May 5 13:16:42 1994 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
-
- * Makefile (device_replyUser.c): Mention that this build
- device_reply.h as well.
- (boot.o): Add dependency on device_reply.h and io_repl.h.
-
- * boot.c: Include <stdlib.h> for malloc and free prototypes.
- Include <string.h> for bcopy and bzero prototypes.
- Include <stdio.h> for sprintf prototype.
- Include "device_reply.h" for its prototypes.
- Include "io_reply.h" for its prototypes.
- Declare return type for all the server functions that were lacking
- such.
- (sigpause): Declare type of MASK.
- (ioctl): Declare third arg to be generic pointer, not char *.
- (request_server): Declare MiG functions we call.
- (load_image): Delete unused variable STACKADDR.
- (main): Comment out declaration of VEC.
- Comment out calls to sigvec.
- Cast STARTPC in call to __mach_setup_thread.
- Delete unused variable TIMEOUT.
- (read_reply): Cast BUF correctly in call to ds_device_read_reply.
- (S_exec_startup): Delete unused variable DTABLE.
- (ds_device_write): Double cast arg to write to avoid warning.
- (S_io_read): Order args to vm_allocate properly; cast DATA arg.
- Check *datalen properly for unsigned type.
-
- * boot.c: Renamed _exit to uxexit to avoid library name clash.
- (do_mach_notify_dead_name, do_mach_notify_no_senders):
- Call uxexit instead of _exit.
-
- * boot.c (S_io_async, S_io_get_icky_async_id, S_io_map_cntl):
- Expect new type arg for returned port.
- (S_io_prenotify, S_io_postnotify): START and END args are now
- vm_offset_t.
-
- * boot.c: Change error_t to kern_return_t because error_t
- is now unsigned and conflicts with MiG's use of kern_return_t.
-
- * Makefile (io_S.h, ioServer.c): Punt mungio hack; use
- -DREPLY_PORTS.
- * boot.c: Changed all io server stubs to expect reply ports.
-
- * mungio: removed file.
- * Makefile (DIST_FILES): Removed mungio.
-
- * boot.c (load_image): Only read from the image file the actual
- amount being read, not that amount rounded to the nearest page.
- Otherwise, the first bit of the BSS will not be zero, but will be
- whatever is in the front of the symbol section of the a.out.
-
-Thu May 5 07:43:06 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
-
- * Makefile: Change uses of $(headers) to $(includedir).
-
-Mon May 2 16:47:49 1994 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
-
- * boot.c (S_io_readable): Implement io_readable fully.
-
-Fri Apr 1 17:55:38 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
-
- * Makefile (OBJS): Remove boot_machdep.o.
diff --git a/boot-proxy-exc/Makefile b/boot-proxy-exc/Makefile
deleted file mode 100644
index 33c475fb..00000000
--- a/boot-proxy-exc/Makefile
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright (C) 1993,94,95,96,97,2001 Free Software Foundation, Inc.
-# 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.
-
-dir := boot
-makemode := utility
-
-SRCS = mach-crt0.c boot.c ux.c sigvec.S syscall.S \
- boot_script.c userland-boot.c list.c mach_proxy.c
-COMMON-OBJS = notifyServer.o ourdeviceServer.o \
- ioServer.o io_replyUser.o device_replyUser.o \
- termServer.o bootstrapServer.o boot_script.o userland-boot.o \
- ourmach_hostServer.o ourmachServer.o ourmach_portServer.o excServer.o
-OBJS = boot.o mach_host_impl.o mach_impl.o mach_port_impl.o \
- exc_impl.o list.o mach_proxy.o $(COMMON-OBJS)
-UX-OBJS = mach-crt0.o uxboot.o sigvec.o syscall.o ux.o $(COMMON-OBJS)
-LCLHDRS = boot_script.h ux.h util.h
-target = boot
-io-MIGSFLAGS=-DREPLY_PORTS
-DIST_FILES=frank1.ld frankemul.ld
-HURDLIBS=store shouldbeinlibc threads ports
-
-include ../Makeconf
-
-#install: /usr/local/bin/uxboot
-#
-#/usr/local/bin/uxboot: uxboot
-# cp $< $@
-
-all: boot # uxboot
-
-ourdevice.defs: device.defs
- $(CPP) $(CPPFLAGS) -x c $< | sed -e '/out[ ]*device[ ]*:[ ]*device_t/s/device_t/mach_port_send_t/' > $@
-
-uxboot.o: boot.c
- $(COMPILE.c) -DUX $< -o $@
-
-uxboot.0: $(UX-OBJS) ../libthreads/libthreads.a
- $(LINK.o) -o $@ -static -nostartfiles -Wl,-T -Wl,$(srcdir)/frank1.ld $^
-uxboot.1: frankemul.ld uxboot.0
- $(LD) -o $@ -T $^
-uxboot: uxboot.1
- -$(OBJCOPY) -S --remove-section=.comment -O a.out-mach3 $< $@
diff --git a/boot-proxy-exc/backup/ourmach.defs b/boot-proxy-exc/backup/ourmach.defs
deleted file mode 100644
index 67d8475e..00000000
--- a/boot-proxy-exc/backup/ourmach.defs
+++ /dev/null
@@ -1,770 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1991,1990,1989,1988 Carnegie Mellon University.
- * Copyright (c) 1993,1994 The University of Utah and
- * the Computer Systems Laboratory (CSL).
- * All rights reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON, THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF
- * THIS SOFTWARE IN ITS "AS IS" CONDITION, AND DISCLAIM ANY LIABILITY
- * OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF
- * THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- */
-/*
- * Matchmaker definitions file for Mach kernel interface.
- */
-
-#ifdef MACH_KERNEL
-simport <kern/compat_xxx_defs.h>; /* for obsolete routines */
-#endif /* MACH_KERNEL */
-
-subsystem
-#if KERNEL_USER
- KernelUser
-#endif /* KERNEL_USER */
-#if KERNEL_SERVER
- KernelServer
-#endif /* KERNEL_SERVER */
- mach 2000;
-
-serverprefix S_;
-
-#ifdef KERNEL_USER
-userprefix r_;
-#endif /* KERNEL_USER */
-
-#include <mach/std_types.defs>
-#include <mach/mach_types.defs>
-
-skip; /* old port_allocate */
-skip; /* old port_deallocate */
-skip; /* old port_enable */
-skip; /* old port_disable */
-skip; /* old port_select */
-skip; /* old port_set_backlog */
-skip; /* old port_status */
-
-/*
- * Create a new task with an empty set of IPC rights,
- * and having an address space constructed from the
- * target task (or empty, if inherit_memory is FALSE).
- */
-routine task_create(
- target_task : task_t;
- inherit_memory : boolean_t;
- out child_task : mach_port_send_t);
-
-/*
- * Destroy the target task, causing all of its threads
- * to be destroyed, all of its IPC rights to be deallocated,
- * and all of its address space to be deallocated.
- */
-routine task_terminate(
- target_task : task_t);
-
-/*
- * Get user-level handler entry points for all
- * emulated system calls.
- */
-routine task_get_emulation_vector(
- task : task_t;
- out vector_start : int;
- out emulation_vector: emulation_vector_t);
-
-/*
- * Establish user-level handlers for the specified
- * system calls. Non-emulated system calls are specified
- * with emulation_vector[i] == EML_ROUTINE_NULL.
- */
-routine task_set_emulation_vector(
- task : task_t;
- vector_start : int;
- emulation_vector: emulation_vector_t);
-
-/*
- * Returns the set of threads belonging to the target task.
- */
-routine task_threads(
- target_task : task_t;
- out thread_list : thread_array_t =
- array[] of mach_port_send_t,
- dealloc);
-
-/*
- * Returns information about the target task.
- */
-routine task_info(
- target_task : task_t;
- flavor : int;
- out task_info_out : task_info_t, CountInOut);
-
-
-skip; /* old task_status */
-skip; /* old task_set_notify */
-skip; /* old thread_create */
-
-/*
- * Destroy the target thread.
- */
-routine thread_terminate(
- target_thread : thread_t);
-
-/*
- * Return the selected state information for the target
- * thread. If the thread is currently executing, the results
- * may be stale. [Flavor THREAD_STATE_FLAVOR_LIST provides a
- * list of valid flavors for the target thread.]
- */
-routine thread_get_state(
- target_thread : thread_t;
- flavor : int;
- out old_state : thread_state_t, CountInOut);
-
-/*
- * Set the selected state information for the target thread.
- * If the thread is currently executing, the state change
- * may be ill-defined.
- */
-routine thread_set_state(
- target_thread : thread_t;
- flavor : int;
- new_state : thread_state_t);
-
-/*
- * Returns information about the target thread.
- */
-routine thread_info(
- target_thread : thread_t;
- flavor : int;
- out thread_info_out : thread_info_t, CountInOut);
-
-skip; /* old thread_mutate */
-
-/*
- * Allocate zero-filled memory in the address space
- * of the target task, either at the specified address,
- * or wherever space can be found (if anywhere is TRUE),
- * of the specified size. The address at which the
- * allocation actually took place is returned.
- */
-#ifdef EMULATOR
-skip; /* the emulator redefines vm_allocate using vm_map */
-#else /* EMULATOR */
-routine vm_allocate(
- target_task : vm_task_t;
- inout address : vm_address_t;
- size : vm_size_t;
- anywhere : boolean_t);
-#endif /* EMULATOR */
-
-skip; /* old vm_allocate_with_pager */
-
-/*
- * Deallocate the specified range from the virtual
- * address space of the target task.
- */
-routine vm_deallocate(
- target_task : vm_task_t;
- address : vm_address_t;
- size : vm_size_t);
-
-/*
- * Set the current or maximum protection attribute
- * for the specified range of the virtual address
- * space of the target task. The current protection
- * limits the memory access rights of threads within
- * the task; the maximum protection limits the accesses
- * that may be given in the current protection.
- * Protections are specified as a set of {read, write, execute}
- * *permissions*.
- */
-routine vm_protect(
- target_task : vm_task_t;
- address : vm_address_t;
- size : vm_size_t;
- set_maximum : boolean_t;
- new_protection : vm_prot_t);
-
-/*
- * Set the inheritance attribute for the specified range
- * of the virtual address space of the target task.
- * The inheritance value is one of {none, copy, share}, and
- * specifies how the child address space should acquire
- * this memory at the time of a task_create call.
- */
-routine vm_inherit(
- target_task : vm_task_t;
- address : vm_address_t;
- size : vm_size_t;
- new_inheritance : vm_inherit_t);
-
-/*
- * Returns the contents of the specified range of the
- * virtual address space of the target task. [The
- * range must be aligned on a virtual page boundary,
- * and must be a multiple of pages in extent. The
- * protection on the specified range must permit reading.]
- */
-routine vm_read(
- target_task : vm_task_t;
- address : vm_address_t;
- size : vm_size_t;
- out data : pointer_t, dealloc);
-
-/*
- * Writes the contents of the specified range of the
- * virtual address space of the target task. [The
- * range must be aligned on a virtual page boundary,
- * and must be a multiple of pages in extent. The
- * protection on the specified range must permit writing.]
- */
-routine vm_write(
- target_task : vm_task_t;
- address : vm_address_t;
- data : pointer_t);
-
-/*
- * Copy the contents of the source range of the virtual
- * address space of the target task to the destination
- * range in that same address space. [Both of the
- * ranges must be aligned on a virtual page boundary,
- * and must be multiples of pages in extent. The
- * protection on the source range must permit reading,
- * and the protection on the destination range must
- * permit writing.]
- */
-routine vm_copy(
- target_task : vm_task_t;
- source_address : vm_address_t;
- size : vm_size_t;
- dest_address : vm_address_t);
-
-/*
- * Returns information about the contents of the virtual
- * address space of the target task at the specified
- * address. The returned protection, inheritance, sharing
- * and memory object values apply to the entire range described
- * by the address range returned; the memory object offset
- * corresponds to the beginning of the address range.
- * [If the specified address is not allocated, the next
- * highest address range is described. If no addresses beyond
- * the one specified are allocated, the call returns KERN_NO_SPACE.]
- */
-routine vm_region(
- target_task : vm_task_t;
- inout address : vm_address_t;
- out size : vm_size_t;
- out protection : vm_prot_t;
- out max_protection : vm_prot_t;
- out inheritance : vm_inherit_t;
- out is_shared : boolean_t;
- /* avoid out-translation of the argument */
- out object_name : memory_object_name_t =
- MACH_MSG_TYPE_COPY_SEND
- ctype: mach_port_t;
- out offset : vm_offset_t);
-
-/*
- * Return virtual memory statistics for the host
- * on which the target task resides. [Note that the
- * statistics are not specific to the target task.]
- */
-routine vm_statistics(
- target_task : vm_task_t;
- out vm_stats : vm_statistics_data_t);
-
-skip; /* old task_by_u*x_pid */
-skip; /* old vm_pageable */
-
-/*
- * Stash a handful of ports for the target task; child
- * tasks inherit this stash at task_create time.
- */
-routine mach_ports_register(
- target_task : task_t;
- init_port_set : mach_port_array_t =
- ^array[] of mach_port_t);
-
-/*
- * Retrieve the stashed ports for the target task.
- */
-routine mach_ports_lookup(
- target_task : task_t;
- out init_port_set : mach_port_array_t =
- ^array[] of mach_port_t);
-
-skip; /* old u*x_pid */
-skip; /* old netipc_listen */
-skip; /* old netipc_ignore */
-
-/*
- * Provide the data contents of a range of the given memory
- * object, with the access restriction specified. [Only
- * whole virtual pages of data can be accepted; partial pages
- * will be discarded. Data should be provided on request, but
- * may be provided in advance as desired. When data already
- * held by this kernel is provided again, the new data is ignored.
- * The access restriction is the subset of {read, write, execute}
- * which are prohibited. The kernel may not provide any data (or
- * protection) consistency among pages with different virtual page
- * alignments within the same object.]
- */
-simpleroutine memory_object_data_provided(
- memory_control : memory_object_control_t;
- offset : vm_offset_t;
- data : pointer_t;
- lock_value : vm_prot_t);
-
-/*
- * Indicate that a range of the given temporary memory object does
- * not exist, and that the backing memory object should be used
- * instead (or zero-fill memory be used, if no backing object exists).
- * [This call is intended for use only by the default memory manager.
- * It should not be used to indicate a real error --
- * memory_object_data_error should be used for that purpose.]
- */
-simpleroutine memory_object_data_unavailable(
- memory_control : memory_object_control_t;
- offset : vm_offset_t;
- size : vm_size_t);
-
-/*
- * Retrieves the attributes currently associated with
- * a memory object.
- */
-routine memory_object_get_attributes(
- memory_control : memory_object_control_t;
- out object_ready : boolean_t;
- out may_cache : boolean_t;
- out copy_strategy : memory_object_copy_strategy_t);
-
-/*
- * Sets the default memory manager, the port to which
- * newly-created temporary memory objects are delivered.
- * [See (memory_object_default)memory_object_create.]
- * The old memory manager port is returned.
- */
-routine vm_set_default_memory_manager(
- host_priv : host_priv_t;
- inout default_manager : mach_port_copy_send_t);
-
-skip; /* old pager_flush_request */
-
-/*
- * Control use of the data associated with the given
- * memory object. For each page in the given range,
- * perform the following operations, in order:
- * 1) restrict access to the page (disallow
- * forms specified by "prot");
- * 2) write back modifications (if "should_return"
- * is RETURN_DIRTY and the page is dirty, or
- * "should_return" is RETURN_ALL and the page
- * is either dirty or precious); and,
- * 3) flush the cached copy (if "should_flush"
- * is asserted).
- * The set of pages is defined by a starting offset
- * ("offset") and size ("size"). Only pages with the
- * same page alignment as the starting offset are
- * considered.
- *
- * A single acknowledgement is sent (to the "reply_to"
- * port) when these actions are complete.
- *
- * There are two versions of this routine because IPC distinguishes
- * between booleans and integers (a 2-valued integer is NOT a
- * boolean). The new routine is backwards compatible at the C
- * language interface.
- */
-simpleroutine xxx_memory_object_lock_request(
- memory_control : memory_object_control_t;
- offset : vm_offset_t;
- size : vm_size_t;
- should_clean : boolean_t;
- should_flush : boolean_t;
- lock_value : vm_prot_t;
- reply_to : mach_port_t =
- MACH_MSG_TYPE_MAKE_SEND_ONCE|polymorphic);
-
-
-simpleroutine memory_object_lock_request(
- memory_control : memory_object_control_t;
- offset : vm_offset_t;
- size : vm_size_t;
- should_return : memory_object_return_t;
- should_flush : boolean_t;
- lock_value : vm_prot_t;
- reply_to : mach_port_t =
- MACH_MSG_TYPE_MAKE_SEND_ONCE|polymorphic);
-
-/* obsolete */
-routine xxx_task_get_emulation_vector(
- task : task_t;
- out vector_start : int;
- out emulation_vector: xxx_emulation_vector_t, IsLong);
-
-/* obsolete */
-routine xxx_task_set_emulation_vector(
- task : task_t;
- vector_start : int;
- emulation_vector: xxx_emulation_vector_t, IsLong);
-
-/*
- * Returns information about the host on which the
- * target object resides. [This object may be
- * a task, thread, or memory_object_control port.]
- */
-routine xxx_host_info(
- target_task : mach_port_t;
- out info : machine_info_data_t);
-
-/*
- * Returns information about a particular processor on
- * the host on which the target task resides.
- */
-routine xxx_slot_info(
- target_task : task_t;
- slot : int;
- out info : machine_slot_data_t);
-
-/*
- * Performs control operations (currently only
- * turning off or on) on a particular processor on
- * the host on which the target task resides.
- */
-routine xxx_cpu_control(
- target_task : task_t;
- cpu : int;
- running : boolean_t);
-
-skip; /* old thread_statistics */
-skip; /* old task_statistics */
-skip; /* old netport_init */
-skip; /* old netport_enter */
-skip; /* old netport_remove */
-skip; /* old thread_set_priority */
-
-/*
- * Increment the suspend count for the target task.
- * No threads within a task may run when the suspend
- * count for that task is non-zero.
- */
-routine task_suspend(
- target_task : task_t);
-
-/*
- * Decrement the suspend count for the target task,
- * if the count is currently non-zero. If the resulting
- * suspend count is zero, then threads within the task
- * that also have non-zero suspend counts may execute.
- */
-routine task_resume(
- target_task : task_t);
-
-/*
- * Returns the current value of the selected special port
- * associated with the target task.
- */
-routine task_get_special_port(
- task : task_t;
- which_port : int;
- out special_port : mach_port_send_t);
-
-/*
- * Set one of the special ports associated with the
- * target task.
- */
-routine task_set_special_port(
- task : task_t;
- which_port : int;
- special_port : mach_port_t);
-
-/* obsolete */
-routine xxx_task_info(
- target_task : task_t;
- flavor : int;
- out task_info_out : task_info_t, IsLong);
-
-
-/*
- * Create a new thread within the target task, returning
- * the port representing that new thread. The
- * initial execution state of the thread is undefined.
- */
-routine thread_create(
- parent_task : task_t;
- out child_thread : mach_port_send_t);
-
-/*
- * Increment the suspend count for the target thread.
- * Once this call has completed, the thread will not
- * execute any further user or meta- instructions.
- * Once suspended, a thread may not execute again until
- * its suspend count is zero, and the suspend count
- * for its task is also zero.
- */
-routine thread_suspend(
- target_thread : thread_t);
-
-/*
- * Decrement the suspend count for the target thread,
- * if that count is not already zero.
- */
-routine thread_resume(
- target_thread : thread_t);
-
-/*
- * Cause any user or meta- instructions currently being
- * executed by the target thread to be aborted. [Meta-
- * instructions consist of the basic traps for IPC
- * (e.g., msg_send, msg_receive) and self-identification
- * (e.g., task_self, thread_self, thread_reply). Calls
- * described by MiG interfaces are not meta-instructions
- * themselves.]
- */
-routine thread_abort(
- target_thread : thread_t);
-
-/* obsolete */
-routine xxx_thread_get_state(
- target_thread : thread_t;
- flavor : int;
- out old_state : thread_state_t, IsLong);
-
-/* obsolete */
-routine xxx_thread_set_state(
- target_thread : thread_t;
- flavor : int;
- new_state : thread_state_t, IsLong);
-
-/*
- * Returns the current value of the selected special port
- * associated with the target thread.
- */
-routine thread_get_special_port(
- thread : thread_t;
- which_port : int;
- out special_port : mach_port_t);
-
-/*
- * Set one of the special ports associated with the
- * target thread.
- */
-routine thread_set_special_port(
- thread : thread_t;
- which_port : int;
- special_port : mach_port_t);
-
-/* obsolete */
-routine xxx_thread_info(
- target_thread : thread_t;
- flavor : int;
- out thread_info_out : thread_info_t, IsLong);
-
-/*
- * Establish a user-level handler for the specified
- * system call.
- */
-routine task_set_emulation(
- target_port : task_t;
- routine_entry_pt: vm_address_t;
- routine_number : int);
-
-/*
- * Establish restart pc for interrupted atomic sequences.
- * This reuses the message number for the old task_get_io_port.
- * See task_info.h for description of flavors.
- *
- */
-routine task_ras_control(
- target_task : task_t;
- basepc : vm_address_t;
- boundspc : vm_address_t;
- flavor : int);
-
-
-
-skip; /* old host_ipc_statistics */
-skip; /* old port_names */
-skip; /* old port_type */
-skip; /* old port_rename */
-skip; /* old port_allocate */
-skip; /* old port_deallocate */
-skip; /* old port_set_backlog */
-skip; /* old port_status */
-skip; /* old port_set_allocate */
-skip; /* old port_set_deallocate */
-skip; /* old port_set_add */
-skip; /* old port_set_remove */
-skip; /* old port_set_status */
-skip; /* old port_insert_send */
-skip; /* old port_extract_send */
-skip; /* old port_insert_receive */
-skip; /* old port_extract_receive */
-
-/*
- * Map a user-defined memory object into the virtual address
- * space of the target task. If desired (anywhere is TRUE),
- * the kernel will find a suitable address range of the
- * specified size; else, the specific address will be allocated.
- *
- * The beginning address of the range will be aligned on a virtual
- * page boundary, be at or beyond the address specified, and
- * meet the mask requirements (bits turned on in the mask must not
- * be turned on in the result); the size of the range, in bytes,
- * will be rounded up to an integral number of virtual pages.
- *
- * The memory in the resulting range will be associated with the
- * specified memory object, with the beginning of the memory range
- * referring to the specified offset into the memory object.
- *
- * The mapping will take the current and maximum protections and
- * the inheritance attributes specified; see the vm_protect and
- * vm_inherit calls for a description of these attributes.
- *
- * If desired (copy is TRUE), the memory range will be filled
- * with a copy of the data from the memory object; this copy will
- * be private to this mapping in this target task. Otherwise,
- * the memory in this mapping will be shared with other mappings
- * of the same memory object at the same offset (in this task or
- * in other tasks). [The Mach kernel only enforces shared memory
- * consistency among mappings on one host with similar page alignments.
- * The user-defined memory manager for this object is responsible
- * for further consistency.]
- */
-#ifdef EMULATOR
-routine htg_vm_map(
- target_task : vm_task_t;
- ureplyport reply_port : mach_port_make_send_once_t;
- inout address : vm_address_t;
- size : vm_size_t;
- mask : vm_address_t;
- anywhere : boolean_t;
- memory_object : memory_object_t;
- offset : vm_offset_t;
- copy : boolean_t;
- cur_protection : vm_prot_t;
- max_protection : vm_prot_t;
- inheritance : vm_inherit_t);
-#else /* EMULATOR */
-routine vm_map(
- target_task : vm_task_t;
- inout address : vm_address_t;
- size : vm_size_t;
- mask : vm_address_t;
- anywhere : boolean_t;
- memory_object : memory_object_t;
- offset : vm_offset_t;
- copy : boolean_t;
- cur_protection : vm_prot_t;
- max_protection : vm_prot_t;
- inheritance : vm_inherit_t);
-#endif /* EMULATOR */
-
-/*
- * Indicate that a range of the specified memory object cannot
- * be provided at this time. [Threads waiting for memory pages
- * specified by this call will experience a memory exception.
- * Only threads waiting at the time of the call are affected.]
- */
-simpleroutine memory_object_data_error(
- memory_control : memory_object_control_t;
- offset : vm_offset_t;
- size : vm_size_t;
- error_value : kern_return_t);
-
-/*
- * Make decisions regarding the use of the specified
- * memory object.
- */
-simpleroutine memory_object_set_attributes(
- memory_control : memory_object_control_t;
- object_ready : boolean_t;
- may_cache : boolean_t;
- copy_strategy : memory_object_copy_strategy_t);
-
-/*
- */
-simpleroutine memory_object_destroy(
- memory_control : memory_object_control_t;
- reason : kern_return_t);
-
-/*
- * Provide the data contents of a range of the given memory
- * object, with the access restriction specified, optional
- * precious attribute, and reply message. [Only
- * whole virtual pages of data can be accepted; partial pages
- * will be discarded. Data should be provided on request, but
- * may be provided in advance as desired. When data already
- * held by this kernel is provided again, the new data is ignored.
- * The access restriction is the subset of {read, write, execute}
- * which are prohibited. The kernel may not provide any data (or
- * protection) consistency among pages with different virtual page
- * alignments within the same object. The precious value controls
- * how the kernel treats the data. If it is FALSE, the kernel treats
- * its copy as a temporary and may throw it away if it hasn't been
- * changed. If the precious value is TRUE, the kernel treats its
- * copy as a data repository and promises to return it to the manager;
- * the manager may tell the kernel to throw it away instead by flushing
- * and not cleaning the data -- see memory_object_lock_request. The
- * reply_to port is for a compeletion message; it will be
- * memory_object_supply_completed.]
- */
-
-simpleroutine memory_object_data_supply(
- memory_control : memory_object_control_t;
- offset : vm_offset_t;
- data : pointer_t, Dealloc[];
- lock_value : vm_prot_t;
- precious : boolean_t;
- reply_to : mach_port_t =
- MACH_MSG_TYPE_MAKE_SEND_ONCE|polymorphic);
-
-simpleroutine memory_object_ready(
- memory_control : memory_object_control_t;
- may_cache : boolean_t;
- copy_strategy : memory_object_copy_strategy_t);
-
-simpleroutine memory_object_change_attributes(
- memory_control : memory_object_control_t;
- may_cache : boolean_t;
- copy_strategy : memory_object_copy_strategy_t;
- reply_to : mach_port_t =
- MACH_MSG_TYPE_MAKE_SEND_ONCE|polymorphic);
-
-skip; /* old host_callout_statistics_reset */
-skip; /* old port_set_select */
-skip; /* old port_set_backup */
-
-/*
- * Set/Get special properties of memory associated
- * to some virtual address range, such as cachability,
- * migrability, replicability. Machine-dependent.
- */
-routine vm_machine_attribute(
- target_task : vm_task_t;
- address : vm_address_t;
- size : vm_size_t;
- attribute : vm_machine_attribute_t;
- inout value : vm_machine_attribute_val_t);
-
-skip; /* old host_fpa_counters_reset */
-
-/*
- * There is no more room in this interface for additional calls.
- */
diff --git a/boot-proxy-exc/backup/ourmach_host.defs b/boot-proxy-exc/backup/ourmach_host.defs
deleted file mode 100644
index 0e7e367e..00000000
--- a/boot-proxy-exc/backup/ourmach_host.defs
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1991,1990,1989 Carnegie Mellon University.
- * Copyright (c) 1993,1994 The University of Utah and
- * the Computer Systems Laboratory (CSL).
- * All rights reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON, THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF
- * THIS SOFTWARE IN ITS "AS IS" CONDITION, AND DISCLAIM ANY LIABILITY
- * OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF
- * THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- */
-/*
- * File: mach/mach_host.defs
- *
- * Abstract:
- * Mach host operations support. Includes processor allocation and
- * control.
- */
-
-#ifdef MACH_KERNEL
-simport <kern/compat_xxx_defs.h>; /* for obsolete routines */
-#endif
-
-subsystem
-#if KERNEL_SERVER
- KernelServer
-#endif
- mach_host 2600;
-
-serverprefix S_;
-
-/*
- * Basic types
- */
-
-#include <mach/std_types.defs>
-#include <mach/mach_types.defs>
-
-/*
- * Get list of processors on this host.
- */
-
-routine host_processors(
- host_priv : host_priv_t;
- out processor_list : processor_array_t);
-
-/* obsolete */
-routine yyy_host_info(
- host : host_t;
- flavor : int;
- out host_info_out : host_info_t, IsLong);
-
-
-/* obsolete */
-routine yyy_processor_info(
- processor : processor_t;
- flavor : int;
- out host : host_t;
- out processor_info_out: processor_info_t, IsLong);
-
-/*
- * Start processor.
- */
-
-routine processor_start(
- processor : processor_t);
-
-/*
- * Exit processor -- may not be restartable.
- */
-
-routine processor_exit(
- processor : processor_t);
-
-/* obsolete */
-routine yyy_processor_control(
- processor : processor_t;
- processor_cmd : processor_info_t, IsLong);
-
-/*
- * Get default processor set for host.
- */
-routine processor_set_default(
- host : host_t;
- out default_set : processor_set_name_t);
-
-/*
- * Get rights to default processor set for host.
- * Replaced by host_processor_set_priv.
- */
-routine xxx_processor_set_default_priv(
- host : host_priv_t;
- out default_set : processor_set_t);
-
-/*
- * Create new processor set. Returns real port for manipulations,
- * and name port for obtaining information.
- */
-routine processor_set_create(
- host : host_t;
- out new_set : processor_set_t;
- out new_name : processor_set_name_t);
-
-/*
- * Destroy processor set.
- */
-routine processor_set_destroy(
- set : processor_set_t);
-
-/* obsolete */
-routine yyy_processor_set_info(
- set_name : processor_set_name_t;
- flavor : int;
- out host : host_t;
- out info_out : processor_set_info_t, IsLong);
-
-/*
- * Assign processor to processor set.
- */
-routine processor_assign(
- processor : processor_t;
- new_set : processor_set_t;
- wait : boolean_t);
-
-/*
- * Get current assignment for processor.
- */
-
-routine processor_get_assignment(
- processor : processor_t;
- out assigned_set : processor_set_name_t);
-
-/*
- * Assign thread to processor set.
- */
-routine thread_assign(
- thread : thread_t;
- new_set : processor_set_t);
-
-/*
- * Assign thread to default set.
- */
-routine thread_assign_default(
- thread : thread_t);
-
-/*
- * Get current assignment for thread.
- */
-routine thread_get_assignment(
- thread : thread_t;
- out assigned_set : processor_set_name_t);
-
-/*
- * Assign task to processor set.
- */
-routine task_assign(
- task : task_t;
- new_set : processor_set_t;
- assign_threads : boolean_t);
-/*
- * Assign task to default set.
- */
-routine task_assign_default(
- task : task_t;
- assign_threads : boolean_t);
-
-/*
- * Get current assignment for task.
- */
-routine task_get_assignment(
- task : task_t;
- out assigned_set : processor_set_name_t);
-
-/*
- * Get string describing current kernel version.
- */
-routine host_kernel_version(
- host : host_t;
- out kernel_version : kernel_version_t);
-
-/*
- * Set priority for thread.
- */
-routine thread_priority(
- thread : thread_t;
- priority : int;
- set_max : boolean_t);
-
-/*
- * Set max priority for thread.
- */
-routine thread_max_priority(
- thread : thread_t;
- processor_set : processor_set_t;
- max_priority : int);
-
-/*
- * Set task priority.
- */
-routine task_priority(
- task : task_t;
- priority : int;
- change_threads : boolean_t);
-
-/*
- * Set max priority for processor_set.
- */
-routine processor_set_max_priority(
- processor_set : processor_set_t;
- max_priority : int;
- change_threads : boolean_t);
-
-/*
- * Set policy for thread
- */
-routine thread_policy(
- thread : thread_t;
- policy : int;
- data : int);
-
-/*
- * Enable policy for processor set
- */
-routine processor_set_policy_enable(
- processor_set : processor_set_t;
- policy : int);
-
-/*
- * Disable policy for processor set
- */
-routine processor_set_policy_disable(
- processor_set : processor_set_t;
- policy : int;
- change_threads : boolean_t);
-/*
- * List all tasks in processor set.
- */
-routine processor_set_tasks(
- processor_set : processor_set_t;
- out task_list : task_array_t);
-
-/*
- * List all threads in processor set.
- */
-routine processor_set_threads(
- processor_set : processor_set_t;
- out thread_list : thread_array_t);
-
-/*
- * List all processor sets on host.
- */
-routine host_processor_sets(
- host : host_t;
- out processor_sets : processor_set_name_array_t);
-
-/*
- * Get control port for a processor set.
- */
-routine host_processor_set_priv(
- host_priv : host_priv_t;
- set_name : processor_set_name_t;
- out set : mach_port_send_t);
-
-routine thread_depress_abort(
- thread : thread_t);
-
-/*
- * Set the time on this host.
- * Only available to privileged users.
- */
-routine host_set_time(
- host_priv : host_priv_t;
- new_time : time_value_t);
-
-/*
- * Arrange for the time on this host to be gradually changed
- * by an adjustment value, and return the old value.
- * Only available to privileged users.
- */
-routine host_adjust_time(
- host_priv : host_priv_t;
- in new_adjustment : time_value_t;
- out old_adjustment : time_value_t);
-
-/*
- * Get the time on this host.
- * Available to all.
- */
-routine host_get_time(
- host : host_t;
- out current_time : time_value_t);
-
-/*
- * Reboot this host.
- * Only available to privileged users.
- */
-routine host_reboot(
- host_priv : host_priv_t;
- options : int);
-
-/*
- * Specify that the range of the virtual address space
- * of the target task must not cause page faults for
- * the indicated accesses.
- *
- * [ To unwire the pages, specify VM_PROT_NONE. ]
- */
-routine vm_wire(
- host_priv : host_priv_t;
- task : vm_task_t;
- address : vm_address_t;
- size : vm_size_t;
- access : vm_prot_t);
-
-/*
- * Specify that the target thread must always be able
- * to run and to allocate memory.
- */
-routine thread_wire(
- host_priv : host_priv_t;
- thread : thread_t;
- wired : boolean_t);
-
-/*
- * Return information about this host.
- */
-
-routine host_info(
- host : host_t;
- flavor : int;
- out host_info_out : host_info_t, CountInOut);
-
-
-/*
- * Return information about this processor.
- */
-routine processor_info(
- processor : processor_t;
- flavor : int;
- out host : host_t;
- out processor_info_out: processor_info_t, CountInOut);
-
-/*
- * Get information about processor set.
- */
-routine processor_set_info(
- set_name : processor_set_name_t;
- flavor : int;
- out host : host_t;
- out info_out : processor_set_info_t, CountInOut);
-
-/*
- * Do something machine-dependent to processor.
- */
-routine processor_control(
- processor : processor_t;
- processor_cmd : processor_info_t);
-
-/*
- * Get boot configuration information from kernel.
- */
-routine host_get_boot_info(
- host_priv : host_priv_t;
- out boot_info : kernel_boot_info_t);
diff --git a/boot-proxy-exc/backup/ourmach_port.defs b/boot-proxy-exc/backup/ourmach_port.defs
deleted file mode 100644
index 4f131bb2..00000000
--- a/boot-proxy-exc/backup/ourmach_port.defs
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1991,1990,1989 Carnegie Mellon University.
- * Copyright (c) 1993,1994 The University of Utah and
- * the Computer Systems Laboratory (CSL).
- * All rights reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON, THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF
- * THIS SOFTWARE IN ITS "AS IS" CONDITION, AND DISCLAIM ANY LIABILITY
- * OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF
- * THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- */
-/*
- * File: mach/mach_port.defs
- * Author: Rich Draves
- *
- * Copyright (c) 1989 Richard P. Draves, Jr.
- *
- * Exported kernel calls.
- */
-
-subsystem
-#if KERNEL_SERVER
- KernelServer
-#endif
- mach_port 3200;
-
-#include <mach/std_types.defs>
-#include <mach/mach_types.defs>
-
-/*
- * Returns the set of port and port set names
- * to which the target task has access, along with
- * the type (set or port) for each name.
- */
-
-routine mach_port_names(
- task : ipc_space_t;
- out names : mach_port_name_array_t =
- ^array[] of mach_port_name_t
- ctype: mach_port_array_t,
- dealloc;
- out types : mach_port_type_array_t =
- ^array[] of mach_port_type_t,
- dealloc);
-
-/*
- * Returns the type (set or port) for the port name
- * within the target task. Also indicates whether
- * there is a dead-name request for the name.
- */
-
-routine mach_port_type(
- task : ipc_space_t;
- name : mach_port_name_t;
- out ptype : mach_port_type_t);
-
-/*
- * Changes the name by which a port (or port set) is known to
- * the target task. The new name can't be in use. The
- * old name becomes available for recycling.
- */
-
-routine mach_port_rename(
- task : ipc_space_t;
- old_name : mach_port_name_t;
- new_name : mach_port_name_t);
-
-/*
- * Allocates the specified kind of object, with the given name.
- * The right must be one of
- * MACH_PORT_RIGHT_RECEIVE
- * MACH_PORT_RIGHT_PORT_SET
- * MACH_PORT_RIGHT_DEAD_NAME
- * New port sets are empty. New ports don't have any
- * send/send-once rights or queued messages. The make-send
- * count is zero and their queue limit is MACH_PORT_QLIMIT_DEFAULT.
- * New sets, ports, and dead names have one user reference.
- */
-
-routine mach_port_allocate_name(
- task : ipc_space_t;
- right : mach_port_right_t;
- name : mach_port_name_t);
-
-/*
- * Allocates the specified kind of object.
- * The right must be one of
- * MACH_PORT_RIGHT_RECEIVE
- * MACH_PORT_RIGHT_PORT_SET
- * MACH_PORT_RIGHT_DEAD_NAME
- * Like port_allocate_name, but the kernel picks a name.
- * It can use any name not associated with a right.
- */
-
-routine mach_port_allocate(
- task : ipc_space_t;
- right : mach_port_right_t;
- out name : mach_port_name_t);
-
-/*
- * Destroys all rights associated with the name and makes it
- * available for recycling immediately. The name can be a
- * port (possibly with multiple user refs), a port set, or
- * a dead name (again, with multiple user refs).
- */
-
-routine mach_port_destroy(
- task : ipc_space_t;
- name : mach_port_name_t);
-
-/*
- * Releases one send/send-once/dead-name user ref.
- * Just like mach_port_mod_refs -1, but deduces the
- * correct type of right. This allows a user task
- * to release a ref for a port without worrying
- * about whether the port has died or not.
- */
-
-routine mach_port_deallocate(
- task : ipc_space_t;
- name : mach_port_name_t);
-
-/*
- * A port set always has one user ref.
- * A send-once right always has one user ref.
- * A dead name always has one or more user refs.
- * A send right always has one or more user refs.
- * A receive right always has one user ref.
- * The right must be one of
- * MACH_PORT_RIGHT_RECEIVE
- * MACH_PORT_RIGHT_PORT_SET
- * MACH_PORT_RIGHT_DEAD_NAME
- * MACH_PORT_RIGHT_SEND
- * MACH_PORT_RIGHT_SEND_ONCE
- */
-
-routine mach_port_get_refs(
- task : ipc_space_t;
- name : mach_port_name_t;
- right : mach_port_right_t;
- out refs : mach_port_urefs_t);
-
-/*
- * The delta is a signed change to the task's
- * user ref count for the right. Only dead names
- * and send rights can have a positive delta.
- * The resulting user ref count can't be negative.
- * If it is zero, the right is deallocated.
- * If the name isn't a composite right, it becomes
- * available for recycling. The right must be one of
- * MACH_PORT_RIGHT_RECEIVE
- * MACH_PORT_RIGHT_PORT_SET
- * MACH_PORT_RIGHT_DEAD_NAME
- * MACH_PORT_RIGHT_SEND
- * MACH_PORT_RIGHT_SEND_ONCE
- */
-
-routine mach_port_mod_refs(
- task : ipc_space_t;
- name : mach_port_name_t;
- right : mach_port_right_t;
- delta : mach_port_delta_t);
-
-/*
- * Temporary compatibility call.
- */
-
-routine old_mach_port_get_receive_status(
- task : ipc_space_t;
- name : mach_port_name_t;
- out status : old_mach_port_status_t);
-
-/*
- * Only valid for receive rights.
- * Sets the queue-limit for the port.
- * The limit must be
- * 1 <= qlimit <= MACH_PORT_QLIMIT_MAX
- */
-
-routine mach_port_set_qlimit(
- task : ipc_space_t;
- name : mach_port_name_t;
- qlimit : mach_port_msgcount_t);
-
-/*
- * Only valid for receive rights.
- * Sets the make-send count for the port.
- */
-
-routine mach_port_set_mscount(
- task : ipc_space_t;
- name : mach_port_name_t;
- mscount : mach_port_mscount_t);
-
-/*
- * Only valid for port sets. Returns a list of
- * the members.
- */
-
-routine mach_port_get_set_status(
- task : ipc_space_t;
- name : mach_port_name_t;
- out members : mach_port_name_array_t =
- ^array[] of mach_port_name_t
- ctype: mach_port_array_t,
- dealloc);
-
-/*
- * Puts the member port (the task must have receive rights)
- * into the after port set. (Or removes it from any port set
- * if after is MACH_PORT_NULL.) If the port is already in
- * a set, does an atomic move.
- */
-
-routine mach_port_move_member(
- task : ipc_space_t;
- member : mach_port_name_t;
- after : mach_port_name_t);
-
-/*
- * Requests a notification from the kernel. The request
- * must supply the send-once right which is used for
- * the notification. If a send-once right was previously
- * registered, it is returned. The msg_id must be one of
- * MACH_NOTIFY_PORT_DESTROYED (receive rights)
- * MACH_NOTIFY_DEAD_NAME (send/receive/send-once rights)
- * MACH_NOTIFY_NO_SENDERS (receive rights)
- *
- * The sync value specifies whether a notification should
- * get sent immediately, if appropriate. The exact meaning
- * depends on the notification:
- * MACH_NOTIFY_PORT_DESTROYED: must be zero.
- * MACH_NOTIFY_DEAD_NAME: if non-zero, then name can be dead,
- * and the notification gets sent immediately.
- * If zero, then name can't be dead.
- * MACH_NOTIFY_NO_SENDERS: the notification gets sent
- * immediately if the current mscount is greater
- * than or equal to the sync value and there are no
- * extant send rights.
- */
-
-routine mach_port_request_notification(
- task : ipc_space_t;
- name : mach_port_name_t;
- id : mach_msg_id_t;
- sync : mach_port_mscount_t;
- notify : mach_port_send_once_t;
- out previous : mach_port_send_once_t);
-
-/*
- * Inserts the specified rights into the target task,
- * using the specified name. If inserting send/receive
- * rights and the task already has send/receive rights
- * for the port, then the names must agree. In any case,
- * the task gains a user ref for the port.
- */
-
-routine mach_port_insert_right(
- task : ipc_space_t;
- name : mach_port_name_t;
- poly : mach_port_poly_t);
-
-/*
- * Returns the specified right for the named port
- * in the target task, extracting that right from
- * the target task. The target task loses a user
- * ref and the name may be available for recycling.
- * msgt_name must be one of
- * MACH_MSG_TYPE_MOVE_RECEIVE
- * MACH_MSG_TYPE_COPY_SEND
- * MACH_MSG_TYPE_MAKE_SEND
- * MACH_MSG_TYPE_MOVE_SEND
- * MACH_MSG_TYPE_MAKE_SEND_ONCE
- * MACH_MSG_TYPE_MOVE_SEND_ONCE
- */
-
-routine mach_port_extract_right(
- task : ipc_space_t;
- name : mach_port_name_t;
- msgt_name : mach_msg_type_name_t;
- out poly : mach_port_poly_t);
-
-/*
- * The task must have receive rights for the named port.
- * Returns a status structure (see mach/port.h).
- */
-
-routine mach_port_get_receive_status(
- task : ipc_space_t;
- name : mach_port_name_t;
- out status : mach_port_status_t);
-
-/*
- * Only valid for receive rights.
- * Sets the sequence number for the port.
- */
-
-routine mach_port_set_seqno(
- task : ipc_space_t;
- name : mach_port_name_t;
- seqno : mach_port_seqno_t);
-
-#ifdef MIGRATING_THREADS
-/*
- * Only valid for receive rights.
- * Set the user-mode entry info for RPCs coming through this port.
- * Do this BEFORE attaching an ActPool to this port,
- * unless you can be sure no RPCs will be coming through it yet.
- */
-
-routine mach_port_set_rpcinfo(
- task : ipc_space_t;
- name : mach_port_name_t;
- rpc_info : thread_info_t); /* XXX */
-
-/*
- * Only valid for receive rights.
- * Create a new activation for migrating RPC, and attach it to the port's ActPool.
- * Create an ActPool for the port if it doesn't already have one.
- * Supply a stack and receive memory buffer.
- */
-
-routine mach_port_create_act(
- task : task_t;
- name : mach_port_name_t;
- user_stack : vm_offset_t;
- user_rbuf : vm_offset_t;
- user_rbuf_size : vm_size_t;
- out new_act : thread_t);
-
-#endif /* MIGRATING_THREADS */
-
diff --git a/boot-proxy-exc/boot.c b/boot-proxy-exc/boot.c
deleted file mode 100644
index 83b69c08..00000000
--- a/boot-proxy-exc/boot.c
+++ /dev/null
@@ -1,2150 +0,0 @@
-/* Load a task using the single server, and then run it
- as if we were the kernel.
- Copyright (C) 1993,94,95,96,97,98,99,2000,01,02,2006
- Free Software Foundation, Inc.
-
-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. */
-
-/* Written by Michael I. Bushnell. */
-
-#include <mach.h>
-#include <mach/notify.h>
-#include <device/device.h>
-#include <a.out.h>
-#include <mach/message.h>
-#include <mach/mig_errors.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <cthreads.h>
-#include <fcntl.h>
-#include <elf.h>
-#include <mach/mig_support.h>
-#include <mach/default_pager.h>
-#include <argp.h>
-#include <hurd/store.h>
-#include <hurd/ports.h>
-#include <sys/mman.h>
-#include <version.h>
-
-#include "notify_S.h"
-#include "ourdevice_S.h"
-#include "io_S.h"
-#include "device_reply_U.h"
-#include "io_reply_U.h"
-#include "term_S.h"
-#include "bootstrap_S.h"
-/* #include "tioctl_S.h" */
-#include "util.h"
-#include "boot_script.h"
-#include "mach_proxy.h"
-
-#include <hurd/auth.h>
-
-#ifdef UX
-#undef STORE /* We can't use libstore when under UX. */
-#else
-#define STORE
-#endif
-
-#ifdef UX
-
-#include "ux.h"
-
-#else /* !UX */
-
-#include <unistd.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <termios.h>
-#include <error.h>
-#include <hurd.h>
-#include <assert.h>
-
-static struct termios orig_tty_state;
-static int isig;
-static char *kernel_command_line;
-
-struct port_bucket *port_bucket;
-struct port_class *task_portclass;
-struct port_class *exc_portclass;
-struct port_class *priv_host_portclass;
-struct port_class *other_portclass;
-
-void destroy_priv_host (void *pi);
-
-static void
-init_termstate ()
-{
- struct termios tty_state;
-
- if (tcgetattr (0, &tty_state) < 0)
- error (10, errno, "tcgetattr");
-
- orig_tty_state = tty_state;
- cfmakeraw (&tty_state);
- if (isig)
- tty_state.c_lflag |= ISIG;
-
- if (tcsetattr (0, 0, &tty_state) < 0)
- error (11, errno, "tcsetattr");
-}
-
-static void
-restore_termstate ()
-{
- tcsetattr (0, 0, &orig_tty_state);
-}
-
-#define host_fstat fstat
-typedef struct stat host_stat_t;
-#define host_exit exit
-
-#endif /* UX */
-
-mach_port_t privileged_host_port, master_device_port, defpager;
-mach_port_t pseudo_master_device_port;
-mach_port_t receive_set;
-mach_port_t pseudo_console, pseudo_root;
-auth_t authserver;
-
-struct port_info *pseudo_priv_host_pi;
-
-struct store *root_store;
-
-spin_lock_t queuelock = SPIN_LOCK_INITIALIZER;
-spin_lock_t readlock = SPIN_LOCK_INITIALIZER;
-
-mach_port_t php_child_name, psmdp_child_name, taskname;
-
-task_t child_task;
-mach_port_t bootport;
-
-int console_mscount;
-
-vm_address_t fs_stack_base;
-vm_size_t fs_stack_size;
-
-void init_termstate ();
-void restore_termstate ();
-
-char *fsname;
-
-char bootstrap_args[100] = "-";
-char *bootdevice = 0;
-char *bootscript = 0;
-
-boolean_t is_user = 0;
-
-
-void safe_gets (char *buf, int buf_len)
-{
- fgets (buf, buf_len, stdin);
-}
-
-char *useropen_dir;
-
-int
-useropen (const char *name, int flags, int mode)
-{
- if (useropen_dir)
- {
- static int dlen;
- if (!dlen) dlen = strlen (useropen_dir);
- {
- int len = strlen (name);
- char try[dlen + 1 + len + 1];
- int fd;
- memcpy (try, useropen_dir, dlen);
- try[dlen] = '/';
- memcpy (&try[dlen + 1], name, len + 1);
- fd = open (try, flags, mode);
- if (fd >= 0)
- return fd;
- }
- }
- return open (name, flags, mode);
-}
-
-int
-request_server (mach_msg_header_t *inp,
- mach_msg_header_t *outp)
-{
- extern int io_server (mach_msg_header_t *, mach_msg_header_t *);
- extern int device_server (mach_msg_header_t *, mach_msg_header_t *);
- extern int notify_server (mach_msg_header_t *, mach_msg_header_t *);
- extern int term_server (mach_msg_header_t *, mach_msg_header_t *);
-/* extern int tioctl_server (mach_msg_header_t *, mach_msg_header_t *); */
- extern int bootstrap_server (mach_msg_header_t *, mach_msg_header_t *);
- extern boolean_t mach_host_server (mach_msg_header_t *InHeadP,
- mach_msg_header_t *OutHeadP);
- extern boolean_t mach_server (mach_msg_header_t *InHeadP,
- mach_msg_header_t *OutHeadP);
- extern void bootstrap_compat ();
-
-#if 0
- if (inp->msgh_local_port == bootport && boot_like_cmudef)
- {
- if (inp->msgh_id == 999999)
- {
- bootstrap_compat (inp, outp);
- return 1;
- }
- else
- return bootstrap_server (inp, outp);
- }
- else
-#endif
- return (io_server (inp, outp)
- || device_server (inp, outp)
- || notify_server (inp, outp)
- || term_server (inp, outp)
- /* || tioctl_server (inp, outp) */);
-}
-
-int
-mach_proxy_demuxer (mach_msg_header_t *inp,
- mach_msg_header_t *outp)
-{
- extern boolean_t mach_server
- (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP);
- extern boolean_t mach_host_server
- (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP);
- extern boolean_t mach_port_server
- (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP);
- extern boolean_t exc_server
- (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP);
- extern int notify_server (mach_msg_header_t *, mach_msg_header_t *);
- return (mach_server (inp, outp)
- || mach_host_server (inp, outp)
- || mach_port_server (inp, outp)
- || notify_server (inp, outp)
- || exc_server (inp, outp));
-}
-
-void
-mach_proxy_thread ()
-{
- ports_manage_port_operations_multithread (port_bucket,
- mach_proxy_demuxer,
- 30 * 1000, 0, 0);
-}
-
-vm_address_t
-load_image (task_t t,
- char *file)
-{
- int fd;
- union
- {
- struct exec a;
- Elf32_Ehdr e;
- } hdr;
- char msg[] = ": cannot open bootstrap file\n";
-
- fd = useropen (file, O_RDONLY, 0);
-
- if (fd == -1)
- {
- write (2, file, strlen (file));
- write (2, msg, sizeof msg - 1);
- task_terminate (t);
- host_exit (1);
- }
-
- read (fd, &hdr, sizeof hdr);
- if (*(Elf32_Word *) hdr.e.e_ident == *(Elf32_Word *) "\177ELF")
- {
- Elf32_Phdr phdrs[hdr.e.e_phnum], *ph;
- lseek (fd, hdr.e.e_phoff, SEEK_SET);
- read (fd, phdrs, sizeof phdrs);
- for (ph = phdrs; ph < &phdrs[sizeof phdrs/sizeof phdrs[0]]; ++ph)
- if (ph->p_type == PT_LOAD)
- {
- vm_address_t buf;
- vm_size_t offs = ph->p_offset & (ph->p_align - 1);
- vm_size_t bufsz = round_page (ph->p_filesz + offs);
-
- buf = (vm_address_t) mmap (0, bufsz,
- PROT_READ|PROT_WRITE, MAP_ANON, 0, 0);
-
- lseek (fd, ph->p_offset, SEEK_SET);
- read (fd, (void *)(buf + offs), ph->p_filesz);
-
- ph->p_memsz = ((ph->p_vaddr + ph->p_memsz + ph->p_align - 1)
- & ~(ph->p_align - 1));
- ph->p_vaddr &= ~(ph->p_align - 1);
- ph->p_memsz -= ph->p_vaddr;
-
- vm_allocate (t, (vm_address_t*)&ph->p_vaddr, ph->p_memsz, 0);
- vm_write (t, ph->p_vaddr, buf, bufsz);
- munmap ((caddr_t) buf, bufsz);
- vm_protect (t, ph->p_vaddr, ph->p_memsz, 0,
- ((ph->p_flags & PF_R) ? VM_PROT_READ : 0) |
- ((ph->p_flags & PF_W) ? VM_PROT_WRITE : 0) |
- ((ph->p_flags & PF_X) ? VM_PROT_EXECUTE : 0));
- }
- return hdr.e.e_entry;
- }
- else
- {
- /* a.out */
- int magic = N_MAGIC (hdr.a);
- int headercruft;
- vm_address_t base = 0x10000;
- int rndamount, amount;
- vm_address_t bsspagestart, bssstart;
- char *buf;
-
- headercruft = sizeof (struct exec) * (magic == ZMAGIC);
-
- amount = headercruft + hdr.a.a_text + hdr.a.a_data;
- rndamount = round_page (amount);
- buf = mmap (0, rndamount, PROT_READ|PROT_WRITE, MAP_ANON, 0, 0);
- lseek (fd, sizeof hdr.a - headercruft, SEEK_SET);
- read (fd, buf, amount);
- vm_allocate (t, &base, rndamount, 0);
- vm_write (t, base, (vm_address_t) buf, rndamount);
- if (magic != OMAGIC)
- vm_protect (t, base, trunc_page (headercruft + hdr.a.a_text),
- 0, VM_PROT_READ | VM_PROT_EXECUTE);
- munmap ((caddr_t) buf, rndamount);
-
- bssstart = base + hdr.a.a_text + hdr.a.a_data + headercruft;
- bsspagestart = round_page (bssstart);
- vm_allocate (t, &bsspagestart,
- hdr.a.a_bss - (bsspagestart - bssstart), 0);
-
- return hdr.a.a_entry;
- }
-}
-
-
-void read_reply ();
-void msg_thread ();
-
-/* Callbacks for boot_script.c; see boot_script.h. */
-
-mach_port_t
-boot_script_read_file (const char *filename)
-{
- static const char msg[] = ": cannot open\n";
- int fd = useropen (filename, O_RDONLY, 0);
- host_stat_t st;
- error_t err;
- mach_port_t memobj;
- vm_address_t region;
-
- write (2, filename, strlen (filename));
- if (fd < 0)
- {
- write (2, msg, sizeof msg - 1);
- host_exit (1);
- }
- else
- write (2, msg + sizeof msg - 2, 1);
-
- host_fstat (fd, &st);
-
- err = default_pager_object_create (defpager, &memobj,
- round_page (st.st_size));
- if (err)
- {
- static const char msg[] = "cannot create default-pager object\n";
- write (2, msg, sizeof msg - 1);
- host_exit (1);
- }
-
- region = 0;
- vm_map (mach_task_self (), &region, round_page (st.st_size),
- 0, 1, memobj, 0, 0, VM_PROT_ALL, VM_PROT_ALL, VM_INHERIT_NONE);
- read (fd, (char *) region, st.st_size);
- munmap ((caddr_t) region, round_page (st.st_size));
-
- close (fd);
- return memobj;
-}
-
-int
-boot_script_exec_cmd (void *hook,
- mach_port_t task, char *path, int argc,
- char **argv, char *strings, int stringlen)
-{
- char *args, *p;
- int arg_len, i;
- size_t reg_size;
- void *arg_pos;
- vm_offset_t stack_start, stack_end;
- vm_address_t startpc, str_start;
- thread_t thread;
-
- write (2, path, strlen (path));
- for (i = 1; i < argc; ++i)
- {
- write (2, " ", 1);
- write (2, argv[i], strlen (argv[i]));
- }
- write (2, "\r\n", 2);
-
- startpc = load_image (task, path);
- arg_len = stringlen + (argc + 2) * sizeof (char *) + sizeof (integer_t);
- arg_len += 5 * sizeof (int);
- stack_end = VM_MAX_ADDRESS;
- stack_start = VM_MAX_ADDRESS - 16 * 1024 * 1024;
- vm_allocate (task, &stack_start, stack_end - stack_start, FALSE);
- arg_pos = (void *) ((stack_end - arg_len) & ~(sizeof (natural_t) - 1));
- args = mmap (0, stack_end - trunc_page ((vm_offset_t) arg_pos),
- PROT_READ|PROT_WRITE, MAP_ANON, 0, 0);
- str_start = ((vm_address_t) arg_pos
- + (argc + 2) * sizeof (char *) + sizeof (integer_t));
- p = args + ((vm_address_t) arg_pos & (vm_page_size - 1));
- *(int *) p = argc;
- p = (void *) p + sizeof (int);
- for (i = 0; i < argc; i++)
- {
- *(char **) p = argv[i] - strings + (char *) str_start;
- p = (void *) p + sizeof (char *);
- }
- *(char **) p = 0;
- p = (void *) p + sizeof (char *);
- *(char **) p = 0;
- p = (void *) p + sizeof (char *);
- memcpy (p, strings, stringlen);
- bzero (args, (vm_offset_t) arg_pos & (vm_page_size - 1));
- vm_write (task, trunc_page ((vm_offset_t) arg_pos), (vm_address_t) args,
- stack_end - trunc_page ((vm_offset_t) arg_pos));
- munmap ((caddr_t) args,
- stack_end - trunc_page ((vm_offset_t) arg_pos));
-
- thread_create (task, &thread);
-#ifdef i386_THREAD_STATE_COUNT
- {
- struct i386_thread_state regs;
- reg_size = i386_THREAD_STATE_COUNT;
- thread_get_state (thread, i386_THREAD_STATE,
- (thread_state_t) &regs, &reg_size);
- regs.eip = (int) startpc;
- regs.uesp = (int) arg_pos;
- thread_set_state (thread, i386_THREAD_STATE,
- (thread_state_t) &regs, reg_size);
- }
-#elif defined(ALPHA_THREAD_STATE_COUNT)
- {
- struct alpha_thread_state regs;
- reg_size = ALPHA_THREAD_STATE_COUNT;
- thread_get_state (thread, ALPHA_THREAD_STATE,
- (thread_state_t) &regs, &reg_size);
- regs.r30 = (natural_t) arg_pos;
- regs.pc = (natural_t) startpc;
- thread_set_state (thread, ALPHA_THREAD_STATE,
- (thread_state_t) &regs, reg_size);
- }
-#else
-# error needs to be ported
-#endif
-
- thread_resume (thread);
- mach_port_deallocate (mach_task_self (), thread);
- return 0;
-}
-
-const char *argp_program_version = STANDARD_HURD_VERSION (boot);
-
-static struct argp_option options[] =
-{
- { "boot-root", 'D', "DIR", 0,
- "Root of a directory tree in which to find files specified in BOOT-SCRIPT" },
- { "single-user", 's', 0, 0,
- "Boot in single user mode" },
- { "kernel-command-line", 'c', "COMMAND LINE", 0,
- "Simulated multiboot command line to supply" },
- { "pause" , 'd', 0, 0,
- "Pause for user confirmation at various times during booting" },
- { "isig", 'I', 0, 0,
- "Do not disable terminal signals, so you can suspend and interrupt boot."},
- { "device-map", 'm', "DEBICENAME=DEVICEFILE", 0,
- "Map the device in subhurd to the device in the main Hurd."},
- { "defpager", 'p', "PAGER TRANSLATOR", 0,
- "Specify the default pager for subhurd."},
- { "user", 'u', 0, 0, "For normal user."},
- { 0 }
-};
-static char args_doc[] = "BOOT-SCRIPT";
-static char doc[] = "Boot a second hurd";
-
-struct dev_map
-{
- char *name;
- mach_port_t port;
- struct dev_map *next;
-};
-
-static struct dev_map *dev_map_head;
-
-static struct dev_map *add_dev_map (char *dev_name, char *dev_file)
-{
- struct dev_map *map = (struct dev_map *) malloc (sizeof (*map));
-
- assert (map);
- map->name = dev_name;
- map->port = file_name_lookup (dev_file, 0, 0);
- if (map->port == MACH_PORT_NULL)
- error (1, errno, "file_name_lookup: %s", dev_file);
- map->next = dev_map_head;
- dev_map_head = map;
- return map;
-}
-
-static struct dev_map *lookup_dev (char *dev_name)
-{
- struct dev_map *map;
-
- for (map = dev_map_head; map; map = map->next)
- {
- if (strcmp (map->name, dev_name) == 0)
- return map;
- }
- return NULL;
-}
-
-char *pager_file;
-
-static error_t
-parse_opt (int key, char *arg, struct argp_state *state)
-{
- char *dev_file;
-
- switch (key)
- {
- size_t len;
-
- case 'c': kernel_command_line = arg; break;
-
- case 'D': useropen_dir = arg; break;
-
- case 'I': isig = 1; break;
-
- case 's': case 'd':
- len = strlen (bootstrap_args);
- if (len >= sizeof bootstrap_args - 1)
- argp_error (state, "Too many bootstrap args");
- bootstrap_args[len++] = key;
- bootstrap_args[len] = '\0';
- break;
-
- case 'm':
- dev_file = strchr (arg, '=');
- if (dev_file == NULL)
- return ARGP_ERR_UNKNOWN;
- *dev_file = 0;
- add_dev_map (arg, dev_file+1);
- break;
-
- case 'p':
- pager_file = arg;
- break;
-
- case 'u':
- is_user = 1;
- break;
-
- case ARGP_KEY_ARG:
- if (state->arg_num == 0)
- bootscript = arg;
- else
- return ARGP_ERR_UNKNOWN;
- break;
-
- case ARGP_KEY_INIT:
- state->child_inputs[0] = state->input; break;
-
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}
-
-static void
-sigint (int signo)
-{
- int kill_task (struct task_info *task_pi)
- {
- task_terminate (task_pi->task_port);
- return 0;
- }
-
- info ("receives an INT");
- foreach_task (kill_task);
- exit (0);
-}
-
-void
-init_signal ()
-{
- struct sigaction sa;
- sa.sa_handler = sigint;
- sa.sa_flags = 0; /* No SA_RESTART! */
- sigemptyset(&sa.sa_mask);
- if (sigaction (SIGINT, &sa, NULL))
- error (2, errno, "cannot set SIGHUP handler");
-}
-
-void
-init_kernel_task ()
-{
- error_t err;
- task_t pseudo_task;
- task_t pseudo_kernel_task;
- process_t real_kernel_task_proc;
- process_t proc;
- extern int create_pseudo_task (task_t real_task, task_t *ret_pseudo_task);
-
- err = task_create (mach_task_self (), 0, &pseudo_kernel_task);
- if (err)
- error (4, err, "cannot create the pseudo kernel task.");
-
- err = proc_task2proc (getproc (), pseudo_kernel_task, &proc);
- if (err)
- error (4, err, "cannot get the proc port for the pseudo kernel task.");
-
- err = task_set_bootstrap_port (pseudo_kernel_task, proc);
- if (err)
- error (4, err, "cannot set the pseudo kernel task's bootstrap port");
-
- err = proc_pid2proc (getproc (), 2, &real_kernel_task_proc);
- if (err)
- error (4, err, "cannot get the kernel task's proc port");
-
- vm_address_t kargv, kenvp;
- err = proc_get_arg_locations (real_kernel_task_proc, &kargv, &kenvp);
- if (err)
- error (4, err, "cannot get the kernel task's argument");
- proc_set_arg_locations (proc, kargv, kenvp);
- create_pseudo_task (pseudo_kernel_task, &pseudo_task);
- // TODO the pseudo kernel task has to been destroyed after subhurd exits.
-}
-
-FILE *logfile;
-
-int
-main (int argc, char **argv, char **envp)
-{
- error_t err;
- mach_port_t foo;
- char *buf = 0;
- int i, len;
- char *root_store_name;
- const struct argp_child kids[] = { { &store_argp }, { 0 }};
- struct argp argp = { options, parse_opt, args_doc, doc, kids };
- struct store_argp_params store_argp_params = { 0 };
- mach_port_t subhurd_privileged_host_port = MACH_PORT_NULL;
-
- LOG_START ();
-
- argp_parse (&argp, argc, argv, 0, 0, &store_argp_params);
- err = store_parsed_name (store_argp_params.result, &root_store_name);
- if (err)
- error (2, err, "store_parsed_name");
-
- err = store_parsed_open (store_argp_params.result, 0, &root_store);
- if (err)
- error (4, err, "%s", root_store_name);
-
- init_signal ();
- if (!is_user)
- {
- get_privileged_ports (&privileged_host_port, &master_device_port);
- defpager = MACH_PORT_NULL;
- err = vm_set_default_memory_manager (privileged_host_port, &defpager);
- if (err)
- error (4, err, "vm_set_default_memory_manager");
- subhurd_privileged_host_port = privileged_host_port;
- }
- else
- {
- port_bucket = ports_create_bucket ();
- task_portclass = ports_create_class (clean_pseudo_task, 0);
- priv_host_portclass = ports_create_class (destroy_priv_host, 0);
- exc_portclass = ports_create_class (0, 0);
- other_portclass = ports_create_class (0, 0);
- init_kernel_task ();
- cthread_detach (cthread_fork ((cthread_fn_t) mach_proxy_thread,
- (any_t) 0));
- {
- mach_port_t priv_host;
- get_privileged_ports (&priv_host, NULL);
- defpager = MACH_PORT_NULL;
- err = vm_set_default_memory_manager (priv_host, &defpager);
- if (err)
- error (4, err, "vm_set_default_memory_manager");
- mach_port_deallocate (mach_task_self (), priv_host);
- }
-// if (pager_file == NULL)
-// error (4, 0, "The default pager must be specified for subhurd.");
-// defpager = file_name_lookup (pager_file, O_EXEC, 0);
-// if (defpager == MACH_PORT_NULL)
-// error (4, errno, "file_name_look: %s", pager_file);
-
- /* Initialize the pseudo privileged host port. */
- err = ports_create_port (priv_host_portclass, port_bucket,
- sizeof (struct port_info),
- &pseudo_priv_host_pi);
- if (err)
- error (4, err, "fail to create the pseudo privileged host port");
- subhurd_privileged_host_port = ports_get_send_right (pseudo_priv_host_pi);
- ports_port_deref (pseudo_priv_host_pi);
- }
-
- strcat (bootstrap_args, "f");
-
- mach_port_allocate (mach_task_self (), MACH_PORT_RIGHT_PORT_SET,
- &receive_set);
-
- if (root_store->class == &store_device_class && root_store->name
- && (root_store->flags & STORE_ENFORCED)
- && root_store->num_runs == 1 && root_store->runs[0].start == 0)
- /* Let known device nodes pass through directly. */
- bootdevice = root_store->name;
- else
- /* Pass a magic value that we can use to do I/O to ROOT_STORE. */
- {
- bootdevice = "pseudo-root";
- mach_port_allocate (mach_task_self (), MACH_PORT_RIGHT_RECEIVE,
- &pseudo_root);
- mach_port_move_member (mach_task_self (), pseudo_root, receive_set);
- }
-
- /* Initialize the pseudo master device port. */
- mach_port_allocate (mach_task_self (), MACH_PORT_RIGHT_RECEIVE,
- &pseudo_master_device_port);
- mach_port_insert_right (mach_task_self (),
- pseudo_master_device_port,
- pseudo_master_device_port,
- MACH_MSG_TYPE_MAKE_SEND);
- mach_port_move_member (mach_task_self (), pseudo_master_device_port,
- receive_set);
- mach_port_request_notification (mach_task_self (), pseudo_master_device_port,
- MACH_NOTIFY_NO_SENDERS, 1,
- pseudo_master_device_port,
- MACH_MSG_TYPE_MAKE_SEND_ONCE, &foo);
- if (foo != MACH_PORT_NULL)
- mach_port_deallocate (mach_task_self (), foo);
-
- /* Initialize the pseudo console port. */
- mach_port_allocate (mach_task_self (), MACH_PORT_RIGHT_RECEIVE,
- &pseudo_console);
- mach_port_move_member (mach_task_self (), pseudo_console, receive_set);
- mach_port_request_notification (mach_task_self (), pseudo_console,
- MACH_NOTIFY_NO_SENDERS, 1, pseudo_console,
- MACH_MSG_TYPE_MAKE_SEND_ONCE, &foo);
- if (foo != MACH_PORT_NULL)
- mach_port_deallocate (mach_task_self (), foo);
-
- if (kernel_command_line == 0)
- asprintf (&kernel_command_line, "%s %s root=%s",
- argv[0], bootstrap_args, bootdevice);
-
- /* Initialize boot script variables. */
- if (boot_script_set_variable ("host-port", VAL_PORT,
- (int) subhurd_privileged_host_port)
- || boot_script_set_variable ("device-port", VAL_PORT,
- (integer_t) pseudo_master_device_port)
- || boot_script_set_variable ("kernel-command-line", VAL_STR,
- (integer_t) kernel_command_line)
- || boot_script_set_variable ("root-device",
- VAL_STR, (integer_t) bootdevice)
- || boot_script_set_variable ("boot-args",
- VAL_STR, (integer_t) bootstrap_args))
- {
- static const char msg[] = "error setting variable";
-
- write (2, msg, strlen (msg));
- host_exit (1);
- }
-
- /* Turn each `FOO=BAR' word in the command line into a boot script
- variable ${FOO} with value BAR. */
- {
- int len = strlen (kernel_command_line) + 1;
- char *s = memcpy (alloca (len), kernel_command_line, len);
- char *word;
-
- while ((word = strsep (&s, " \t")) != 0)
- {
- char *eq = strchr (word, '=');
- if (eq == 0)
- continue;
- *eq++ = '\0';
- err = boot_script_set_variable (word, VAL_STR, (integer_t) eq);
- if (err)
- {
- char *msg;
- asprintf (&msg, "cannot set boot-script variable %s: %s\n",
- word, boot_script_error_string (err));
- assert (msg);
- write (2, msg, strlen (msg));
- free (msg);
- host_exit (1);
- }
- }
- }
-
- /* Parse the boot script. */
- {
- char *p, *line;
- static const char filemsg[] = "Can't open boot script\n";
- static const char memmsg[] = "Not enough memory\n";
- int amt, fd, err;
-
- fd = open (bootscript, O_RDONLY, 0);
- if (fd < 0)
- {
- write (2, filemsg, sizeof (filemsg));
- host_exit (1);
- }
- p = buf = malloc (500);
- if (!buf)
- {
- write (2, memmsg, sizeof (memmsg));
- host_exit (1);
- }
- len = 500;
- amt = 0;
- while (1)
- {
- i = read (fd, p, len - (p - buf));
- if (i <= 0)
- break;
- p += i;
- amt += i;
- if (p == buf + len)
- {
- char *newbuf;
-
- len += 500;
- newbuf = realloc (buf, len);
- if (!newbuf)
- {
- write (2, memmsg, sizeof (memmsg));
- host_exit (1);
- }
- p = newbuf + (p - buf);
- buf = newbuf;
- }
- }
- line = p = buf;
- while (1)
- {
- while (p < buf + amt && *p != '\n')
- p++;
- *p = '\0';
- err = boot_script_parse_line (0, line);
- if (err)
- {
- char *str;
- int i;
-
- str = boot_script_error_string (err);
- i = strlen (str);
- write (2, str, i);
- write (2, " in `", 5);
- write (2, line, strlen (line));
- write (2, "'\n", 2);
- host_exit (1);
- }
- if (p == buf + amt)
- break;
- line = ++p;
- }
- }
-
- if (index (bootstrap_args, 'd'))
- {
- static const char msg[] = "Pausing. . .";
- char c;
- write (2, msg, sizeof (msg) - 1);
- read (0, &c, 1);
- }
-
- init_termstate ();
-
- /* The boot script has now been parsed into internal data structures.
- Now execute its directives. */
- {
- int err;
-
- err = boot_script_exec ();
- if (err)
- {
- char *str = boot_script_error_string (err);
- int i = strlen (str);
-
- write (2, str, i);
- host_exit (1);
- }
- free (buf);
- }
-
- mach_port_deallocate (mach_task_self (), pseudo_master_device_port);
- if (is_user)
- mach_port_deallocate (mach_task_self (), subhurd_privileged_host_port);
-
- cthread_detach (cthread_fork ((cthread_fn_t) msg_thread, (any_t) 0));
-
- for (;;)
- {
- fd_set rmask;
- FD_ZERO (&rmask);
- FD_SET (0, &rmask);
- if (select (1, &rmask, 0, 0, 0) == 1)
- read_reply ();
- else /* We hosed */
- error (5, errno, "select");
- }
-
- LOG_END ();
-/* mach_msg_server (request_server, __vm_page_size * 2, receive_set); */
-}
-
-void
-msg_thread()
-{
- while (1)
- mach_msg_server (request_server, 0, receive_set);
-}
-
-
-enum read_type
-{
- DEV_READ,
- DEV_READI,
- IO_READ,
-};
-struct qr
-{
- enum read_type type;
- mach_port_t reply_port;
- mach_msg_type_name_t reply_type;
- int amount;
- struct qr *next;
-};
-struct qr *qrhead, *qrtail;
-
-/* Queue a read for later reply. */
-kern_return_t
-queue_read (enum read_type type,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- int amount)
-{
- struct qr *qr;
-
- qr = malloc (sizeof (struct qr));
- if (!qr)
- return D_NO_MEMORY;
-
- spin_lock (&queuelock);
-
- qr->type = type;
- qr->reply_port = reply_port;
- qr->reply_type = reply_type;
- qr->amount = amount;
- qr->next = 0;
- if (qrtail)
- qrtail->next = qr;
- else
- qrhead = qrtail = qr;
-
- spin_unlock (&queuelock);
- return D_SUCCESS;
-}
-
-/* TRUE if there's data available on stdin, which should be used to satisfy
- console read requests. */
-static int should_read = 0;
-
-/* Reply to a queued read. */
-void
-read_reply ()
-{
- int avail;
- struct qr *qr;
- char * buf;
- int amtread;
-
- /* By forcing SHOULD_READ to true before trying the lock, we ensure that
- either we get the lock ourselves or that whoever currently holds the
- lock will service this read when he unlocks it. */
- should_read = 1;
- if (! spin_try_lock (&readlock))
- return;
-
- /* Since we're commited to servicing the read, no one else need do so. */
- should_read = 0;
-
- ioctl (0, FIONREAD, &avail);
- if (!avail)
- {
- spin_unlock (&readlock);
- return;
- }
-
- spin_lock (&queuelock);
-
- if (!qrhead)
- {
- spin_unlock (&queuelock);
- spin_unlock (&readlock);
- return;
- }
-
- qr = qrhead;
- qrhead = qr->next;
- if (qr == qrtail)
- qrtail = 0;
-
- spin_unlock (&queuelock);
-
- if (qr->type == DEV_READ)
- buf = mmap (0, qr->amount, PROT_READ|PROT_WRITE, MAP_ANON, 0, 0);
- else
- buf = alloca (qr->amount);
- amtread = read (0, buf, qr->amount);
-
- spin_unlock (&readlock);
-
- switch (qr->type)
- {
- case DEV_READ:
- if (amtread >= 0)
- ds_device_read_reply (qr->reply_port, qr->reply_type, 0,
- (io_buf_ptr_t) buf, amtread);
- else
- ds_device_read_reply (qr->reply_port, qr->reply_type, errno, 0, 0);
- break;
-
- case DEV_READI:
- if (amtread >= 0)
- ds_device_read_reply_inband (qr->reply_port, qr->reply_type, 0,
- buf, amtread);
- else
- ds_device_read_reply_inband (qr->reply_port, qr->reply_type, errno,
- 0, 0);
- break;
-
- case IO_READ:
- if (amtread >= 0)
- io_read_reply (qr->reply_port, qr->reply_type, 0,
- buf, amtread);
- else
- io_read_reply (qr->reply_port, qr->reply_type, errno, 0, 0);
- break;
- }
-
- free (qr);
-}
-
-/* Unlock READLOCK, and also service any new read requests that it was
- blocking. */
-static void
-unlock_readlock ()
-{
- spin_unlock (&readlock);
- while (should_read)
- read_reply ();
-}
-
-/*
- * Handle bootstrap requests.
- */
-/* These two functions from .../mk/bootstrap/default_pager.c. */
-
-kern_return_t
-do_bootstrap_privileged_ports(bootstrap, hostp, devicep)
- mach_port_t bootstrap;
- mach_port_t *hostp, *devicep;
-{
- if (is_user)
- /* I cannot use ports_get_right() here,
- * because the port will be copied to the client. */
- *hostp = pseudo_priv_host_pi->port_right;
- else
- *hostp = privileged_host_port;
- *devicep = pseudo_master_device_port;
- return KERN_SUCCESS;
-}
-
-void
-bootstrap_compat(in, out)
- mach_msg_header_t *in, *out;
-{
- mig_reply_header_t *reply = (mig_reply_header_t *) out;
- mach_msg_return_t mr;
-
- struct imsg {
- mach_msg_header_t hdr;
- mach_msg_type_t port_desc_1;
- mach_port_t port_1;
- mach_msg_type_t port_desc_2;
- mach_port_t port_2;
- } imsg;
-
- /*
- * Send back the host and device ports.
- */
-
- imsg.hdr.msgh_bits = MACH_MSGH_BITS_COMPLEX |
- MACH_MSGH_BITS(MACH_MSGH_BITS_REMOTE(in->msgh_bits), 0);
- /* msgh_size doesn't need to be initialized */
- imsg.hdr.msgh_remote_port = in->msgh_remote_port;
- imsg.hdr.msgh_local_port = MACH_PORT_NULL;
- /* msgh_seqno doesn't need to be initialized */
- imsg.hdr.msgh_id = in->msgh_id + 100; /* this is a reply msg */
-
- imsg.port_desc_1.msgt_name = MACH_MSG_TYPE_COPY_SEND;
- imsg.port_desc_1.msgt_size = (sizeof(mach_port_t) * 8);
- imsg.port_desc_1.msgt_number = 1;
- imsg.port_desc_1.msgt_inline = TRUE;
- imsg.port_desc_1.msgt_longform = FALSE;
- imsg.port_desc_1.msgt_deallocate = FALSE;
- imsg.port_desc_1.msgt_unused = 0;
-
- if (is_user)
- imsg.port_1 = pseudo_priv_host_pi->port_right;
- else
- imsg.port_1 = privileged_host_port;
-
- imsg.port_desc_2 = imsg.port_desc_1;
-
- imsg.port_desc_2.msgt_name = MACH_MSG_TYPE_MAKE_SEND;
- imsg.port_2 = pseudo_master_device_port;
-
- /*
- * Send the reply message.
- * (mach_msg_server can not do this, because the reply
- * is not in standard format.)
- */
-
- mr = mach_msg(&imsg.hdr, MACH_SEND_MSG,
- sizeof imsg, 0, MACH_PORT_NULL,
- MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
- if (mr != MACH_MSG_SUCCESS)
- (void) mach_port_deallocate(mach_task_self (),
- imsg.hdr.msgh_remote_port);
-
- /*
- * Tell mach_msg_server to do nothing.
- */
-
- reply->RetCode = MIG_NO_REPLY;
-}
-
-/* Implementation of device interface */
-
-kern_return_t
-ds_device_open (mach_port_t master_port,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- dev_mode_t mode,
- dev_name_t name,
- mach_port_t *device,
- mach_msg_type_name_t *devicetype)
-{
- struct dev_map *map;
-
- if (master_port != pseudo_master_device_port)
- return D_INVALID_OPERATION;
-
- debug ("open %s", name);
- if (!strcmp (name, "console"))
- {
-#if 0
- mach_port_insert_right (mach_task_self (), pseudo_console,
- pseudo_console, MACH_MSG_TYPE_MAKE_SEND);
- console_send_rights++;
-#endif
- console_mscount++;
- *device = pseudo_console;
- *devicetype = MACH_MSG_TYPE_MAKE_SEND;
- return 0;
- }
- else if (strcmp (name, "pseudo-root") == 0)
- /* Magic root device. */
- {
- *device = pseudo_root;
- *devicetype = MACH_MSG_TYPE_MAKE_SEND;
- return 0;
- }
-
- map = lookup_dev (name);
- if (map)
- {
- error_t err;
- *devicetype = MACH_MSG_TYPE_MOVE_SEND;
- err = device_open (map->port, mode, "", device);
- return err;
- }
-
- if (is_user)
- return D_NO_SUCH_DEVICE;
- else
- {
- *devicetype = MACH_MSG_TYPE_MOVE_SEND;
- return device_open (master_device_port, mode, name, device);
- }
-}
-
-kern_return_t
-ds_device_close (device_t device)
-{
- if (device != pseudo_console && device != pseudo_root)
- return D_NO_SUCH_DEVICE;
- return 0;
-}
-
-kern_return_t
-ds_device_write (device_t device,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- dev_mode_t mode,
- recnum_t recnum,
- io_buf_ptr_t data,
- size_t datalen,
- int *bytes_written)
-{
- if (device == pseudo_console)
- {
-#if 0
- if (console_send_rights)
- {
- mach_port_mod_refs (mach_task_self (), pseudo_console,
- MACH_PORT_TYPE_SEND, -console_send_rights);
- console_send_rights = 0;
- }
-#endif
-
- *bytes_written = write (1, data, datalen);
-
- return (*bytes_written == -1 ? D_IO_ERROR : D_SUCCESS);
- }
- else if (device == pseudo_root)
- {
- size_t wrote;
- if (store_write (root_store, recnum, data, datalen, &wrote) != 0)
- return D_IO_ERROR;
- *bytes_written = wrote;
- return D_SUCCESS;
- }
- else
- return D_NO_SUCH_DEVICE;
-}
-
-kern_return_t
-ds_device_write_inband (device_t device,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- dev_mode_t mode,
- recnum_t recnum,
- io_buf_ptr_inband_t data,
- size_t datalen,
- int *bytes_written)
-{
- if (device == pseudo_console)
- {
-#if 0
- if (console_send_rights)
- {
- mach_port_mod_refs (mach_task_self (), pseudo_console,
- MACH_PORT_TYPE_SEND, -console_send_rights);
- console_send_rights = 0;
- }
-#endif
-
- *bytes_written = write (1, data, datalen);
-
- return (*bytes_written == -1 ? D_IO_ERROR : D_SUCCESS);
- }
- else if (device == pseudo_root)
- {
- size_t wrote;
- if (store_write (root_store, recnum, data, datalen, &wrote) != 0)
- return D_IO_ERROR;
- *bytes_written = wrote;
- return D_SUCCESS;
- }
- else
- return D_NO_SUCH_DEVICE;
-}
-
-kern_return_t
-ds_device_read (device_t device,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- dev_mode_t mode,
- recnum_t recnum,
- int bytes_wanted,
- io_buf_ptr_t *data,
- size_t *datalen)
-{
- if (device == pseudo_console)
- {
- int avail;
-
-#if 0
- if (console_send_rights)
- {
- mach_port_mod_refs (mach_task_self (), pseudo_console,
- MACH_PORT_TYPE_SEND, -console_send_rights);
- console_send_rights = 0;
- }
-#endif
-
- spin_lock (&readlock);
- ioctl (0, FIONREAD, &avail);
- if (avail)
- {
- *data = mmap (0, bytes_wanted, PROT_READ|PROT_WRITE, MAP_ANON, 0, 0);
- *datalen = read (0, *data, bytes_wanted);
- unlock_readlock ();
- return (*datalen == -1 ? D_IO_ERROR : D_SUCCESS);
- }
- else
- {
- kern_return_t err;
-
- unlock_readlock ();
- err = queue_read (DEV_READ, reply_port, reply_type, bytes_wanted);
- if (err)
- return err;
- return MIG_NO_REPLY;
- }
- }
- else if (device == pseudo_root)
- {
- *datalen = 0;
- return
- (store_read (root_store, recnum, bytes_wanted, (void **)data, datalen) == 0
- ? D_SUCCESS
- : D_IO_ERROR);
- }
- else
- return D_NO_SUCH_DEVICE;
-}
-
-kern_return_t
-ds_device_read_inband (device_t device,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- dev_mode_t mode,
- recnum_t recnum,
- int bytes_wanted,
- io_buf_ptr_inband_t data,
- size_t *datalen)
-{
- if (device == pseudo_console)
- {
- int avail;
-
-#if 0
- if (console_send_rights)
- {
- mach_port_mod_refs (mach_task_self (), pseudo_console,
- MACH_PORT_TYPE_SEND, -console_send_rights);
- console_send_rights = 0;
- }
-#endif
-
- spin_lock (&readlock);
- ioctl (0, FIONREAD, &avail);
- if (avail)
- {
- *datalen = read (0, data, bytes_wanted);
- unlock_readlock ();
- return (*datalen == -1 ? D_IO_ERROR : D_SUCCESS);
- }
- else
- {
- kern_return_t err;
-
- unlock_readlock ();
- err = queue_read (DEV_READI, reply_port, reply_type, bytes_wanted);
- if (err)
- return err;
- return MIG_NO_REPLY;
- }
- }
- else if (device == pseudo_root)
- {
- error_t err;
- void *returned = data;
-
- *datalen = bytes_wanted;
- err =
- store_read (root_store, recnum, bytes_wanted, (void **)&returned, datalen);
-
- if (! err)
- {
- if (returned != data)
- {
- bcopy (returned, (void *)data, *datalen);
- munmap ((caddr_t) returned, *datalen);
- }
- return D_SUCCESS;
- }
- else
- return D_IO_ERROR;
- }
- else
- return D_NO_SUCH_DEVICE;
-}
-
-kern_return_t
-ds_xxx_device_set_status (device_t device,
- dev_flavor_t flavor,
- dev_status_t status,
- size_t statu_cnt)
-{
- if (device != pseudo_console)
- return D_NO_SUCH_DEVICE;
- return D_INVALID_OPERATION;
-}
-
-kern_return_t
-ds_xxx_device_get_status (device_t device,
- dev_flavor_t flavor,
- dev_status_t status,
- size_t *statuscnt)
-{
- if (device != pseudo_console && device != pseudo_root)
- return D_NO_SUCH_DEVICE;
- return D_INVALID_OPERATION;
-}
-
-kern_return_t
-ds_xxx_device_set_filter (device_t device,
- mach_port_t rec,
- int pri,
- filter_array_t filt,
- size_t len)
-{
- if (device != pseudo_console && device != pseudo_root)
- return D_NO_SUCH_DEVICE;
- return D_INVALID_OPERATION;
-}
-
-kern_return_t
-ds_device_map (device_t device,
- vm_prot_t prot,
- vm_offset_t offset,
- vm_size_t size,
- memory_object_t *pager,
- int unmap)
-{
- if (device != pseudo_console && device != pseudo_root)
- return D_NO_SUCH_DEVICE;
- return D_INVALID_OPERATION;
-}
-
-kern_return_t
-ds_device_set_status (device_t device,
- dev_flavor_t flavor,
- dev_status_t status,
- size_t statuslen)
-{
- if (device != pseudo_console && device != pseudo_root)
- return D_NO_SUCH_DEVICE;
- return D_INVALID_OPERATION;
-}
-
-kern_return_t
-ds_device_get_status (device_t device,
- dev_flavor_t flavor,
- dev_status_t status,
- size_t *statuslen)
-{
- if (device == pseudo_console)
- return D_INVALID_OPERATION;
- else if (device == pseudo_root)
- if (flavor == DEV_GET_SIZE)
- if (*statuslen < DEV_GET_SIZE_COUNT)
- return D_INVALID_SIZE;
- else
- {
- status[DEV_GET_SIZE_DEVICE_SIZE] = root_store->size;
- status[DEV_GET_SIZE_RECORD_SIZE] = root_store->block_size;
- *statuslen = DEV_GET_SIZE_COUNT;
- return D_SUCCESS;
- }
- else
- return D_INVALID_OPERATION;
- else
- return D_NO_SUCH_DEVICE;
-}
-
-kern_return_t
-ds_device_set_filter (device_t device,
- mach_port_t receive_port,
- int priority,
- filter_array_t filter,
- size_t filterlen)
-{
- if (device != pseudo_console && device != pseudo_root)
- return D_NO_SUCH_DEVICE;
- return D_INVALID_OPERATION;
-}
-
-
-/* Implementation of notify interface */
-kern_return_t
-do_mach_notify_port_deleted (mach_port_t notify,
- mach_port_t name)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-do_mach_notify_msg_accepted (mach_port_t notify,
- mach_port_t name)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-do_mach_notify_port_destroyed (mach_port_t notify,
- mach_port_t port)
-{
- return EOPNOTSUPP;
-}
-
-boolean_t pseudo_priv_host_destroyed = FALSE;
-
-void
-destroy_priv_host (void *pi)
-{
- pseudo_priv_host_destroyed = TRUE;
- info ("pseudo privileged host port is destroyed");
-}
-
-kern_return_t
-do_mach_notify_no_senders (mach_port_t notify,
- mach_port_mscount_t mscount)
-{
- static int no_console;
- mach_port_t foo;
- error_t err = EOPNOTSUPP;
-
- if (notify == pseudo_master_device_port)
- {
- info ("pseudo master device port has no senders");
- /* for the root */
- if (no_console && !is_user)
- goto bye;
- /* for the normal user */
- if (no_console && is_user && pseudo_priv_host_destroyed)
- goto bye;
- pseudo_master_device_port = MACH_PORT_NULL;
- return 0;
- }
- if (pseudo_priv_host_pi->port_right == notify && is_user)
- {
- if (no_console && pseudo_master_device_port == MACH_PORT_NULL)
- goto bye;
- pseudo_priv_host_destroyed = TRUE;
- return 0;
- }
- if (notify == pseudo_console)
- {
- info ("pseudo console has no senders");
- if (
- /* for the root */
- (mscount == console_mscount &&
- pseudo_master_device_port == MACH_PORT_NULL &&
- !is_user) ||
- /* for the normal user */
- (mscount == console_mscount &&
- pseudo_master_device_port == MACH_PORT_NULL &&
- pseudo_priv_host_destroyed &&
- is_user))
- {
- bye:
- restore_termstate ();
- write (2, "bye\n", 4);
- host_exit (0);
- }
- else
- {
- no_console = (mscount == console_mscount);
- info ("no console: %d", no_console);
-
- mach_port_request_notification (mach_task_self (), pseudo_console,
- MACH_NOTIFY_NO_SENDERS,
- console_mscount == mscount
- ? mscount + 1
- : console_mscount,
- pseudo_console,
- MACH_MSG_TYPE_MAKE_SEND_ONCE, &foo);
- if (foo != MACH_PORT_NULL)
- mach_port_deallocate (mach_task_self (), foo);
- }
- }
-
- err = ports_do_mach_notify_no_senders (notify, mscount);
-
- return err;
-}
-
-kern_return_t
-do_mach_notify_send_once (mach_port_t notify)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-do_mach_notify_dead_name (mach_port_t notify,
- mach_port_t name)
-{
-#if 0
- if (name == child_task && notify == bootport)
- host_exit (0);
-#endif
- return EOPNOTSUPP;
-}
-
-
-/* Implementation of the Hurd I/O interface, which
- we support for the console port only. */
-
-kern_return_t
-S_io_write (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- char *data,
- mach_msg_type_number_t datalen,
- off_t offset,
- mach_msg_type_number_t *amtwritten)
-{
- if (object != pseudo_console)
- return EOPNOTSUPP;
-
-#if 0
- if (console_send_rights)
- {
- mach_port_mod_refs (mach_task_self (), pseudo_console,
- MACH_PORT_TYPE_SEND, -console_send_rights);
- console_send_rights = 0;
- }
-#endif
-
- *amtwritten = write (1, data, datalen);
- return *amtwritten == -1 ? errno : 0;
-}
-
-kern_return_t
-S_io_read (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- char **data,
- mach_msg_type_number_t *datalen,
- off_t offset,
- mach_msg_type_number_t amount)
-{
- mach_msg_type_number_t avail;
-
- if (object != pseudo_console)
- return EOPNOTSUPP;
-
-#if 0
- if (console_send_rights)
- {
- mach_port_mod_refs (mach_task_self (), pseudo_console,
- MACH_PORT_TYPE_SEND, -console_send_rights);
- console_send_rights = 0;
- }
-#endif
-
- spin_lock (&readlock);
- ioctl (0, FIONREAD, &avail);
- if (avail)
- {
- if (amount > *datalen)
- *data = mmap (0, amount, PROT_READ|PROT_WRITE, MAP_ANON, 0, 0);
- *datalen = read (0, *data, amount);
- unlock_readlock ();
- return *datalen == -1 ? errno : 0;
- }
- else
- {
- kern_return_t err;
- unlock_readlock ();
- err = queue_read (IO_READ, reply_port, reply_type, amount);
- if (err)
- return err;
- return MIG_NO_REPLY;
- }
-}
-
-kern_return_t
-S_io_seek (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- off_t offset,
- int whence,
- off_t *newp)
-{
- return object == pseudo_console ? ESPIPE : EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_readable (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- mach_msg_type_number_t *amt)
-{
- if (object != pseudo_console)
- return EOPNOTSUPP;
- ioctl (0, FIONREAD, amt);
- return 0;
-}
-
-kern_return_t
-S_io_set_all_openmodes (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- int bits)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_get_openmodes (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- int *modes)
-{
- *modes = O_READ | O_WRITE;
- return object == pseudo_console ? 0 : EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_set_some_openmodes (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- int bits)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_clear_some_openmodes (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- int bits)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_async (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- mach_port_t notify,
- mach_port_t *id,
- mach_msg_type_name_t *idtype)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_mod_owner (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- pid_t owner)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_get_owner (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- pid_t *owner)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_get_icky_async_id (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- mach_port_t *id,
- mach_msg_type_name_t *idtype)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_select (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- int *type)
-{
- fd_set r, w, x;
- int n;
-
- if (object != pseudo_console)
- return EOPNOTSUPP;
-
- FD_ZERO (&r);
- FD_ZERO (&w);
- FD_ZERO (&x);
- FD_SET (0, &r);
- FD_SET (0, &w);
- FD_SET (0, &x);
-
- n = select (1,
- (*type & SELECT_READ) ? &r : 0,
- (*type & SELECT_WRITE) ? &w : 0,
- (*type & SELECT_URG) ? &x : 0,
- 0);
- if (n < 0)
- return errno;
-
- if (! FD_ISSET (0, &r))
- *type &= ~SELECT_READ;
- if (! FD_ISSET (0, &w))
- *type &= ~SELECT_WRITE;
- if (! FD_ISSET (0, &x))
- *type &= ~SELECT_URG;
-
- return 0;
-}
-
-kern_return_t
-S_io_stat (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- struct stat *st)
-{
- if (object != pseudo_console)
- return EOPNOTSUPP;
-
- bzero (st, sizeof (struct stat));
- st->st_blksize = 1024;
- return 0;
-}
-
-kern_return_t
-S_io_reauthenticate (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- mach_port_t rend)
-{
- uid_t *gu, *au;
- gid_t *gg, *ag;
- size_t gulen = 0, aulen = 0, gglen = 0, aglen = 0;
- error_t err;
-
- err = mach_port_insert_right (mach_task_self (), object, object,
- MACH_MSG_TYPE_MAKE_SEND);
- assert_perror (err);
-
- if (! auth_server_authenticate (authserver,
- rend, MACH_MSG_TYPE_COPY_SEND,
- object, MACH_MSG_TYPE_COPY_SEND,
- &gu, &gulen,
- &au, &aulen,
- &gg, &gglen,
- &ag, &aglen))
- {
- mig_deallocate ((vm_address_t) gu, gulen * sizeof *gu);
- mig_deallocate ((vm_address_t) au, aulen * sizeof *gu);
- mig_deallocate ((vm_address_t) gg, gglen * sizeof *gu);
- mig_deallocate ((vm_address_t) au, aulen * sizeof *gu);
- }
- mach_port_deallocate (mach_task_self (), rend);
- mach_port_deallocate (mach_task_self (), object);
-
- return 0;
-}
-
-kern_return_t
-S_io_restrict_auth (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- mach_port_t *newobject,
- mach_msg_type_name_t *newobjtype,
- uid_t *uids,
- size_t nuids,
- uid_t *gids,
- size_t ngids)
-{
- if (object != pseudo_console)
- return EOPNOTSUPP;
- *newobject = pseudo_console;
- *newobjtype = MACH_MSG_TYPE_MAKE_SEND;
- console_mscount++;
- return 0;
-}
-
-kern_return_t
-S_io_duplicate (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- mach_port_t *newobj,
- mach_msg_type_name_t *newobjtype)
-{
- if (object != pseudo_console)
- return EOPNOTSUPP;
- *newobj = pseudo_console;
- *newobjtype = MACH_MSG_TYPE_MAKE_SEND;
- console_mscount++;
- return 0;
-}
-
-kern_return_t
-S_io_server_version (mach_port_t object,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- char *name,
- int *maj,
- int *min,
- int *edit)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_map (mach_port_t obj,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- mach_port_t *rd,
- mach_msg_type_name_t *rdtype,
- mach_port_t *wr,
- mach_msg_type_name_t *wrtype)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_map_cntl (mach_port_t obj,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- mach_port_t *mem,
- mach_msg_type_name_t *memtype)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_get_conch (mach_port_t obj,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_release_conch (mach_port_t obj,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_eofnotify (mach_port_t obj,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type)
-
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_prenotify (mach_port_t obj,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- vm_offset_t start,
- vm_offset_t end)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_postnotify (mach_port_t obj,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- vm_offset_t start,
- vm_offset_t end)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_readsleep (mach_port_t obj,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_readnotify (mach_port_t obj,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type)
-{
- return EOPNOTSUPP;
-}
-
-
-kern_return_t
-S_io_sigio (mach_port_t obj,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type)
-{
- return EOPNOTSUPP;
-}
-
-
-kern_return_t
-S_io_pathconf (mach_port_t obj,
- mach_port_t reply_port,
- mach_msg_type_name_t reply_type,
- int name, int *value)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_identity (mach_port_t obj,
- mach_port_t reply,
- mach_msg_type_name_t replytype,
- mach_port_t *id,
- mach_msg_type_name_t *idtype,
- mach_port_t *fsid,
- mach_msg_type_name_t *fsidtype,
- ino_t *fileno)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_io_revoke (mach_port_t obj,
- mach_port_t reply, mach_msg_type_name_t replyPoly)
-{
- return EOPNOTSUPP;
-}
-
-
-
-/* Implementation of the Hurd terminal driver interface, which we only
- support on the console device. */
-
-kern_return_t
-S_termctty_open_terminal (mach_port_t object,
- int flags,
- mach_port_t *result,
- mach_msg_type_name_t *restype)
-{
- return EOPNOTSUPP;
-}
-
-kern_return_t
-S_term_getctty (mach_port_t object,
- mach_port_t *cttyid, mach_msg_type_name_t *cttyPoly)
-{
- static mach_port_t id = MACH_PORT_NULL;
-
- if (object != pseudo_console)
- return EOPNOTSUPP;
-
- if (id == MACH_PORT_NULL)
- mach_port_allocate (mach_task_self (), MACH_PORT_RIGHT_DEAD_NAME, &id);
-
- *cttyid = id;
- *cttyPoly = MACH_MSG_TYPE_COPY_SEND;
- return 0;
-}
-
-
-kern_return_t S_term_open_ctty
-(
- io_t terminal,
- pid_t pid,
- pid_t pgrp,
- mach_port_t *newtty,
- mach_msg_type_name_t *newttytype
-)
-{ return EOPNOTSUPP; }
-
-kern_return_t S_term_set_nodename
-(
- io_t terminal,
- string_t name
-)
-{ return EOPNOTSUPP; }
-
-kern_return_t S_term_get_nodename
-(
- io_t terminal,
- string_t name
-)
-{ return EOPNOTSUPP; }
-
-kern_return_t S_term_get_peername
-(
- io_t terminal,
- string_t name
-)
-{ return EOPNOTSUPP; }
-
-kern_return_t S_term_set_filenode
-(
- io_t terminal,
- file_t filenode
-)
-{ return EOPNOTSUPP; }
-
-kern_return_t S_term_get_bottom_type
-(
- io_t terminal,
- int *ttype
-)
-{ return EOPNOTSUPP; }
-
-kern_return_t S_term_on_machdev
-(
- io_t terminal,
- mach_port_t machdev
-)
-{ return EOPNOTSUPP; }
-
-kern_return_t S_term_on_hurddev
-(
- io_t terminal,
- io_t hurddev
-)
-{ return EOPNOTSUPP; }
-
-kern_return_t S_term_on_pty
-(
- io_t terminal,
- io_t *ptymaster
-)
-{ return EOPNOTSUPP; }
diff --git a/boot-proxy-exc/boot_script.c b/boot-proxy-exc/boot_script.c
deleted file mode 100644
index f95cc5c4..00000000
--- a/boot-proxy-exc/boot_script.c
+++ /dev/null
@@ -1,791 +0,0 @@
-/* Boot script parser for Mach. */
-
-/* Written by Shantanu Goel (goel@cs.columbia.edu). */
-
-#include <mach/mach_types.h>
-#if !KERNEL || OSKIT_MACH
-#include <string.h>
-#endif
-#include "boot_script.h"
-
-
-/* This structure describes a symbol. */
-struct sym
-{
- /* Symbol name. */
- const char *name;
-
- /* Type of value returned by function. */
- int type;
-
- /* Symbol value. */
- integer_t val;
-
- /* For function symbols; type of value returned by function. */
- int ret_type;
-
- /* For function symbols; if set, execute function at the time
- of command execution, not during parsing. A function with
- this field set must also have `no_arg' set. Also, the function's
- `val' argument will always be NULL. */
- int run_on_exec;
-};
-
-/* Additional values symbols can take.
- These are only used internally. */
-#define VAL_SYM 10 /* symbol table entry */
-#define VAL_FUNC 11 /* function pointer */
-
-/* This structure describes an argument. */
-struct arg
-{
- /* Argument text copied verbatim. 0 if none. */
- char *text;
-
- /* Type of value assigned. 0 if none. */
- int type;
-
- /* Argument value. */
- integer_t val;
-};
-
-/* List of commands. */
-static struct cmd **cmds = 0;
-
-/* Amount allocated for `cmds'. */
-static int cmds_alloc = 0;
-
-/* Next available slot in `cmds'. */
-static int cmds_index = 0;
-
-/* Symbol table. */
-static struct sym **symtab = 0;
-
-/* Amount allocated for `symtab'. */
-static int symtab_alloc = 0;
-
-/* Next available slot in `symtab'. */
-static int symtab_index = 0;
-
-/* Create a task and suspend it. */
-static int
-create_task (struct cmd *cmd, int *val)
-{
- int err = boot_script_task_create (cmd);
- *val = (int) cmd->task;
- return err;
-}
-
-/* Resume a task. */
-static int
-resume_task (struct cmd *cmd, int *val)
-{
- return boot_script_task_resume (cmd);
-}
-
-/* Resume a task when the user hits return. */
-static int
-prompt_resume_task (struct cmd *cmd, int *val)
-{
- return boot_script_prompt_task_resume (cmd);
-}
-
-/* List of builtin symbols. */
-static struct sym builtin_symbols[] =
-{
- { "task-create", VAL_FUNC, (integer_t) create_task, VAL_TASK, 0 },
- { "task-resume", VAL_FUNC, (integer_t) resume_task, VAL_NONE, 1 },
- { "prompt-task-resume",
- VAL_FUNC, (integer_t) prompt_resume_task, VAL_NONE, 1 },
-};
-#define NUM_BUILTIN (sizeof (builtin_symbols) / sizeof (builtin_symbols[0]))
-
-/* Free CMD and all storage associated with it.
- If ABORTING is set, terminate the task associated with CMD,
- otherwise just deallocate the send right. */
-static void
-free_cmd (struct cmd *cmd, int aborting)
-{
- if (cmd->task)
- boot_script_free_task (cmd->task, aborting);
- if (cmd->args)
- {
- int i;
- for (i = 0; i < cmd->args_index; i++)
- boot_script_free (cmd->args[i], sizeof *cmd->args[i]);
- boot_script_free (cmd->args, sizeof cmd->args[0] * cmd->args_alloc);
- }
- if (cmd->exec_funcs)
- boot_script_free (cmd->exec_funcs,
- sizeof cmd->exec_funcs[0] * cmd->exec_funcs_alloc);
- boot_script_free (cmd, sizeof *cmd);
-}
-
-/* Free all storage allocated by the parser.
- If ABORTING is set, terminate all tasks. */
-static void
-cleanup (int aborting)
-{
- int i;
-
- for (i = 0; i < cmds_index; i++)
- free_cmd (cmds[i], aborting);
- boot_script_free (cmds, sizeof cmds[0] * cmds_alloc);
- cmds = 0;
- cmds_index = cmds_alloc = 0;
-
- for (i = 0; i < symtab_index; i++)
- boot_script_free (symtab[i], sizeof *symtab[i]);
- boot_script_free (symtab, sizeof symtab[0] * symtab_alloc);
- symtab = 0;
- symtab_index = symtab_alloc = 0;
-}
-
-/* Add PTR to the list of pointers PTR_LIST, which
- currently has ALLOC amount of space allocated to it, and
- whose next available slot is INDEX. If more space
- needs to to allocated, INCR is the amount by which
- to increase it. Return 0 on success, non-zero otherwise. */
-static int
-add_list (void *ptr, void ***ptr_list, int *alloc, int *index, int incr)
-{
- if (*index == *alloc)
- {
- void **p;
-
- *alloc += incr;
- p = boot_script_malloc (*alloc * sizeof (void *));
- if (! p)
- {
- *alloc -= incr;
- return 1;
- }
- if (*ptr_list)
- {
- memcpy (p, *ptr_list, *index * sizeof (void *));
- boot_script_free (*ptr_list, (*alloc - incr) * sizeof (void *));
- }
- *ptr_list = p;
- }
- *(*ptr_list + *index) = ptr;
- *index += 1;
- return 0;
-}
-
-/* Create an argument with TEXT, value type TYPE, and value VAL.
- Add the argument to the argument list of CMD. */
-static struct arg *
-add_arg (struct cmd *cmd, const char *text, int textlen, int type, int val)
-{
- struct arg *arg;
-
- arg = boot_script_malloc (sizeof (struct arg) + textlen);
- if (arg)
- {
- arg->text = text == 0 ? 0 : memcpy (arg + 1, text, textlen);
- arg->type = type;
- arg->val = val;
- if (add_list (arg, (void ***) (void *)&cmd->args,
- &cmd->args_alloc, &cmd->args_index, 5))
- {
- boot_script_free (arg, sizeof *arg);
- return 0;
- }
- }
- return arg;
-}
-
-/* Search for the symbol NAME in the symbol table. */
-static struct sym *
-sym_lookup (const char *name)
-{
- int i;
-
- for (i = 0; i < symtab_index; i++)
- if (! strcmp (name, symtab[i]->name))
- return symtab[i];
- return 0;
-}
-
-/* Create an entry for symbol NAME in the symbol table. */
-static struct sym *
-sym_enter (const char *name)
-{
- struct sym *sym;
-
- sym = boot_script_malloc (sizeof (struct sym));
- if (sym)
- {
- memset (sym, 0, sizeof (struct sym));
- sym->name = name;
- if (add_list (sym, (void ***) (void *)&symtab, &symtab_alloc, &symtab_index, 20))
- {
- boot_script_free (sym, sizeof *sym);
- return 0;
- }
- }
- return sym;
-}
-
-/* Parse the command line CMDLINE. */
-int
-boot_script_parse_line (void *hook, char *cmdline)
-{
- char *p, *q;
- int error;
- struct cmd *cmd;
- struct arg *arg;
-
- /* Extract command name. Ignore line if it lacks a command. */
- for (p = cmdline; *p == ' ' || *p == '\t'; p++)
- ;
- if (*p == '#')
- /* Ignore comment line. */
- return 0;
-
-#if 0
- if (*p && *p != ' ' && *p != '\t' && *p != '\n')
- {
- printf ("(bootstrap): %s\n", cmdline);
- }
-#endif
-
- for (q = p; *q && *q != ' ' && *q != '\t' && *q != '\n'; q++)
- ;
- if (p == q)
- return 0;
-
- *q++ = '\0';
-
- /* Allocate a command structure. */
- cmd = boot_script_malloc (sizeof (struct cmd) + (q - p));
- if (! cmd)
- return BOOT_SCRIPT_NOMEM;
- memset (cmd, 0, sizeof (struct cmd));
- cmd->hook = hook;
- cmd->path = memcpy (cmd + 1, p, q - p);
- p = q;
-
- for (arg = 0;;)
- {
- if (! arg)
- {
- /* Skip whitespace. */
- while (*p == ' ' || *p == '\t')
- p++;
-
- /* End of command line. */
- if (! *p || *p == '\n')
- {
- /* Add command to list. */
- if (add_list (cmd, (void ***) (void *) &cmds,
- &cmds_alloc, &cmds_index, 10))
- {
- error = BOOT_SCRIPT_NOMEM;
- goto bad;
- }
- return 0;
- }
- }
-
- /* Look for a symbol. */
- if (arg || (*p == '$' && (*(p + 1) == '{' || *(p + 1) == '(')))
- {
- char end_char = (*(p + 1) == '{') ? '}' : ')';
- struct sym *sym = 0;
-
- for (p += 2;;)
- {
- char c;
- int i, type;
- integer_t val;
- struct sym *s;
-
- /* Parse symbol name. */
- for (q = p; *q && *q != '\n' && *q != end_char && *q != '='; q++)
- ;
- if (p == q || ! *q || *q == '\n'
- || (end_char == '}' && *q != '}'))
- {
- error = BOOT_SCRIPT_SYNTAX_ERROR;
- goto bad;
- }
- c = *q;
- *q = '\0';
-
- /* See if this is a builtin symbol. */
- for (i = 0; i < NUM_BUILTIN; i++)
- if (! strcmp (p, builtin_symbols[i].name))
- break;
-
- if (i < NUM_BUILTIN)
- s = &builtin_symbols[i];
- else
- {
- /* Look up symbol in symbol table.
- If no entry exists, create one. */
- s = sym_lookup (p);
- if (! s)
- {
- s = sym_enter (p);
- if (! s)
- {
- error = BOOT_SCRIPT_NOMEM;
- goto bad;
- }
- }
- }
-
- /* Only values are allowed in ${...} constructs. */
- if (end_char == '}' && s->type == VAL_FUNC)
- return BOOT_SCRIPT_INVALID_SYM;
-
- /* Check that assignment is valid. */
- if (c == '=' && s->type == VAL_FUNC)
- {
- error = BOOT_SCRIPT_INVALID_ASG;
- goto bad;
- }
-
- /* For function symbols, execute the function. */
- if (s->type == VAL_FUNC)
- {
- if (! s->run_on_exec)
- {
- (error
- = ((*((int (*) (struct cmd *, integer_t *)) s->val))
- (cmd, &val)));
- if (error)
- goto bad;
- type = s->ret_type;
- }
- else
- {
- if (add_list (s, (void ***) (void *) &cmd->exec_funcs,
- &cmd->exec_funcs_alloc,
- &cmd->exec_funcs_index, 5))
- {
- error = BOOT_SCRIPT_NOMEM;
- goto bad;
- }
- type = VAL_NONE;
- goto out;
- }
- }
- else if (s->type == VAL_NONE)
- {
- type = VAL_SYM;
- val = (integer_t) s;
- }
- else
- {
- type = s->type;
- val = s->val;
- }
-
- if (sym)
- {
- sym->type = type;
- sym->val = val;
- }
- else if (arg)
- {
- arg->type = type;
- arg->val = val;
- }
-
- out:
- p = q + 1;
- if (c == end_char)
- {
- /* Create an argument if necessary.
- We create an argument if the symbol appears
- in the expression by itself.
-
- NOTE: This is temporary till the boot filesystem
- servers support arguments. When that happens,
- symbol values will only be printed if they're
- associated with an argument. */
- if (! arg && end_char == '}')
- {
- if (! add_arg (cmd, 0, 0, type, val))
- {
- error = BOOT_SCRIPT_NOMEM;
- goto bad;
- }
- }
- arg = 0;
- break;
- }
- if (s->type != VAL_FUNC)
- sym = s;
- }
- }
- else
- {
- char c;
-
- /* Command argument; just copy the text. */
- for (q = p;; q++)
- {
- if (! *q || *q == ' ' || *q == '\t' || *q == '\n')
- break;
- if (*q == '$' && *(q + 1) == '{')
- break;
- }
- c = *q;
- *q = '\0';
-
- /* Add argument to list. */
- arg = add_arg (cmd, p, q + 1 - p, VAL_NONE, 0);
- if (! arg)
- {
- error = BOOT_SCRIPT_NOMEM;
- goto bad;
- }
- if (c == '$')
- p = q;
- else
- {
- if (c)
- p = q + 1;
- else
- p = q;
- arg = 0;
- }
- }
- }
-
-
- bad:
- free_cmd (cmd, 1);
- cleanup (1);
- return error;
-}
-
-/* Ensure that the command line buffer can accommodate LEN bytes of space. */
-#define CHECK_CMDLINE_LEN(len) \
-{ \
- if (cmdline_alloc - cmdline_index < len) \
- { \
- char *ptr; \
- int alloc, i; \
- alloc = cmdline_alloc + len - (cmdline_alloc - cmdline_index) + 100; \
- ptr = boot_script_malloc (alloc); \
- if (! ptr) \
- { \
- error = BOOT_SCRIPT_NOMEM; \
- goto done; \
- } \
- memcpy (ptr, cmdline, cmdline_index); \
- for (i = 0; i < argc; ++i) \
- argv[i] = ptr + (argv[i] - cmdline); \
- boot_script_free (cmdline, cmdline_alloc); \
- cmdline = ptr; \
- cmdline_alloc = alloc; \
- } \
-}
-
-/* Execute commands previously parsed. */
-int
-boot_script_exec ()
-{
- int cmd_index;
-
- for (cmd_index = 0; cmd_index < cmds_index; cmd_index++)
- {
- char **argv, *cmdline;
- int i, argc, cmdline_alloc;
- int cmdline_index, error, arg_index;
- struct cmd *cmd = cmds[cmd_index];
-
- /* Skip command if it doesn't have an associated task. */
- if (cmd->task == 0)
- continue;
-
- /* Allocate a command line and copy command name. */
- cmdline_index = strlen (cmd->path) + 1;
- cmdline_alloc = cmdline_index + 100;
- cmdline = boot_script_malloc (cmdline_alloc);
- if (! cmdline)
- {
- cleanup (1);
- return BOOT_SCRIPT_NOMEM;
- }
- memcpy (cmdline, cmd->path, cmdline_index);
-
- /* Allocate argument vector. */
- argv = boot_script_malloc (sizeof (char *) * (cmd->args_index + 2));
- if (! argv)
- {
- boot_script_free (cmdline, cmdline_alloc);
- cleanup (1);
- return BOOT_SCRIPT_NOMEM;
- }
- argv[0] = cmdline;
- argc = 1;
-
- /* Build arguments. */
- for (arg_index = 0; arg_index < cmd->args_index; arg_index++)
- {
- struct arg *arg = cmd->args[arg_index];
-
- /* Copy argument text. */
- if (arg->text)
- {
- int len = strlen (arg->text);
-
- if (arg->type == VAL_NONE)
- len++;
- CHECK_CMDLINE_LEN (len);
- memcpy (cmdline + cmdline_index, arg->text, len);
- argv[argc++] = &cmdline[cmdline_index];
- cmdline_index += len;
- }
-
- /* Add value of any symbol associated with this argument. */
- if (arg->type != VAL_NONE)
- {
- char *p, buf[50];
- int len;
- mach_port_t name;
-
- if (arg->type == VAL_SYM)
- {
- struct sym *sym = (struct sym *) arg->val;
-
- /* Resolve symbol value. */
- while (sym->type == VAL_SYM)
- sym = (struct sym *) sym->val;
- if (sym->type == VAL_NONE)
- {
- error = BOOT_SCRIPT_UNDEF_SYM;
- goto done;
- }
- arg->type = sym->type;
- arg->val = sym->val;
- }
-
- /* Print argument value. */
- switch (arg->type)
- {
- case VAL_STR:
- p = (char *) arg->val;
- len = strlen (p);
- break;
-
- case VAL_TASK:
- case VAL_PORT:
- if (arg->type == VAL_TASK)
- /* Insert send right to task port. */
- error = boot_script_insert_task_port
- (cmd, (task_t) arg->val, &name);
- else
- /* Insert send right. */
- error = boot_script_insert_right (cmd,
- (mach_port_t) arg->val,
- &name);
- if (error)
- goto done;
-
- i = name;
- p = buf + sizeof (buf);
- len = 0;
- do
- {
- *--p = i % 10 + '0';
- len++;
- }
- while (i /= 10);
- break;
-
- default:
- error = BOOT_SCRIPT_BAD_TYPE;
- goto done;
- }
- len++;
- CHECK_CMDLINE_LEN (len);
- memcpy (cmdline + cmdline_index, p, len - 1);
- *(cmdline + cmdline_index + len - 1) = '\0';
- if (! arg->text)
- argv[argc++] = &cmdline[cmdline_index];
- cmdline_index += len;
- }
- }
-
- /* Terminate argument vector. */
- argv[argc] = 0;
-
- /* Execute the command. */
- if (boot_script_exec_cmd (cmd->hook, cmd->task, cmd->path,
- argc, argv, cmdline, cmdline_index))
- {
- error = BOOT_SCRIPT_EXEC_ERROR;
- goto done;
- }
-
- error = 0;
-
- done:
- boot_script_free (cmdline, cmdline_alloc);
- boot_script_free (argv, sizeof (char *) * (cmd->args_index + 2));
- if (error)
- {
- cleanup (1);
- return error;
- }
- }
-
- for (cmd_index = 0; cmd_index < cmds_index; cmd_index++)
- {
- int i;
- struct cmd *cmd = cmds[cmd_index];
-
- /* Execute functions that want to be run on exec. */
- for (i = 0; i < cmd->exec_funcs_index; i++)
- {
- struct sym *sym = cmd->exec_funcs[i];
- int error = ((*((int (*) (struct cmd *, integer_t *)) sym->val))
- (cmd, 0));
- if (error)
- {
- cleanup (1);
- return error;
- }
- }
- }
-
- cleanup (0);
- return 0;
-}
-
-/* Create an entry for the variable NAME with TYPE and value VAL,
- in the symbol table. */
-int
-boot_script_set_variable (const char *name, int type, integer_t val)
-{
- struct sym *sym = sym_enter (name);
-
- if (sym)
- {
- sym->type = type;
- sym->val = val;
- }
- return sym ? 0 : 1;
-}
-
-
-/* Define the function NAME, which will return type RET_TYPE. */
-int
-boot_script_define_function (const char *name, int ret_type,
- int (*func) (const struct cmd *cmd,
- integer_t *val))
-{
- struct sym *sym = sym_enter (name);
-
- if (sym)
- {
- sym->type = VAL_FUNC;
- sym->val = (integer_t) func;
- sym->ret_type = ret_type;
- sym->run_on_exec = ret_type == VAL_NONE;
- }
- return sym ? 0 : 1;
-}
-
-
-/* Return a string describing ERR. */
-char *
-boot_script_error_string (int err)
-{
- switch (err)
- {
- case BOOT_SCRIPT_NOMEM:
- return "no memory";
-
- case BOOT_SCRIPT_SYNTAX_ERROR:
- return "syntax error";
-
- case BOOT_SCRIPT_INVALID_ASG:
- return "invalid variable in assignment";
-
- case BOOT_SCRIPT_MACH_ERROR:
- return "mach error";
-
- case BOOT_SCRIPT_UNDEF_SYM:
- return "undefined symbol";
-
- case BOOT_SCRIPT_EXEC_ERROR:
- return "exec error";
-
- case BOOT_SCRIPT_INVALID_SYM:
- return "invalid variable in expression";
-
- case BOOT_SCRIPT_BAD_TYPE:
- return "invalid value type";
- }
- return 0;
-}
-
-#ifdef BOOT_SCRIPT_TEST
-#include <stdio.h>
-
-int
-boot_script_exec_cmd (void *hook,
- mach_port_t task, char *path, int argc,
- char **argv, char *strings, int stringlen)
-{
- int i;
-
- printf ("port = %d: ", (int) task);
- for (i = 0; i < argc; i++)
- printf ("%s ", argv[i]);
- printf ("\n");
- return 0;
-}
-
-void
-main (int argc, char **argv)
-{
- char buf[500], *p;
- int len;
- FILE *fp;
- mach_port_t host_port, device_port;
-
- if (argc < 2)
- {
- fprintf (stderr, "Usage: %s <script>\n", argv[0]);
- exit (1);
- }
- fp = fopen (argv[1], "r");
- if (! fp)
- {
- fprintf (stderr, "Can't open %s\n", argv[1]);
- exit (1);
- }
- host_port = 1;
- device_port = 2;
- boot_script_set_variable ("host-port", VAL_PORT, (int) host_port);
- boot_script_set_variable ("device-port", VAL_PORT, (int) device_port);
- boot_script_set_variable ("root-device", VAL_STR, (int) "hd0a");
- boot_script_set_variable ("boot-args", VAL_STR, (int) "-ad");
- p = buf;
- len = sizeof (buf);
- while (fgets (p, len, fp))
- {
- int i, err;
-
- i = strlen (p) + 1;
- err = boot_script_parse_line (0, p);
- if (err)
- {
- fprintf (stderr, "error %s\n", boot_script_error_string (err));
- exit (1);
- }
- p += i;
- len -= i;
- }
- boot_script_exec ();
- exit (0);
-}
-#endif /* BOOT_SCRIPT_TEST */
diff --git a/boot-proxy-exc/boot_script.h b/boot-proxy-exc/boot_script.h
deleted file mode 100644
index 62458693..00000000
--- a/boot-proxy-exc/boot_script.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/* Definitions for boot script parser for Mach. */
-
-#ifndef _boot_script_h
-#define _boot_script_h
-
-/* Written by Shantanu Goel (goel@cs.columbia.edu). */
-
-/* Error codes returned by boot_script_parse_line()
- and boot_script_exec_cmd(). */
-#define BOOT_SCRIPT_NOMEM 1
-#define BOOT_SCRIPT_SYNTAX_ERROR 2
-#define BOOT_SCRIPT_INVALID_ASG 3
-#define BOOT_SCRIPT_MACH_ERROR 4
-#define BOOT_SCRIPT_UNDEF_SYM 5
-#define BOOT_SCRIPT_EXEC_ERROR 6
-#define BOOT_SCRIPT_INVALID_SYM 7
-#define BOOT_SCRIPT_BAD_TYPE 8
-
-/* Legal values for argument `type' to function
- boot_script_set_variable and boot_script_define_function. */
-#define VAL_NONE 0 /* none -- function runs at exec time */
-#define VAL_STR 1 /* string */
-#define VAL_PORT 2 /* port */
-#define VAL_TASK 3 /* task port */
-
-/* This structure describes a command. */
-struct cmd
-{
- /* Cookie passed in to boot_script_parse_line. */
- void *hook;
-
- /* Path of executable. */
- char *path;
-
- /* Task port. */
- task_t task;
-
- /* Argument list. */
- struct arg **args;
-
- /* Amount allocated for `args'. */
- int args_alloc;
-
- /* Next available slot in `args'. */
- int args_index;
-
- /* List of functions that want to be run on command execution. */
- struct sym **exec_funcs;
-
- /* Amount allocated for `exec_funcs'. */
- int exec_funcs_alloc;
-
- /* Next available slot in `exec_funcs'. */
- int exec_funcs_index;
-};
-
-
-/* The user must define these functions, we work like malloc and free. */
-void *boot_script_malloc (unsigned int);
-void boot_script_free (void *, unsigned int);
-
-/* The user must define this function. Load the image of the
- executable specified by PATH in TASK. Create a thread
- in TASK and point it at the executable's entry point. Initialize
- TASK's stack with argument vector ARGV of length ARGC whose
- strings are STRINGS. STRINGS has length STRINGLEN.
- Return 0 for success, non-zero otherwise. */
-int boot_script_exec_cmd (void *hook,
- task_t task, char *path, int argc,
- char **argv, char *strings, int stringlen);
-
-/* The user must define this function. Load the contents of FILE
- into a fresh anonymous memory object and return the memory object port. */
-mach_port_t boot_script_read_file (const char *file);
-
-/* The user must define this functions to perform the corresponding
- Mach task manipulations. */
-int boot_script_task_create (struct cmd *); /* task_create + task_suspend */
-int boot_script_task_resume (struct cmd *);
-int boot_script_prompt_task_resume (struct cmd *);
-int boot_script_insert_right (struct cmd *, mach_port_t, mach_port_t *namep);
-int boot_script_insert_task_port (struct cmd *, task_t, mach_port_t *namep);
-
-/* The user must define this function to clean up the `task_t'
- returned by boot_script_task_create. */
-void boot_script_free_task (task_t task, int aborting);
-
-
-/* Parse the command line LINE. This causes the command line to be
- converted into an internal format. Returns 0 for success, non-zero
- otherwise.
-
- NOTE: The parser writes into the line so it must not be a string constant.
- It is also the responsibility of the caller not to deallocate the line
- across calls to the parser. */
-int boot_script_parse_line (void *hook, char *cmdline);
-
-/* Execute the command lines prevously parsed.
- Returns 0 for success, non-zero otherwise. */
-int boot_script_exec (void);
-
-/* Create an entry in the symbol table for variable NAME,
- whose type is TYPE and value is VAL. Returns 0 on success,
- non-zero otherwise. */
-int boot_script_set_variable (const char *name, int type, integer_t val);
-
-/* Define the function NAME, which will return type RET_TYPE. */
-int boot_script_define_function (const char *name, int ret_type,
- int (*func) (const struct cmd *cmd,
- integer_t *val));
-
-/* Returns a string describing the error ERR. */
-char *boot_script_error_string (int err);
-
-
-#endif /* _boot_script_h */
diff --git a/boot-proxy-exc/exc_impl.c b/boot-proxy-exc/exc_impl.c
deleted file mode 100644
index 1c6900bb..00000000
--- a/boot-proxy-exc/exc_impl.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- 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 <mach.h>
-#include <hurd.h>
-#include <assert.h>
-
-#include "util.h"
-#include "mach_proxy.h"
-
-kern_return_t
-catch_exception_raise (mach_port_t exception_port, mach_port_t thread,
- mach_port_t task, integer_t exception,
- integer_t code, integer_t subcode)
-{
- error_t err;
- struct task_info *fault_task_pi = NULL;
- debug ("");
-
- int match_task (struct task_info *task_pi)
- {
- if (task_pi->task_port == task)
- {
- fault_task_pi = task_pi;
- ports_port_ref (fault_task_pi);
- return 1;
- }
- return 0;
- }
- foreach_task (match_task);
-
- if (fault_task_pi == NULL)
- {
- fault_task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (fault_task_pi)
- info ("find the task: %d from libports", task);
- }
-
- if (fault_task_pi == NULL)
- {
- info ("cannot find the task: %d", task);
- return EINVAL;
- }
-
- err = catch_exception_raise (fault_task_pi->user_exc_port,
- thread, fault_task_pi->task.port_right,
- exception, code, subcode);
- ports_port_deref (fault_task_pi);
- return err;
-}
diff --git a/boot-proxy-exc/frank1.ld b/boot-proxy-exc/frank1.ld
deleted file mode 100644
index 9de827ae..00000000
--- a/boot-proxy-exc/frank1.ld
+++ /dev/null
@@ -1,94 +0,0 @@
-OUTPUT_FORMAT("elf32-i386", "elf32-i386",
- "elf32-i386")
-OUTPUT_ARCH(i386)
-ENTRY(_start)
- SEARCH_DIR(/usr/local/i386-gnuelf/lib);
-/* Do we need any of these for elf?
- __DYNAMIC = 0; */
-SECTIONS
-{
- /* Read-only sections, merged into text segment: */
- . = 0x10020;
- .text :
- {
- *(.text)
- *(.interp)
- *(.hash)
- *(.dynsym)
- *(.dynstr)
- *(.rel.text)
- *(.rela.text)
- *(.rel.data)
- *(.rela.data)
- *(.rel.rodata)
- *(.rela.rodata)
- *(.rel.got)
- *(.rela.got)
- *(.rel.ctors)
- *(.rela.ctors)
- *(.rel.dtors)
- *(.rela.dtors)
- *(.rel.init)
- *(.rela.init)
- *(.rel.fini)
- *(.rela.fini)
- *(.rel.bss)
- *(.rela.bss)
- *(.rel.plt)
- *(.rela.plt)
- *(.init)
- *(.plt)
- /* .gnu.warning sections are handled specially by elf32.em. */
- *(.gnu.warning)
- *(.fini)
- *(.rodata)
- *(.rodata1)
- _etext = .;
- PROVIDE (etext = .);
- . = ALIGN(0x1000);
- } =0x9090
- . = ALIGN(0x1000);
- .data :
- {
- *(.data)
- CONSTRUCTORS
-
- *(.data1)
- *(.ctors)
- *(.dtors)
- *(.got.plt) *(.got)
- *(.dynamic)
- /* We want the small data sections together, so single-instruction offsets
- can access them all, and initialized data all before uninitialized, so
- we can shorten the on-disk segment size. */
- *(.sdata)
- _edata = .;
- PROVIDE (edata = .);
- . = ALIGN(0x10);
-}
- __bss_start = .;
- .bss :
- {
- *(.sbss) *(.scommon)
- *(.dynbss)
- *(.bss)
- *(COMMON)
- _end = ALIGN(4) ;
- PROVIDE (end = ALIGN(4));
- }
- /* These are needed for ELF backends which have not yet been
- converted to the new style linker. */
- .stab 0 : { *(.stab) }
- .stabstr 0 : { *(.stabstr) }
- /* DWARF debug sections.
- Symbols in the .debug DWARF section are relative to the beginning of the
- section so we begin .debug at 0. It's not clear yet what needs to happen
- for the others. */
- .debug 0 : { *(.debug) }
- .debug_srcinfo 0 : { *(.debug_srcinfo) }
- .debug_aranges 0 : { *(.debug_aranges) }
- .debug_pubnames 0 : { *(.debug_pubnames) }
- .debug_sfnames 0 : { *(.debug_sfnames) }
- .line 0 : { *(.line) }
- /* These must appear regardless of . */
-}
diff --git a/boot-proxy-exc/frankemul.ld b/boot-proxy-exc/frankemul.ld
deleted file mode 100644
index 413953ef..00000000
--- a/boot-proxy-exc/frankemul.ld
+++ /dev/null
@@ -1,107 +0,0 @@
-OUTPUT_FORMAT("elf32-i386", "elf32-i386",
- "elf32-i386")
-OUTPUT_ARCH(i386)
-ENTRY(_start)
- SEARCH_DIR(/usr/local/i386-gnuelf/lib);
-/* Do we need any of these for elf?
- __DYNAMIC = 0; */
-SECTIONS
-{
- /* Read-only sections, merged into text segment: */
- . = 0x10020;
- .text :
- {
- *(.text)
- *(.interp)
- *(.hash)
- *(.dynsym)
- *(.dynstr)
- *(.rel.text)
- *(.rela.text)
- *(.rel.data)
- *(.rela.data)
- *(.rel.rodata)
- *(.rela.rodata)
- *(.rel.got)
- *(.rela.got)
- *(.rel.ctors)
- *(.rela.ctors)
- *(.rel.dtors)
- *(.rela.dtors)
- *(.rel.init)
- *(.rela.init)
- *(.rel.fini)
- *(.rela.fini)
- *(.rel.bss)
- *(.rela.bss)
- *(.rel.plt)
- *(.rela.plt)
- *(.init)
- *(.plt)
- /* .gnu.warning sections are handled specially by elf32.em. */
- *(.gnu.warning)
- *(.fini)
- *(.rodata)
- *(.rodata1)
-*(_hurd_ioctl_handler_lists)
-*(_hurd_pgrp_changed_hook)
-*(_hurd_fork_locks)
-*(_hurd_subinit)
-*(__libc_atexit)
-*(_hurd_fd_subinit)
-*(_hurd_preinit_hook)
-*(_hurd_fork_child_hook)
-*(_hurd_fork_parent_hook)
-*(_hurd_fork_prepare_hook)
-*(_hurd_reauth_hook)
-*(_hurd_proc_subinit)
-*(__libc_subinit)
- _etext = .;
- PROVIDE (etext = .);
- . = ALIGN(0x1000);
- } =0x9090
- . = ALIGN(0x1000);
- .data :
- {
- *(.data)
- CONSTRUCTORS
-
- *(.data1)
- *(.ctors)
- *(.dtors)
- *(.got.plt) *(.got)
- *(.dynamic)
- /* We want the small data sections together, so single-instruction offsets
- can access them all, and initialized data all before uninitialized, so
- we can shorten the on-disk segment size. */
- *(.sdata)
- _edata = .;
- PROVIDE (edata = .);
- . = ALIGN(0x10);
-}
- __bss_start = .;
- .bss :
- {
- *(.sbss) *(.scommon)
- *(.dynbss)
- *(.bss)
- *(COMMON)
- _end = ALIGN(4) ;
- PROVIDE (end = ALIGN(4));
- }
- /* These are needed for ELF backends which have not yet been
- converted to the new style linker. */
- .stab 0 : { *(.stab) }
- .stabstr 0 : { *(.stabstr) }
- /* DWARF debug sections.
- Symbols in the .debug DWARF section are relative to the beginning of the
- section so we begin .debug at 0. It's not clear yet what needs to happen
- for the others. */
- .debug 0 : { *(.debug) }
- .debug_srcinfo 0 : { *(.debug_srcinfo) }
- .debug_aranges 0 : { *(.debug_aranges) }
- .debug_pubnames 0 : { *(.debug_pubnames) }
- .debug_sfnames 0 : { *(.debug_sfnames) }
- .line 0 : { *(.line) }
- /* These must appear regardless of . */
-}
diff --git a/boot-proxy-exc/list.c b/boot-proxy-exc/list.c
deleted file mode 100644
index db555f35..00000000
--- a/boot-proxy-exc/list.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- 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 a double linked list. */
-
-#include "list.h"
-
-void entry_init (struct list *entry)
-{
- entry->next = entry;
- entry->prev = entry;
-}
-
-void add_entry_head (struct list *head, struct list *entry)
-{
- entry->next = head->next;
- head->next->prev = entry;
- head->next = entry;
- entry->prev = head;
-}
-
-void add_entry_end (struct list *head, struct list *entry)
-{
- entry->next = head;
- entry->prev = head->prev;
- head->prev->next = entry;
- head->prev = entry;
-}
-
-void remove_entry (struct list *entry)
-{
- entry->next->prev = entry->prev;
- entry->prev->next = entry->next;
-}
-
diff --git a/boot-proxy-exc/list.h b/boot-proxy-exc/list.h
deleted file mode 100644
index f3f7585f..00000000
--- a/boot-proxy-exc/list.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- 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. */
-
-#ifndef __LIST_H__
-#define __LIST_H__
-
-#include <stddef.h>
-
-struct list
-{
- struct list *next, *prev;
-};
-
-void entry_init (struct list *entry);
-void add_entry_head (struct list *head, struct list *entry);
-void add_entry_end (struct list *head, struct list *entry);
-void remove_entry (struct list *entry);
-
-#define LIST_HEADER(head) struct list head = {&head, &head}
-#define EMPTY_LIST(head) ((head)->next == (head))
-#define LIST_ENTRY(entry, type, field) ((type *) (((char *) entry) - offsetof (type, field)))
-
-#endif
diff --git a/boot-proxy-exc/mach-crt0.c b/boot-proxy-exc/mach-crt0.c
deleted file mode 100644
index 0469424e..00000000
--- a/boot-proxy-exc/mach-crt0.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1991,1990,1989 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- */
-/*
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that: (1) source distributions retain this entire copyright
- * notice and comment, and (2) distributions including binaries display
- * the following acknowledgement: ``This product includes software
- * developed by the University of California, Berkeley and its contributors''
- * in the documentation or other materials provided with the distribution
- * and in all advertising materials mentioning features or use of this
- * software. Neither the name of the University nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#ifndef lint
-static char sccsid[] = "@(#)crt0.c 5.2 (Berkeley) 5/14/90";
-#endif /* not lint */
-
-/*
- * C start up routine.
- * Robert Henry, UCB, 20 Oct 81
- *
- * We make the following (true) assumptions:
- * 1) when the kernel calls start, it does a jump to location 2,
- * and thus avoids the register save mask. We are NOT called
- * with a calls! see sys1.c:setregs().
- * 2) The only register variable that we can trust is sp,
- * which points to the base of the kernel calling frame.
- * Do NOT believe the documentation in exec(2) regarding the
- * values of fp and ap.
- * 3) We can allocate as many register variables as we want,
- * and don't have to save them for anybody.
- * 4) Because of the ways that asm's work, we can't have
- * any automatic variables allocated on the stack, because
- * we must catch the value of sp before any automatics are
- * allocated.
- */
-
-#include <mach/machine/asm.h>
-
-int __data_start = 0;
-char **environ = (char **)0;
-#ifdef paranoid
-static int fd;
-#endif paranoid
-
-int (*mach_init_routine)();
-int (*_cthread_init_routine)();
-int (*_cthread_exit_routine)();
-int (*_monstartup_routine)();
-int (*_StrongBox_init_routine)();
-int errno = 0;
-int exit();
-
-extern int main();
-
-extern unsigned char etext;
-int _start()
-{
- __label__ eprol;
- struct kframe {
- int kargc;
- char *kargv[1]; /* size depends on kargc */
- char kargstr[1]; /* size varies */
- char kenvstr[1]; /* size varies */
- };
- /*
- * ALL REGISTER VARIABLES!!!
- */
- register struct kframe *kfp; /* r10 */
- register char **targv;
- register char **argv;
-
-#ifdef lint
- kfp = 0;
- initcode = initcode = 0;
-#else not lint
-#define Entry_sp() \
-({ int _spl__, _tmp1__; \
- asm volatile("leal 4(%%ebp), %0" : "=r" (_spl__) : "r" (_tmp1__)); \
- _spl__; })
-
- kfp = (struct kframe *)Entry_sp();
-#endif not lint
- for (argv = targv = &kfp->kargv[0]; *targv++; /* void */)
- /* void */ ;
- if (targv >= (char **)(*argv))
- --targv;
- environ = targv;
- if (mach_init_routine)
- (void) mach_init_routine();
-
- eprol:
-#ifdef paranoid
- /*
- * The standard I/O library assumes that file descriptors 0, 1, and 2
- * are open. If one of these descriptors is closed prior to the start
- * of the process, I/O gets very confused. To avoid this problem, we
- * insure that the first three file descriptors are open before calling
- * main(). Normally this is undefined, as it adds two unnecessary
- * system calls.
- */
- do {
- fd = open("/dev/null", 2);
- } while (fd >= 0 && fd < 3);
- close(fd);
-#endif paranoid
-
-
- if (_cthread_init_routine) {
- int new_sp;
- new_sp = (*_cthread_init_routine)();
- if (new_sp) {
- asm volatile("movl %0, %%esp" : : "g" (new_sp) );
- }
- }
- if (_StrongBox_init_routine) (*_StrongBox_init_routine)();
-
- if (_monstartup_routine) {
- _monstartup_routine(&&eprol, &etext);
- }
-
- (* (_cthread_exit_routine ? _cthread_exit_routine : exit))
- (main(kfp->kargc, argv, targv));
-}
diff --git a/boot-proxy-exc/mach_host_impl.c b/boot-proxy-exc/mach_host_impl.c
deleted file mode 100644
index c5fc8967..00000000
--- a/boot-proxy-exc/mach_host_impl.c
+++ /dev/null
@@ -1,544 +0,0 @@
-/*
- 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 <stdio.h>
-#include <assert.h>
-
-#include <mach.h>
-#include <hurd.h>
-#include <hurd/ports.h>
-
-#include "util.h"
-#include "list.h"
-#include "mach_proxy.h"
-
-extern mach_port_t privileged_host_port;
-
-/* Set task priority. */
-kern_return_t
-S_task_priority (mach_port_t task, int priority, boolean_t change_threads)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = task_priority (task_pi->task_port, priority, change_threads);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine processor_set_tasks */
-kern_return_t
-S_processor_set_tasks (mach_port_t processor_set, task_array_t *task_list,
- mach_msg_type_number_t *task_listCnt)
-{
- error_t err = 0;
- mach_port_t *subhurd_tasks = NULL;
- int size = 0;
- /* no pseudo task port is created for the kernel task. */
- int num = 0;
- int tot_nbtasks = ports_count_class (task_portclass) + num;
-
- size = tot_nbtasks * sizeof (mach_port_t);
- err = vm_allocate (mach_task_self (),
- (vm_address_t *) (void *) &subhurd_tasks,
- size, 1);
- if (err)
- goto out;
-
- int get_pseudo_task_port (struct task_info *task_pi)
- {
- assert (num < tot_nbtasks);
- subhurd_tasks[num++] = ports_get_right (task_pi);
- return 0;
- }
-
- foreach_task (get_pseudo_task_port);
- assert (num == tot_nbtasks);
- debug ("get %d tasks", tot_nbtasks);
- *task_list = subhurd_tasks;
- *task_listCnt = tot_nbtasks;
-
-out:
- /* I enable the class here,
- * so no pseudo task port can be created when I count the number of tasks. */
- ports_enable_class (task_portclass);
- /* The array will be deallocated after it is sent,
- * but the task ports in it don't need to,
- * because I only call ports_get_right()
- * and the reference count isn't increased. */
- return err;
-}
-
-/* Get control port for a processor set. */
-kern_return_t
-S_host_processor_set_priv (mach_port_t host_priv, mach_port_t set_name,
- mach_port_t *set, mach_msg_type_name_t *setPoly)
-{
- extern struct port_class *other_portclass;
- struct port_info *pi;
- kern_return_t ret = 0;
-
- // TODO create a port for each processor set
- // I should create the port for the processor set only once.
- ret = ports_create_port (other_portclass, port_bucket,
- sizeof (*pi), &pi);
- debug ("%s", strerror (ret));
- if (ret)
- return ret;
- *set = ports_get_right (pi);
- *setPoly = MACH_MSG_TYPE_MAKE_SEND;
- ports_port_deref (pi);
- return ret;
-}
-
-/* Routine host_reboot */
-kern_return_t
-S_host_reboot (mach_port_t host_priv, int options)
-{
- debug ("");
- assert (0);
- // TODO
- return EOPNOTSUPP;
-}
-
-/* Routine vm_wire */
-kern_return_t
-S_vm_wire (mach_port_t host_priv, mach_port_t task,
- vm_address_t address, vm_size_t size, vm_prot_t access)
-{
- debug ("");
- assert (0);
- // TODO
- return EOPNOTSUPP;
-}
-
-/* Routine thread_wire */
-kern_return_t
-S_thread_wire (mach_port_t host_priv, mach_port_t thread, boolean_t wired)
-{
- debug ("");
- assert (0);
- // TODO
- return EOPNOTSUPP;
-}
-
-//////////the request to the host isn't forwarded by the proxy//////////
-
-/* Routine host_processor_sets */
-kern_return_t
-S_host_processor_sets (mach_port_t host,
- processor_set_name_array_t *processor_sets,
- mach_msg_type_number_t *processor_setsCnt)
-{
- debug ("");
- assert (0);
- // the request to the host isn't forwarded.
- return EOPNOTSUPP;
-}
-
-/* Routine host_get_time */
-kern_return_t
-S_host_get_time (mach_port_t host, time_value_t *current_time)
-{
- debug ("");
- assert (0);
- // the request to the host isn't forwarded.
- return EOPNOTSUPP;
-}
-
-/* Routine host_info */
-kern_return_t
-S_host_info (mach_port_t host, int flavor, host_info_t host_info_out,
- mach_msg_type_number_t *host_info_outCnt)
-{
- debug ("");
- assert (0);
- // the request to the host isn't forwarded.
- return EOPNOTSUPP;
-}
-
-/* Get string describing current kernel version. */
-kern_return_t
-S_host_kernel_version (mach_port_t host, kernel_version_t kernel_version)
-{
- debug ("");
- assert (0);
- // the proxy doesn't forward the request to the host port.
- return EOPNOTSUPP;
-}
-
-///////////////////the RPCs not used by Hurd//////////////////////
-
-/* Get list of processors on this host. */
-kern_return_t
-S_host_processors (mach_port_t host_priv,
- processor_array_t *processor_list,
- mach_msg_type_number_t *processor_listCnt)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Start processor. */
-kern_return_t
-S_processor_start (mach_port_t processor)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Exit processor -- may not be restartable. */
-kern_return_t
-S_processor_exit (mach_port_t processor)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Get default processor set for host. */
-kern_return_t
-S_processor_set_default (mach_port_t host, mach_port_t *default_set)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/*
- * Create new processor set. Returns real port for manipulations,
- * and name port for obtaining information.
- */
-kern_return_t
-S_processor_set_create (mach_port_t host, mach_port_t *new_set,
- mach_port_t *new_name)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Destroy processor set. */
-kern_return_t
-S_processor_set_destroy (mach_port_t set)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Assign processor to processor set. */
-kern_return_t
-S_processor_assign (mach_port_t processor, mach_port_t new_set, boolean_t wait)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Get current assignment for thread. */
-kern_return_t
-S_processor_get_assignment (mach_port_t processor, mach_port_t *assigned_set)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Assign task to processor set. */
-kern_return_t
-S_task_assign (mach_port_t task, mach_port_t new_set, boolean_t assign_threads)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Assign task to default set. */
-kern_return_t
-S_task_assign_default (mach_port_t task, boolean_t assign_threads)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Get current assignment for task. */
-kern_return_t
-S_task_get_assignment (mach_port_t task, mach_port_t *assigned_set)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Set max priority for processor_set. */
-kern_return_t
-S_processor_set_max_priority (mach_port_t processor_set, int max_priority,
- boolean_t change_threads)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Routine processor_set_policy_enable */
-kern_return_t
-S_processor_set_policy_enable (mach_port_t processor_set, int policy)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Routine processor_set_policy_disable */
-kern_return_t
-S_processor_set_policy_disable (mach_port_t processor_set, int policy,
- boolean_t change_threads)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Routine processor_set_threads */
-kern_return_t
-S_processor_set_threads (mach_port_t processor_set,
- thread_array_t *thread_list,
- mach_msg_type_number_t *thread_listCnt)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Routine host_set_time */
-kern_return_t
-S_host_set_time (mach_port_t host_priv, time_value_t new_time)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Routine host_adjust_time */
-kern_return_t
-S_host_adjust_time (mach_port_t host_priv, time_value_t new_adjustment,
- time_value_t *old_adjustment)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Routine processor_info */
-kern_return_t
-S_processor_info (mach_port_t processor, int flavor, mach_port_t *host,
- processor_info_t processor_info_out,
- mach_msg_type_number_t *processor_info_outCnt)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Routine processor_set_info */
-kern_return_t
-S_processor_set_info (mach_port_t set_name, int flavor, mach_port_t *host,
- processor_set_info_t info_out,
- mach_msg_type_number_t *info_outCnt)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Routine processor_control */
-kern_return_t
-S_processor_control (mach_port_t processor, processor_info_t processor_cmd,
- mach_msg_type_number_t processor_cmdCnt)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-/* Routine host_get_boot_info */
-kern_return_t
-S_host_get_boot_info (mach_port_t host_priv, kernel_boot_info_t boot_info)
-{
- debug ("");
- assert (0);
- // Hurd currently doesn't use it.
- return EOPNOTSUPP;
-}
-
-///////////////////it's not a proxy for thread requests///////////////////
-
-/* Assign thread to processor set. */
-kern_return_t
-S_thread_assign (mach_port_t thread, mach_port_t new_set)
-{
- debug ("");
- assert (0);
- return EOPNOTSUPP;
-}
-
-/* Assign thread to default set. */
-kern_return_t
-S_thread_assign_default (mach_port_t thread)
-{
- debug ("");
- assert (0);
- return EOPNOTSUPP;
-}
-
-/* Get current assignment for thread. */
-kern_return_t
-S_thread_get_assignment (mach_port_t thread, mach_port_t *assigned_set)
-{
- debug ("");
- assert (0);
- return EOPNOTSUPP;
-}
-
-/* Set priority for thread. */
-kern_return_t S_thread_priority (mach_port_t thread, int priority,
- boolean_t set_max)
-{
- debug ("");
- assert (0);
- return thread_priority (thread, priority, set_max);
-}
-
-/* Set max priority for thread. */
-kern_return_t S_thread_max_priority (mach_port_t thread,
- mach_port_t processor_set,
- int max_priority)
-{
- debug ("");
- assert (0);
- return thread_max_priority (thread, processor_set, max_priority);
-}
-
-/* Routine thread_depress_abort */
-kern_return_t S_thread_depress_abort (mach_port_t thread)
-{
- debug ("");
- assert (0);
- return EOPNOTSUPP;
-}
-
-/* Set policy for thread */
-kern_return_t S_thread_policy (mach_port_t thread, int policy, int data)
-{
- debug ("");
- assert (0);
- return EOPNOTSUPP;
-}
-
-////////////////////don't support obsolete requests///////////////////////
-
-/* Routine yyy_host_info */
-/* obsolete */
-kern_return_t
-S_yyy_host_info (mach_port_t host, int flavor, host_info_t host_info_out,
- mach_msg_type_number_t *host_info_outCnt)
-{
- debug ("");
- assert (0);
- return EOPNOTSUPP;
-}
-
-/* Routine yyy_processor_info */
-/* obsolete */
-kern_return_t
-S_yyy_processor_info (mach_port_t processor, int flavor, mach_port_t *host,
- processor_info_t processor_info_out,
- mach_msg_type_number_t *processor_info_outCnt)
-{
- debug ("");
- assert (0);
- return EOPNOTSUPP;
-}
-
-/* Routine yyy_processor_control */
-/* obsolete */
-kern_return_t
-S_yyy_processor_control (mach_port_t processor,
- processor_info_t processor_cmd,
- mach_msg_type_number_t processor_cmdCnt)
-{
- debug ("");
- assert (0);
- return EOPNOTSUPP;
-}
-
-/*
- * Get rights to default processor set for host.
- * Replaced by host_processor_set_priv.
- */
-kern_return_t
-S_xxx_processor_set_default_priv (mach_port_t host, mach_port_t *default_set)
-{
- debug ("");
- assert (0);
- return EOPNOTSUPP;
-}
-
-/* Routine yyy_processor_set_info */
-/* obsolete */
-kern_return_t
-S_yyy_processor_set_info (mach_port_t set_name, int flavor,
- mach_port_t *host, processor_set_info_t info_out,
- mach_msg_type_number_t *info_outCnt)
-{
- debug ("");
- assert (0);
- return EOPNOTSUPP;
-}
diff --git a/boot-proxy-exc/mach_impl.c b/boot-proxy-exc/mach_impl.c
deleted file mode 100644
index abead5a9..00000000
--- a/boot-proxy-exc/mach_impl.c
+++ /dev/null
@@ -1,909 +0,0 @@
-/*
- 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);
- debug ("get request from task %d (%d, %d): %s",
- target_task_pi->task_port, which_port,
- special_port, strerror (err));
- }
- 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;
-}
diff --git a/boot-proxy-exc/mach_port_impl.c b/boot-proxy-exc/mach_port_impl.c
deleted file mode 100644
index b421280b..00000000
--- a/boot-proxy-exc/mach_port_impl.c
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- 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 <mach.h>
-#include <hurd.h>
-#include <string.h>
-#include <assert.h>
-
-#include "util.h"
-#include "mach_proxy.h"
-
-kern_return_t
-S_mach_port_names (mach_port_t task, mach_port_array_t *names,
- mach_msg_type_number_t *namesCnt,
- mach_port_type_array_t *types,
- mach_msg_type_number_t *typesCnt)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_names (task_pi->task_port,
- names, namesCnt, types, typesCnt);
- debug ("%s", strerror (err));
- /* The deallocation bit is set,
- * so 'names' and 'types' will be deallocated after the reply is sent. */
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_type */
-kern_return_t
-S_mach_port_type (mach_port_t task, mach_port_t name, mach_port_type_t *ptype)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_type (task_pi->task_port, name, ptype);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_rename */
-kern_return_t
-S_mach_port_rename (mach_port_t task,
- mach_port_t old_name, mach_port_t new_name)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- /* old_name and new_name are just names,
- * so I don't need to deallocate them.
- * It should be the same for other RPCs that only deal with port names */
- err = mach_port_rename (task_pi->task_port, old_name, new_name);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_allocate_name */
-kern_return_t
-S_mach_port_allocate_name (mach_port_t task,
- mach_port_right_t right, mach_port_t name)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_allocate_name (task_pi->task_port, right, name);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_allocate */
-kern_return_t
-S_mach_port_allocate (mach_port_t task,
- mach_port_right_t right, mach_port_t *name)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_allocate (task_pi->task_port, right, name);
- debug ("get a request from task %d: %s", task_pi->task_port, strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_destroy */
-kern_return_t
-S_mach_port_destroy (mach_port_t task, mach_port_t name)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_destroy (task_pi->task_port, name);
- debug ("get a request from port %d: %s",
- task_pi->task_port, strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_deallocate */
-kern_return_t
-S_mach_port_deallocate (mach_port_t task, mach_port_t name)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_deallocate (task_pi->task_port, name);
- debug ("get a request from task %d, name: %d, %s",
- task_pi->task_port, name, strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_get_refs */
-kern_return_t
-S_mach_port_get_refs (mach_port_t task, mach_port_t name,
- mach_port_right_t right, mach_port_urefs_t *refs)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_get_refs (task_pi->task_port, name, right, refs);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_mod_refs */
-kern_return_t
-S_mach_port_mod_refs (mach_port_t task, mach_port_t name,
- mach_port_right_t right, mach_port_delta_t delta)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_mod_refs (task_pi->task_port, name, right, delta);
- debug ("get a request from task %d: port: %d, right: %d, delta: %d, %s",
- task_pi->task_port, name, right, delta, strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine old_mach_port_get_receive_status */
-kern_return_t
-S_old_mach_port_get_receive_status (mach_port_t task, mach_port_t name,
- old_mach_port_status_t *status)
-{
- debug ("%s", strerror (EOPNOTSUPP));
- assert (0);
- /* Hurd currently doesn't use it. */
- return EOPNOTSUPP;
-}
-
-/* Routine mach_port_set_qlimit */
-kern_return_t
-S_mach_port_set_qlimit (mach_port_t task, mach_port_t name,
- mach_port_msgcount_t qlimit)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_set_qlimit (task_pi->task_port, name, qlimit);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_set_mscount */
-kern_return_t
-S_mach_port_set_mscount (mach_port_t task, mach_port_t name,
- mach_port_mscount_t mscount)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_set_mscount (task_pi->task_port, name, mscount);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_get_set_status */
-kern_return_t
-S_mach_port_get_set_status (mach_port_t task, mach_port_t name,
- mach_port_array_t *members,
- mach_msg_type_number_t *membersCnt)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_get_set_status (task_pi->task_port,
- name, members, membersCnt);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- /* The deallocation bit is set,
- * so 'members' will be deallocated after the reply is sent. */
- return err;
-}
-
-/* Routine mach_port_move_member */
-kern_return_t
-S_mach_port_move_member (mach_port_t task, mach_port_t member,
- mach_port_t after)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_move_member (task_pi->task_port, member, after);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_request_notification */
-kern_return_t
-S_mach_port_request_notification (mach_port_t task, mach_port_t name,
- mach_msg_id_t id, mach_port_mscount_t sync,
- mach_port_t notify, mach_port_t *previous,
- mach_msg_type_name_t *previousPoly)
-{
- struct task_info *task_pi;
- mach_msg_type_name_t notify_type = MACH_MSG_TYPE_MOVE_SEND_ONCE;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- /* notify is send-once right from the client. */
- err = mach_port_request_notification (task_pi->task_port, name, id, sync,
- notify, notify_type, previous);
- debug ("get a request from task %d, port: %d, id: %d, notify: %d, notify_type: %d, old port: %d, %s",
- task_pi->task_port, name, id, notify, notify_type, *previous, strerror (err));
- ports_port_deref (task_pi);
- if (err)
- return err;
- *previousPoly = MACH_MSG_TYPE_MOVE_SEND_ONCE;
-
- return 0;
-}
-
-/* Routine mach_port_insert_right */
-kern_return_t
-S_mach_port_insert_right (mach_port_t task, mach_port_t name,
- mach_port_t poly, mach_msg_type_name_t polyPoly)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- /* polyPoly can only be three possible values: MACH_MSG_TYPE_PORT_SEND,
- * MACH_MSG_TYPE_PORT_SEND_ONCE and MACH_MSG_TYPE_PORT_RECEIVE,
- * so port will be deallocated when mach_port_insert_right is called. */
- err = mach_port_insert_right (task_pi->task_port, name, poly, polyPoly);
- debug ("get a request from task %d: %s", task_pi->task_port, strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_extract_right */
-kern_return_t
-S_mach_port_extract_right (mach_port_t task, mach_port_t name,
- mach_msg_type_name_t msgt_name, mach_port_t *poly,
- mach_msg_type_name_t *polyPoly)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_extract_right (task_pi->task_port, name, msgt_name,
- poly, polyPoly);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- /* *polyPoly can only be MACH_MSG_TYPE_PORT_SEND, MACH_MSG_TYPE_PORT_RECEIVE,
- * or MACH_MSG_TYPE_PORT_SEND_ONCE, so the port extracted from 'task'
- * will be moved to the client. */
- return err;
-}
-
-/* Routine mach_port_get_receive_status */
-kern_return_t
-S_mach_port_get_receive_status (mach_port_t task, mach_port_t name,
- mach_port_status_t *status)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_get_receive_status (task_pi->task_port, name, status);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
-
-/* Routine mach_port_set_seqno */
-kern_return_t
-S_mach_port_set_seqno (mach_port_t task, mach_port_t name,
- mach_port_seqno_t seqno)
-{
- struct task_info *task_pi;
- error_t err;
-
- task_pi = ports_lookup_port (port_bucket, task, task_portclass);
- if (task_pi == NULL)
- return EOPNOTSUPP;
- err = mach_port_set_seqno (task_pi->task_port, name, seqno);
- debug ("%s", strerror (err));
- ports_port_deref (task_pi);
- return err;
-}
diff --git a/boot-proxy-exc/mach_proxy.c b/boot-proxy-exc/mach_proxy.c
deleted file mode 100644
index cc599353..00000000
--- a/boot-proxy-exc/mach_proxy.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- 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. */
-
-#include <string.h>
-
-#include "util.h"
-#include "mach_proxy.h"
-
-static LIST_HEADER (tasks_head);
-
-static struct mutex tasks_lock = MUTEX_INITIALIZER;
-
-int create_pseudo_task (task_t real_task, task_t *ret_pseudo_task)
-{
- /* the first task is the kernel task. */
- struct task_info *task_pi;
- task_t pseudo_task;
- error_t err;
-
- err = ports_create_port (task_portclass, port_bucket,
- sizeof (struct task_info), &task_pi);
- if (err)
- return err;
-
- task_pi->task_port = real_task;
- task_pi->exc_pi = NULL;
- task_pi->user_exc_port = 0;
- mutex_init (&task_pi->lock);
- entry_init (&task_pi->list);
- mutex_lock (&tasks_lock);
- add_entry_end (&tasks_head, &task_pi->list);
- mutex_unlock (&tasks_lock);
-
- pseudo_task = ports_get_right (task_pi);
- mach_port_insert_right (mach_task_self (), pseudo_task, pseudo_task,
- MACH_MSG_TYPE_MAKE_SEND);
- ports_port_deref (task_pi);
-
- if (ret_pseudo_task)
- *ret_pseudo_task = pseudo_task;
-
- err = task_set_kernel_port (real_task, pseudo_task);
- if (err)
- {
- debug ("fail to set the kernel port: %s", strerror (err));
- ports_destroy_right (task_pi);
- }
-
- return err;
-}
-
-void clean_pseudo_task (void *pi)
-{
- struct task_info *task = pi;
-
- debug ("remove a pseudo task from the list");
- mutex_lock (&tasks_lock);
- remove_entry (&task->list);
- mutex_unlock (&tasks_lock);
-
- if (task->exc_pi)
- ports_destroy_right (task->exc_pi);
- if (task->user_exc_port)
- mach_port_deallocate (mach_task_self (), task->user_exc_port);
-}
-
-void foreach_task (task_callback_t callback)
-{
- struct list *entry = &tasks_head;
- mutex_lock (&tasks_lock);
- for (entry = tasks_head.next; entry != &tasks_head; entry = entry->next)
- {
-// mutex_unlock (&tasks_lock);
- struct task_info *task_pi = LIST_ENTRY (entry, struct task_info, list);
- if (callback (task_pi))
- break;
-// mutex_lock (&tasks_lock);
- }
- mutex_unlock (&tasks_lock);
-}
diff --git a/boot-proxy-exc/mach_proxy.h b/boot-proxy-exc/mach_proxy.h
deleted file mode 100644
index 15f9c397..00000000
--- a/boot-proxy-exc/mach_proxy.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- 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. */
-
-#ifndef PROXY_H
-#define PROXY_H
-
-#include <mach.h>
-#include <hurd.h>
-#include <hurd/ports.h>
-
-#include "list.h"
-
-struct task_info
-{
- struct port_info task;
- task_t task_port;
- struct port_info *exc_pi;
- volatile mach_port_t user_exc_port;
- struct mutex lock;
- /* The linked list is used to keep the order of tasks */
- struct list list;
-};
-
-struct thread_info
-{
- struct port_info thread;
- thread_t thread_port;
-};
-
-typedef int (*task_callback_t) (struct task_info *);
-
-extern struct port_bucket *port_bucket;
-extern struct port_class *task_portclass;
-extern struct port_class *exc_portclass;
-extern struct port_class *thread_portclass;
-
-int create_pseudo_task (task_t real_task, task_t *ret_pseudo_task);
-void clean_pseudo_task (void *pi);
-void foreach_task (task_callback_t callback);
-
-#define UNTESTED
-
-#endif
diff --git a/boot-proxy-exc/ourmach.defs b/boot-proxy-exc/ourmach.defs
deleted file mode 100644
index a257d954..00000000
--- a/boot-proxy-exc/ourmach.defs
+++ /dev/null
@@ -1,772 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1991,1990,1989,1988 Carnegie Mellon University.
- * Copyright (c) 1993,1994 The University of Utah and
- * the Computer Systems Laboratory (CSL).
- * All rights reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON, THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF
- * THIS SOFTWARE IN ITS "AS IS" CONDITION, AND DISCLAIM ANY LIABILITY
- * OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF
- * THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- */
-/*
- * Matchmaker definitions file for Mach kernel interface.
- */
-
-#ifdef MACH_KERNEL
-simport <kern/compat_xxx_defs.h>; /* for obsolete routines */
-#endif /* MACH_KERNEL */
-
-subsystem
-#if KERNEL_USER
- KernelUser
-#endif /* KERNEL_USER */
-#if KERNEL_SERVER
- KernelServer
-#endif /* KERNEL_SERVER */
- mach 2000;
-
-serverprefix S_;
-
-#ifdef KERNEL_USER
-userprefix r_;
-#endif /* KERNEL_USER */
-
-#include <mach/std_types.defs>
-#include <mach/mach_types.defs>
-
-skip; /* old port_allocate */
-skip; /* old port_deallocate */
-skip; /* old port_enable */
-skip; /* old port_disable */
-skip; /* old port_select */
-skip; /* old port_set_backlog */
-skip; /* old port_status */
-
-/*
- * Create a new task with an empty set of IPC rights,
- * and having an address space constructed from the
- * target task (or empty, if inherit_memory is FALSE).
- */
-routine task_create(
- target_task : task_t;
- inherit_memory : boolean_t;
- out child_task : mach_port_send_t);
-
-/*
- * Destroy the target task, causing all of its threads
- * to be destroyed, all of its IPC rights to be deallocated,
- * and all of its address space to be deallocated.
- */
-routine task_terminate(
- target_task : task_t);
-
-/*
- * Get user-level handler entry points for all
- * emulated system calls.
- */
-routine task_get_emulation_vector(
- task : task_t;
- out vector_start : int;
- out emulation_vector: emulation_vector_t);
-
-/*
- * Establish user-level handlers for the specified
- * system calls. Non-emulated system calls are specified
- * with emulation_vector[i] == EML_ROUTINE_NULL.
- */
-routine task_set_emulation_vector(
- task : task_t;
- vector_start : int;
- emulation_vector: emulation_vector_t);
-
-
-/*
- * Returns the set of threads belonging to the target task.
- */
-routine task_threads(
- target_task : task_t;
- out thread_list : thread_array_t);
-/* out thread_list : thread_send_array_t =
- array[] of mach_port_send_t
- ctype: thread_array_t);*/
-
-/*
- * Returns information about the target task.
- */
-routine task_info(
- target_task : task_t;
- flavor : int;
- out task_info_out : task_info_t, CountInOut);
-
-
-skip; /* old task_status */
-skip; /* old task_set_notify */
-skip; /* old thread_create */
-
-/*
- * Destroy the target thread.
- */
-routine thread_terminate(
- target_thread : thread_t);
-
-/*
- * Return the selected state information for the target
- * thread. If the thread is currently executing, the results
- * may be stale. [Flavor THREAD_STATE_FLAVOR_LIST provides a
- * list of valid flavors for the target thread.]
- */
-routine thread_get_state(
- target_thread : thread_t;
- flavor : int;
- out old_state : thread_state_t, CountInOut);
-
-/*
- * Set the selected state information for the target thread.
- * If the thread is currently executing, the state change
- * may be ill-defined.
- */
-routine thread_set_state(
- target_thread : thread_t;
- flavor : int;
- new_state : thread_state_t);
-
-/*
- * Returns information about the target thread.
- */
-routine thread_info(
- target_thread : thread_t;
- flavor : int;
- out thread_info_out : thread_info_t, CountInOut);
-
-skip; /* old thread_mutate */
-
-/*
- * Allocate zero-filled memory in the address space
- * of the target task, either at the specified address,
- * or wherever space can be found (if anywhere is TRUE),
- * of the specified size. The address at which the
- * allocation actually took place is returned.
- */
-#ifdef EMULATOR
-skip; /* the emulator redefines vm_allocate using vm_map */
-#else /* EMULATOR */
-routine vm_allocate(
- target_task : vm_task_t;
- inout address : vm_address_t;
- size : vm_size_t;
- anywhere : boolean_t);
-#endif /* EMULATOR */
-
-skip; /* old vm_allocate_with_pager */
-
-/*
- * Deallocate the specified range from the virtual
- * address space of the target task.
- */
-routine vm_deallocate(
- target_task : vm_task_t;
- address : vm_address_t;
- size : vm_size_t);
-
-/*
- * Set the current or maximum protection attribute
- * for the specified range of the virtual address
- * space of the target task. The current protection
- * limits the memory access rights of threads within
- * the task; the maximum protection limits the accesses
- * that may be given in the current protection.
- * Protections are specified as a set of {read, write, execute}
- * *permissions*.
- */
-routine vm_protect(
- target_task : vm_task_t;
- address : vm_address_t;
- size : vm_size_t;
- set_maximum : boolean_t;
- new_protection : vm_prot_t);
-
-/*
- * Set the inheritance attribute for the specified range
- * of the virtual address space of the target task.
- * The inheritance value is one of {none, copy, share}, and
- * specifies how the child address space should acquire
- * this memory at the time of a task_create call.
- */
-routine vm_inherit(
- target_task : vm_task_t;
- address : vm_address_t;
- size : vm_size_t;
- new_inheritance : vm_inherit_t);
-
-/*
- * Returns the contents of the specified range of the
- * virtual address space of the target task. [The
- * range must be aligned on a virtual page boundary,
- * and must be a multiple of pages in extent. The
- * protection on the specified range must permit reading.]
- */
-routine vm_read(
- target_task : vm_task_t;
- address : vm_address_t;
- size : vm_size_t;
- out data : pointer_t, dealloc);
-
-/*
- * Writes the contents of the specified range of the
- * virtual address space of the target task. [The
- * range must be aligned on a virtual page boundary,
- * and must be a multiple of pages in extent. The
- * protection on the specified range must permit writing.]
- */
-routine vm_write(
- target_task : vm_task_t;
- address : vm_address_t;
- data : pointer_t);
-
-/*
- * Copy the contents of the source range of the virtual
- * address space of the target task to the destination
- * range in that same address space. [Both of the
- * ranges must be aligned on a virtual page boundary,
- * and must be multiples of pages in extent. The
- * protection on the source range must permit reading,
- * and the protection on the destination range must
- * permit writing.]
- */
-routine vm_copy(
- target_task : vm_task_t;
- source_address : vm_address_t;
- size : vm_size_t;
- dest_address : vm_address_t);
-
-/*
- * Returns information about the contents of the virtual
- * address space of the target task at the specified
- * address. The returned protection, inheritance, sharing
- * and memory object values apply to the entire range described
- * by the address range returned; the memory object offset
- * corresponds to the beginning of the address range.
- * [If the specified address is not allocated, the next
- * highest address range is described. If no addresses beyond
- * the one specified are allocated, the call returns KERN_NO_SPACE.]
- */
-routine vm_region(
- target_task : vm_task_t;
- inout address : vm_address_t;
- out size : vm_size_t;
- out protection : vm_prot_t;
- out max_protection : vm_prot_t;
- out inheritance : vm_inherit_t;
- out is_shared : boolean_t;
- /* avoid out-translation of the argument */
- out object_name : memory_object_name_t =
- MACH_MSG_TYPE_COPY_SEND
- ctype: mach_port_t;
- out offset : vm_offset_t);
-
-/*
- * Return virtual memory statistics for the host
- * on which the target task resides. [Note that the
- * statistics are not specific to the target task.]
- */
-routine vm_statistics(
- target_task : vm_task_t;
- out vm_stats : vm_statistics_data_t);
-
-skip; /* old task_by_u*x_pid */
-skip; /* old vm_pageable */
-
-/*
- * Stash a handful of ports for the target task; child
- * tasks inherit this stash at task_create time.
- */
-routine mach_ports_register(
- target_task : task_t;
- init_port_set : mach_port_array_t =
- ^array[] of mach_port_t);
-
-/*
- * Retrieve the stashed ports for the target task.
- */
-routine mach_ports_lookup(
- target_task : task_t;
- out init_port_set : mach_port_array_t =
- ^array[] of mach_port_t);
-
-skip; /* old u*x_pid */
-skip; /* old netipc_listen */
-skip; /* old netipc_ignore */
-
-/*
- * Provide the data contents of a range of the given memory
- * object, with the access restriction specified. [Only
- * whole virtual pages of data can be accepted; partial pages
- * will be discarded. Data should be provided on request, but
- * may be provided in advance as desired. When data already
- * held by this kernel is provided again, the new data is ignored.
- * The access restriction is the subset of {read, write, execute}
- * which are prohibited. The kernel may not provide any data (or
- * protection) consistency among pages with different virtual page
- * alignments within the same object.]
- */
-simpleroutine memory_object_data_provided(
- memory_control : memory_object_control_t;
- offset : vm_offset_t;
- data : pointer_t;
- lock_value : vm_prot_t);
-
-/*
- * Indicate that a range of the given temporary memory object does
- * not exist, and that the backing memory object should be used
- * instead (or zero-fill memory be used, if no backing object exists).
- * [This call is intended for use only by the default memory manager.
- * It should not be used to indicate a real error --
- * memory_object_data_error should be used for that purpose.]
- */
-simpleroutine memory_object_data_unavailable(
- memory_control : memory_object_control_t;
- offset : vm_offset_t;
- size : vm_size_t);
-
-/*
- * Retrieves the attributes currently associated with
- * a memory object.
- */
-routine memory_object_get_attributes(
- memory_control : memory_object_control_t;
- out object_ready : boolean_t;
- out may_cache : boolean_t;
- out copy_strategy : memory_object_copy_strategy_t);
-
-/*
- * Sets the default memory manager, the port to which
- * newly-created temporary memory objects are delivered.
- * [See (memory_object_default)memory_object_create.]
- * The old memory manager port is returned.
- */
-routine vm_set_default_memory_manager(
- host_priv : host_priv_t;
- inout default_manager : mach_port_copy_send_t);
-
-skip; /* old pager_flush_request */
-
-/*
- * Control use of the data associated with the given
- * memory object. For each page in the given range,
- * perform the following operations, in order:
- * 1) restrict access to the page (disallow
- * forms specified by "prot");
- * 2) write back modifications (if "should_return"
- * is RETURN_DIRTY and the page is dirty, or
- * "should_return" is RETURN_ALL and the page
- * is either dirty or precious); and,
- * 3) flush the cached copy (if "should_flush"
- * is asserted).
- * The set of pages is defined by a starting offset
- * ("offset") and size ("size"). Only pages with the
- * same page alignment as the starting offset are
- * considered.
- *
- * A single acknowledgement is sent (to the "reply_to"
- * port) when these actions are complete.
- *
- * There are two versions of this routine because IPC distinguishes
- * between booleans and integers (a 2-valued integer is NOT a
- * boolean). The new routine is backwards compatible at the C
- * language interface.
- */
-simpleroutine xxx_memory_object_lock_request(
- memory_control : memory_object_control_t;
- offset : vm_offset_t;
- size : vm_size_t;
- should_clean : boolean_t;
- should_flush : boolean_t;
- lock_value : vm_prot_t;
- reply_to : mach_port_t =
- MACH_MSG_TYPE_MAKE_SEND_ONCE|polymorphic);
-
-
-simpleroutine memory_object_lock_request(
- memory_control : memory_object_control_t;
- offset : vm_offset_t;
- size : vm_size_t;
- should_return : memory_object_return_t;
- should_flush : boolean_t;
- lock_value : vm_prot_t;
- reply_to : mach_port_t =
- MACH_MSG_TYPE_MAKE_SEND_ONCE|polymorphic);
-
-/* obsolete */
-routine xxx_task_get_emulation_vector(
- task : task_t;
- out vector_start : int;
- out emulation_vector: xxx_emulation_vector_t, IsLong);
-
-/* obsolete */
-routine xxx_task_set_emulation_vector(
- task : task_t;
- vector_start : int;
- emulation_vector: xxx_emulation_vector_t, IsLong);
-
-/*
- * Returns information about the host on which the
- * target object resides. [This object may be
- * a task, thread, or memory_object_control port.]
- */
-routine xxx_host_info(
- target_task : mach_port_t;
- out info : machine_info_data_t);
-
-/*
- * Returns information about a particular processor on
- * the host on which the target task resides.
- */
-routine xxx_slot_info(
- target_task : task_t;
- slot : int;
- out info : machine_slot_data_t);
-
-/*
- * Performs control operations (currently only
- * turning off or on) on a particular processor on
- * the host on which the target task resides.
- */
-routine xxx_cpu_control(
- target_task : task_t;
- cpu : int;
- running : boolean_t);
-
-skip; /* old thread_statistics */
-skip; /* old task_statistics */
-skip; /* old netport_init */
-skip; /* old netport_enter */
-skip; /* old netport_remove */
-skip; /* old thread_set_priority */
-
-/*
- * Increment the suspend count for the target task.
- * No threads within a task may run when the suspend
- * count for that task is non-zero.
- */
-routine task_suspend(
- target_task : task_t);
-
-/*
- * Decrement the suspend count for the target task,
- * if the count is currently non-zero. If the resulting
- * suspend count is zero, then threads within the task
- * that also have non-zero suspend counts may execute.
- */
-routine task_resume(
- target_task : task_t);
-
-/*
- * Returns the current value of the selected special port
- * associated with the target task.
- */
-routine task_get_special_port(
- task : task_t;
- which_port : int;
- out special_port : mach_port_send_t);
-
-/*
- * Set one of the special ports associated with the
- * target task.
- */
-routine task_set_special_port(
- task : task_t;
- which_port : int;
- special_port : mach_port_t);
-
-/* obsolete */
-routine xxx_task_info(
- target_task : task_t;
- flavor : int;
- out task_info_out : task_info_t, IsLong);
-
-
-/*
- * Create a new thread within the target task, returning
- * the port representing that new thread. The
- * initial execution state of the thread is undefined.
- */
-routine thread_create(
- parent_task : task_t;
- out child_thread : mach_port_send_t);
-
-/*
- * Increment the suspend count for the target thread.
- * Once this call has completed, the thread will not
- * execute any further user or meta- instructions.
- * Once suspended, a thread may not execute again until
- * its suspend count is zero, and the suspend count
- * for its task is also zero.
- */
-routine thread_suspend(
- target_thread : thread_t);
-
-/*
- * Decrement the suspend count for the target thread,
- * if that count is not already zero.
- */
-routine thread_resume(
- target_thread : thread_t);
-
-/*
- * Cause any user or meta- instructions currently being
- * executed by the target thread to be aborted. [Meta-
- * instructions consist of the basic traps for IPC
- * (e.g., msg_send, msg_receive) and self-identification
- * (e.g., task_self, thread_self, thread_reply). Calls
- * described by MiG interfaces are not meta-instructions
- * themselves.]
- */
-routine thread_abort(
- target_thread : thread_t);
-
-/* obsolete */
-routine xxx_thread_get_state(
- target_thread : thread_t;
- flavor : int;
- out old_state : thread_state_t, IsLong);
-
-/* obsolete */
-routine xxx_thread_set_state(
- target_thread : thread_t;
- flavor : int;
- new_state : thread_state_t, IsLong);
-
-/*
- * Returns the current value of the selected special port
- * associated with the target thread.
- */
-routine thread_get_special_port(
- thread : thread_t;
- which_port : int;
- out special_port : mach_port_t);
-
-/*
- * Set one of the special ports associated with the
- * target thread.
- */
-routine thread_set_special_port(
- thread : thread_t;
- which_port : int;
- special_port : mach_port_t);
-
-/* obsolete */
-routine xxx_thread_info(
- target_thread : thread_t;
- flavor : int;
- out thread_info_out : thread_info_t, IsLong);
-
-/*
- * Establish a user-level handler for the specified
- * system call.
- */
-routine task_set_emulation(
- target_port : task_t;
- routine_entry_pt: vm_address_t;
- routine_number : int);
-
-/*
- * Establish restart pc for interrupted atomic sequences.
- * This reuses the message number for the old task_get_io_port.
- * See task_info.h for description of flavors.
- *
- */
-routine task_ras_control(
- target_task : task_t;
- basepc : vm_address_t;
- boundspc : vm_address_t;
- flavor : int);
-
-
-
-skip; /* old host_ipc_statistics */
-skip; /* old port_names */
-skip; /* old port_type */
-skip; /* old port_rename */
-skip; /* old port_allocate */
-skip; /* old port_deallocate */
-skip; /* old port_set_backlog */
-skip; /* old port_status */
-skip; /* old port_set_allocate */
-skip; /* old port_set_deallocate */
-skip; /* old port_set_add */
-skip; /* old port_set_remove */
-skip; /* old port_set_status */
-skip; /* old port_insert_send */
-skip; /* old port_extract_send */
-skip; /* old port_insert_receive */
-skip; /* old port_extract_receive */
-
-/*
- * Map a user-defined memory object into the virtual address
- * space of the target task. If desired (anywhere is TRUE),
- * the kernel will find a suitable address range of the
- * specified size; else, the specific address will be allocated.
- *
- * The beginning address of the range will be aligned on a virtual
- * page boundary, be at or beyond the address specified, and
- * meet the mask requirements (bits turned on in the mask must not
- * be turned on in the result); the size of the range, in bytes,
- * will be rounded up to an integral number of virtual pages.
- *
- * The memory in the resulting range will be associated with the
- * specified memory object, with the beginning of the memory range
- * referring to the specified offset into the memory object.
- *
- * The mapping will take the current and maximum protections and
- * the inheritance attributes specified; see the vm_protect and
- * vm_inherit calls for a description of these attributes.
- *
- * If desired (copy is TRUE), the memory range will be filled
- * with a copy of the data from the memory object; this copy will
- * be private to this mapping in this target task. Otherwise,
- * the memory in this mapping will be shared with other mappings
- * of the same memory object at the same offset (in this task or
- * in other tasks). [The Mach kernel only enforces shared memory
- * consistency among mappings on one host with similar page alignments.
- * The user-defined memory manager for this object is responsible
- * for further consistency.]
- */
-#ifdef EMULATOR
-routine htg_vm_map(
- target_task : vm_task_t;
- ureplyport reply_port : mach_port_make_send_once_t;
- inout address : vm_address_t;
- size : vm_size_t;
- mask : vm_address_t;
- anywhere : boolean_t;
- memory_object : memory_object_t;
- offset : vm_offset_t;
- copy : boolean_t;
- cur_protection : vm_prot_t;
- max_protection : vm_prot_t;
- inheritance : vm_inherit_t);
-#else /* EMULATOR */
-routine vm_map(
- target_task : vm_task_t;
- inout address : vm_address_t;
- size : vm_size_t;
- mask : vm_address_t;
- anywhere : boolean_t;
- memory_object : memory_object_t;
- offset : vm_offset_t;
- copy : boolean_t;
- cur_protection : vm_prot_t;
- max_protection : vm_prot_t;
- inheritance : vm_inherit_t);
-#endif /* EMULATOR */
-
-/*
- * Indicate that a range of the specified memory object cannot
- * be provided at this time. [Threads waiting for memory pages
- * specified by this call will experience a memory exception.
- * Only threads waiting at the time of the call are affected.]
- */
-simpleroutine memory_object_data_error(
- memory_control : memory_object_control_t;
- offset : vm_offset_t;
- size : vm_size_t;
- error_value : kern_return_t);
-
-/*
- * Make decisions regarding the use of the specified
- * memory object.
- */
-simpleroutine memory_object_set_attributes(
- memory_control : memory_object_control_t;
- object_ready : boolean_t;
- may_cache : boolean_t;
- copy_strategy : memory_object_copy_strategy_t);
-
-/*
- */
-simpleroutine memory_object_destroy(
- memory_control : memory_object_control_t;
- reason : kern_return_t);
-
-/*
- * Provide the data contents of a range of the given memory
- * object, with the access restriction specified, optional
- * precious attribute, and reply message. [Only
- * whole virtual pages of data can be accepted; partial pages
- * will be discarded. Data should be provided on request, but
- * may be provided in advance as desired. When data already
- * held by this kernel is provided again, the new data is ignored.
- * The access restriction is the subset of {read, write, execute}
- * which are prohibited. The kernel may not provide any data (or
- * protection) consistency among pages with different virtual page
- * alignments within the same object. The precious value controls
- * how the kernel treats the data. If it is FALSE, the kernel treats
- * its copy as a temporary and may throw it away if it hasn't been
- * changed. If the precious value is TRUE, the kernel treats its
- * copy as a data repository and promises to return it to the manager;
- * the manager may tell the kernel to throw it away instead by flushing
- * and not cleaning the data -- see memory_object_lock_request. The
- * reply_to port is for a compeletion message; it will be
- * memory_object_supply_completed.]
- */
-
-simpleroutine memory_object_data_supply(
- memory_control : memory_object_control_t;
- offset : vm_offset_t;
- data : pointer_t, Dealloc[];
- lock_value : vm_prot_t;
- precious : boolean_t;
- reply_to : mach_port_t =
- MACH_MSG_TYPE_MAKE_SEND_ONCE|polymorphic);
-
-simpleroutine memory_object_ready(
- memory_control : memory_object_control_t;
- may_cache : boolean_t;
- copy_strategy : memory_object_copy_strategy_t);
-
-simpleroutine memory_object_change_attributes(
- memory_control : memory_object_control_t;
- may_cache : boolean_t;
- copy_strategy : memory_object_copy_strategy_t;
- reply_to : mach_port_t =
- MACH_MSG_TYPE_MAKE_SEND_ONCE|polymorphic);
-
-skip; /* old host_callout_statistics_reset */
-skip; /* old port_set_select */
-skip; /* old port_set_backup */
-
-/*
- * Set/Get special properties of memory associated
- * to some virtual address range, such as cachability,
- * migrability, replicability. Machine-dependent.
- */
-routine vm_machine_attribute(
- target_task : vm_task_t;
- address : vm_address_t;
- size : vm_size_t;
- attribute : vm_machine_attribute_t;
- inout value : vm_machine_attribute_val_t);
-
-skip; /* old host_fpa_counters_reset */
-
-/*
- * There is no more room in this interface for additional calls.
- */
diff --git a/boot-proxy-exc/ourmach_host.defs b/boot-proxy-exc/ourmach_host.defs
deleted file mode 100644
index c8576ddb..00000000
--- a/boot-proxy-exc/ourmach_host.defs
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1991,1990,1989 Carnegie Mellon University.
- * Copyright (c) 1993,1994 The University of Utah and
- * the Computer Systems Laboratory (CSL).
- * All rights reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON, THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF
- * THIS SOFTWARE IN ITS "AS IS" CONDITION, AND DISCLAIM ANY LIABILITY
- * OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF
- * THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- */
-/*
- * File: mach/mach_host.defs
- *
- * Abstract:
- * Mach host operations support. Includes processor allocation and
- * control.
- */
-
-#ifdef MACH_KERNEL
-simport <kern/compat_xxx_defs.h>; /* for obsolete routines */
-#endif
-
-subsystem
-#if KERNEL_SERVER
- KernelServer
-#endif
- mach_host 2600;
-
-serverprefix S_;
-
-/*
- * Basic types
- */
-
-#include <mach/std_types.defs>
-#include <mach/mach_types.defs>
-
-/*
- * Get list of processors on this host.
- */
-
-routine host_processors(
- host_priv : host_priv_t;
- out processor_list : processor_array_t);
-
-/* obsolete */
-routine yyy_host_info(
- host : host_t;
- flavor : int;
- out host_info_out : host_info_t, IsLong);
-
-
-/* obsolete */
-routine yyy_processor_info(
- processor : processor_t;
- flavor : int;
- out host : host_t;
- out processor_info_out: processor_info_t, IsLong);
-
-/*
- * Start processor.
- */
-
-routine processor_start(
- processor : processor_t);
-
-/*
- * Exit processor -- may not be restartable.
- */
-
-routine processor_exit(
- processor : processor_t);
-
-/* obsolete */
-routine yyy_processor_control(
- processor : processor_t;
- processor_cmd : processor_info_t, IsLong);
-
-/*
- * Get default processor set for host.
- */
-routine processor_set_default(
- host : host_t;
- out default_set : processor_set_name_t);
-
-/*
- * Get rights to default processor set for host.
- * Replaced by host_processor_set_priv.
- */
-routine xxx_processor_set_default_priv(
- host : host_priv_t;
- out default_set : processor_set_t);
-
-/*
- * Create new processor set. Returns real port for manipulations,
- * and name port for obtaining information.
- */
-routine processor_set_create(
- host : host_t;
- out new_set : processor_set_t;
- out new_name : processor_set_name_t);
-
-/*
- * Destroy processor set.
- */
-routine processor_set_destroy(
- set : processor_set_t);
-
-/* obsolete */
-routine yyy_processor_set_info(
- set_name : processor_set_name_t;
- flavor : int;
- out host : host_t;
- out info_out : processor_set_info_t, IsLong);
-
-/*
- * Assign processor to processor set.
- */
-routine processor_assign(
- processor : processor_t;
- new_set : processor_set_t;
- wait : boolean_t);
-
-/*
- * Get current assignment for processor.
- */
-
-routine processor_get_assignment(
- processor : processor_t;
- out assigned_set : processor_set_name_t);
-
-/*
- * Assign thread to processor set.
- */
-routine thread_assign(
- thread : thread_t;
- new_set : processor_set_t);
-
-/*
- * Assign thread to default set.
- */
-routine thread_assign_default(
- thread : thread_t);
-
-/*
- * Get current assignment for thread.
- */
-routine thread_get_assignment(
- thread : thread_t;
- out assigned_set : processor_set_name_t);
-
-/*
- * Assign task to processor set.
- */
-routine task_assign(
- task : task_t;
- new_set : processor_set_t;
- assign_threads : boolean_t);
-/*
- * Assign task to default set.
- */
-routine task_assign_default(
- task : task_t;
- assign_threads : boolean_t);
-
-/*
- * Get current assignment for task.
- */
-routine task_get_assignment(
- task : task_t;
- out assigned_set : processor_set_name_t);
-
-/*
- * Get string describing current kernel version.
- */
-routine host_kernel_version(
- host : host_t;
- out kernel_version : kernel_version_t);
-
-/*
- * Set priority for thread.
- */
-routine thread_priority(
- thread : thread_t;
- priority : int;
- set_max : boolean_t);
-
-/*
- * Set max priority for thread.
- */
-routine thread_max_priority(
- thread : thread_t;
- processor_set : processor_set_t;
- max_priority : int);
-
-/*
- * Set task priority.
- */
-routine task_priority(
- task : task_t;
- priority : int;
- change_threads : boolean_t);
-
-/*
- * Set max priority for processor_set.
- */
-routine processor_set_max_priority(
- processor_set : processor_set_t;
- max_priority : int;
- change_threads : boolean_t);
-
-/*
- * Set policy for thread
- */
-routine thread_policy(
- thread : thread_t;
- policy : int;
- data : int);
-
-/*
- * Enable policy for processor set
- */
-routine processor_set_policy_enable(
- processor_set : processor_set_t;
- policy : int);
-
-/*
- * Disable policy for processor set
- */
-routine processor_set_policy_disable(
- processor_set : processor_set_t;
- policy : int;
- change_threads : boolean_t);
-/*
- * List all tasks in processor set.
- */
-routine processor_set_tasks(
- processor_set : processor_set_t;
- out task_list : task_array_t, dealloc);
-
-/*
- * List all threads in processor set.
- */
-routine processor_set_threads(
- processor_set : processor_set_t;
- out thread_list : thread_array_t);
-
-/*
- * List all processor sets on host.
- */
-routine host_processor_sets(
- host : host_t;
- out processor_sets : processor_set_name_array_t);
-
-/*
- * Get control port for a processor set.
- */
-routine host_processor_set_priv(
- host_priv : host_priv_t;
- set_name : processor_set_name_t;
- out set : mach_port_send_t);
-
-routine thread_depress_abort(
- thread : thread_t);
-
-/*
- * Set the time on this host.
- * Only available to privileged users.
- */
-routine host_set_time(
- host_priv : host_priv_t;
- new_time : time_value_t);
-
-/*
- * Arrange for the time on this host to be gradually changed
- * by an adjustment value, and return the old value.
- * Only available to privileged users.
- */
-routine host_adjust_time(
- host_priv : host_priv_t;
- in new_adjustment : time_value_t;
- out old_adjustment : time_value_t);
-
-/*
- * Get the time on this host.
- * Available to all.
- */
-routine host_get_time(
- host : host_t;
- out current_time : time_value_t);
-
-/*
- * Reboot this host.
- * Only available to privileged users.
- */
-routine host_reboot(
- host_priv : host_priv_t;
- options : int);
-
-/*
- * Specify that the range of the virtual address space
- * of the target task must not cause page faults for
- * the indicated accesses.
- *
- * [ To unwire the pages, specify VM_PROT_NONE. ]
- */
-routine vm_wire(
- host_priv : host_priv_t;
- task : vm_task_t;
- address : vm_address_t;
- size : vm_size_t;
- access : vm_prot_t);
-
-/*
- * Specify that the target thread must always be able
- * to run and to allocate memory.
- */
-routine thread_wire(
- host_priv : host_priv_t;
- thread : thread_t;
- wired : boolean_t);
-
-/*
- * Return information about this host.
- */
-
-routine host_info(
- host : host_t;
- flavor : int;
- out host_info_out : host_info_t, CountInOut);
-
-
-/*
- * Return information about this processor.
- */
-routine processor_info(
- processor : processor_t;
- flavor : int;
- out host : host_t;
- out processor_info_out: processor_info_t, CountInOut);
-
-/*
- * Get information about processor set.
- */
-routine processor_set_info(
- set_name : processor_set_name_t;
- flavor : int;
- out host : host_t;
- out info_out : processor_set_info_t, CountInOut);
-
-/*
- * Do something machine-dependent to processor.
- */
-routine processor_control(
- processor : processor_t;
- processor_cmd : processor_info_t);
-
-/*
- * Get boot configuration information from kernel.
- */
-routine host_get_boot_info(
- host_priv : host_priv_t;
- out boot_info : kernel_boot_info_t);
diff --git a/boot-proxy-exc/ourmach_port.defs b/boot-proxy-exc/ourmach_port.defs
deleted file mode 100644
index 4f131bb2..00000000
--- a/boot-proxy-exc/ourmach_port.defs
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1991,1990,1989 Carnegie Mellon University.
- * Copyright (c) 1993,1994 The University of Utah and
- * the Computer Systems Laboratory (CSL).
- * All rights reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON, THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF
- * THIS SOFTWARE IN ITS "AS IS" CONDITION, AND DISCLAIM ANY LIABILITY
- * OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF
- * THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- */
-/*
- * File: mach/mach_port.defs
- * Author: Rich Draves
- *
- * Copyright (c) 1989 Richard P. Draves, Jr.
- *
- * Exported kernel calls.
- */
-
-subsystem
-#if KERNEL_SERVER
- KernelServer
-#endif
- mach_port 3200;
-
-#include <mach/std_types.defs>
-#include <mach/mach_types.defs>
-
-/*
- * Returns the set of port and port set names
- * to which the target task has access, along with
- * the type (set or port) for each name.
- */
-
-routine mach_port_names(
- task : ipc_space_t;
- out names : mach_port_name_array_t =
- ^array[] of mach_port_name_t
- ctype: mach_port_array_t,
- dealloc;
- out types : mach_port_type_array_t =
- ^array[] of mach_port_type_t,
- dealloc);
-
-/*
- * Returns the type (set or port) for the port name
- * within the target task. Also indicates whether
- * there is a dead-name request for the name.
- */
-
-routine mach_port_type(
- task : ipc_space_t;
- name : mach_port_name_t;
- out ptype : mach_port_type_t);
-
-/*
- * Changes the name by which a port (or port set) is known to
- * the target task. The new name can't be in use. The
- * old name becomes available for recycling.
- */
-
-routine mach_port_rename(
- task : ipc_space_t;
- old_name : mach_port_name_t;
- new_name : mach_port_name_t);
-
-/*
- * Allocates the specified kind of object, with the given name.
- * The right must be one of
- * MACH_PORT_RIGHT_RECEIVE
- * MACH_PORT_RIGHT_PORT_SET
- * MACH_PORT_RIGHT_DEAD_NAME
- * New port sets are empty. New ports don't have any
- * send/send-once rights or queued messages. The make-send
- * count is zero and their queue limit is MACH_PORT_QLIMIT_DEFAULT.
- * New sets, ports, and dead names have one user reference.
- */
-
-routine mach_port_allocate_name(
- task : ipc_space_t;
- right : mach_port_right_t;
- name : mach_port_name_t);
-
-/*
- * Allocates the specified kind of object.
- * The right must be one of
- * MACH_PORT_RIGHT_RECEIVE
- * MACH_PORT_RIGHT_PORT_SET
- * MACH_PORT_RIGHT_DEAD_NAME
- * Like port_allocate_name, but the kernel picks a name.
- * It can use any name not associated with a right.
- */
-
-routine mach_port_allocate(
- task : ipc_space_t;
- right : mach_port_right_t;
- out name : mach_port_name_t);
-
-/*
- * Destroys all rights associated with the name and makes it
- * available for recycling immediately. The name can be a
- * port (possibly with multiple user refs), a port set, or
- * a dead name (again, with multiple user refs).
- */
-
-routine mach_port_destroy(
- task : ipc_space_t;
- name : mach_port_name_t);
-
-/*
- * Releases one send/send-once/dead-name user ref.
- * Just like mach_port_mod_refs -1, but deduces the
- * correct type of right. This allows a user task
- * to release a ref for a port without worrying
- * about whether the port has died or not.
- */
-
-routine mach_port_deallocate(
- task : ipc_space_t;
- name : mach_port_name_t);
-
-/*
- * A port set always has one user ref.
- * A send-once right always has one user ref.
- * A dead name always has one or more user refs.
- * A send right always has one or more user refs.
- * A receive right always has one user ref.
- * The right must be one of
- * MACH_PORT_RIGHT_RECEIVE
- * MACH_PORT_RIGHT_PORT_SET
- * MACH_PORT_RIGHT_DEAD_NAME
- * MACH_PORT_RIGHT_SEND
- * MACH_PORT_RIGHT_SEND_ONCE
- */
-
-routine mach_port_get_refs(
- task : ipc_space_t;
- name : mach_port_name_t;
- right : mach_port_right_t;
- out refs : mach_port_urefs_t);
-
-/*
- * The delta is a signed change to the task's
- * user ref count for the right. Only dead names
- * and send rights can have a positive delta.
- * The resulting user ref count can't be negative.
- * If it is zero, the right is deallocated.
- * If the name isn't a composite right, it becomes
- * available for recycling. The right must be one of
- * MACH_PORT_RIGHT_RECEIVE
- * MACH_PORT_RIGHT_PORT_SET
- * MACH_PORT_RIGHT_DEAD_NAME
- * MACH_PORT_RIGHT_SEND
- * MACH_PORT_RIGHT_SEND_ONCE
- */
-
-routine mach_port_mod_refs(
- task : ipc_space_t;
- name : mach_port_name_t;
- right : mach_port_right_t;
- delta : mach_port_delta_t);
-
-/*
- * Temporary compatibility call.
- */
-
-routine old_mach_port_get_receive_status(
- task : ipc_space_t;
- name : mach_port_name_t;
- out status : old_mach_port_status_t);
-
-/*
- * Only valid for receive rights.
- * Sets the queue-limit for the port.
- * The limit must be
- * 1 <= qlimit <= MACH_PORT_QLIMIT_MAX
- */
-
-routine mach_port_set_qlimit(
- task : ipc_space_t;
- name : mach_port_name_t;
- qlimit : mach_port_msgcount_t);
-
-/*
- * Only valid for receive rights.
- * Sets the make-send count for the port.
- */
-
-routine mach_port_set_mscount(
- task : ipc_space_t;
- name : mach_port_name_t;
- mscount : mach_port_mscount_t);
-
-/*
- * Only valid for port sets. Returns a list of
- * the members.
- */
-
-routine mach_port_get_set_status(
- task : ipc_space_t;
- name : mach_port_name_t;
- out members : mach_port_name_array_t =
- ^array[] of mach_port_name_t
- ctype: mach_port_array_t,
- dealloc);
-
-/*
- * Puts the member port (the task must have receive rights)
- * into the after port set. (Or removes it from any port set
- * if after is MACH_PORT_NULL.) If the port is already in
- * a set, does an atomic move.
- */
-
-routine mach_port_move_member(
- task : ipc_space_t;
- member : mach_port_name_t;
- after : mach_port_name_t);
-
-/*
- * Requests a notification from the kernel. The request
- * must supply the send-once right which is used for
- * the notification. If a send-once right was previously
- * registered, it is returned. The msg_id must be one of
- * MACH_NOTIFY_PORT_DESTROYED (receive rights)
- * MACH_NOTIFY_DEAD_NAME (send/receive/send-once rights)
- * MACH_NOTIFY_NO_SENDERS (receive rights)
- *
- * The sync value specifies whether a notification should
- * get sent immediately, if appropriate. The exact meaning
- * depends on the notification:
- * MACH_NOTIFY_PORT_DESTROYED: must be zero.
- * MACH_NOTIFY_DEAD_NAME: if non-zero, then name can be dead,
- * and the notification gets sent immediately.
- * If zero, then name can't be dead.
- * MACH_NOTIFY_NO_SENDERS: the notification gets sent
- * immediately if the current mscount is greater
- * than or equal to the sync value and there are no
- * extant send rights.
- */
-
-routine mach_port_request_notification(
- task : ipc_space_t;
- name : mach_port_name_t;
- id : mach_msg_id_t;
- sync : mach_port_mscount_t;
- notify : mach_port_send_once_t;
- out previous : mach_port_send_once_t);
-
-/*
- * Inserts the specified rights into the target task,
- * using the specified name. If inserting send/receive
- * rights and the task already has send/receive rights
- * for the port, then the names must agree. In any case,
- * the task gains a user ref for the port.
- */
-
-routine mach_port_insert_right(
- task : ipc_space_t;
- name : mach_port_name_t;
- poly : mach_port_poly_t);
-
-/*
- * Returns the specified right for the named port
- * in the target task, extracting that right from
- * the target task. The target task loses a user
- * ref and the name may be available for recycling.
- * msgt_name must be one of
- * MACH_MSG_TYPE_MOVE_RECEIVE
- * MACH_MSG_TYPE_COPY_SEND
- * MACH_MSG_TYPE_MAKE_SEND
- * MACH_MSG_TYPE_MOVE_SEND
- * MACH_MSG_TYPE_MAKE_SEND_ONCE
- * MACH_MSG_TYPE_MOVE_SEND_ONCE
- */
-
-routine mach_port_extract_right(
- task : ipc_space_t;
- name : mach_port_name_t;
- msgt_name : mach_msg_type_name_t;
- out poly : mach_port_poly_t);
-
-/*
- * The task must have receive rights for the named port.
- * Returns a status structure (see mach/port.h).
- */
-
-routine mach_port_get_receive_status(
- task : ipc_space_t;
- name : mach_port_name_t;
- out status : mach_port_status_t);
-
-/*
- * Only valid for receive rights.
- * Sets the sequence number for the port.
- */
-
-routine mach_port_set_seqno(
- task : ipc_space_t;
- name : mach_port_name_t;
- seqno : mach_port_seqno_t);
-
-#ifdef MIGRATING_THREADS
-/*
- * Only valid for receive rights.
- * Set the user-mode entry info for RPCs coming through this port.
- * Do this BEFORE attaching an ActPool to this port,
- * unless you can be sure no RPCs will be coming through it yet.
- */
-
-routine mach_port_set_rpcinfo(
- task : ipc_space_t;
- name : mach_port_name_t;
- rpc_info : thread_info_t); /* XXX */
-
-/*
- * Only valid for receive rights.
- * Create a new activation for migrating RPC, and attach it to the port's ActPool.
- * Create an ActPool for the port if it doesn't already have one.
- * Supply a stack and receive memory buffer.
- */
-
-routine mach_port_create_act(
- task : task_t;
- name : mach_port_name_t;
- user_stack : vm_offset_t;
- user_rbuf : vm_offset_t;
- user_rbuf_size : vm_size_t;
- out new_act : thread_t);
-
-#endif /* MIGRATING_THREADS */
-
diff --git a/boot-proxy-exc/sigvec.S b/boot-proxy-exc/sigvec.S
deleted file mode 100644
index cc7bb94e..00000000
--- a/boot-proxy-exc/sigvec.S
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <i386/asm.h>
-
-.text
-ENTRY(sigreturn)
- movl $0x67,%eax
- lcall $0x7,$0x0
- jb error
- ret
-ENTRY(_sigreturn)
- addl $0xc,%esp
- call EXT(sigreturn)
- ret
-ENTRY(sigvec)
- movl $0x6c,%eax
- movl $EXT(_sigreturn),%edx
- orl $0x80000000,%edx
- lcall $0x7,$0x0
- jb error
- ret
-error:
- movl %eax,EXT(errno)
- movl $-1,%eax
- ret
diff --git a/boot-proxy-exc/syscall.S b/boot-proxy-exc/syscall.S
deleted file mode 100644
index a04ab28d..00000000
--- a/boot-proxy-exc/syscall.S
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Temporary....
- Copyright (C) 1993, 1995 Free Software Foundation
-
-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. */
-
-#include <i386/asm.h>
-
-/* .globl EXT(errno)*/
-.text
-ENTRY(syscall)
- pop %ecx
- pop %eax
- push %ecx
- lcall $7, $0
- push %ecx /* Restore stack position. */
- jb error
- ret
-error:
- movl %eax,EXT(errno)
- movl $-1,%eax
- ret
diff --git a/boot-proxy-exc/userland-boot.c b/boot-proxy-exc/userland-boot.c
deleted file mode 100644
index 20c818ff..00000000
--- a/boot-proxy-exc/userland-boot.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/* boot_script.c support functions for running in a Mach user task.
- Copyright (C) 2001 Free Software Foundation, Inc.
-
- 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 this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#include <mach.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <error.h>
-#include "boot_script.h"
-#include "mach_proxy.h"
-#include "util.h"
-
-extern boolean_t is_user;
-
-void *
-boot_script_malloc (unsigned int size)
-{
- return malloc (size);
-}
-
-void
-boot_script_free (void *ptr, unsigned int size)
-{
- free (ptr);
-}
-
-int
-boot_script_task_create (struct cmd *cmd)
-{
- error_t err = task_create (mach_task_self (), 0, &cmd->task);
- if (err)
- {
- error (0, err, "%s: task_create", cmd->path);
- return BOOT_SCRIPT_MACH_ERROR;
- }
- debug ("creating task: %s, task port: %d", cmd->path, cmd->task);
- if (is_user)
- {
- task_t pseudo_task = 0;
- create_pseudo_task (cmd->task, &pseudo_task);
- /* now it is the pseudo task port. */
- cmd->task = pseudo_task;
- }
- err = task_suspend (cmd->task);
- if (err)
- {
- error (0, err, "%s: task_suspend", cmd->path);
- return BOOT_SCRIPT_MACH_ERROR;
- }
- return 0;
-}
-
-int
-boot_script_task_resume (struct cmd *cmd)
-{
- debug ("resume task %s: %d", cmd->path, cmd->task);
- error_t err = task_resume (cmd->task);
- if (err)
- {
- error (0, err, "%s: task_resume", cmd->path);
- return BOOT_SCRIPT_MACH_ERROR;
- }
- return 0;
-}
-
-int
-boot_script_prompt_task_resume (struct cmd *cmd)
-{
- char xx[5];
-
- printf ("Hit return to resume %s...", cmd->path);
- fgets (xx, sizeof xx, stdin);
-
- return boot_script_task_resume (cmd);
-}
-
-void
-boot_script_free_task (task_t task, int aborting)
-{
- if (aborting)
- task_terminate (task);
- else if (!is_user)
- mach_port_deallocate (mach_task_self (), task);
- /* For the normal user, the task port will still be used,
- * so we cannot deallocate the task port here.*/
-}
-
-int
-boot_script_insert_right (struct cmd *cmd, mach_port_t port, mach_port_t *name)
-{
- error_t err = mach_port_insert_right (cmd->task,
- port, port, MACH_MSG_TYPE_COPY_SEND);
- if (err)
- {
- error (0, err, "%s: mach_port_insert_right", cmd->path);
- return BOOT_SCRIPT_MACH_ERROR;
- }
- *name = port;
- return 0;
-}
-
-int
-boot_script_insert_task_port (struct cmd *cmd, task_t task, mach_port_t *name)
-{
- return boot_script_insert_right (cmd, task, name);
-}
diff --git a/boot-proxy-exc/util.h b/boot-proxy-exc/util.h
deleted file mode 100644
index e82a8626..00000000
--- a/boot-proxy-exc/util.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- Copyright (C) 2008 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. */
-
-#ifndef UTIL_H
-#define UTIL_H
-
-#include <stdio.h>
-#include <string.h>
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-#include <netinet/ip.h>
-#include <syslog.h>
-
-#include <mach.h>
-#include <hurd.h>
-
-#define DEBUG 0
-#define INFO 1
-#define LOGLEVEL DEBUG
-
-extern FILE *logfile;
-
-#define LOG_START() do \
-{ \
- logfile = fopen("boot.log", "a"); \
- assert (logfile != NULL); \
-} while (0)
-
-#define LOG_END() fclose (logfile)
-
-#define output(format, ...) do \
-{ \
- char buf[1024]; \
- snprintf (buf, 1024, "boot: %s: %s\r\n", __func__, format); \
- fprintf (stderr , buf, ## __VA_ARGS__); \
- fflush (stderr); \
-} while (0)
-
-#if DEBUG >= LOGLEVEL
-#define debug(format, ...) do \
-{ \
- char buf[1024]; \
- snprintf (buf, 1024, "boot: %s: %s\r\n", __func__, format); \
- fprintf (logfile , buf, ## __VA_ARGS__); \
- fflush (logfile); \
-} while (0)
-#else
-#define debug(format, ...) do {} while (0)
-#endif
-
-#if INFO >= LOGLEVEL
-#define info output
-#else
-#define info(format, ...) do {} while (0)
-#endif
-
-#if ERROR >= LOGLEVEL
-#define logerror(format, ...) do \
-{ \
- char buf[1024]; \
- snprintf (buf, 1024, "boot ERROR: %s: %s\r\n", __func__, format); \
- fprintf (stderr , buf, ## __VA_ARGS__); \
- fflush (stderr); \
-} while (0)
-#else
-#define logerror(format, ...) do {} while (0)
-#endif
-
-#define print_port_type(port) do \
-{ \
- mach_port_type_t ptype; \
- error_t err = mach_port_type (mach_task_self (), port, &ptype); \
- if (err) \
- debug ("mach_port_type: %s", strerror (err)); \
- else if (ptype & MACH_PORT_TYPE_SEND) \
- debug ("port %d has send right", port); \
- else if (ptype & MACH_PORT_TYPE_RECEIVE) \
- debug ("port %d has receive right", port); \
- else if (ptype & MACH_PORT_TYPE_SEND_ONCE) \
- debug ("port %d has send once right", port); \
- else if (ptype & MACH_PORT_TYPE_PORT_SET) \
- debug ("port %d is port set", port); \
- else if (ptype & MACH_PORT_TYPE_DEAD_NAME) \
- debug ("port %d is a dead name", port); \
- else \
- debug ("the type of port %d is %d", port, ptype); \
- mach_port_urefs_t refs; \
- err = mach_port_get_refs (mach_task_self (), port, \
- MACH_PORT_RIGHT_SEND, &refs); \
- if (!err) \
- debug ("port send right references: %d", refs); \
-} while (0)
-
-#endif
diff --git a/boot-proxy-exc/ux.c b/boot-proxy-exc/ux.c
deleted file mode 100644
index b532f19e..00000000
--- a/boot-proxy-exc/ux.c
+++ /dev/null
@@ -1,303 +0,0 @@
-/* Hacks to make boot work under UX
-
- Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
-
- 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. */
-
-#include <mach.h>
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <cthreads.h>
-
-#include "ux.h"
-
-#if 0
-static int (* const _sc)(int, ...) = &syscall;
-int _sc_print = 1;
-
-#define syscall(num, args...) \
- ({ int _rv, _num = (num), _pr = _sc_print; \
- _sc_print = 0; \
- if (_pr) printf ("syscall (%d) start\r\n", _num); \
- _rv = (*_sc) (_num , ##args); \
- if (_pr) printf ("syscall (%d) end\r\n", _num); \
- _sc_print = _pr; \
- _rv; \
- })
-#endif
-
-extern void __mach_init ();
-void (*mach_init_routine)() = __mach_init;
-
-/* These will prevent the Hurd-ish versions from being used */
-
-struct free_reply_port
-{
- mach_port_t port;
- struct free_reply_port *next;
-};
-static struct free_reply_port *free_reply_ports = NULL;
-static spin_lock_t free_reply_ports_lock = SPIN_LOCK_INITIALIZER;
-
-mach_port_t __mig_get_reply_port ()
-{
- spin_lock (&free_reply_ports_lock);
- if (free_reply_ports == NULL)
- {
- spin_unlock (&free_reply_ports_lock);
- return __mach_reply_port ();
- }
- else
- {
- struct free_reply_port *frp = free_reply_ports;
- mach_port_t reply_port = frp->port;
- free_reply_ports = free_reply_ports->next;
- spin_unlock (&free_reply_ports_lock);
- free (frp);
- return reply_port;
- }
-}
-mach_port_t mig_get_reply_port ()
-{
- return __mig_get_reply_port ();
-}
-void __mig_put_reply_port (mach_port_t port)
-{
- struct free_reply_port *frp = malloc (sizeof (struct free_reply_port));
- frp->port = port;
- spin_lock (&free_reply_ports_lock);
- frp->next = free_reply_ports;
- free_reply_ports = frp;
- spin_unlock (&free_reply_ports_lock);
-}
-void mig_put_reply_port (mach_port_t port)
-{
- __mig_put_reply_port (port);
-}
-void __mig_dealloc_reply_port (mach_port_t port)
-{
- mach_port_mod_refs (__mach_task_self (), port,
- MACH_PORT_RIGHT_RECEIVE, -1);
-}
-void mig_dealloc_reply_port (mach_port_t port)
-{
- __mig_dealloc_reply_port (port);
-}
-void __mig_init (void *stack) {}
-void mig_init (void *stack) {}
-
-int
-task_by_pid (int pid)
-{
- return syscall (-33, pid);
-}
-
-int
-write (int fd,
- const void *buf,
- int buflen)
-{
- return syscall (4, fd, buf, buflen);
-}
-
-int
-read (int fd,
- void *buf,
- int buflen)
-{
- return syscall (3, fd, buf, buflen);
-}
-
-int
-open (const char *name,
- int flags,
- int mode)
-{
- return syscall (5, name, flags, mode);
-}
-
-int
-uxfstat (int fd, struct uxstat *buf)
-{
- return syscall (62, fd, buf);
-}
-
-int
-close (int fd)
-{
- return syscall (6, fd);
-}
-
-int
-lseek (int fd,
- int off,
- int whence)
-{
- return syscall (19, fd, off, whence);
-}
-
-int
-uxexit (int code)
-{
- return syscall (1, code);
-}
-
-int
-getpid ()
-{
- return syscall (20);
-}
-
-int
-ioctl (int fd, int code, void *buf)
-{
- return syscall (54, fd, code, buf);
-}
-
-int
-sigblock (int mask)
-{
- return syscall (109, mask);
-}
-
-int
-sigsetmask (int mask)
-{
- return syscall (110, mask);
-}
-
-int
-sigpause (int mask)
-{
- return syscall (111, mask);
-}
-
-
-#if 0
-void
-sigreturn ()
-{
- asm volatile ("movl $0x67,%eax\n"
- "lcall $0x7, $0x0\n"
- "ret");
-}
-
-void
-_sigreturn ()
-{
- asm volatile ("addl $0xc, %%esp\n"
- "call %0\n"
- "ret"::"m" (sigreturn));
-}
-
-int
-sigvec (int sig, struct sigvec *vec, struct sigvec *ovec)
-{
- asm volatile ("movl $0x6c,%%eax\n"
- "movl %0, %%edx\n"
- "orl $0x80000000, %%edx\n"
- "lcall $0x7,$0x0\n"
- "ret"::"g" (_sigreturn));
-}
-#else
-int sigvec ();
-#endif
-
-void get_privileged_ports (mach_port_t *host_port, mach_port_t *device_port)
-{
- *host_port = task_by_pid (-1);
- *device_port = task_by_pid (-2);
-}
-
-/* A *really* stupid printf that only understands %s & %d. */
-int
-printf (const char *fmt, ...)
-{
- va_list ap;
- const char *p = fmt, *q = p;
-
- void flush (const char *new)
- {
- if (p > q)
- write (1, q, p - q);
- q = p = new;
- }
-
- va_start (ap, fmt);
- while (*p)
- if (*p == '%' && p[1] == 's')
- {
- char *str = va_arg (ap, char *);
- flush (p + 2);
- write (1, str, strlen (str));
- }
- else if (*p == '%' && p[1] == 'd')
- {
- int i = va_arg (ap, int);
- char rbuf[20], *e = rbuf + sizeof (rbuf), *b = e;
-
- if (i == 0)
- *--b = '0';
- else
- while (i)
- {
- *--b = i % 10 + '0';
- i /= 10;
- }
-
- flush (p + 2);
- write (1, b, e - b);
- }
- else
- p++;
- va_end (ap);
-
- flush (0);
-
- return 0;
-}
-
-static struct sgttyb term_sgb;
-static int localbits;
-
-void
-init_termstate ()
-{
- struct sgttyb sgb;
- int bits;
- ioctl (0, TIOCGETP, &term_sgb);
- ioctl (0, TIOCLGET, &localbits);
- /* Enter raw made. Rather than try and interpret these bits,
- we just do what emacs does in .../emacs/src/sysdep.c for
- an old style terminal driver. */
- bits = localbits | LDECCTQ | LLITOUT | LPASS8 | LNOFLSH;
- ioctl (0, TIOCLSET, &bits);
- sgb = term_sgb;
- sgb.sg_flags &= ~ECHO;
- sgb.sg_flags |= RAW | ANYP;
- ioctl (0, TIOCSETN, &sgb);
-}
-
-void
-restore_termstate ()
-{
- ioctl (0, TIOCLSET, &localbits);
- ioctl (0, TIOCSETN, &term_sgb);
-}
diff --git a/boot-proxy-exc/ux.h b/boot-proxy-exc/ux.h
deleted file mode 100644
index d3787c54..00000000
--- a/boot-proxy-exc/ux.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Hacks to make boot work under UX
-
- Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
-
- 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. */
-
-#define sigmask(m) (1 << ((m)-1))
-
-#define IOCPARM_MASK 0x7f
-#define IOC_OUT 0x40000000
-#define IOC_IN 0x80000000
-#define _IOR(x,y,t) (IOC_OUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
-#define _IOW(x,y,t) (IOC_IN|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
-#define FIONREAD _IOR('f', 127, int)
-#define FIOASYNC _IOW('f', 125, int)
-#define TIOCGETP _IOR('t', 8, struct sgttyb)
-#define TIOCLGET _IOR('t', 124, int)
-#define TIOCLSET _IOW('t', 125, int)
-#define TIOCSETN _IOW('t', 10, struct sgttyb)
-#define LDECCTQ 0x4000
-#define LLITOUT 0x0020
-#define LPASS8 0x0800
-#define LNOFLSH 0x8000
-#define RAW 0x0020
-#define ANYP 0x00c0
-#define ECHO 8
-
-
-struct sgttyb
-{
- char unused[4];
- short sg_flags;
-};
-
-#define SIGIO 23
-
-struct sigvec
-{
- void (*sv_handler)();
- int sv_mask;
- int sv_flags;
-};
-
-struct uxstat
- {
- short int st_dev; /* Device containing the file. */
- __ino_t st_ino; /* File serial number. */
- unsigned short int st_mode; /* File mode. */
- __nlink_t st_nlink; /* Link count. */
- unsigned short int st_uid; /* User ID of the file's owner. */
- unsigned short int st_gid; /* Group ID of the file's group.*/
- short int st_rdev; /* Device number, if device. */
- __off_t st_size; /* Size of file, in bytes. */
- __time_t st_atime; /* Time of last access. */
- unsigned long int st_atime_usec;
- __time_t st_mtime; /* Time of last modification. */
- unsigned long int st_mtime_usec;
- __time_t st_ctime; /* Time of last status change. */
- unsigned long int st_ctime_usec;
- unsigned long int st_blksize; /* Optimal block size for I/O. */
- unsigned long int st_blocks; /* Number of 512-byte blocks allocated. */
- long int st_spare[2];
- };
-
-void get_privileged_ports (mach_port_t *host_port, mach_port_t *device_port);
-
-/* We can't include <unistd.h> for this, because that will fight witho
- our definitions of syscalls below. */
-int syscall (int, ...);
-
-int open (const char *name, int flags, int mode);
-int write (int fd, const void *buf, int len);
-int read (int fd, void *buf, int len);
-int uxfstat (int fd, struct uxstat *buf);
-int close (int fd);
-int lseek (int fd, int off, int whence);
-int uxexit (int code);
-int getpid ();
-int ioctl (int fd, int code, void *buf);
-int sigblock (int mask);
-int sigsetmask (int mask);
-int sigpause (int mask);
-int sigvec (int sig, struct sigvec *vec, struct sigvec *ovec);
-
-#undef O_RDONLY
-#undef O_WRONLY
-#undef O_RDWR
-#define O_RDONLY 0
-#define O_WRONLY 1
-#define O_RDWR 2
-
-#define host_exit(c) uxexit(c)
-
-typedef struct uxstat host_stat_t;
-#define host_fstat(fd, st) uxfstat (fd, st)
-
-void init_stdio ();
-
-#undef errno
-int errno;