[BACK]Return to README.syscalls CVS log [TXT][DIR] Up to [local] / sys / compat / osf1

Annotation of sys/compat/osf1/README.syscalls, Revision 1.1.1.1

1.1       nbrk        1: $OpenBSD: README.syscalls,v 1.4 2001/07/09 05:15:23 fgsch Exp $
                      2: $NetBSD: README.syscalls,v 1.2 1999/04/27 16:09:28 cgd Exp $
                      3:
                      4: XXX this file should be gutted.  functions' comments should go with
                      5: XXX the functions.  Further, this file is ... very out of date.
                      6:
                      7: Once the new syscall argument-handling method was implemented, most
                      8: OSF/1 syscalls boiled down to their NetBSD equivalents.  The
                      9: differences are detailed in this file.
                     10:
                     11: Note that some OSF/1 syscalls, including some of those that map
                     12: directly to equivalent NetBSD syscalls, are not implemented; they
                     13: were not needed, so the effort to implement and check them was not
                     14: expended.
                     15:
                     16: Finally, there are some OSF/1 syscalls which were left unimplemented,
                     17: but which seem strange enough to merit a bit more explanation.
                     18:
                     19: OSF/1 compatibility is helped by the fact that the sigcontext
                     20: structure was created for NetBSD/Alpha to be the same as the OSF/1
                     21: sigcontext structure.  Because of this, only one sendsig() function is
                     22: needed, and then the NetBSD sigreturn() function can be used for OSF/1
                     23: sigreturn(), as well.
                     24:
                     25: The system calls are split out among the three files:
                     26:        osf1_ioctl.c
                     27:        osf1_misc.c
                     28:        osf1_mount.c
                     29: as follows:
                     30:        osf1_ioctl.c contains all osf1_ioctl() handling code.
                     31:        osf1_mount.c contains all code dealing with mounting and
                     32:                unmounting file systems, and with mount points in
                     33:                general (e.g. osf1_getfsstat()).
                     34:        osf1_misc.c contains the rest of the emulation functions.
                     35:
                     36: The emulation functions as follows:
                     37:
                     38: osf1_mknod()
                     39:        dev_t's are different between OSF/1 and NetBSD.  In OSF/1 a
                     40:        dev_t has 12 bits of major number and 20 bits of minor number.
                     41:        Under NetBSD, it's 24 bits of major, 8 bits of minor (but the
                     42:        top 16 bits of the major number are unused, and may be
                     43:        rearranged later).  In any case, it was decided that the
                     44:        primary use for OSF/1 binaries would be to complement native
                     45:        NetBSD binaries, so file system dev_t's are assumed to be in
                     46:        the NetBSD format, and osf1_mknod() translates from the OSF/1
                     47:        format to the NetBSD format.
                     48:
                     49: osf1_getfsstat()
                     50:        The statfs structure is different between NetBSD and OSF/1,
                     51:        and the way file system types are denoted is different, as
                     52:        well.  This routine is the same as getfsstat(), except it
                     53:        converts the statfs structures before returning them to the
                     54:        OSF/1 process.
                     55:
                     56: osf1_lseek()
                     57:        To compensate for quad alignment on 32-bit machines, the
                     58:        NetBSD lseek() needs an extra argument of padding, before the
                     59:        off_t 'offset' argument.  This wrapper inserts the padding,
                     60:        and calls the NetBSD routine.
                     61:
                     62: osf1_mount()
                     63:        The file system type specification and the way you specify
                     64:        mount options differs substantially between NetBSD and OSF/1.
                     65:        This routine (and its callees) fakes up NetBSD arguments, and
                     66:        calls the NetBSD routine.
                     67:
                     68: osf1_unmount()
                     69:        Probably not necessary, but safe; translates flags, in case
                     70:        the NetBSD unmount flags ever change.
                     71:
                     72: osf1_exec_with_loader() [UNIMPLEMENTED]
                     73:        From the description in the OSF/1 manual page, this executes a
                     74:        file with a named loader, or "/sbin/loader" if none is named.
                     75:        It appears to be used in some way, when executing dynamically
                     76:        linked binaries, but is _not_ called directly from user space
                     77:        in the normal case.  The interface by which it passes the name
                     78:        of the file to be executed, its arguments, etc., to the loader
                     79:        is unspecified, and, from experimental evidence, doesn't seem
                     80:        to be the normal UN*X argument-passing convention (i.e.
                     81:        argc/argv).  For proper dynamically linked binary support,
                     82:        this function will probably have to be implemented, but it's
                     83:        unclear how that can be done (short of disassembling a lot of
                     84:        code).
                     85:
                     86: osf1_open()
                     87:        Translates OSF/1 flags to NetBSD flags.
                     88:
                     89: osf1_ioctl()
                     90:        Screens out ioctl requests that aren't known to work, and
                     91:        translates those that differ between NetBSD and OSF/1.
                     92:
                     93: osf1_reboot()
                     94:        Translates OSF/1 flags to NetBSD flags.
                     95:
                     96: osf1_stat()
                     97:        The stat structure differs between NetBSD and OSF/1, both in
                     98:        terms of field sizes, and in the dev_t representation.
                     99:        This does a NetBSD stat(), translates the results, and returns
                    100:        them to the OSF/1 process.
                    101:
                    102: osf1_lstat()
                    103:        Same as osf1_stat(), but for lstat().
                    104:
                    105: osf1_mmap()
                    106:        The NetBSD version needs 4 bytes of padding before the off_t
                    107:        'pos' argument, and also uses different flags than the OSF/1
                    108:        version.  This wrapper translates the flags and deals with the
                    109:        argument struct padding differences, then calls the NetBSD
                    110:        routine.
                    111:
                    112: osf1_fstat()
                    113:        Same as osf1_stat(), but for fstat().
                    114:
                    115: osf1_fcntl()
                    116:        Translates OSF/1 fcntl() requests into their NetBSD
                    117:        counterparts, then calls the NetBSD fcntl() to do the
                    118:        operations.
                    119:
                    120: osf1_socket()
                    121:        Makes sure that the socket type is valid for NetBSD, and if
                    122:        so, calls NetBSD's socket().
                    123:
                    124: osf1_sendto()
                    125:        Makes sure that the 'flags' argument doesn't use flags that
                    126:        NetBSD can't handle, and calls NetBSD's sendto().
                    127:
                    128: osf1_getrlimit()
                    129:        Makes sure that the 'which' selector is one that NetBSD can
                    130:        deal with, and calls NetBSD's getrlimit().
                    131:
                    132: osf1_setrlimit()
                    133:        Same as osf1_getrlimit(), but for setrlimit().
                    134:
                    135: osf1_sigaction()
                    136:        Deals with the differences in the NetBSD and OSF/1 sigaction
                    137:        structures, and calls NetBSD's sigaction with the appropriate
                    138:        arguments.  If the call requests that the old sigaction be
                    139:        passed back, osf1_sigaction() translates it back to the OSF/1
                    140:        form, and returns it appropriately.
                    141:
                    142: osf1_statfs()
                    143:        Does that statfs() on the given pathname, then translates the
                    144:        NetBSD statfs structure into the one that OSF/1 uses and
                    145:        returns it.  Makes a best effort on the mount type, because
                    146:        there's not a one-to-one mapping between NetBSD and OSF/1
                    147:        mount types.
                    148:
                    149: osf1_fstatfs()
                    150:        Same as osf1_statfs(), but for fstatfs().
                    151:
                    152: osf1_usleep_thread()
                    153:        This function is how sleep() and usleep() (and possibly other
                    154:        functions) are implemented in OSF/1.  Its usage was discovered
                    155:        by disassembling the library routines that use it.  It takes
                    156:        two pointers to timeval structures as arguments.  The first
                    157:        contains the amount of time (in seconds and microseconds) to
                    158:        sleep.  If the second pointer is non-null, if the process
                    159:        wakes up early, the amount of time "unslept" is returned.  If
                    160:        the process doesn't wake up early, zero is returned.
                    161:
                    162: osf1_setsysinfo()
                    163:        A null-op; used early on, but nothing cares that it actually
                    164:        does anything.

CVSweb