|
|
1.1 root 1: /* (-lgl
2: * COHERENT Version 3.0
3: * Copyright (c) 1982, 1990 by Mark Williams Company.
4: * All rights reserved. May not be copied without permission.
5: -lgl) */
6: /*
7: * This is the format of the 'l.out' file
8: * (assembler output, linkage editor input and output).
9: * It also has the namelist structure for the nlist routine.
10: */
11:
12: #ifndef L_OUT_H
13: #define L_OUT_H L_OUT_H
14:
15: #include <sys/types.h>
16:
17: #define NCPLN 16 /* Chars in loader name */
18: #define NLSEG 9 /* No. of segments */
19: #define NXSEG 6 /* No. of segments used by exec */
20: #define L_MAGIC 0407 /* Magic number */
21:
22: /*
23: * This is the header.
24: * It sits at the front of the file,
25: * holding control information and
26: * the sizes of the other segments
27: * of the file.
28: */
29: struct ldheader {
30: int l_magic; /* Magic number */
31: int l_flag; /* Flags */
32: int l_machine; /* Type of target machine */
33: vaddr_t l_entry; /* Entrypoint */
34: fsize_t l_ssize[NLSEG]; /* Segment sizes */
35: };
36:
37: /* Flags */
38: #define LF_SHR 01 /* Bound shared */
39: #define LF_SEP 02 /* Bound separated */
40: #define LF_NRB 04 /* No reloc. bits */
41: #define LF_KER 010 /* Loadable driver */
42:
43: /* Formats */
44: #define AFMT "%06o" /* Address */
45:
46: /* Machines */
47: #include <mtype.h>
48:
49: /* Segments */
50: #define L_SHRI 0 /* Shared Instruction space */
51: #define L_PRVI 1 /* Private Instruction space */
52: #define L_BSSI 2 /* Uninitialised Instruction */
53: #define L_SHRD 3 /* Shared Data space */
54: #define L_PRVD 4 /* Private Data space */
55: #define L_BSSD 5 /* Uninitalised Data */
56: #define L_DEBUG 6 /* Debug tables */
57: #define L_SYM 7 /* Symbols */
58: #define L_REL 8 /* Relocation */
59:
60: #define L_ABS 9 /* Absolute (symbol table) */
61: #define L_REF 10 /* Reference (symbol table) */
62:
63: /*
64: * Symbol.
65: * These live in the 'L_SYM' section
66: * of the file; the size of this section
67: * determines the number of symbols.
68: */
69: struct ldsym {
70: char ls_id[NCPLN]; /* Symbol name */
71: int ls_type; /* Global + Seg. */
72: vaddr_t ls_addr; /* Value of symbol */
73: };
74:
75: /*
76: * The nlist structure for the nlist routine.
77: */
78: struct nlist {
79: char n_name[NCPLN]; /* Symbol name */
80: int n_type; /* Type flag */
81: unsigned n_value; /* value */
82: };
83:
84: #define L_GLOBAL 020
85:
86: /*
87: * Relocation.
88: * Relocation is a byte stream.
89: * The first is an opcode.
90: * The next two bytes are the address
91: * of relocation.
92: */
93:
94: #define LR_SEG 017 /* Seg., L_SYM => Sym. based */
95: #define LR_PCR 020 /* PC Rel. flag */
96: #define LR_OP 0340 /* Opcode */
97:
98: #define LR_BYTE (0<<5) /* Rel. a byte */
99: #define LR_WORD (1<<5) /* Rel. a word */
100:
101: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.