Annotation of coherent/f/usr/include.78/coff.h, revision 1.1.1.1

1.1       root        1: /* (-lgl
                      2:  *     COHERENT Version 4.1.0
                      3:  *     Copyright (c) 1982, 1993 by Mark Williams Company.
                      4:  *     All rights reserved. May not be copied without permission.
                      5:  -lgl) */
                      6: /*
                      7:  * /usr/include/coff.h
                      8:  *
                      9:  * Common Object File Format (COFF) header for COHERENT.
                     10:  *
                     11:  * Revised Mon Mar 29 14:28:09 1993 CST
                     12:  */
                     13: 
                     14: #ifndef __COFF_H__
                     15: #define __COFF_H__
                     16: 
                     17: /* File header. */
                     18: typedef        struct  filehdr {
                     19:        unsigned short  f_magic;                /* Magic number         */
                     20:        unsigned short  f_nscns;                /* Number of sections   */
                     21:        long            f_timdat;               /* Time and date        */
                     22:        long            f_symptr;               /* Seek to symbol table */
                     23:        long            f_nsyms;                /* Number of symbols    */
                     24:        unsigned short  f_opthdr;               /* Optional header size */
                     25:        unsigned short  f_flags;                /* Flags                */
                     26: }      FILEHDR;
                     27: 
                     28: /* Magic number. */
                     29: #define        C_386_MAGIC     0x14C                   /* Intel iAPX 80386     */
                     30: #define ISCOFF(x)      ((x) == C_386_MAGIC)
                     31: 
                     32: /* Flags for f_flags field. */
                     33: #define        F_RELFLG        0x0001                  /* No relocation info   */
                     34: #define        F_EXEC          0x0002                  /* Executable           */
                     35: #define        F_LNNO          0x0004                  /* No line numbers      */
                     36: #define        F_LSYMS         0x0008                  /* No local symbols     */
                     37: #define F_MINMAL       0x0010                  /* Product of strip     */
                     38: #define        F_AR32WR        0x0100                  /* i80x86 byte order    */
                     39: #define F_KER          0x0800                  /* Loadable driver      */
                     40: 
                     41: /* Optional header. */
                     42: typedef struct aouthdr {
                     43:        short           magic;                  /* AOUT_MAGIC           */
                     44:        short           vstamp;                 /* Version stamp        */
                     45:        long            tsize;                  /* .text size in bytes  */
                     46:        long            dsize;                  /* .data size in bytes  */
                     47:        long            bsize;                  /* .bss  size in bytes  */
                     48:        long            entry;                  /* Entry point          */
                     49:        long            text_start;             /* Base of .text data   */
                     50:        long            data_start;             /* Base of .data data   */
                     51: } AOUTHDR;
                     52: 
                     53: /* Magic numbers for aouthdr.magic;  COHERENT only supports Z_MAGIC. */
                     54: #define O_MAGIC        0x107   /* .text and .data are contiguous, .text not shared */
                     55: #define N_MAGIC 0x108  /* .data starts at seg after .text .text is protected */
                     56: #define I_MAGIC 0x109  /* sep id */
                     57: #define Z_MAGIC 0x10B  /* .text and .data aligned for direct page */
                     58: 
                     59: /* Section header. */
                     60: typedef        struct  scnhdr  {
                     61:        char            s_name[8];              /* Section name         */
                     62:        long            s_paddr;                /* Physical address     */
                     63:        long            s_vaddr;                /* Virtual address      */
                     64:        long            s_size;                 /* Size                 */
                     65:        long            s_scnptr;               /* Data pointer         */
                     66:        long            s_relptr;               /* Reloc pointer        */
                     67:        long            s_lnnoptr;              /* Line number pointer  */
                     68:        unsigned short  s_nreloc;               /* Reloc entries        */
                     69:        unsigned short  s_nlnno;                /* Line number entries  */
                     70:        long            s_flags;                /* Flags                */
                     71: }      SCNHDR;
                     72: 
                     73: /* Names of special sections */
                     74: #define _TEXT  ".text"
                     75: #define _DATA  ".data"
                     76: #define _BSS   ".bss"
                     77: #define        _COMMENT ".comment"
                     78: #define _TV    ".tv"
                     79: #define _INIT  ".init"
                     80: #define _FINI  ".fini"
                     81: #define _RODATA ".rodata"
                     82: 
                     83: /* Flags for s_flags field. */
                     84: #define STYP_GROUP     0x004L                  /* Grouped section      */
                     85: #define STYP_PAD       0x008L                  /* Padding section      */
                     86: #define STYP_COPY      0x010L                  /* Copy section         */
                     87: #define        STYP_TEXT       0x020L                  /* Code segment         */
                     88: #define        STYP_DATA       0x040L                  /* Data segment         */
                     89: #define        STYP_BSS        0x080L                  /* BSS segment          */
                     90: #define STYP_INFO      0x200L                  /* Comment section      */
                     91: #define STYP_OVER      0x400L                  /* Overlay section      */
                     92: #define STYP_LIB       0x800L                  /* Shared library       */
                     93: 
                     94: /*
                     95:  * Shared Library Section.
                     96:  * Followed by implementation dependent data
                     97:  * and a path name aligned on a dword boundary.
                     98:  */
                     99: typedef        struct  shrlib  {
                    100:        long            entsz;                  /* Entry size in longs  */
                    101:        long            pathndx;                /* Path offset in longs */
                    102: }      SHRLIB;
                    103: 
                    104: 
                    105: /* Relocation items. */
                    106: typedef        struct  reloc   {
                    107:        long            r_vaddr;                /* Address (where)      */
                    108:        long            r_symndx;               /* Symbol index (what)  */
                    109:        unsigned short  r_type;                 /* Type (how)           */
                    110: #pragma align 2
                    111: }      RELOC;
                    112: #pragma align
                    113: 
                    114: #define RELSZ  (sizeof(RELOC))
                    115: 
                    116: /* Relocation types. */
                    117: #define        R_DIR8          0x07                    /* 8-bit direct         */
                    118: #define        R_DIR16         0x01                    /* 16-bit direct        */
                    119: #define        R_DIR32         0x06                    /* 32-bit direct        */
                    120: #define R_RELBYTE      0x0f                    /* 8 bit direct         */
                    121: #define R_RELWORD      0x10                    /* 16 bit direct        */
                    122: #define R_RELLONG      0x11                    /* 32 bit direct        */
                    123: #define        R_PCRBYTE       0x12                    /* 8-bit PC-relative    */
                    124: #define        R_PCRWORD       0x13                    /* 16-bit PC-relative   */
                    125: #define        R_PCRLONG       0x14                    /* 32-bit PC-relative   */
                    126: #define R_NONREL       0x00                    /* Fake item for ld -r  */
                    127: 
                    128: /* Line number. */
                    129: typedef struct lineno {
                    130:        union   {
                    131:                long    l_symndx;               /* Fn name symbol index */
                    132:                long    l_paddr;                /* Physical address     */
                    133:        } l_addr;
                    134:        unsigned short l_lnno;                  /* Line num., 0 for fn  */
                    135: #pragma align 2
                    136: }      LINENO;
                    137: #pragma align
                    138: 
                    139: #define        LINESZ  (sizeof(LINENO))
                    140: 
                    141: /* Symbol table. */
                    142: #define        SYMNMLEN        8                       /* Symbol name length   */
                    143: #define FILNMLEN       14                      /* Chars in file name   */
                    144: #define DIMNUM         4                       /* Dims in aux entry    */
                    145: 
                    146: typedef        struct  syment  {
                    147:        union   {
                    148:                char    _n_name[SYMNMLEN];      /* Name                 */
                    149:                struct  {
                    150:                        long    _n_zeroes;      /* If name[0-3] zero,   */
                    151:                        long    _n_offset;      /* string table offset  */
                    152:                } _n_n;
                    153:                char    *_n_nptr[2];
                    154:        } _n;
                    155:        long            n_value;                /* Value                */
                    156:        short           n_scnum;                /* Section number       */
                    157:        unsigned short  n_type;                 /* Type                 */
                    158:        char            n_sclass;               /* Storage class        */
                    159:        char            n_numaux;               /* Auxilliary entries   */
                    160: #pragma align 2
                    161: }      SYMENT;
                    162: #pragma align
                    163: 
                    164: #define SYMESZ (sizeof(SYMENT))
                    165: #define        n_name          _n._n_name
                    166: #define        n_zeroes        _n._n_n._n_zeroes
                    167: #define        n_offset        _n._n_n._n_offset
                    168: 
                    169: /* Special section numbers */
                    170: #define N_UNDEF         0                              /* Undefined            */
                    171: #define N_ABS  -1                              /* Absolute             */
                    172: #define N_DEBUG        -2                              /* Debug                */
                    173: #define N_TV   -3              /* Needs preload transfer vector        */
                    174: #define P_TV   -4              /* Needs postload transfer vector       */
                    175: 
                    176: /* Storage classes. */
                    177: #define C_EFCN         -1                      /* End of function      */
                    178: #define C_NULL         0                       /* None                 */
                    179: #define C_AUTO         1                       /* Automatic            */
                    180: #define        C_EXT           2                       /* External             */
                    181: #define        C_STAT          3                       /* Static               */
                    182: #define C_REG          4                       /* Register             */
                    183: #define C_EXTDEF       5                       /* External definition  */
                    184: #define C_LABEL                6                       /* Label                */
                    185: #define C_ULABEL       7                       /* Undefined label      */
                    186: #define C_MOS          8                       /* Member of structure  */
                    187: #define C_ARG          9                       /* Function argument    */
                    188: #define C_STRTAG       10                      /* Structure tag        */
                    189: #define        C_MOU           11                      /* Member of union      */
                    190: #define C_UNTAG                12                      /* Union tag            */
                    191: #define C_TPDEF                13                      /* Typedef              */
                    192: #define C_USTATIC      14                      /* Undefined static     */
                    193: #define C_ENTAG                15                      /* Enum tag             */
                    194: #define C_MOE          16                      /* Member of enum       */
                    195: #define C_REGPARM      17                      /* Register parameter   */
                    196: #define C_FIELD                18                      /* Bit field            */
                    197: #define C_BLOCK                100                     /* Block (.bb or .eb)   */
                    198: #define        C_FCN           101                     /* Function (.bf or .ef) */
                    199: #define C_EOS          102                     /* End of structure     */
                    200: #define C_FILE         103                     /* File name            */
                    201: 
                    202: #define ISTAG(x)       (C_STRTAG==(x) || C_UNTAG==(x) || C_ENTAG==(x))
                    203: 
                    204: /* Fundimental types. */
                    205: #define T_NULL         0
                    206: #define T_ARG          1
                    207: #define T_CHAR         2
                    208: #define T_SHORT                3
                    209: #define T_INT          4
                    210: #define T_LONG         5
                    211: #define T_FLOAT                6
                    212: #define T_DOUBLE       7
                    213: #define T_STRUCT       8
                    214: #define T_UNION                9
                    215: #define T_ENUM         10
                    216: #define T_MOE          11                      /* Member of enumeration */
                    217: #define T_UCHAR                12
                    218: #define T_USHORT       13
                    219: #define T_UINT         14
                    220: #define T_ULONG                15
                    221: 
                    222: /* Derived types in n_type. */
                    223: #define DT_NON 0                               /* Non-derived type     */
                    224: #define DT_PTR 1                               /* Pointer              */
                    225: #define DT_FCN 2                               /* Function             */
                    226: #define DT_ARY 3                               /* Array                */
                    227: 
                    228: /* Type packing constants. */
                    229: #define N_BTMASK       0x0F                    /* Mask for basic type  */
                    230: #define N_TMASK        0x30                    /* Derived type mask    */
                    231: #define N_TSHIFT       2                       /* Shift for more derived bits */
                    232: #define        N_BTSHFT        4                       /* Shift for derived type */
                    233:  
                    234: /* Type processing macros. */
                    235: #define BTYPE(x)  ((x) & N_BTMASK)             /* Base type            */
                    236: #define ISPTR(x)  ((DT_PTR<<N_BTSHFT)==((x)&N_TMASK))  /* Pointer?     */
                    237: #define ISFCN(x)  ((DT_FCN<<N_BTSHFT)==((x)&N_TMASK))  /* Function?    */
                    238: #define ISARY(x)  ((DT_ARY<<N_BTSHFT)==((x)&N_TMASK))  /* Array?       */
                    239: #define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(DT_PTR<<N_BTSHFT)|((x)&N_BTMASK))
                    240: #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
                    241: 
                    242: /* Symbol aux entries. */
                    243: typedef union auxent   {
                    244: #pragma align 2
                    245:        struct  {
                    246:                long    x_tagndx;       /* struct/union/enum tag index  */
                    247:                union   {
                    248:                        struct  {
                    249:                                unsigned short  x_lnno; /* Decl. line   */
                    250:                                unsigned short  x_size; /* Size         */
                    251:                        } x_lnsz;
                    252:                        long    x_fsize;        /* Function size        */
                    253:                } x_misc;
                    254:                union   {
                    255:                        struct  {               /* Functions            */
                    256:                                long    x_lnnoptr;      /* line # ptr   */
                    257:                                long    x_endndx;       /* index of .eb */
                    258:                        } x_fcn;
                    259:                        struct  {               /* Arrays               */
                    260:                                unsigned short x_dimen[DIMNUM]; /* Dims */
                    261:                        } x_ary;
                    262:                } x_fcnary;
                    263:                unsigned short  x_tvndx;        /* TV index             */
                    264:        } x_sym;
                    265:        struct {                                /* File names           */
                    266:                char x_fname[FILNMLEN];         /* File name            */
                    267:        } x_file;
                    268:        struct  {                               /* Sections             */
                    269:                long    x_scnlen;               /* Section length       */
                    270:                unsigned short  x_nreloc;       /* Reloc entrys         */
                    271:                unsigned short  x_nlinno;       /* Line number entries  */
                    272:        } x_scn;
                    273: }      AUXENT;
                    274: #pragma align
                    275: #define        ae_tagndx       x_sym.x_tagndx
                    276: #define        ae_lnno         x_sym.x_misc.x_lnsz.x_lnno
                    277: #define        ae_size         x_sym.x_misc.x_lnsz.x_size
                    278: #define        ae_fsize        x_sym.x_misc.x_fsize
                    279: #define        ae_lnnoptr      x_sym.x_fcnary.x_fcn.x_lnnoptr
                    280: #define        ae_endndx       x_sym.x_fcnary.x_fcn.x_endndx
                    281: #define        ae_dimen        x_sym.x_fcnary.x_ary.x_dimen
                    282: #define        ae_tvndx        x_sym.x_tvndx
                    283: #define        ae_fname        x_file.x_fname
                    284: #define        ae_scnlen       x_scn.x_scnlen
                    285: #define        ae_nreloc       x_scn.x_nreloc
                    286: #define        ae_nlinno       x_scn.x_nlinno
                    287: #define AUXESZ (sizeof(AUXENT))
                    288: 
                    289: #endif                                          /* COFF_H */
                    290: 
                    291: /* 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.