Annotation of researchv10dc/dist/man/v4/man5/a.out.5, revision 1.1.1.1

1.1       root        1: .th A.OUT V 9/9/73
                      2: .sh NAME
                      3: a.out \*- assembler and link editor output
                      4: .sh DESCRIPTION
                      5: .it A.out
                      6: is the output file of the assembler
                      7: .it as
                      8: and the link editor
                      9: .it ld.
                     10: Both programs make
                     11: .it a.out
                     12: executable if there were no
                     13: errors and no unresolved external references.
                     14: .s3
                     15: This file has four sections:
                     16: a header, the program and data text, a symbol table, and relocation bits
                     17: (in that order).
                     18: The last two may be empty
                     19: if the program was loaded
                     20: with the ``\*-s'' option
                     21: of
                     22: .it ld
                     23: or if the symbols and relocation have been
                     24: removed by
                     25: .it strip.
                     26: .s3
                     27: The header always contains 8 words:
                     28: .s3
                     29: .lp +5 3
                     30: 1      A magic number (407 or 410(8))
                     31: .lp +5 3
                     32: 2      The size of the program text segment
                     33: .lp +5 3
                     34: 3      The size of the initialized portion of the data segment
                     35: .lp +5 3
                     36: 4      The size of the uninitialized (bss) portion of the data segment
                     37: .lp +5 3
                     38: 5      The size of the symbol table
                     39: .lp +5 3
                     40: 6      The entry location (always 0 at present)
                     41: .lp +5 3
                     42: 7      Unused
                     43: .lp +5 3
                     44: 8      A flag indicating relocation bits have been suppressed
                     45: .s3
                     46: .i0
                     47: The sizes of each segment are in bytes but are even.
                     48: The size of the header is not included in any of the other sizes.
                     49: .s3
                     50: When a file produced by the assembler or loader is
                     51: loaded into core for execution, three logical segments are
                     52: set up: the text segment, the data segment
                     53: (with uninitialized data, which starts off as all 0, following
                     54: initialized),
                     55: and a stack.
                     56: The text segment begins at 0
                     57: in the core image; the header is not loaded.
                     58: If the magic number (word 0) is 407, it indicates that the text
                     59: segment is not to be write-protected and shared,
                     60: so the data segment is immediately contiguous
                     61: with the text segment.
                     62: If the magic number is 410,
                     63: the data segment begins at the first 0 mod 8K byte
                     64: boundary following the text segment,
                     65: and the text segment is not writable by the program;
                     66: if other processes are executing the same file,
                     67: they will share the text segment.
                     68: .s3
                     69: The stack will occupy the highest possible locations
                     70: in the core image: from 177776(8) and growing downwards.
                     71: The stack is automatically extended as required.
                     72: The data segment is only extended as requested by
                     73: the
                     74: .it break
                     75: system call.
                     76: .s3
                     77: The start of the text segment in the file is 20(8);
                     78: the start of the data segment is 20+S\s6\dt\u\s10 (the size of the text)
                     79: the start of the relocation information is
                     80: 20+S\s6\dt\u\s10+S\s6\dd\u\s10;
                     81: the start of the symbol table is
                     82: 20+2(S\s6\dt\u\s10+S\s6\dd\u\s10)
                     83: if the
                     84: relocation information is present,
                     85: 20+S\s6\dt\u\s10+S\s6\dd\u\s10
                     86: if not.
                     87: .s3
                     88: The symbol table consists of 6-word entries.  The first
                     89: four words contain the ASCII name of the symbol, null-padded.
                     90: The next word is a flag indicating the type of symbol.
                     91: The following values are possible:
                     92: .s3
                     93: .lp +6 3
                     94: 00     undefined symbol
                     95: .lp +6 3
                     96: 01     absolute symbol
                     97: .lp +6 3
                     98: 02     text segment symbol
                     99: .lp +6 3
                    100: 03     data segment symbol
                    101: .lp +6 3
                    102: 37     file name symbol (produced by ld)
                    103: .lp +6 3
                    104: 04     bss segment symbol
                    105: .lp +6 3
                    106: 40     undefined external (.globl) symbol
                    107: .lp +6 3
                    108: 41     absolute external symbol
                    109: .lp +6 3
                    110: 42     text segment external symbol
                    111: .lp +6 3
                    112: 43     data segment external symbol
                    113: .lp +6 3
                    114: 44     bss segment external symbol
                    115: .i0
                    116: .s3
                    117: Values other than those given above may
                    118: occur if the user has defined some of his own instructions.
                    119: .s3
                    120: The last word of a symbol table entry contains the value of the symbol.
                    121: .s3
                    122: If the symbol's type is undefined external,
                    123: and the value field is non-zero,
                    124: the symbol is interpreted by the loader
                    125: .it ld
                    126: as
                    127: the name of a common region
                    128: whose size is indicated by the value of the
                    129: symbol.
                    130: .s3
                    131: The value of a word in the text or data portions which is not
                    132: a reference to an undefined external symbol
                    133: is exactly that value which will appear in core
                    134: when the file is executed.
                    135: If a word in the text or data portion
                    136: involves a reference to an undefined external symbol,
                    137: as indicated by the relocation bits
                    138: for that word,
                    139: then the value of the word as stored in the file
                    140: is an offset from the associated external symbol.
                    141: When the file is processed by the
                    142: link editor and the external symbol becomes
                    143: defined, the value of the symbol will
                    144: be added into the word in the file.
                    145: .s3
                    146: If relocation
                    147: information is present, it amounts to one word per
                    148: word of program text or initialized data.
                    149: There is no relocation information if the ``suppress relocation''
                    150: flag in the header is on.
                    151: .s3
                    152: Bits 3-1 of a relocation word indicate the segment referred
                    153: to by the text or data word associated with the relocation
                    154: word:
                    155: .s3
                    156: .lp +6 3
                    157: 00     indicates the reference is absolute
                    158: .lp +6 3
                    159: 02     indicates the reference is to the text segment
                    160: .lp +6 3
                    161: 04     indicates the reference is to initialized data
                    162: .lp +6 3
                    163: 06     indicates the reference is to bss (uninitialized data)
                    164: .lp +6 3
                    165: 10     indicates the reference is to an undefined external symbol.
                    166: .i0
                    167: .s3
                    168: Bit 0 of the relocation word indicates if
                    169: .it on
                    170: that the
                    171: reference is relative to the pc (e.g. ``clr x'');
                    172: if
                    173: .it off,
                    174: that
                    175: the reference is to the actual symbol (e.g.,
                    176: ``clr *$x'').
                    177: .s3
                    178: The remainder of the relocation word (bits 15-4)
                    179: contains a symbol number in the case of external
                    180: references, and is unused otherwise.
                    181: The first symbol is numbered 0, the second 1, etc.
                    182: .sh "SEE ALSO"
                    183: as(I), ld(I), strip(I), nm(I)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.