Annotation of kandr/a.out.h, revision 18.104.22.168
1.1 root 1: /* Copyright (c) 2018 Charles E. Youse (firstname.lastname@example.org).
2: All rights reserved.
4: Redistribution and use in source and binary forms, with or without
5: modification, are permitted provided that the following conditions are met:
7: * Redistributions of source code must retain the above copyright notice, this
8: list of conditions and the following disclaimer.
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.
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. */
25: /* a bsd/64 executable is a fairly conventional a.out format.
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.
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.
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. */
44: struct exec
46: unsigned a_magic;
47: unsigned a_text;
48: unsigned a_data;
49: unsigned a_bss;
50: unsigned a_entry;
51: unsigned a_reserved;
52: unsigned a_syms;
55: #define A_MAGIC 0x87CD1EEB /* $87CD SYNC: homage to OS-9/6809 */