summaryrefslogtreecommitdiff
path: root/sys/compat/osf1/README.syscalls
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>1995-10-18 08:53:40 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>1995-10-18 08:53:40 +0000
commitd6583bb2a13f329cf0332ef2570eb8bb8fc0e39c (patch)
treeece253b876159b39c620e62b6c9b1174642e070e /sys/compat/osf1/README.syscalls
initial import of NetBSD tree
Diffstat (limited to 'sys/compat/osf1/README.syscalls')
-rw-r--r--sys/compat/osf1/README.syscalls160
1 files changed, 160 insertions, 0 deletions
diff --git a/sys/compat/osf1/README.syscalls b/sys/compat/osf1/README.syscalls
new file mode 100644
index 00000000000..50e08e810f8
--- /dev/null
+++ b/sys/compat/osf1/README.syscalls
@@ -0,0 +1,160 @@
+$NetBSD: README.syscalls,v 1.1 1995/02/13 21:39:03 cgd Exp $
+
+Once the new syscall argument-handling method was implemented, most
+OSF/1 syscalls boiled down to their NetBSD equivalents. The
+differences are detailed in this file.
+
+Note that some OSF/1 syscalls, including some of those that map
+directly to equivalent NetBSD syscalls, are not implemented; they
+were not needed, so the effort to implement and check them was not
+expended.
+
+Finally, there are some OSF/1 syscalls which were left unimplemented,
+but which seem strange enough to merit a bit more explanation.
+
+OSF/1 compatibility is helped by the fact that the sigcontext
+structure was created for NetBSD/Alpha to be the same as the OSF/1
+sigcontext structure. Because of this, only one sendsig() function is
+needed, and the the NetBSD sigreturn() function can be used for OSF/1
+sigreturn(), as well.
+
+The system calls are split out among the three files:
+ osf1_ioctl.c
+ osf1_misc.c
+ osf1_mount.c
+as follows:
+ osf1_ioctl.c contains all osf1_ioctl() handling code.
+ osf1_mount.c contains all code dealing with mounting and
+ unmounting file systems, and with mount points in
+ general (e.g. osf1_getfsstat()).
+ osf1_misc.c contains the rest of the emulation functions.
+
+The emulation functions as follows:
+
+osf1_mknod()
+ dev_t's are different between OSF/1 and NetBSD. In OSF/1 a
+ dev_t has 12 bits of major number and 20 bits of minor number.
+ Under NetBSD, it's 24 bits of major, 8 bits of minor (but the
+ top 16 bits of the major number are unused, and may be
+ rearranged later). In any case, it was decided that the
+ primary use for OSF/1 binaries would be to complement native
+ NetBSD binaries, so file system dev_t's are assumed to be in
+ the NetBSD format, and osf1_mknod() translates from the OSF/1
+ format to the NetBSD format.
+
+osf1_getfsstat()
+ The statfs structure is different between NetBSD and OSF/1,
+ and the way file system types are denoted is different, as
+ well. This routine is the same as getfsstat(), except it
+ converts the statfs structures before returning them to the
+ OSF/1 process.
+
+osf1_lseek()
+ To compensate for quad alignment on 32-bit machines, the
+ NetBSD lseek() needs an extra argument of padding, before the
+ off_t 'offset' argument. This wrapper inserts the padding,
+ and calls the NetBSD routine.
+
+osf1_mount()
+ The file system type specification and the way you specify
+ mount options differs substantially between NetBSD and OSF/1.
+ This routine (and its callees) fakes up NetBSD arguments, and
+ calls the NetBSD routine.
+
+osf1_unmount()
+ Probably not necessary, but safe; translates flags, in case
+ the NetBSD unmount flags ever change.
+
+osf1_exec_with_loader() [UNIMPLEMENTED]
+ From the description in the OSF/1 manual page, this executes a
+ file with a named loader, or "/sbin/loader" if none is named.
+ It appears to be used in some way, when executing dynamically
+ linked binaries, but is _not_ called directly from user space
+ in the normal case. The interface by which it passes the name
+ of the file to be executed, its arguments, etc., to the loader
+ is unspecified, and, from experimental evidence, doesn't seem
+ to be the normal UN*X argument-passing convention (i.e.
+ argc/argv). For proper dynamically linked binary support,
+ this function will probably have to be implemented, but it's
+ unclear how that can be done (short of disassembling a lot of
+ code).
+
+osf1_open()
+ Translates OSF/1 flags to NetBSD flags.
+
+osf1_ioctl()
+ Screens out ioctl requests that aren't known to work, and
+ translates those that differ between NetBSD and OSF/1.
+
+osf1_reboot()
+ Translates OSF/1 flags to NetBSD flags.
+
+osf1_stat()
+ The stat structure differs between NetBSD and OSF/1, both in
+ terms of field sizes, and in the dev_t representation.
+ This does a NetBSD stat(), translates the results, and returns
+ them to the OSF/1 process.
+
+osf1_lstat()
+ Same as osf1_stat(), but for lstat().
+
+osf1_mmap()
+ The NetBSD version needs 4 bytes of padding before the off_t
+ 'pos' argument, and also uses different flags than the OSF/1
+ version. This wrapper translates the flags and deals with the
+ argument struct padding differences, then calls the NetBSD
+ routine.
+
+osf1_fstat()
+ Same as osf1_stat(), but for fstat().
+
+osf1_fcntl()
+ Translates OSF/1 fcntl() requests into their NetBSD
+ counterparts, then calls the NetBSD fcntl() to do the
+ operations.
+
+osf1_socket()
+ Makes sure that the socket type is valid for NetBSD, and if
+ so, calls NetBSD's socket().
+
+osf1_sendto()
+ Makes sure that the 'flags' argument doesn't use flags that
+ NetBSD can't handle, and calls NetBSD's sendto().
+
+osf1_getrlimit()
+ Makes sure that the 'which' selector is one that NetBSD can
+ deal with, and calls NetBSD's getrlimit().
+
+osf1_setrlimit()
+ Same as osf1_getrlimit(), but for setrlimit().
+
+osf1_sigaction()
+ Deals with the differences in the NetBSD and OSF/1 sigaction
+ structures, and calls NetBSD's sigaction with the appropriate
+ arguments. If the call requests that the old sigaction be
+ passed back, osf1_sigaction() translates it back to the OSF/1
+ form, and returns it appropriately.
+
+osf1_statfs()
+ Does that statfs() on the given pathname, then translates the
+ NetBSD statfs structure into the one that OSF/1 uses and
+ returns it. Makes a best effort on the mount type, because
+ there's not a one-to-one mapping between NetBSD and OSF/1
+ mount types.
+
+osf1_fstatfs()
+ Same as osf1_statfs(), but for fstatfs().
+
+osf1_usleep_thread()
+ This function is how sleep() and usleep() (and possibly other
+ functions) are implemented in OSF/1. Its usage was discovered
+ by disassembling the library routines that use it. It takes
+ two pointers to timeval structures as arguments. The first
+ contains the amount of time (in seconds and microseconds) to
+ sleep. If the second pointer is non-null, if the process
+ wakes up early, the amount of time "unslept" is returned. If
+ the process doesn't wake up early, zero is returned.
+
+osf1_setsysinfo()
+ A null-op; used early on, but nothing cares that it actually
+ does anything.