bionic (4) aout.4freebsd.gz

Provided by: freebsd-manpages_11.1-3_all bug

NAME

     aout — kernel support for executing binary files in legacy a.out format

SYNOPSIS

           kldload a.out

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 and amd64.

     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):

           aout_load="YES"

     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.