Annotation of researchv9/include/a.out.h, revision 1.1.1.1

1.1       root        1: /*      @(#)a.out.h 1.1 85/12/18 SMI; from UCB 4.1 83/05/03       */
                      2: 
                      3: /*
                      4:  * format of the exec header
                      5:  * known by kernel and by user programs
                      6:  */
                      7: struct exec {
                      8: #ifdef sun
                      9:        unsigned short  a_machtype;     /* machine type */
                     10:        unsigned short  a_magic;        /* magic number */
                     11: #else
                     12:        unsigned long   a_magic;        /* magic number */
                     13: #endif
                     14:        unsigned long   a_text;         /* size of text segment */
                     15:        unsigned long   a_data;         /* size of initialized data */
                     16:        unsigned long   a_bss;          /* size of uninitialized data */
                     17:        unsigned long   a_syms;         /* size of symbol table */
                     18:        unsigned long   a_entry;        /* entry point */
                     19:        unsigned long   a_trsize;       /* size of text relocation */
                     20:        unsigned long   a_drsize;       /* size of data relocation */
                     21: };
                     22: 
                     23: #define        OMAGIC  0407            /* old impure format */
                     24: #define        NMAGIC  0410            /* read-only text */
                     25: #define        ZMAGIC  0413            /* demand load format */
                     26: 
                     27: /* machine types */
                     28: 
                     29: #ifdef sun
                     30: #define M_OLDSUN2      0       /* old sun-2 executable files */
                     31: #define M_68010                1       /* runs on either 68010 or 68020 */
                     32: #define M_68020                2       /* runs only on 68020 */
                     33: #endif sun
                     34: 
                     35: /*
                     36:  * memory management parameters
                     37:  */
                     38: 
                     39: #ifdef sun
                     40: #define        PAGSIZ          0x2000
                     41: #define        SEGSIZ          0x20000
                     42: #define        OLD_PAGSIZ      0x800   /* THIS DISAPPEARS IN RELEASE 4.0 */
                     43: #define        OLD_SEGSIZ      0x8000  /* THIS DISAPPEARS IN RELEASE 4.0 */
                     44: #endif sun
                     45: 
                     46: #ifdef vax
                     47: #define        PAGSIZ          1024
                     48: #define        SEGSIZ          PAGSIZ
                     49: #endif vax
                     50: 
                     51: /*
                     52:  * returns 1 if an object file type is invalid, i.e., if the other macros
                     53:  * defined below will not yield the correct offsets.  Note that a file may
                     54:  * have N_BADMAG(x) = 0 and may be fully linked, but still may not be
                     55:  * executable.
                     56:  */
                     57: 
                     58: #define        N_BADMAG(x) \
                     59:        ((x).a_magic!=OMAGIC && (x).a_magic!=NMAGIC && (x).a_magic!=ZMAGIC)
                     60: 
                     61: /*
                     62:  * relocation parameters. These are architecture-dependent
                     63:  * and can be deduced from the machine type.  They are used
                     64:  * to calculate offsets of segments within the object file;
                     65:  * See N_TXTOFF(x), etc. below.
                     66:  */
                     67: 
                     68: #ifdef sun
                     69: #define        N_PAGSIZ(x) \
                     70:        ((x).a_machtype == M_OLDSUN2? OLD_PAGSIZ : PAGSIZ)
                     71: #define        N_SEGSIZ(x) \
                     72:        ((x).a_machtype == M_OLDSUN2? OLD_SEGSIZ : SEGSIZ)
                     73: #endif sun
                     74: 
                     75: #ifdef vax
                     76: #define        N_PAGSIZ(x) PAGSIZ
                     77: #define        N_SEGSIZ(x) SEGSIZ
                     78: #endif vax
                     79: 
                     80: /*
                     81:  * offsets of various sections of an object file.
                     82:  */
                     83: 
                     84: #ifdef sun
                     85: #define        N_TXTOFF(x) \
                     86:        /* text segment */ \
                     87:        ( (x).a_machtype == M_OLDSUN2 \
                     88:        ? ((x).a_magic==ZMAGIC ? N_PAGSIZ(x) : sizeof (struct exec)) \
                     89:        : ((x).a_magic==ZMAGIC ? 0 : sizeof (struct exec)) )
                     90: #endif sun
                     91: 
                     92: #ifdef vax
                     93: #define        N_TXTOFF(x) \
                     94:        ((x).a_magic==ZMAGIC ? PAGSIZ : sizeof (struct exec))
                     95: #endif vax
                     96: 
                     97: 
                     98: #define        N_SYMOFF(x) \
                     99:        /* symbol table */ \
                    100:        (N_TXTOFF(x)+(x).a_text+(x).a_data+(x).a_trsize+(x).a_drsize)
                    101: 
                    102: #define        N_STROFF(x) \
                    103:        /* string table */ \
                    104:        (N_SYMOFF(x) + (x).a_syms)
                    105: 
                    106: /*
                    107:  * Macros which take exec structures as arguments and tell where the
                    108:  * various pieces will be loaded.
                    109:  */
                    110: 
                    111: #ifdef sun
                    112: #define N_TXTADDR(x) \
                    113:        ((x).a_machtype == M_OLDSUN2? N_SEGSIZ(x) : N_PAGSIZ(x))
                    114: #endif sun
                    115: 
                    116: #ifdef vax
                    117: #define        TXTRELOC        0
                    118: #define N_TXTADDR(x) TXTRELOC
                    119: #endif vax
                    120: 
                    121: #define N_DATADDR(x) \
                    122:        (((x).a_magic==OMAGIC)? (N_TXTADDR(x)+(x).a_text) \
                    123:        : (N_SEGSIZ(x)+((N_TXTADDR(x)+(x).a_text-1) & ~(N_SEGSIZ(x)-1))))
                    124: 
                    125: #define N_BSSADDR(x)  (N_DATADDR(x)+(x).a_data)
                    126: 
                    127: /*
                    128:  * Format of a relocation datum.
                    129:  */
                    130: 
                    131: struct relocation_info {
                    132:        long    r_address;      /* address which is relocated */
                    133: unsigned int   r_symbolnum:24, /* local symbol ordinal */
                    134:                r_pcrel:1,      /* was relocated pc relative already */
                    135:                r_length:2,     /* 0=byte, 1=word, 2=long */
                    136:                r_extern:1,     /* does not include value of sym referenced */
                    137:                :4;             /* nothing, yet */
                    138: };
                    139: 
                    140: /*
                    141:  * Format of a symbol table entry
                    142:  */
                    143: struct nlist {
                    144:        union {
                    145:                char    *n_name;        /* for use when in-core */
                    146:                long    n_strx;         /* index into file string table */
                    147:        } n_un;
                    148:        unsigned char   n_type;         /* type flag (N_TEXT,..)  */
                    149:        char    n_other;                /* unused */
                    150:        short   n_desc;                 /* see <stab.h> */
                    151:        unsigned long   n_value;        /* value of symbol (or sdb offset) */
                    152: };
                    153: 
                    154: /*
                    155:  * Simple values for n_type.
                    156:  */
                    157: #define        N_UNDF  0x0             /* undefined */
                    158: #define        N_ABS   0x2             /* absolute */
                    159: #define        N_TEXT  0x4             /* text */
                    160: #define        N_DATA  0x6             /* data */
                    161: #define        N_BSS   0x8             /* bss */
                    162: #define        N_COMM  0x12            /* common (internal to ld) */
                    163: #define        N_FN    0x1f            /* file name symbol */
                    164: 
                    165: #define        N_EXT   01              /* external bit, or'ed in */
                    166: #define        N_TYPE  0x1e            /* mask for all the type bits */
                    167: 
                    168: /*
                    169:  * Dbx entries have some of the N_STAB bits set.
                    170:  * These are given in <stab.h>
                    171:  */
                    172: #define        N_STAB  0xe0            /* if any of these bits set, a dbx symbol */
                    173: 
                    174: /*
                    175:  * Format for namelist values.
                    176:  */
                    177: #define        N_FORMAT        "%08x"

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.