Annotation of coherent/d/PS2_KERNEL/include/coff.h, revision 1.1.1.1

1.1       root        1: /* (-lgl
                      2:  *     COHERENT Version 4.0
                      3:  *     Copyright (c) 1982, 1992 by Mark Williams Company.
                      4:  *     All rights reserved. May not be copied without permission.
                      5:  -lgl) */
                      6: /*
                      7:  * coff.h
                      8:  * Common Object File Format (COFF) header for COHERENT.
                      9:  */
                     10: 
                     11: #ifndef COFF_H /* Rest of file.  */
                     12: #define COFF_H
                     13: 
                     14: /* File header. */
                     15: typedef        struct  filehdr {
                     16:        unsigned short  f_magic;                /* Magic number         */
                     17:        unsigned short  f_nscns;                /* Number of sections   */
                     18:        long            f_timdat;               /* Time and date        */
                     19:        long            f_symptr;               /* Seek to symbol table */
                     20:        long            f_nsyms;                /* Number of symbols    */
                     21:        unsigned short  f_opthdr;               /* Optional header size */
                     22:        unsigned short  f_flags;                /* Flags                */
                     23: }      FILEHDR;
                     24: 
                     25: /* Magic number. */
                     26: #define        C_386_MAGIC     0x14C                   /* Intel iAPX 80386     */
                     27: #define ISCOFF(x)      ((x) == C_386_MAGIC)
                     28: 
                     29: /* Flags for f_flags field. */
                     30: #define        F_RELFLG        0x0001                  /* No relocation info   */
                     31: #define        F_EXEC          0x0002                  /* Executable           */
                     32: #define        F_LNNO          0x0004                  /* No line numbers      */
                     33: #define        F_LSYMS         0x0008                  /* No local symbols     */
                     34: #define F_MINMAL       0x0010                  /* product of strip     */
                     35: #define        F_AR32WR        0x0100                  /* i80x86 byte order    */
                     36: #define F_KER          0x0800                  /* Loadable driver      */
                     37: 
                     38: /* Optional header. */
                     39: typedef struct aouthdr {
                     40:        short           magic;                  /* AOUT_MAGIC           */
                     41:        short           vstamp;                 /* version stamp        */
                     42:        long            tsize;                  /* .text size in bytes  */
                     43:        long            dsize;                  /* .data size in bytes  */
                     44:        long            bsize;                  /* .bss  size in bytes  */
                     45:        long            entry;                  /* entry point          */
                     46:        long            text_start;             /* base of .text data   */
                     47:        long            data_start;             /* base of .data data   */
                     48: } AOUTHDR;
                     49: 
                     50: /* Magic numbers for aouthdr. Coherent only supports Z_MAGIC */
                     51: #define O_MAGIC        0x107   /* Text and data are contiguous text not shared */
                     52: #define N_MAGIC 0x108  /* .data starts at seg after .text .text is protected */
                     53: #define I_MAGIC 0x109  /* sep id */
                     54: #define Z_MAGIC 0x10B  /* Text and data aligned within a.out for direct page */
                     55: 
                     56: /* Section header. */
                     57: typedef        struct  scnhdr  {
                     58:        char            s_name[8];              /* Section name         */
                     59:        long            s_paddr;                /* Physical address     */
                     60:        long            s_vaddr;                /* Virtual address      */
                     61:        long            s_size;                 /* Size                 */
                     62:        long            s_scnptr;               /* Data pointer         */
                     63:        long            s_relptr;               /* Reloc pointer        */
                     64:        long            s_lnnoptr;              /* Line number pointer  */
                     65:        unsigned short  s_nreloc;               /* Reloc entries        */
                     66:        unsigned short  s_nlnno;                /* Line number entries  */
                     67:        long            s_flags;                /* Flags                */
                     68: }      SCNHDR;
                     69: 
                     70: /* Names of special sections */
                     71: #define _TEXT  ".text"
                     72: #define _DATA  ".data"
                     73: #define _BSS   ".bss"
                     74: #define _TV    ".tv"
                     75: #define _INIT  ".init"
                     76: #define _FINI  ".fini"
                     77: 
                     78: /* Flags for s_flags field. */
                     79: #define        STYP_TEXT       0x20L                   /* Code segment         */
                     80: #define        STYP_DATA       0x40L                   /* Data segment         */
                     81: #define        STYP_BSS        0x80L                   /* BSS segment          */
                     82: 
                     83: /* Relocation items. */
                     84: typedef        struct  reloc   {
                     85:        long            r_vaddr;                /* Address (where)      */
                     86:        long            r_symndx;               /* Symbol index (what)  */
                     87:        unsigned short  r_type;                 /* Type (how)           */
                     88: #pragma align 2
                     89: }      RELOC;
                     90: #pragma align
                     91: 
                     92: #define RELSZ  10                              /* sizeof(RELOC)        */
                     93: 
                     94: /* Relocation types. */
                     95: #define        R_DIR8          0x07                    /* 8-bit direct         */
                     96: #define        R_DIR16         0x01                    /* 16-bit direct        */
                     97: #define        R_DIR32         0x06                    /* 32-bit direct        */
                     98: #define R_RELBYTE      0x0f                    /* 8 bit direct         */
                     99: #define R_RELWORD      0x10                    /* 16 bit direct        */
                    100: #define R_RELLONG      0x11                    /* 32 bit direct        */
                    101: #define        R_PCRBYTE       0x12                    /* 8-bit PC-relative    */
                    102: #define        R_PCRWORD       0x13                    /* 16-bit PC-relative   */
                    103: #define        R_PCRLONG       0x14                    /* 32-bit PC-relative   */
                    104: #define R_NONREL       0x00                    /* fake record for ld -r */
                    105: 
                    106: /* Line number. */
                    107: typedef struct lineno {
                    108:        union   {
                    109:                long    l_symndx;               /* sym table ix of fun name */
                    110:                long    l_paddr;                /* physical addr        */
                    111:        } l_addr;
                    112:        unsigned short l_lnno;                  /* line number or 0 for fun */
                    113: #pragma align 2
                    114: }      LINENO;
                    115: #pragma align
                    116: 
                    117: #define        LINESZ  6                               /* sizeof(LINENO)       */
                    118: 
                    119: /* Symbol table. */
                    120: #define        SYMNMLEN        8                       /* Symbol name length   */
                    121: #define FILNMLEN       14                      /* Characters in a file name */
                    122: #define DIMNUM         4                       /* dimensions in aux entry */
                    123: 
                    124: typedef        struct  syment  {
                    125:        union   {
                    126:                char    _n_name[SYMNMLEN];      /* Name                 */
                    127:                struct  {
                    128:                        long    _n_zeroes;      /* If name[0-3] zero,   */
                    129:                        long    _n_offset;      /* string table offset  */
                    130:                } _n_n;
                    131:                char    *_n_nptr[2];
                    132:        } _n;
                    133:        long            n_value;                /* Value                */
                    134:        short           n_scnum;                /* Section number       */
                    135:        unsigned short  n_type;                 /* Type                 */
                    136:        char            n_sclass;               /* Storage class        */
                    137:        char            n_numaux;               /* Auxilliary entries   */
                    138: #pragma align 2
                    139: }      SYMENT;
                    140: #pragma align
                    141: 
                    142: #define SYMESZ 18      /* sizeof(SYMENT) */
                    143: #define        n_name          _n._n_name
                    144: #define        n_zeroes        _n._n_n._n_zeroes
                    145: #define        n_offset        _n._n_n._n_offset
                    146: 
                    147: /* Special section numbers */
                    148: #define N_UNDEF         0      /* undefined symbol */
                    149: #define N_ABS  -1      /* absolute symbol */
                    150: #define N_DEBUG        -2      /* special debugging symbol */
                    151: #define N_TV   -3      /* symbol needs transfer vector (preload) */
                    152: #define P_TV   -4      /* symbol needs transfer vector (postload) */
                    153: 
                    154: /* Storage classes. */
                    155: #define C_EFCN         -1                      /* end of function      */
                    156: #define C_NULL         0                       /* none given           */
                    157: #define C_AUTO         1                       /* automatic variable   */
                    158: #define        C_EXT           2                       /* External             */
                    159: #define        C_STAT          3                       /* Static               */
                    160: #define C_REG          4                       /* register variable    */
                    161: #define C_EXTDEF       5                       /* External definition  */
                    162: #define C_LABEL                6                       /* label                */
                    163: #define C_ULABEL       7                       /* undefined label      */
                    164: #define C_MOS          8                       /* member of structure  */
                    165: #define C_ARG          9                       /* function argument    */
                    166: #define C_STRTAG       10                      /* structure tag        */
                    167: #define        C_MOU           11                      /* member of union      */
                    168: #define C_UNTAG                12                      /* union tag            */
                    169: #define C_TPDEF                13                      /* typedef              */
                    170: #define C_USTATIC      14                      /* undefined static     */
                    171: #define C_ENTAG                15                      /* enum tag             */
                    172: #define C_MOE          16                      /* member of enum       */
                    173: #define C_REGPARM      17                      /* register parm        */
                    174: #define C_FIELD                18                      /* bit field            */
                    175: #define C_BLOCK                100                     /* .bb or .eb           */
                    176: #define        C_FCN           101                     /* .bf or .ef           */
                    177: #define C_EOS          102                     /* end of structure     */
                    178: #define C_FILE         103                     /* file name            */
                    179: 
                    180: /* is x a tag */
                    181: #define ISTAG(x)       (C_STRTAG==(x) || C_UNTAG==(x) || C_ENTAG==(x))
                    182: 
                    183: /* fundimental type */
                    184: #define T_NULL         0
                    185: #define T_ARG          1
                    186: #define T_CHAR         2
                    187: #define T_SHORT                3
                    188: #define T_INT          4
                    189: #define T_LONG         5
                    190: #define T_FLOAT                6
                    191: #define T_DOUBLE       7
                    192: #define T_STRUCT       8
                    193: #define T_UNION                9
                    194: #define T_ENUM         10
                    195: #define T_MOE          11      /* member of enumeration */
                    196: #define T_UCHAR                12
                    197: #define T_USHORT       13
                    198: #define T_UINT         14
                    199: #define T_ULONG                15
                    200: 
                    201: /* Derived Types in n_type */
                    202: #define DT_NON 0       /* non derived type */
                    203: #define DT_PTR 0x10    /* pointer          */
                    204: #define DT_FCN 0x20    /* function         */
                    205: #define DT_ARY 0x30    /* array            */
                    206: 
                    207: /* Type packing constants */
                    208: #define N_BTMASK       0x15    /* Mask for basic type  */
                    209: #define N_TMASK        0x30    /* Derived type mask    */
                    210: #define N_TSHIFT       2       /* Shift to get at more derivations */
                    211: 
                    212: /* Type processing macros */
                    213: #define BTYPE(x)       ((x) & N_BTMASK)                /* Basic type of x */
                    214: #define ISPTR(x)       (DT_PTR == ((x) & N_TMASK))     /* Is x a pointer */
                    215: #define ISFCN(x)       (DT_FCN == ((x) & N_TMASK))     /* Is x a function */
                    216: #define ISARY(x)       (DT_ARY == ((x) & N_TMASK))     /* Is x an array */
                    217: #define INCREF(x)      ((((x)&~N_BTMASK)<<N_TSHIFT)|DT_PTR|((x)&N_BTMASK))
                    218: #define DECREF(x)      ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
                    219: 
                    220: /* Aux symbols */
                    221: typedef union auxent {
                    222:        struct {
                    223:                long    x_tagndx;       /* struct, union or enum tag index */
                    224:                union {
                    225:                        struct {
                    226:                                unsigned short  x_lnno; /* declaration line */
                    227:                                unsigned short  x_size; /* size */
                    228:                        } x_lnsz;
                    229:                        long    x_fsize;        /* size of function */
                    230:                } x_misc;
                    231:                union {
                    232:                        struct {        /* if ISFCN tag or .bb */
                    233:                                long    x_lnnoptr;      /* ptr to fcn line # */
                    234:                                long    x_endndx;       /* index past block */
                    235:                        } x_fcn;
                    236:                        struct {        /* if ISARY */
                    237:                                unsigned short x_dimen[DIMNUM];
                    238:                        } x_ary;
                    239:                } x_fcnary;
                    240:                unsigned short  x_tvndx;        /* tv index */
                    241:        } x_sym;
                    242:        struct {
                    243:                char x_fname[FILNMLEN];
                    244:        } x_file;
                    245:        struct {
                    246:                long    x_scnlen;               /* section length */
                    247:                unsigned short  x_nreloc;       /* reloc entrys */
                    248:                unsigned short  x_nlinno;       /* line number entries */
                    249:        } x_scn;
                    250: #pragma align 2
                    251: }      AUXENT;
                    252: #pragma align
                    253: 
                    254: #define AUXESZ 18      /* sizeof(auxent) */
                    255: 
                    256: #endif /* COFF_H */
                    257: /* end of coff.h */

unix.superglobalmegacorp.com

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