Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
AOUT(4)			 BSD Kernel Interfaces Manual		       AOUT(4)

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

	   kldload a.out

     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	sup-
     port execution of i386 code, such as i386 and amd64.

     To	add kernel support for old syscalls and	old syscall invocation meth-
     ods, 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 or-
     der 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 de-
     fault settings and	security requirements of modern	operating systems to-
     day contradict the	default	environment of that time and require adjust-
     ments 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 us-
				      ing 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 map-

     execve(2),	a.out(5), elf(5), sysctl(8)

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

     The aout manual page was written by Konstantin Belousov

     On	64bit architectures, not all wrappers for older	syscalls are imple-

BSD				August 14, 2012				   BSD


Want to link to this manual page? Use this URL:

home | help