Research V4 development
authorDennis Ritchie <dmr@research.uucp>
Tue, 6 Nov 1973 02:10:14 +0000 (21:10 -0500)
committerDennis Ritchie <dmr@research.uucp>
Tue, 6 Nov 1973 02:10:14 +0000 (21:10 -0500)
Work on file man/man5/a.out.5

Synthesized-from: v4

man/man5/a.out.5 [new file with mode: 0644]

diff --git a/man/man5/a.out.5 b/man/man5/a.out.5
new file mode 100644 (file)
index 0000000..8e52484
--- /dev/null
@@ -0,0 +1,183 @@
+.th A.OUT V 9/9/73
+.sh NAME
+a.out \*- assembler and link editor output
+.sh DESCRIPTION
+.it A.out
+is the output file of the assembler
+.it as
+and the link editor
+.it ld.
+Both programs make
+.it a.out
+executable if there were no
+errors and no unresolved external references.
+.s3
+This file has four sections:
+a header, the program and data text, a symbol table, and relocation bits
+(in that order).
+The last two may be empty
+if the program was loaded
+with the ``\*-s'' option
+of
+.it ld
+or if the symbols and relocation have been
+removed by
+.it strip.
+.s3
+The header always contains 8 words:
+.s3
+.lp +5 3
+1      A magic number (407 or 410(8))
+.lp +5 3
+2      The size of the program text segment
+.lp +5 3
+3      The size of the initialized portion of the data segment
+.lp +5 3
+4      The size of the uninitialized (bss) portion of the data segment
+.lp +5 3
+5      The size of the symbol table
+.lp +5 3
+6      The entry location (always 0 at present)
+.lp +5 3
+7      Unused
+.lp +5 3
+8      A flag indicating relocation bits have been suppressed
+.s3
+.i0
+The sizes of each segment are in bytes but are even.
+The size of the header is not included in any of the other sizes.
+.s3
+When a file produced by the assembler or loader 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
+initialized),
+and a stack.
+The text segment begins at 0
+in the core image; the header is not loaded.
+If the magic number (word 0) is 407, it indicates that the text
+segment is not to be write-protected and shared,
+so the data segment is immediately contiguous
+with the text segment.
+If the magic number is 410,
+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.
+.s3
+The stack will occupy the highest possible locations
+in the core image: from 177776(8) and growing downwards.
+The stack is automatically extended as required.
+The data segment is only extended as requested by
+the
+.it break
+system call.
+.s3
+The start of the text segment in the file is 20(8);
+the start of the data segment is 20+S\s6\dt\u\s10 (the size of the text)
+the start of the relocation information is
+20+S\s6\dt\u\s10+S\s6\dd\u\s10;
+the start of the symbol table is
+20+2(S\s6\dt\u\s10+S\s6\dd\u\s10)
+if the
+relocation information is present,
+20+S\s6\dt\u\s10+S\s6\dd\u\s10
+if not.
+.s3
+The symbol table consists of 6-word entries.  The first
+four words contain the ASCII name of the symbol, null-padded.
+The next word is a flag indicating the type of symbol.
+The following values are possible:
+.s3
+.lp +6 3
+00     undefined symbol
+.lp +6 3
+01     absolute symbol
+.lp +6 3
+02     text segment symbol
+.lp +6 3
+03     data segment symbol
+.lp +6 3
+37     file name symbol (produced by ld)
+.lp +6 3
+04     bss segment symbol
+.lp +6 3
+40     undefined external (.globl) symbol
+.lp +6 3
+41     absolute external symbol
+.lp +6 3
+42     text segment external symbol
+.lp +6 3
+43     data segment external symbol
+.lp +6 3
+44     bss segment external symbol
+.i0
+.s3
+Values other than those given above may
+occur if the user has defined some of his own instructions.
+.s3
+The last word of a symbol table entry contains the value of the symbol.
+.s3
+If the symbol's type is undefined external,
+and the value field is non-zero,
+the symbol is interpreted by the loader
+.it ld
+as
+the name of a common region
+whose size is indicated by the value of the
+symbol.
+.s3
+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 bits
+for that word,
+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.
+.s3
+If relocation
+information is present, it amounts to one word per
+word of program text or initialized data.
+There is no relocation information if the ``suppress relocation''
+flag in the header is on.
+.s3
+Bits 3-1 of a relocation word indicate the segment referred
+to by the text or data word associated with the relocation
+word:
+.s3
+.lp +6 3
+00     indicates the reference is absolute
+.lp +6 3
+02     indicates the reference is to the text segment
+.lp +6 3
+04     indicates the reference is to initialized data
+.lp +6 3
+06     indicates the reference is to bss (uninitialized data)
+.lp +6 3
+10     indicates the reference is to an undefined external symbol.
+.i0
+.s3
+Bit 0 of the relocation word indicates if
+.it on
+that the
+reference is relative to the pc (e.g. ``clr x'');
+if
+.it off,
+that
+the reference is to the actual symbol (e.g.,
+``clr *$x'').
+.s3
+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.
+.sh "SEE ALSO"
+as(I), ld(I), strip(I), nm(I)