|
|
1.1 ! root 1: #ifndef __A_OUT_GNU_H__ ! 2: #define __A_OUT_GNU_H__ ! 3: ! 4: #define __GNU_EXEC_MACROS__ ! 5: ! 6: #ifndef __STRUCT_EXEC_OVERRIDE__ ! 7: ! 8: #include "asm/a.out.h" ! 9: ! 10: #endif /* __STRUCT_EXEC_OVERRIDE__ */ ! 11: ! 12: /* these go in the N_MACHTYPE field */ ! 13: enum machine_type { ! 14: #if defined (M_OLDSUN2) ! 15: M__OLDSUN2 = M_OLDSUN2, ! 16: #else ! 17: M_OLDSUN2 = 0, ! 18: #endif ! 19: #if defined (M_68010) ! 20: M__68010 = M_68010, ! 21: #else ! 22: M_68010 = 1, ! 23: #endif ! 24: #if defined (M_68020) ! 25: M__68020 = M_68020, ! 26: #else ! 27: M_68020 = 2, ! 28: #endif ! 29: #if defined (M_SPARC) ! 30: M__SPARC = M_SPARC, ! 31: #else ! 32: M_SPARC = 3, ! 33: #endif ! 34: /* skip a bunch so we don't run into any of sun's numbers */ ! 35: M_386 = 100, ! 36: M_MIPS1 = 151, /* MIPS R3000/R3000 binary */ ! 37: M_MIPS2 = 152 /* MIPS R6000/R4000 binary */ ! 38: }; ! 39: ! 40: #if !defined (N_MAGIC) ! 41: #define N_MAGIC(exec) ((exec).a_info & 0xffff) ! 42: #endif ! 43: #define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff)) ! 44: #define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff) ! 45: #define N_SET_INFO(exec, magic, type, flags) \ ! 46: ((exec).a_info = ((magic) & 0xffff) \ ! 47: | (((int)(type) & 0xff) << 16) \ ! 48: | (((flags) & 0xff) << 24)) ! 49: #define N_SET_MAGIC(exec, magic) \ ! 50: ((exec).a_info = (((exec).a_info & 0xffff0000) | ((magic) & 0xffff))) ! 51: ! 52: #define N_SET_MACHTYPE(exec, machtype) \ ! 53: ((exec).a_info = \ ! 54: ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16)) ! 55: ! 56: #define N_SET_FLAGS(exec, flags) \ ! 57: ((exec).a_info = \ ! 58: ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24)) ! 59: ! 60: /* Code indicating object file or impure executable. */ ! 61: #define OMAGIC 0407 ! 62: /* Code indicating pure executable. */ ! 63: #define NMAGIC 0410 ! 64: /* Code indicating demand-paged executable. */ ! 65: #define ZMAGIC 0413 ! 66: /* This indicates a demand-paged executable with the header in the text. ! 67: The first page is unmapped to help trap NULL pointer references */ ! 68: #define QMAGIC 0314 ! 69: ! 70: /* Code indicating core file. */ ! 71: #define CMAGIC 0421 ! 72: ! 73: #if !defined (N_BADMAG) ! 74: #define N_BADMAG(x) (N_MAGIC(x) != OMAGIC \ ! 75: && N_MAGIC(x) != NMAGIC \ ! 76: && N_MAGIC(x) != ZMAGIC \ ! 77: && N_MAGIC(x) != QMAGIC) ! 78: #endif ! 79: ! 80: #define _N_HDROFF(x) (1024 - sizeof (struct exec)) ! 81: ! 82: #if !defined (N_TXTOFF) ! 83: #define N_TXTOFF(x) \ ! 84: (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) : \ ! 85: (N_MAGIC(x) == QMAGIC ? 0 : sizeof (struct exec))) ! 86: #endif ! 87: ! 88: #if !defined (N_DATOFF) ! 89: #define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text) ! 90: #endif ! 91: ! 92: #if !defined (N_TRELOFF) ! 93: #define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data) ! 94: #endif ! 95: ! 96: #if !defined (N_DRELOFF) ! 97: #define N_DRELOFF(x) (N_TRELOFF(x) + N_TRSIZE(x)) ! 98: #endif ! 99: ! 100: #if !defined (N_SYMOFF) ! 101: #define N_SYMOFF(x) (N_DRELOFF(x) + N_DRSIZE(x)) ! 102: #endif ! 103: ! 104: #if !defined (N_STROFF) ! 105: #define N_STROFF(x) (N_SYMOFF(x) + N_SYMSIZE(x)) ! 106: #endif ! 107: ! 108: /* Address of text segment in memory after it is loaded. */ ! 109: #if !defined (N_TXTADDR) ! 110: #define N_TXTADDR(x) (N_MAGIC(x) == QMAGIC ? PAGE_SIZE : 0) ! 111: #endif ! 112: ! 113: /* Address of data segment in memory after it is loaded. ! 114: Note that it is up to you to define SEGMENT_SIZE ! 115: on machines not listed here. */ ! 116: #if defined(vax) || defined(hp300) || defined(pyr) ! 117: #define SEGMENT_SIZE page_size ! 118: #endif ! 119: #ifdef sony ! 120: #define SEGMENT_SIZE 0x2000 ! 121: #endif /* Sony. */ ! 122: #ifdef is68k ! 123: #define SEGMENT_SIZE 0x20000 ! 124: #endif ! 125: #if defined(m68k) && defined(PORTAR) ! 126: #define PAGE_SIZE 0x400 ! 127: #define SEGMENT_SIZE PAGE_SIZE ! 128: #endif ! 129: ! 130: #if !defined(SEGMENT_SIZE) ! 131: #ifdef linux ! 132: #if defined(__i386__) || defined(__mc68000__) ! 133: #define SEGMENT_SIZE 1024 ! 134: #elif defined(__sparc__) ! 135: #define SEGMENT_SIZE 0x2000 ! 136: #else ! 137: #if defined(PAGE_SIZE) ! 138: #define SEGMENT_SIZE PAGE_SIZE ! 139: #endif ! 140: #endif ! 141: #endif ! 142: #endif ! 143: ! 144: #define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1)) ! 145: ! 146: #define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text) ! 147: ! 148: #ifndef N_DATADDR ! 149: #define N_DATADDR(x) \ ! 150: (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x)) \ ! 151: : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x)))) ! 152: #endif ! 153: ! 154: /* Address of bss segment in memory after it is loaded. */ ! 155: #if !defined (N_BSSADDR) ! 156: #define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data) ! 157: #endif ! 158: ! 159: #if !defined (N_NLIST_DECLARED) ! 160: struct nlist { ! 161: union { ! 162: char *n_name; ! 163: struct nlist *n_next; ! 164: long n_strx; ! 165: } n_un; ! 166: unsigned char n_type; ! 167: char n_other; ! 168: short n_desc; ! 169: unsigned long n_value; ! 170: }; ! 171: #endif /* no N_NLIST_DECLARED. */ ! 172: ! 173: #if !defined (N_UNDF) ! 174: #define N_UNDF 0 ! 175: #endif ! 176: #if !defined (N_ABS) ! 177: #define N_ABS 2 ! 178: #endif ! 179: #if !defined (N_TEXT) ! 180: #define N_TEXT 4 ! 181: #endif ! 182: #if !defined (N_DATA) ! 183: #define N_DATA 6 ! 184: #endif ! 185: #if !defined (N_BSS) ! 186: #define N_BSS 8 ! 187: #endif ! 188: #if !defined (N_FN) ! 189: #define N_FN 15 ! 190: #endif ! 191: ! 192: #if !defined (N_EXT) ! 193: #define N_EXT 1 ! 194: #endif ! 195: #if !defined (N_TYPE) ! 196: #define N_TYPE 036 ! 197: #endif ! 198: #if !defined (N_STAB) ! 199: #define N_STAB 0340 ! 200: #endif ! 201: ! 202: /* The following type indicates the definition of a symbol as being ! 203: an indirect reference to another symbol. The other symbol ! 204: appears as an undefined reference, immediately following this symbol. ! 205: ! 206: Indirection is asymmetrical. The other symbol's value will be used ! 207: to satisfy requests for the indirect symbol, but not vice versa. ! 208: If the other symbol does not have a definition, libraries will ! 209: be searched to find a definition. */ ! 210: #define N_INDR 0xa ! 211: ! 212: /* The following symbols refer to set elements. ! 213: All the N_SET[ATDB] symbols with the same name form one set. ! 214: Space is allocated for the set in the text section, and each set ! 215: element's value is stored into one word of the space. ! 216: The first word of the space is the length of the set (number of elements). ! 217: ! 218: The address of the set is made into an N_SETV symbol ! 219: whose name is the same as the name of the set. ! 220: This symbol acts like a N_DATA global symbol ! 221: in that it can satisfy undefined external references. */ ! 222: ! 223: /* These appear as input to LD, in a .o file. */ ! 224: #define N_SETA 0x14 /* Absolute set element symbol */ ! 225: #define N_SETT 0x16 /* Text set element symbol */ ! 226: #define N_SETD 0x18 /* Data set element symbol */ ! 227: #define N_SETB 0x1A /* Bss set element symbol */ ! 228: ! 229: /* This is output from LD. */ ! 230: #define N_SETV 0x1C /* Pointer to set vector in data area. */ ! 231: ! 232: #if !defined (N_RELOCATION_INFO_DECLARED) ! 233: /* This structure describes a single relocation to be performed. ! 234: The text-relocation section of the file is a vector of these structures, ! 235: all of which apply to the text section. ! 236: Likewise, the data-relocation section applies to the data section. */ ! 237: ! 238: struct relocation_info ! 239: { ! 240: /* Address (within segment) to be relocated. */ ! 241: int r_address; ! 242: /* The meaning of r_symbolnum depends on r_extern. */ ! 243: unsigned int r_symbolnum:24; ! 244: /* Nonzero means value is a pc-relative offset ! 245: and it should be relocated for changes in its own address ! 246: as well as for changes in the symbol or section specified. */ ! 247: unsigned int r_pcrel:1; ! 248: /* Length (as exponent of 2) of the field to be relocated. ! 249: Thus, a value of 2 indicates 1<<2 bytes. */ ! 250: unsigned int r_length:2; ! 251: /* 1 => relocate with value of symbol. ! 252: r_symbolnum is the index of the symbol ! 253: in file's the symbol table. ! 254: 0 => relocate with the address of a segment. ! 255: r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS ! 256: (the N_EXT bit may be set also, but signifies nothing). */ ! 257: unsigned int r_extern:1; ! 258: /* Four bits that aren't used, but when writing an object file ! 259: it is desirable to clear them. */ ! 260: #ifdef NS32K ! 261: unsigned r_bsr:1; ! 262: unsigned r_disp:1; ! 263: unsigned r_pad:2; ! 264: #else ! 265: unsigned int r_pad:4; ! 266: #endif ! 267: }; ! 268: #endif /* no N_RELOCATION_INFO_DECLARED. */ ! 269: ! 270: ! 271: #endif /* __A_OUT_GNU_H__ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.