[BACK]Return to ibcs2_exec.h CVS log [TXT][DIR] Up to [local] / sys / compat / ibcs2

Annotation of sys/compat/ibcs2/ibcs2_exec.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: ibcs2_exec.h,v 1.3 2002/03/14 01:26:50 millert Exp $  */
                      2: /*     $NetBSD: ibcs2_exec.h,v 1.4 1995/03/14 15:12:24 scottb Exp $    */
                      3:
                      4: /*
                      5:  * Copyright (c) 1994, 1995 Scott Bartram
                      6:  * All rights reserved.
                      7:  *
                      8:  * adapted from sys/sys/exec_ecoff.h
                      9:  * based on Intel iBCS2
                     10:  *
                     11:  * Redistribution and use in source and binary forms, with or without
                     12:  * modification, are permitted provided that the following conditions
                     13:  * are met:
                     14:  * 1. Redistributions of source code must retain the above copyright
                     15:  *    notice, this list of conditions and the following disclaimer.
                     16:  * 2. Redistributions in binary form must reproduce the above copyright
                     17:  *    notice, this list of conditions and the following disclaimer in the
                     18:  *    documentation and/or other materials provided with the distribution.
                     19:  * 3. The name of the author may not be used to endorse or promote products
                     20:  *    derived from this software without specific prior written permission
                     21:  *
                     22:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     23:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     24:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     25:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     26:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     27:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     28:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     29:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     30:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     31:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     32:  */
                     33:
                     34: #ifndef        _IBCS2_EXEC_H_
                     35: #define        _IBCS2_EXEC_H_
                     36:
                     37: /*
                     38:  * COFF file header
                     39:  */
                     40:
                     41: struct coff_filehdr {
                     42:     u_short    f_magic;        /* magic number */
                     43:     u_short    f_nscns;        /* # of sections */
                     44:     long       f_timdat;       /* timestamp */
                     45:     long       f_symptr;       /* file offset of symbol table */
                     46:     long       f_nsyms;        /* # of symbol table entries */
                     47:     u_short    f_opthdr;       /* size of optional header */
                     48:     u_short    f_flags;        /* flags */
                     49: };
                     50:
                     51: /* f_magic flags */
                     52: #define COFF_MAGIC_I386        0x14c
                     53:
                     54: /* f_flags */
                     55: #define COFF_F_RELFLG  0x1
                     56: #define COFF_F_EXEC    0x2
                     57: #define COFF_F_LNNO    0x4
                     58: #define COFF_F_LSYMS   0x8
                     59: #define COFF_F_SWABD   0x40
                     60: #define COFF_F_AR16WR  0x80
                     61: #define COFF_F_AR32WR  0x100
                     62:
                     63: /*
                     64:  * COFF system header
                     65:  */
                     66:
                     67: struct coff_aouthdr {
                     68:     short      a_magic;
                     69:     short      a_vstamp;
                     70:     long       a_tsize;
                     71:     long       a_dsize;
                     72:     long       a_bsize;
                     73:     long       a_entry;
                     74:     long       a_tstart;
                     75:     long       a_dstart;
                     76: };
                     77:
                     78: /* magic */
                     79: #define COFF_OMAGIC    0407    /* text not write-protected; data seg
                     80:                                   is contiguous with text */
                     81: #define COFF_NMAGIC    0410    /* text is write-protected; data starts
                     82:                                   at next seg following text */
                     83: #define COFF_ZMAGIC    0413    /* text and data segs are aligned for
                     84:                                   direct paging */
                     85: #define COFF_SMAGIC    0443    /* shared lib */
                     86:
                     87: /*
                     88:  * COFF section header
                     89:  */
                     90:
                     91: struct coff_scnhdr {
                     92:     char       s_name[8];
                     93:     long       s_paddr;
                     94:     long       s_vaddr;
                     95:     long       s_size;
                     96:     long       s_scnptr;
                     97:     long       s_relptr;
                     98:     long       s_lnnoptr;
                     99:     u_short    s_nreloc;
                    100:     u_short    s_nlnno;
                    101:     long       s_flags;
                    102: };
                    103:
                    104: /* s_flags */
                    105: #define COFF_STYP_REG          0x00
                    106: #define COFF_STYP_DSECT                0x01
                    107: #define COFF_STYP_NOLOAD       0x02
                    108: #define COFF_STYP_GROUP                0x04
                    109: #define COFF_STYP_PAD          0x08
                    110: #define COFF_STYP_COPY         0x10
                    111: #define COFF_STYP_TEXT         0x20
                    112: #define COFF_STYP_DATA         0x40
                    113: #define COFF_STYP_BSS          0x80
                    114: #define COFF_STYP_INFO         0x200
                    115: #define COFF_STYP_OVER         0x400
                    116: #define COFF_STYP_SHLIB                0x800
                    117:
                    118: /*
                    119:  * COFF shared library header
                    120:  */
                    121:
                    122: struct coff_slhdr {
                    123:        long    entry_len;      /* in words */
                    124:        long    path_index;     /* in words */
                    125:        char    sl_name[1];
                    126: };
                    127:
                    128: #define COFF_ROUND(val, by)     (((val) + by - 1) & ~(by - 1))
                    129:
                    130: #define COFF_ALIGN(a) ((a) & ~(COFF_LDPGSZ - 1))
                    131:
                    132: #define COFF_HDR_SIZE \
                    133:        (sizeof(struct coff_filehdr) + sizeof(struct coff_aouthdr))
                    134:
                    135: #define COFF_BLOCK_ALIGN(ap, value) \
                    136:         (ap->a_magic == COFF_ZMAGIC ? COFF_ROUND(value, COFF_LDPGSZ) : \
                    137:          value)
                    138:
                    139: #define COFF_TXTOFF(fp, ap) \
                    140:         (ap->a_magic == COFF_ZMAGIC ? 0 : \
                    141:          COFF_ROUND(COFF_HDR_SIZE + fp->f_nscns * \
                    142:                    sizeof(struct coff_scnhdr), COFF_SEGMENT_ALIGNMENT(ap)))
                    143:
                    144: #define COFF_DATOFF(fp, ap) \
                    145:         (COFF_BLOCK_ALIGN(ap, COFF_TXTOFF(fp, ap) + ap->a_tsize))
                    146:
                    147: #define COFF_SEGMENT_ALIGN(ap, value) \
                    148:         (COFF_ROUND(value, (ap->a_magic == COFF_ZMAGIC ? COFF_LDPGSZ : \
                    149:          COFF_SEGMENT_ALIGNMENT(ap))))
                    150:
                    151: #define COFF_LDPGSZ 4096
                    152:
                    153: #define COFF_SEGMENT_ALIGNMENT(ap) 4
                    154:
                    155: #define COFF_BADMAG(ex) (ex->f_magic != COFF_MAGIC_I386)
                    156:
                    157: #define IBCS2_HIGH_SYSCALL(n)          (((n) & 0x7f) == 0x28)
                    158: #define IBCS2_CVT_HIGH_SYSCALL(n)      (((n) >> 8) + 128)
                    159:
                    160: struct exec_package;
                    161: int     exec_ibcs2_coff_makecmds(struct proc *, struct exec_package *);
                    162:
                    163: /*
                    164:  * x.out (XENIX)
                    165:  */
                    166:
                    167: struct xexec {
                    168:        u_short x_magic;        /* magic number */
                    169:        u_short x_ext;          /* size of extended header */
                    170:        long    x_text;         /* ignored */
                    171:        long    x_data;         /* ignored */
                    172:        long    x_bss;          /* ignored */
                    173:        long    x_syms;         /* ignored */
                    174:        long    x_reloc;        /* ignored */
                    175:        long    x_entry;        /* executable entry point */
                    176:        char    x_cpu;          /* processor type */
                    177:        char    x_relsym;       /* ignored */
                    178:        u_short x_renv;         /* flags */
                    179: };
                    180:
                    181: /* x_magic flags */
                    182: #define XOUT_MAGIC     0x0206
                    183:
                    184: /* x_cpu flags */
                    185: #define XC_386         0x004a  /* 386, word-swapped */
                    186:
                    187: /* x_renv flags */
                    188: #define XE_V5          0xc000
                    189: #define XE_SEG         0x0800
                    190: #define XE_ABS         0x0400
                    191: #define XE_ITER                0x0200
                    192: #define XE_VMOD                0x0100
                    193: #define XE_FPH         0x0080
                    194: #define XE_LTEXT       0x0040
                    195: #define XE_LDATA       0x0020
                    196: #define XE_OVER                0x0010
                    197: #define XE_FS          0x0008
                    198: #define XE_PURE                0x0004
                    199: #define XE_SEP         0x0002
                    200: #define XE_EXEC                0x0001
                    201:
                    202: /*
                    203:  * x.out extended header
                    204:  */
                    205:
                    206: struct xext {
                    207:        long    xe_trsize;      /* ignored */
                    208:        long    xe_drsize;      /* ignored */
                    209:        long    xe_tbase;       /* ignored */
                    210:        long    xe_dbase;       /* ignored */
                    211:        long    xe_stksize;     /* stack size if XE_FS set in x_renv */
                    212:        long    xe_segpos;      /* offset of segment table */
                    213:        long    xe_segsize;     /* segment table size */
                    214:        long    xe_mdtpos;      /* ignored */
                    215:        long    xe_mdtsize;     /* ignored */
                    216:        char    xe_mdttype;     /* ignored */
                    217:        char    xe_pagesize;    /* ignored */
                    218:        char    xe_ostype;      /* ignored */
                    219:        char    xe_osvers;      /* ignored */
                    220:        u_short xe_eseg;        /* ignored */
                    221:        u_short xe_sres;        /* ignored */
                    222: };
                    223:
                    224: /*
                    225:  * x.out segment table
                    226:  */
                    227:
                    228: struct xseg {
                    229:        u_short xs_type;        /* segment type */
                    230:        u_short xs_attr;        /* attribute flags */
                    231:        u_short xs_seg;         /* segment selector number */
                    232:        char    xs_align;       /* ignored */
                    233:        char    xs_cres;        /* ignored */
                    234:        long    xs_filpos;      /* offset of this segment */
                    235:        long    xs_psize;       /* physical segment size */
                    236:        long    xs_vsize;       /* virtual segment size */
                    237:        long    xs_rbase;       /* relocation base address */
                    238:        u_short xs_noff;        /* ignored */
                    239:        u_short xs_sres;        /* ignored */
                    240:        long    xs_lres;        /* ignored */
                    241: };
                    242:
                    243: /* xs_type flags */
                    244: #define        XS_TNULL        0       /* unused */
                    245: #define        XS_TTEXT        1       /* text (read-only) */
                    246: #define        XS_TDATA        2       /* data (read-write) */
                    247: #define        XS_TSYMS        3       /* symbol table (noload) */
                    248: #define        XS_TREL         4       /* relocation segment (noload) */
                    249: #define        XS_TSESTR       5       /* string table (noload) */
                    250: #define        XS_TGRPS        6       /* group segment (noload) */
                    251:
                    252: #define        XS_TIDATA       64
                    253: #define        XS_TTSS         65
                    254: #define        XS_TLFIX        66
                    255: #define        XS_TDNAME       67
                    256: #define        XS_TDTEXT       68
                    257: #define        XS_TDFIX        69
                    258: #define        XS_TOVTAB       70
                    259: #define        XS_T71          71
                    260: #define        XS_TSYSTR       72
                    261:
                    262: /* xs_attr flags */
                    263: #define XS_AMEM                0x8000  /* memory image */
                    264: #define XS_AITER       0x0001  /* iteration records */
                    265: #define XS_AHUGE       0x0002  /* unused */
                    266: #define XS_ABSS                0x0004  /* uninitialized data */
                    267: #define XS_APURE       0x0008  /* read-only (sharable) segment */
                    268: #define XS_AEDOWN      0x0010  /* expand down memory segment */
                    269: #define XS_APRIV       0x0020  /* unused */
                    270: #define        XS_A32BIT       0x0040  /* 32-bit text/data */
                    271:
                    272: /*
                    273:  * x.out iteration record
                    274:  */
                    275:
                    276: struct xiter {
                    277:        long    xi_size;        /* text/data size */
                    278:        long    xi_rep;         /* number of replications */
                    279:        long    xi_offset;      /* offset within segment to replicated data */
                    280: };
                    281:
                    282: #define XOUT_HDR_SIZE          (sizeof(struct xexec) + sizeof(struct xext))
                    283:
                    284: int     exec_ibcs2_xout_makecmds(struct proc *, struct exec_package *);
                    285:
                    286: #endif /* !_IBCS2_EXEC_H_ */

CVSweb