NAME¶
aout
—
kernel support for executing binary files in legacy
a.out format
SYNOPSIS¶
DESCRIPTION¶
The
a.out(5) executable format was used before the
release of
FreeBSD 3.0. Since i386 was the only
supported architecture at that time,
a.out(5)
executables can only be activated on platforms that support execution of i386
code, such as i386, amd64 and (partially) ia64.
To add kernel support for old syscalls and old syscall invocation methods, place
the following options in the kernel configuration file:
options COMPAT_43
options COMPAT_FREEBSD32
The
COMPAT_FREEBSD32 option is only required on
64-bit CPU architectures.
The
aout.ko module needs to be loaded with the
kldload(8) utility in order to support the
a.out(5) image activator:
kldload aout
Alternatively, to load the module at boot time, place the following line in
loader.conf(5):
The
a.out(5) format was mainstream quite a long
time ago. Reasonable default settings and security requirements of modern
operating systems today contradict the default environment of that time and
require adjustments of the system to mimic natural environment for old
binaries.
The following
sysctl(8) tunables are useful for
this:
- security.bsd.map_at_zero
- Set to 1 to allow mapping of process pages at address 0. Some very old
ZMAGIC executable images require text
mapping at address 0.
- kern.pid_max
- Old versions of FreeBSD used signed 16-bit type
for pid_t. Current kernels use 32-bit
type for pid_t, and allow process id's up
to 99999. Such values cannot be represented by old
pid_t, mostly causing issues for
processes using wait(2) syscalls, for example
shells. Set the sysctl to 30000 to work around the problem.
- kern.elf32.read_exec
- Set to 1 to force any accessible memory mapping performed by 32-bit
process to allow execution, see mmap(2). Old
i386 CPUs did not have a bit in PTE which disallowed execution from the
page, so many old programs did not specify
PROT_EXEC even for mapping of executable
code. The sysctl forces PROT_EXEC if
mapping has any access allowed at all. The setting is only needed if the
host architecture allows non-executable mappings.
SEE ALSO¶
execve(2),
a.out(5),
elf(5),
sysctl(8).
HISTORY¶
The
a.out(5) executable format was used on ancient
AT&T UNIX and served as the main executable format
for
FreeBSD from the beginning up to
FreeBSD 2.2.9. In
FreeBSD 3.0
it was superseded by
elf(5).
AUTHORS¶
The
aout
manual page was written by
Konstantin Belousov
⟨kib@FreeBSD.org⟩.
BUGS¶
On 64bit architectures, not all wrappers for older syscalls are
implemented.