80c77071c6700660c39046da32a0d7953620f608Mark de Reeper/* $XFree86: xc/programs/Xserver/hw/xfree86/loader/aout.h,v 1.7 2002/05/31 18:46:00 dawes Exp $ */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * Borrowed from NetBSD's exec_aout.h
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * Copyright (c) 1993, 1994 Christopher G. Demetriou
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * All rights reserved.
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * Redistribution and use in source and binary forms, with or without
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * modification, are permitted provided that the following conditions
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * 1. Redistributions of source code must retain the above copyright
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * notice, this list of conditions and the following disclaimer.
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * 2. Redistributions in binary form must reproduce the above copyright
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * notice, this list of conditions and the following disclaimer in the
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * documentation and/or other materials provided with the distribution.
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * 3. All advertising materials mentioning features or use of this software
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * must display the following acknowledgement:
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * This product includes software developed by Christopher G. Demetriou.
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * 4. The name of the author may not be used to endorse or promote products
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * derived from this software without specific prior written permission
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper/* Get prototype for ntohl, per SuSv3. */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper/* OS/2 EMX has ntohl in this file */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * a.out header
80c77071c6700660c39046da32a0d7953620f608Mark de Reepertypedef struct AOUT_exec {
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper unsigned long a_midmag; /* htonl(flags<<26 | mid<<16 | magic) */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper unsigned long a_text; /* text segment size */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper unsigned long a_data; /* initialized data size */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper unsigned long a_bss; /* uninitialized data size */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper unsigned long a_syms; /* symbol table size */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper unsigned long a_trsize; /* text relocation size */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper unsigned long a_drsize; /* data relocation size */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper#define QMAGIC 0314 /* "compact" demand load format; deprecated */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * a_mid - keep sorted in numerical order for sanity's sake
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * ensure that: 0 < mid < 0x3ff
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper#define MID_ZERO 0 /* unknown - implementation dependent */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper#define MID_SUN010 1 /* sun 68010/68020 binary */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper#define MID_SUN020 2 /* sun 68020-only binary */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper#define MID_PC386 100 /* 386 PC binary. (so quoth BFD) */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper#define MID_HP200 200 /* hp200 (68010) BSD binary */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper#define MID_M68K 135 /* m68k BSD binary with 8K page sizes */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper#define MID_M68K4K 136 /* m68k BSD binary with 4K page sizes */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper#define MID_HP300 300 /* hp300 (68020+68881) BSD binary */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper#define MID_HPUX 0x20C /* hp200/300 HP-UX binary */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper#define MID_HPUX800 0x20B /* hp800 HP-UX binary */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * Interpretation of the (a_flags & EX_DPMASK) bits:
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * 00 traditional executable or object file
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * 01 object file contains PIC code (set by `as -k')
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * 10 dynamic executable
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * 11 position independent executable image
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * (eg. a shared library)
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * The a.out structure's a_midmag field is a network-byteorder encoding
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * of this int
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * FFFFFFmmmmmmmmmmMMMMMMMMMMMMMMMM
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * Where `F' is 6 bits of flag like EX_DYNAMIC,
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * `m' is 10 bits of machine-id like MID_I386, and
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * `M' is 16 bits worth of magic number, ie. ZMAGIC.
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper * The macros below will set/get the needed fields.
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper ( (((ex)->a_midmag)&0xffff0000U) ? (ntohl(((ex)->a_midmag))&0xffffU) : ((ex)->a_midmag))
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper ( (((ex)->a_midmag)&0xffff0000U) ? (ntohl(((ex)->a_midmag))&0xffffU) : \
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper ( (((ex)->a_midmag)&0xffff0000U) ? ((ntohl(((ex)->a_midmag))>>16)&0x03ffU) : MID_ZERO )
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper ( (((ex)->a_midmag)&0xffff0000U) ? ((ntohl(((ex)->a_midmag))>>26)&0x3fU) : 0 )
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper ( (ex)->a_midmag = htonl( (((flag)&0x3fU)<<26) | (((mid)&0x03ffU)<<16) | \
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper (AOUT_GETMAGIC(ex) == ZMAGIC || AOUT_GETMAGIC(ex) == QMAGIC ? \
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper ((x) + __LDPGSZ - 1) & ~(__LDPGSZ - 1) : (x))
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper/* Valid magic number check. */
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper (AOUT_GETMAGIC(ex) != NMAGIC && AOUT_GETMAGIC(ex) != OMAGIC && \
80c77071c6700660c39046da32a0d7953620f608Mark de Reeper AOUT_GETMAGIC(ex) != ZMAGIC && AOUT_GETMAGIC(ex) != QMAGIC)
sizeof(struct AOUT_exec)) )
struct relocation_info_i386 {
* nlist.h can initialize nlist structures statically.
typedef struct AOUT_nlist {
} n_un;
} AOUT_nlist;