Annotation of kandr/a.out.h, revision 1.1

1.1     ! root        1: /* Copyright (c) 2018 Charles E. Youse (charles@gnuless.org). 
        !             2:    All rights reserved.
        !             3: 
        !             4:  Redistribution and use in source and binary forms, with or without
        !             5:  modification, are permitted provided that the following conditions are met:
        !             6: 
        !             7:  * Redistributions of source code must retain the above copyright notice, this
        !             8:    list of conditions and the following disclaimer.
        !             9: 
        !            10:  * Redistributions in binary form must reproduce the above copyright notice,
        !            11:    this list of conditions and the following disclaimer in the documentation
        !            12:    and/or other materials provided with the distribution.
        !            13: 
        !            14:  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
        !            15:  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            16:  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
        !            17:  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
        !            18:  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            19:  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
        !            20:  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
        !            21:  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
        !            22:  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
        !            23:  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
        !            24: 
        !            25: /* a bsd/64 executable is a fairly conventional a.out format.
        !            26: 
        !            27:    the text segment comes first, which begins with the exec header.
        !            28:    the header is part of the text segment; thus the first user code 
        !            29:    in text segment is at offset 0x20 == sizeof(struct exec). the
        !            30:    text segment is padded to a page boundary, and the data section 
        !            31:    follows. the data section is padded to an 8-byte boundary.
        !            32: 
        !            33:    the symbol table is last. each symbol consists of a NUL-terminated
        !            34:    identifier, padded to an 8-byte boundary (with NULs), followed by
        !            35:    an 8-byte address.
        !            36: 
        !            37:    if the text only makes RIP-relative references, it is position-
        !            38:    independent (the compiler generates code this way already). if we
        !            39:    wished to add shared library support, we'd simply need to fix up
        !            40:    the initialized data area if it references any symbol addresses. 
        !            41:    extending a.out to hold a fixup table and modifying the linker to 
        !            42:    generate such a table would be straightforward. */
        !            43: 
        !            44: struct exec
        !            45: {
        !            46:     unsigned a_magic;
        !            47:     unsigned a_text; 
        !            48:     unsigned a_data;        
        !            49:     unsigned a_bss;
        !            50:     unsigned a_entry;
        !            51:     unsigned a_reserved[2];
        !            52:     unsigned a_syms;
        !            53: };
        !            54: 
        !            55: #define A_MAGIC 0x87CD1EEB      /* $87CD SYNC: homage to OS-9/6809 */
        !            56: 

unix.superglobalmegacorp.com