V1/man/man5/a.out.5
11/3/71 A.OUT (V)
NAME a.out -- assembler and link editor output
SYNOPSIS
DESCRIPTION a.out is the output file of the assembler as and the link
editor ld. In both cases, a.out is executable provided
there were no errors and no unresolved external references.
This file has four sections: a header, the program text, a
symbol table, and relocation bits. The last two may be
empty if the program was loaded with the --s option of ld or
if the symbols and relocation have been removed by strip.
The header always contains 6 words:
1 a "br .+14" instruction (205(8))
2 The size of the program text
3 The size of the symbol table
4 The size of the relocation bits area
5 The size of a data area
6 A zero word (unused at present)
The sizes of the program, symbol table, and relocation area
are in bytes but are always even. The branch instruction
serves both to identify the file and to jump to the text
entry point. The program text size includes the 6--word
header.
The data area is used when the file is executed; the exec
system call sets the program break to the sum of the text
size and this data size. The data area is generated by the
assembler when the location counter "." lies beyond the
last assembled data, for example when the program ends with
one or more constructions of the form .=.+n ; it is
preserved by the loader for the last program in a load.
(Routines other than the last have the appropriate number
of 0 words inserted, since there is no other provision for
zero--suppression in an a.out file.)
The symbol table consists of 6--word entries. The first four
contain the ASCII name of the symbol, null--padded. (In
fact, the assembler generates symbols of at most 7 bytes.)
The next word is a flag indicating the type of symbol. The
following values are possible:
00 undefined symbol
01 absolute symbol
02 register symbol
03 relocatable symbol
40 undefined global symbol
41 absolute global symbol
11/3/71 A.OUT (v)
43 relocatable global symbol
An undefined global corresponds to a GMAP "symref" and an
absolute or relocatable global to a "symdef" or absolute or
relocatable value respectively. Values other than those
given above may occur if the user has defined some of his
own instructions.
The last word of a symbol table entry contains the value of
the symbol. Its contents are not specified if the symbol is
undefined.
If a.out contains no unresolved global references, header
and text portions are exactly as they will appear in core
when the file is executed. If the value of a word in the
text portion involves a reference to an undefined global,
the word is replaced by the offset in the symbol table of
the appropriate symbol. (That is, possible offsets are 0,
12(10), 24(10), ....) Such a word will have appropriate
relocation bits.
The relocation bits portion uses a variable--length
encoding. There is a string of bits for each word in the
text portion. The scheme has at least two bits for. each
word, plus possibly two more to extend the codes available;
in either case the bits may be followed by a 16--bit string
to represent an offset to an external symbol. The bits are
packed together without regard to word boundaries. The last
word is filled out with 0's on the right.
The possible relocation bit configurations are:
00
word is absolute
01
word is relocatable
10
word is a relative reference to an undefined global
symbol with no offset. Currently, the word contains the
offset in the symbol table of the symbol. When the
symbol becomes defined, say with x, this location will
contain x--.--2, where "." is the location of the word.
1100xxxxxxxxxxxxxxxx
word is a relative reference to an external symbol with
an offset. It is the same as the previous relocation
type, except that the 16--bit offset is added in when
the symbol
11/3/71 A.OUT (V)
becomes defined.
1101
word is a reference to an undefined external symbol
with no offset. At present the word contains the
symbol table offset of the symbol. When the symbol
becomes defined, the word will contain the value of
the symbol.
1110xxxxxxxxxxxxxxxx
word is a reference to an undefined external symbol
with an offset. At present, the word contains the
symbol table offset of the symbol. When the symbol
becomes defined, the word will contain the value of
the symbol plus the given 16--bit offset.
FILES
SEE ALSO as ld, strip, nm, un
DIAGNOSTICS
BUGS Soon, there will be a new type of symbol: the data area
symbol. In the text, it will appear as an ordinary external
reference. However, it need not be defined; this will be
done by the loader. Watch this space for more details.
OWNER dmr