Dr Andrew Scott G7VAV

My photo
 
June 2025
Mo Tu We Th Fr Sa Su
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6


a.out.h
001: #ifndef __A_OUT_GNU_H__
002: #define __A_OUT_GNU_H__
003: 
004: #define __GNU_EXEC_MACROS__
005: 
006: #ifndef __STRUCT_EXEC_OVERRIDE__
007: 
008: #include <asm/a.out.h>
009: 
010: #endif /* __STRUCT_EXEC_OVERRIDE__ */
011: 
012: #ifndef __ASSEMBLY__
013: 
014: /* these go in the N_MACHTYPE field */
015: enum machine_type {
016: #if defined (M_OLDSUN2)
017:   M__OLDSUN2 = M_OLDSUN2,
018: #else
019:   M_OLDSUN2 = 0,
020: #endif
021: #if defined (M_68010)
022:   M__68010 = M_68010,
023: #else
024:   M_68010 = 1,
025: #endif
026: #if defined (M_68020)
027:   M__68020 = M_68020,
028: #else
029:   M_68020 = 2,
030: #endif
031: #if defined (M_SPARC)
032:   M__SPARC = M_SPARC,
033: #else
034:   M_SPARC = 3,
035: #endif
036:   /* skip a bunch so we don't run into any of sun's numbers */
037:   M_386 = 100,
038:   M_MIPS1 = 151,        /* MIPS R3000/R3000 binary */
039:   M_MIPS2 = 152         /* MIPS R6000/R4000 binary */
040: };
041: 
042: #if !defined (N_MAGIC)
043: #define N_MAGIC(exec) ((exec).a_info & 0xffff)
044: #endif
045: #define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff))
046: #define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff)
047: #define N_SET_INFO(exec, magic, type, flags) \
048:         ((exec).a_info = ((magic) & 0xffff) \
049:          | (((int)(type) & 0xff) << 16) \
050:          | (((flags) & 0xff) << 24))
051: #define N_SET_MAGIC(exec, magic) \
052:         ((exec).a_info = (((exec).a_info & 0xffff0000) | ((magic) & 0xffff)))
053: 
054: #define N_SET_MACHTYPE(exec, machtype) \
055:         ((exec).a_info = \
056:          ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16))
057: 
058: #define N_SET_FLAGS(exec, flags) \
059:         ((exec).a_info = \
060:          ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24))
061: 
062: /* Code indicating object file or impure executable.  */
063: #define OMAGIC 0407
064: /* Code indicating pure executable.  */
065: #define NMAGIC 0410
066: /* Code indicating demand-paged executable.  */
067: #define ZMAGIC 0413
068: /* This indicates a demand-paged executable with the header in the text. 
069:    The first page is unmapped to help trap NULL pointer references */
070: #define QMAGIC 0314
071: 
072: /* Code indicating core file.  */
073: #define CMAGIC 0421
074: 
075: #if !defined (N_BADMAG)
076: #define N_BADMAG(x)       (N_MAGIC(x) != OMAGIC         \
077:                         && N_MAGIC(x) != NMAGIC         \
078:                         && N_MAGIC(x) != ZMAGIC \
079:                         && N_MAGIC(x) != QMAGIC)
080: #endif
081: 
082: #define _N_HDROFF(x) (1024 - sizeof (struct exec))
083: 
084: #if !defined (N_TXTOFF)
085: #define N_TXTOFF(x) \
086:  (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) : \
087:   (N_MAGIC(x) == QMAGIC ? 0 : sizeof (struct exec)))
088: #endif
089: 
090: #if !defined (N_DATOFF)
091: #define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text)
092: #endif
093: 
094: #if !defined (N_TRELOFF)
095: #define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data)
096: #endif
097: 
098: #if !defined (N_DRELOFF)
099: #define N_DRELOFF(x) (N_TRELOFF(x) + N_TRSIZE(x))
100: #endif
101: 
102: #if !defined (N_SYMOFF)
103: #define N_SYMOFF(x) (N_DRELOFF(x) + N_DRSIZE(x))
104: #endif
105: 
106: #if !defined (N_STROFF)
107: #define N_STROFF(x) (N_SYMOFF(x) + N_SYMSIZE(x))
108: #endif
109: 
110: /* Address of text segment in memory after it is loaded.  */
111: #if !defined (N_TXTADDR)
112: #define N_TXTADDR(x) (N_MAGIC(x) == QMAGIC ? PAGE_SIZE : 0)
113: #endif
114: 
115: /* Address of data segment in memory after it is loaded.
116:    Note that it is up to you to define SEGMENT_SIZE
117:    on machines not listed here.  */
118: #if defined(vax) || defined(hp300) || defined(pyr)
119: #define SEGMENT_SIZE page_size
120: #endif
121: #ifdef  sony
122: #define SEGMENT_SIZE    0x2000
123: #endif  /* Sony.  */
124: #ifdef is68k
125: #define SEGMENT_SIZE 0x20000
126: #endif
127: #if defined(m68k) && defined(PORTAR)
128: #define PAGE_SIZE 0x400
129: #define SEGMENT_SIZE PAGE_SIZE
130: #endif
131: 
132: #ifdef linux
133: #include <unistd.h>
134: #if defined(__i386__) || defined(__mc68000__)
135: #define SEGMENT_SIZE    1024
136: #else
137: #ifndef SEGMENT_SIZE
138: #define SEGMENT_SIZE   getpagesize()
139: #endif
140: #endif
141: #endif
142: 
143: #define _N_SEGMENT_ROUND(x) ALIGN(x, SEGMENT_SIZE)
144: 
145: #define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text)
146: 
147: #ifndef N_DATADDR
148: #define N_DATADDR(x) \
149:     (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x)) \
150:      : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x))))
151: #endif
152: 
153: /* Address of bss segment in memory after it is loaded.  */
154: #if !defined (N_BSSADDR)
155: #define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data)
156: #endif
157: 
158: #if !defined (N_NLIST_DECLARED)
159: struct nlist {
160:   union {
161:     char *n_name;
162:     struct nlist *n_next;
163:     long n_strx;
164:   } n_un;
165:   unsigned char n_type;
166:   char n_other;
167:   short n_desc;
168:   unsigned long n_value;
169: };
170: #endif /* no N_NLIST_DECLARED.  */
171: 
172: #if !defined (N_UNDF)
173: #define N_UNDF 0
174: #endif
175: #if !defined (N_ABS)
176: #define N_ABS 2
177: #endif
178: #if !defined (N_TEXT)
179: #define N_TEXT 4
180: #endif
181: #if !defined (N_DATA)
182: #define N_DATA 6
183: #endif
184: #if !defined (N_BSS)
185: #define N_BSS 8
186: #endif
187: #if !defined (N_FN)
188: #define N_FN 15
189: #endif
190: 
191: #if !defined (N_EXT)
192: #define N_EXT 1
193: #endif
194: #if !defined (N_TYPE)
195: #define N_TYPE 036
196: #endif
197: #if !defined (N_STAB)
198: #define N_STAB 0340
199: #endif
200: 
201: /* The following type indicates the definition of a symbol as being
202:    an indirect reference to another symbol.  The other symbol
203:    appears as an undefined reference, immediately following this symbol.
204: 
205:    Indirection is asymmetrical.  The other symbol's value will be used
206:    to satisfy requests for the indirect symbol, but not vice versa.
207:    If the other symbol does not have a definition, libraries will
208:    be searched to find a definition.  */
209: #define N_INDR 0xa
210: 
211: /* The following symbols refer to set elements.
212:    All the N_SET[ATDB] symbols with the same name form one set.
213:    Space is allocated for the set in the text section, and each set
214:    element's value is stored into one word of the space.
215:    The first word of the space is the length of the set (number of elements).
216: 
217:    The address of the set is made into an N_SETV symbol
218:    whose name is the same as the name of the set.
219:    This symbol acts like a N_DATA global symbol
220:    in that it can satisfy undefined external references.  */
221: 
222: /* These appear as input to LD, in a .o file.  */
223: #define N_SETA  0x14            /* Absolute set element symbol */
224: #define N_SETT  0x16            /* Text set element symbol */
225: #define N_SETD  0x18            /* Data set element symbol */
226: #define N_SETB  0x1A            /* Bss set element symbol */
227: 
228: /* This is output from LD.  */
229: #define N_SETV  0x1C            /* Pointer to set vector in data area.  */
230: 
231: #if !defined (N_RELOCATION_INFO_DECLARED)
232: /* This structure describes a single relocation to be performed.
233:    The text-relocation section of the file is a vector of these structures,
234:    all of which apply to the text section.
235:    Likewise, the data-relocation section applies to the data section.  */
236: 
237: struct relocation_info
238: {
239:   /* Address (within segment) to be relocated.  */
240:   int r_address;
241:   /* The meaning of r_symbolnum depends on r_extern.  */
242:   unsigned int r_symbolnum:24;
243:   /* Nonzero means value is a pc-relative offset
244:      and it should be relocated for changes in its own address
245:      as well as for changes in the symbol or section specified.  */
246:   unsigned int r_pcrel:1;
247:   /* Length (as exponent of 2) of the field to be relocated.
248:      Thus, a value of 2 indicates 1<<2 bytes.  */
249:   unsigned int r_length:2;
250:   /* 1 => relocate with value of symbol.
251:           r_symbolnum is the index of the symbol
252:           in file's the symbol table.
253:      0 => relocate with the address of a segment.
254:           r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS
255:           (the N_EXT bit may be set also, but signifies nothing).  */
256:   unsigned int r_extern:1;
257:   /* Four bits that aren't used, but when writing an object file
258:      it is desirable to clear them.  */
259: #ifdef NS32K
260:   unsigned r_bsr:1;
261:   unsigned r_disp:1;
262:   unsigned r_pad:2;
263: #else
264:   unsigned int r_pad:4;
265: #endif
266: };
267: #endif /* no N_RELOCATION_INFO_DECLARED.  */
268: 
269: #endif /*__ASSEMBLY__ */
270: #endif /* __A_OUT_GNU_H__ */
271: 


for client (none)
© Andrew Scott 2006 - 2025,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/