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