Annotation of researchv9/include/a.out.h, revision 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.