a.out \- assembler and link editor output
is the output file of the assembler
executable if there were no
errors and no unresolved external references.
Layout information as given in the include file for the PDP11 is:
The file has four sections:
a header, the program and data text,
relocation information, and a symbol table
The last two may be empty
if the program was loaded
or if the symbols and relocation have been
In the header the sizes of each section are given in bytes, but are even.
The size of the header is not included in any of the other sizes.
file is loaded into core for execution, three logical segments are
set up: the text segment, the data segment
(with uninitialized data, which starts off as all 0, following
The text segment begins at 0
in the core image; the header is not loaded.
If the magic number in the header is 0407(8), it indicates that the text
segment is not to be write-protected and shared,
so the data segment is immediately contiguous
If the magic number is 0410,
the data segment begins at the first 0 mod 8K byte
boundary following the text segment,
and the text segment is not writable by the program;
if other processes are executing the same file,
they will share the text segment.
If the magic number is 411,
the text segment is again pure, write-protected, and shared,
and moreover instruction and data space are separated;
the text and data segment both begin at location 0.
If the magic number is 0405, the text segment
is overlaid on an existing (0411 or 0405) text segment
and the existing data segment is preserved.
The stack will occupy the highest possible locations
in the core image: from 0177776(8) and growing downwards.
The stack is automatically extended as required.
The data segment is only extended as requested by
The start of the text segment in the file is 020(8);
the start of the data segment is 020+S\s6\dt\u\s10 (the size of the text)
the start of the relocation information is
020+S\s6\dt\u\s10+S\s6\dd\u\s10;
the start of the symbol table is
020+2(S\s6\dt\u\s10+S\s6\dd\u\s10)
relocation information is present,
020+S\s6\dt\u\s10+S\s6\dd\u\s10
The layout of a symbol table entry and the principal flag values
that distinguish symbol types are given in the include file.
Other flag values may occur if an assembly language program
defines machine instructions.
If a symbol's type is undefined external,
and the value field is non-zero,
the symbol is interpreted by the loader
the name of a common region
whose size is indicated by the value of the
The value of a word in the text or data portions which is not
a reference to an undefined external symbol
is exactly that value which will appear in core
when the file is executed.
If a word in the text or data portion
involves a reference to an undefined external symbol,
as indicated by the relocation information
then the value of the word as stored in the file
is an offset from the associated external symbol.
When the file is processed by the
link editor and the external symbol becomes
defined, the value of the symbol will
be added into the word in the file.
information is present, it amounts to one word per
word of program text or initialized data.
There is no relocation information if the `relocation info stripped'
flag in the header is on.
Bits 3-1 of a relocation word indicate the segment referred
to by the text or data word associated with the relocation
reference to text segment
reference to initialized data
reference to uninitialized data (bss)
reference to undefined external symbol
Bit 0 of the relocation word indicates, if 1,
reference is relative to the pc (e.g. `clr x');
the reference is to the actual symbol (e.g.,
The remainder of the relocation word (bits 15-4)
contains a symbol number in the case of external
references, and is unused otherwise.
The first symbol is numbered 0, the second 1, etc.