Annotation of kandr/a.out.h, revision 1.1.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