|
|
1.1 root 1: #ifndef _A_OUT_H
2: #define _A_OUT_H
3:
4: #define __GNU_EXEC_MACROS__
5:
6: struct exec {
7: unsigned long a_magic; /* Use macros N_MAGIC, etc for access */
8: unsigned a_text; /* length of text, in bytes */
9: unsigned a_data; /* length of data, in bytes */
10: unsigned a_bss; /* length of uninitialized data area for file, in bytes */
11: unsigned a_syms; /* length of symbol table data in file, in bytes */
12: unsigned a_entry; /* start address */
13: unsigned a_trsize; /* length of relocation info for text, in bytes */
14: unsigned a_drsize; /* length of relocation info for data, in bytes */
15: };
16:
17: #ifndef N_MAGIC
1.1.1.2 ! root 18: #define N_MAGIC(exec) ((exec).a_magic & 0xffff )
1.1 root 19: #endif
20:
21: #ifndef OMAGIC
22: /* Code indicating object file or impure executable. */
23: #define OMAGIC 0407
24: /* Code indicating pure executable. */
25: #define NMAGIC 0410
26: /* Code indicating demand-paged executable. */
27: #define ZMAGIC 0413
28: #endif /* not OMAGIC */
29:
30: #ifndef N_BADMAG
31: #define N_BADMAG(x) \
32: (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \
33: && N_MAGIC(x) != ZMAGIC)
34: #endif
35:
36: #define _N_BADMAG(x) \
37: (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \
38: && N_MAGIC(x) != ZMAGIC)
39:
40: #define _N_HDROFF(x) (SEGMENT_SIZE - sizeof (struct exec))
41:
42: #ifndef N_TXTOFF
43: #define N_TXTOFF(x) \
44: (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) : sizeof (struct exec))
45: #endif
46:
47: #ifndef N_DATOFF
48: #define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text)
49: #endif
50:
51: #ifndef N_TRELOFF
52: #define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data)
53: #endif
54:
55: #ifndef N_DRELOFF
56: #define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_trsize)
57: #endif
58:
59: #ifndef N_SYMOFF
60: #define N_SYMOFF(x) (N_DRELOFF(x) + (x).a_drsize)
61: #endif
62:
63: #ifndef N_STROFF
64: #define N_STROFF(x) (N_SYMOFF(x) + (x).a_syms)
65: #endif
66:
67: /* Address of text segment in memory after it is loaded. */
68: #ifndef N_TXTADDR
69: #define N_TXTADDR(x) 0
70: #endif
71:
72: /* Address of data segment in memory after it is loaded.
73: Note that it is up to you to define SEGMENT_SIZE
74: on machines not listed here. */
75: #if defined(vax) || defined(hp300) || defined(pyr)
76: #define SEGMENT_SIZE PAGE_SIZE
77: #endif
78: #ifdef hp300
79: #define PAGE_SIZE 4096
80: #endif
81: #ifdef sony
82: #define SEGMENT_SIZE 0x2000
83: #endif /* Sony. */
84: #ifdef is68k
85: #define SEGMENT_SIZE 0x20000
86: #endif
87: #if defined(m68k) && defined(PORTAR)
88: #define PAGE_SIZE 0x400
89: #define SEGMENT_SIZE PAGE_SIZE
90: #endif
91:
92: #define PAGE_SIZE 4096
93: #define SEGMENT_SIZE 1024
94:
95: #define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1))
96:
97: #define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text)
98:
99: #ifndef N_DATADDR
100: #define N_DATADDR(x) \
101: (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x)) \
102: : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x))))
103: #endif
104:
105: /* Address of bss segment in memory after it is loaded. */
106: #ifndef N_BSSADDR
107: #define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data)
108: #endif
109:
110: #ifndef N_NLIST_DECLARED
111: struct nlist {
112: union {
113: char *n_name;
114: struct nlist *n_next;
115: long n_strx;
116: } n_un;
117: unsigned char n_type;
118: char n_other;
119: short n_desc;
120: unsigned long n_value;
121: };
122: #endif
123:
124: #ifndef N_UNDF
125: #define N_UNDF 0
126: #endif
127: #ifndef N_ABS
128: #define N_ABS 2
129: #endif
130: #ifndef N_TEXT
131: #define N_TEXT 4
132: #endif
133: #ifndef N_DATA
134: #define N_DATA 6
135: #endif
136: #ifndef N_BSS
137: #define N_BSS 8
138: #endif
139: #ifndef N_COMM
140: #define N_COMM 18
141: #endif
142: #ifndef N_FN
143: #define N_FN 15
144: #endif
145:
146: #ifndef N_EXT
147: #define N_EXT 1
148: #endif
149: #ifndef N_TYPE
150: #define N_TYPE 036
151: #endif
152: #ifndef N_STAB
153: #define N_STAB 0340
154: #endif
155:
156: /* The following type indicates the definition of a symbol as being
157: an indirect reference to another symbol. The other symbol
158: appears as an undefined reference, immediately following this symbol.
159:
160: Indirection is asymmetrical. The other symbol's value will be used
161: to satisfy requests for the indirect symbol, but not vice versa.
162: If the other symbol does not have a definition, libraries will
163: be searched to find a definition. */
164: #define N_INDR 0xa
165:
166: /* The following symbols refer to set elements.
167: All the N_SET[ATDB] symbols with the same name form one set.
168: Space is allocated for the set in the text section, and each set
169: element's value is stored into one word of the space.
170: The first word of the space is the length of the set (number of elements).
171:
172: The address of the set is made into an N_SETV symbol
173: whose name is the same as the name of the set.
174: This symbol acts like a N_DATA global symbol
175: in that it can satisfy undefined external references. */
176:
177: /* These appear as input to LD, in a .o file. */
178: #define N_SETA 0x14 /* Absolute set element symbol */
179: #define N_SETT 0x16 /* Text set element symbol */
180: #define N_SETD 0x18 /* Data set element symbol */
181: #define N_SETB 0x1A /* Bss set element symbol */
182:
183: /* This is output from LD. */
184: #define N_SETV 0x1C /* Pointer to set vector in data area. */
185:
186: #ifndef N_RELOCATION_INFO_DECLARED
187:
188: /* This structure describes a single relocation to be performed.
189: The text-relocation section of the file is a vector of these structures,
190: all of which apply to the text section.
191: Likewise, the data-relocation section applies to the data section. */
192:
193: struct relocation_info
194: {
195: /* Address (within segment) to be relocated. */
196: int r_address;
197: /* The meaning of r_symbolnum depends on r_extern. */
198: unsigned int r_symbolnum:24;
199: /* Nonzero means value is a pc-relative offset
200: and it should be relocated for changes in its own address
201: as well as for changes in the symbol or section specified. */
202: unsigned int r_pcrel:1;
203: /* Length (as exponent of 2) of the field to be relocated.
204: Thus, a value of 2 indicates 1<<2 bytes. */
205: unsigned int r_length:2;
206: /* 1 => relocate with value of symbol.
207: r_symbolnum is the index of the symbol
208: in file's the symbol table.
209: 0 => relocate with the address of a segment.
210: r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS
211: (the N_EXT bit may be set also, but signifies nothing). */
212: unsigned int r_extern:1;
213: /* Four bits that aren't used, but when writing an object file
214: it is desirable to clear them. */
215: unsigned int r_pad:4;
216: };
217: #endif /* no N_RELOCATION_INFO_DECLARED. */
218:
219:
220: #endif /* __A_OUT_GNU_H__ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.