1 .\" Copyright (c) 2000 Mark Newton
2 .\" All rights reserved.
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\" notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\" notice, this list of conditions and the following disclaimer in the
11 .\" documentation and/or other materials provided with the distribution.
13 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 .\" $FreeBSD: src/share/man/man4/man4.i386/svr4.4,v 1.12 2005/02/13 23:45:49 ru Exp $
26 .\" $DragonFly: src/share/man/man4/man4.i386/Attic/svr4.4,v 1.2 2006/05/01 09:06:33 swildner Exp $
32 .Nd System V Release 4 ABI support
34 To link System V Release 4 (SVR4) ABI support into the kernel:
35 .Cd options COMPAT_SVR4
37 To load the SVR4 ABI support kernel module:
38 .Bd -literal -offset indent
45 module provides limited
46 System V Release 4 ABI (application binary interface) compatibility
47 for userland applications.
48 The module provides the following significant facilities:
56 Special signal handling for activated images
58 SVR4 to native system call translation
60 STREAMS network API emulation (via the
62 loadable module, or by means of
63 .Dl pseudo-device streams
64 in a kernel configuration file)
70 calls, or, where no such mappings exist, reverse-engineered implementations
74 It is important to note that the SVR4 ABI support
75 it not provided through an emulator.
76 Rather, a true (albeit limited) "clean room" reverse-engineered ABI
77 implementation is provided.
79 Because the provided ABI has been developed in ignorance of actual SVR4
80 source code, there are bound to be unforeseen interactions between SVR4
81 client applications and the emulated ABI which cause applications to
84 Additionally, some SVR4 operating systems do not adhere to the SVR4
86 In particular, Solaris does not set the ELF interpreter field in the
87 ELF header to a value which would allow the kernel to correctly
88 identify a client executable as an SVR4 application.
89 Thus, in certain instances it is necessary to use the
91 utility to explicitly brand the executable, or to set the
92 kern.fallback_elf_brand
94 variable to define a "default" ABI for unbranded executables.
95 Value ELFOSABI_SOLARIS represents Solaris; ELFOSABI_SYSV represents other
96 SysVR4 operating systems.
99 for ELFOSABI branding definitions, and
101 for information on branding executables.
105 module can be linked into the kernel statically with the
107 kernel configuration option
108 or loaded as required.
109 The following command will load the module
110 if it is neither linked into the kernel
111 nor already loaded as a module:
112 .Bd -literal -offset indent
113 if ! kldstat -V | grep -E 'streams.ko' > /dev/null; then
114 kldload streams > /dev/null 2>&1
117 if ! kldstat -v | grep -E 'svr4.ko' > /dev/null; then
118 kldload svr4 > /dev/null 2>&1
123 will check for the presence of the
125 module, and load it if necessary.
127 Note that dynamically linked SVR4 executables
128 will require a suitable environment in
131 For information on loading the
133 kernel loadable module automatically on system startup,
136 This information applies
137 regardless of whether the
139 module is statically linked into the kernel
140 or loaded as a module.
142 STREAMS emulation is limited but (largely) functional.
145 module is loaded, a STREAMS handle can be obtained by opening one of the
149 .Pa /compat/svr4/dev .
152 driver produces a socket descriptor and
154 it with additional STREAMS
155 state information before returning it to the client application.
158 environment uses the additional state information to recognize and
159 manipulate emulated STREAMS handles when STREAMS-specific
163 The subset of STREAMS functionality which is provided is small, probably
164 little more than what is required to enable programs on the Solaris CD
167 .Bl -tag -width /sys/emulation/svr4/syscalls.master -compact
169 minimal SVR4 run-time environment
170 .It Pa /sys/emulation/svr4/syscalls.master
171 mappings between SVR4 syscalls and
180 System V Release 4 ABI support first appeared in
182 The ABI was ported from an equivalent facility present in
184 written by Christos Zoulas.
186 Emulation of signal handlers is buggy.
188 Emulated connectionless STREAMS fail to receive data from the network in
189 some circumstances (but succeed in others -- probably due to particular
190 ways of initializing them which the
192 module is mishandling, and interaction between STREAMS and
194 Connection-oriented STREAMS appear to be functional.
196 Ironically, this SVR4 emulator does not (yet) support SVR4 semaphores or
200 archives containing pre-populated
202 trees can be obtained from
203 .Pa http://people.FreeBSD.org/~newton/freebsd-svr4/ .
205 Extensive testing has only really been carried out with Solaris 2.x binaries,
206 with anecdotal reports of limited success coming from testers with
207 early-revision SCO media.
208 In theory, the basic SVR4 ABI should be constant
209 across the set of vendors who produce SVR4 operating systems, but in
210 practice that is probably not the case.
211 If necessary, future work can
212 either implement additional
214 modules which produce functionality which contains OS-dependent
215 departures from the behaviour which has been implemented in this
219 variables could set the
221 the environment should present to