[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     ! 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