[BACK]Return to exec_aout.h CVS log [TXT][DIR] Up to [local] / sys / sys

Annotation of sys/sys/exec_aout.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: exec_aout.h,v 1.22 2006/10/06 20:58:17 miod Exp $     */
        !             2: /*     $NetBSD: exec_aout.h,v 1.15 1996/05/18 17:20:54 christos Exp $  */
        !             3:
        !             4: /*
        !             5:  * Copyright (c) 1993, 1994 Christopher G. Demetriou
        !             6:  * All rights reserved.
        !             7:  *
        !             8:  * Redistribution and use in source and binary forms, with or without
        !             9:  * modification, are permitted provided that the following conditions
        !            10:  * are met:
        !            11:  * 1. Redistributions of source code must retain the above copyright
        !            12:  *    notice, this list of conditions and the following disclaimer.
        !            13:  * 2. Redistributions in binary form must reproduce the above copyright
        !            14:  *    notice, this list of conditions and the following disclaimer in the
        !            15:  *    documentation and/or other materials provided with the distribution.
        !            16:  * 3. All advertising materials mentioning features or use of this software
        !            17:  *    must display the following acknowledgement:
        !            18:  *      This product includes software developed by Christopher G. Demetriou.
        !            19:  * 4. 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 N_PAGSIZ
        !            35: #define        N_PAGSIZ(ex)    (__LDPGSZ)
        !            36: #endif
        !            37:
        !            38: /*
        !            39:  * Header prepended to each a.out file.
        !            40:  * only manipulate the a_midmag field via the
        !            41:  * N_SETMAGIC/N_GET{MAGIC,MID,FLAG} macros below.
        !            42:  */
        !            43: struct exec {
        !            44:        u_int32_t       a_midmag;       /* htonl(flags<<26|mid<<16|magic) */
        !            45:        u_int32_t       a_text;         /* text segment size */
        !            46:        u_int32_t       a_data;         /* initialized data size */
        !            47:        u_int32_t       a_bss;          /* uninitialized data size */
        !            48:        u_int32_t       a_syms;         /* symbol table size */
        !            49:        u_int32_t       a_entry;        /* entry point */
        !            50:        u_int32_t       a_trsize;       /* text relocation size */
        !            51:        u_int32_t       a_drsize;       /* data relocation size */
        !            52: };
        !            53:
        !            54: /* a_magic */
        !            55: #define        OMAGIC          0407    /* old impure format */
        !            56: #define        NMAGIC          0410    /* read-only text */
        !            57: #define        ZMAGIC          0413    /* demand load format */
        !            58: #define        QMAGIC          0314    /* "compact" demand load format; deprecated */
        !            59:
        !            60: /*
        !            61:  * a_mid - keep sorted in numerical order for sanity's sake
        !            62:  * ensure that: 0 < mid < 0x3ff
        !            63:  */
        !            64: #define        MID_ZERO        0       /* unknown - implementation dependent */
        !            65: #define        MID_SUN010      1       /* sun 68010/68020 binary */
        !            66: #define        MID_SUN020      2       /* sun 68020-only binary */
        !            67: #define        MID_PC386       100     /* 386 PC binary. (so quoth BFD) */
        !            68: #define        MID_ROMPAOS     104     /* old IBM RT */
        !            69: #define        MID_I386        134     /* i386 BSD binary */
        !            70: #define        MID_M68K        135     /* m68k BSD binary with 8K page sizes */
        !            71: #define        MID_M68K4K      136     /* DO NOT USE: m68k BSD binary with 4K page sizes */
        !            72: #define        MID_NS32532     137     /* ns32532 */
        !            73: #define        MID_SPARC       138     /* sparc */
        !            74: #define        MID_PMAX        139     /* pmax */
        !            75: #define        MID_VAX1K       140     /* vax 1k page size */
        !            76: #define        MID_ALPHA       141     /* Alpha BSD binary */
        !            77: #define        MID_MIPS        142     /* big-endian MIPS */
        !            78: #define        MID_ARM6        143     /* ARM6 */
        !            79: #define        MID_SH3         145     /* SH3 */
        !            80: #define        MID_POWERPC     149     /* big-endian PowerPC */
        !            81: #define        MID_VAX         150     /* vax */
        !            82: #define        MID_SPARC64     151     /* LP64 sparc */
        !            83: #define MID_MIPS2      152     /* MIPS2 */
        !            84: #define        MID_M88K        153     /* m88k BSD binary */
        !            85: #define        MID_HPPA        154     /* hppa */
        !            86: #define        MID_AMD64       157     /* AMD64 */
        !            87: #define        MID_MIPS64      158     /* big-endian MIPS64 */
        !            88: #define        MID_HP200       200     /* hp200 (68010) BSD binary */
        !            89: #define        MID_HP300       300     /* hp300 (68020+68881) BSD binary */
        !            90: #define        MID_HPUX        0x20C   /* hp200/300 HP-UX binary */
        !            91: #define        MID_HPUX800     0x20B   /* hp800 HP-UX binary pa1.0 */
        !            92: #define        MID_HPPA11      0x210   /* hp700 HP-UX binary pa1.1 */
        !            93: #define        MID_HPPA20      0x214   /* hp700 HP-UX binary pa2.0 */
        !            94:
        !            95: /*
        !            96:  * a_flags
        !            97:  */
        !            98: #define EX_DYNAMIC     0x20
        !            99: #define EX_PIC         0x10
        !           100: #define EX_DPMASK      0x30
        !           101: /*
        !           102:  * Interpretation of the (a_flags & EX_DPMASK) bits:
        !           103:  *
        !           104:  *     00              traditional executable or object file
        !           105:  *     01              object file contains PIC code (set by `as -k')
        !           106:  *     10              dynamic executable
        !           107:  *     11              position independent executable image
        !           108:  *                     (eg. a shared library)
        !           109:  *
        !           110:  */
        !           111:
        !           112: /*
        !           113:  * The a.out structure's a_midmag field is a network-byteorder encoding
        !           114:  * of this int
        !           115:  *     FFFFFFmmmmmmmmmmMMMMMMMMMMMMMMMM
        !           116:  * Where `F' is 6 bits of flag like EX_DYNAMIC,
        !           117:  *       `m' is 10 bits of machine-id like MID_I386, and
        !           118:  *       `M' is 16 bits worth of magic number, ie. ZMAGIC.
        !           119:  * The macros below will set/get the needed fields.
        !           120:  */
        !           121: #define        N_GETMAGIC(ex) \
        !           122:     ( (((ex).a_midmag)&0xffff0000) ? (ntohl(((ex).a_midmag))&0xffff) : ((ex).a_midmag))
        !           123: #define        N_GETMAGIC2(ex) \
        !           124:     ( (((ex).a_midmag)&0xffff0000) ? (ntohl(((ex).a_midmag))&0xffff) : \
        !           125:     (((ex).a_midmag) | 0x10000) )
        !           126: #define        N_GETMID(ex) \
        !           127:     ( (((ex).a_midmag)&0xffff0000) ? ((ntohl(((ex).a_midmag))>>16)&0x03ff) : MID_ZERO )
        !           128: #define        N_GETFLAG(ex) \
        !           129:     ( (((ex).a_midmag)&0xffff0000) ? ((ntohl(((ex).a_midmag))>>26)&0x3f) : 0 )
        !           130: #define        N_SETMAGIC(ex,mag,mid,flag) \
        !           131:     ( (ex).a_midmag = htonl( (((flag)&0x3f)<<26) | (((mid)&0x03ff)<<16) | \
        !           132:     (((mag)&0xffff)) ) )
        !           133:
        !           134: #define        N_ALIGN(ex,x) \
        !           135:        (N_GETMAGIC(ex) == ZMAGIC || N_GETMAGIC(ex) == QMAGIC ? \
        !           136:        ((x) + __LDPGSZ - 1) & ~(__LDPGSZ - 1) : (x))
        !           137:
        !           138: /* Valid magic number check. */
        !           139: #define        N_BADMAG(ex) \
        !           140:        (N_GETMAGIC(ex) != NMAGIC && N_GETMAGIC(ex) != OMAGIC && \
        !           141:        N_GETMAGIC(ex) != ZMAGIC && N_GETMAGIC(ex) != QMAGIC)
        !           142:
        !           143: /* Address of the bottom of the text segment. */
        !           144: #define        N_TXTADDR(ex)   (N_GETMAGIC2(ex) == (ZMAGIC|0x10000) ? 0 : __LDPGSZ)
        !           145:
        !           146: /* Address of the bottom of the data segment. */
        !           147: #define        N_DATADDR(ex) \
        !           148:        (N_GETMAGIC(ex) == OMAGIC ? N_TXTADDR(ex) + (ex).a_text : \
        !           149:        (N_TXTADDR(ex) + (ex).a_text + __LDPGSZ - 1) & ~(__LDPGSZ - 1))
        !           150:
        !           151: /* Address of the bottom of the bss segment. */
        !           152: #define        N_BSSADDR(ex) \
        !           153:        (N_DATADDR(ex) + (ex).a_data)
        !           154:
        !           155: /* Text segment offset. */
        !           156: #define        N_TXTOFF(ex) \
        !           157:        ( N_GETMAGIC2(ex)==ZMAGIC || N_GETMAGIC2(ex)==(QMAGIC|0x10000) ? \
        !           158:        0 : (N_GETMAGIC2(ex)==(ZMAGIC|0x10000) ? __LDPGSZ : \
        !           159:        sizeof(struct exec)) )
        !           160:
        !           161: /* Data segment offset. */
        !           162: #define        N_DATOFF(ex) \
        !           163:        N_ALIGN(ex, N_TXTOFF(ex) + (ex).a_text)
        !           164:
        !           165: /* Text relocation table offset. */
        !           166: #define        N_TRELOFF(ex) \
        !           167:        (N_DATOFF(ex) + (ex).a_data)
        !           168:
        !           169: /* Data relocation table offset. */
        !           170: #define        N_DRELOFF(ex) \
        !           171:        (N_TRELOFF(ex) + (ex).a_trsize)
        !           172:
        !           173: /* Symbol table offset. */
        !           174: #define        N_SYMOFF(ex) \
        !           175:        (N_DRELOFF(ex) + (ex).a_drsize)
        !           176:
        !           177: /* String table offset. */
        !           178: #define        N_STROFF(ex) \
        !           179:        (N_SYMOFF(ex) + (ex).a_syms)
        !           180:
        !           181:
        !           182: #ifdef _KERNEL
        !           183:
        !           184: /* the "a.out" format's entry in the exec switch */
        !           185: int    exec_aout_makecmds(struct proc *, struct exec_package *);
        !           186:
        !           187: /* functions which prepare various a.out executable types */
        !           188: /*
        !           189:  * MI portion
        !           190:  */
        !           191: int    exec_aout_prep_zmagic(struct proc *, struct exec_package *);
        !           192: int    exec_aout_prep_nmagic(struct proc *, struct exec_package *);
        !           193: int    exec_aout_prep_omagic(struct proc *, struct exec_package *);
        !           194:
        !           195: /* For compatibility modules */
        !           196: int    exec_aout_prep_oldzmagic(struct proc *, struct exec_package *);
        !           197: int    exec_aout_prep_oldnmagic(struct proc *, struct exec_package *);
        !           198: int    exec_aout_prep_oldomagic(struct proc *, struct exec_package *);
        !           199:
        !           200: /*
        !           201:  * MD portion
        !           202:  */
        !           203: #if !defined(cpu_exec_aout_makecmds)
        !           204: int cpu_exec_aout_makecmds(struct proc *, struct exec_package *);
        !           205: #endif
        !           206:
        !           207: #endif /* _KERNEL */

CVSweb