[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

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