102 lines
3.6 KiB
C
102 lines
3.6 KiB
C
#ifndef _SYS_EXEC_AOUT_H_
|
|
#define _SYS_EXEC_AOUT_H_
|
|
|
|
/*
|
|
* Header prepended to each a.out file.
|
|
*/
|
|
struct exec {
|
|
unsigned a_midmag; /* magic number */
|
|
unsigned a_text; /* size of text segment */
|
|
unsigned a_data; /* size of initialized data */
|
|
unsigned a_bss; /* size of uninitialized data */
|
|
unsigned a_reltext; /* size of text relocation info */
|
|
unsigned a_reldata; /* size of data relocation info */
|
|
unsigned a_syms; /* size of symbol table */
|
|
unsigned a_entry; /* entry point */
|
|
};
|
|
|
|
#define a_magic a_midmag & 0xffff
|
|
|
|
/* a_magic (a_midmag & 0x0000ffff) */
|
|
#define RMAGIC 0406 /* relocatable object file */
|
|
#define OMAGIC 0407 /* old impure format */
|
|
#define NMAGIC 0410 /* read-only text */
|
|
|
|
/*
|
|
* a_mid ((a_midmag & 0x03ff0000) >> 16)
|
|
*/
|
|
#define MID_ZERO 0 /* unknown - implementation dependent */
|
|
#define MID_SUN010 1 /* sun 68010/68020 binary */
|
|
#define MID_SUN020 2 /* sun 68020-only binary */
|
|
#define MID_PC386 100 /* 386 PC binary. (so quoth BFD) */
|
|
#define MID_HP200 200 /* hp200 (68010) BSD binary */
|
|
#define MID_I386 134 /* i386 BSD binary */
|
|
#define MID_M68K 135 /* m68k BSD binary with 8K page sizes */
|
|
#define MID_M68K4K 136 /* m68k BSD binary with 4K page sizes */
|
|
#define MID_NS32532 137 /* ns32532 */
|
|
#define MID_SPARC 138 /* sparc */
|
|
#define MID_PMAX 139 /* pmax */
|
|
#define MID_VAX1K 140 /* vax 1K page size binaries */
|
|
#define MID_ALPHA 141 /* Alpha BSD binary */
|
|
#define MID_MIPS 142 /* big-endian MIPS */
|
|
#define MID_ARM6 143 /* ARM6 */
|
|
#define MID_SH3 145 /* SH3 */
|
|
#define MID_POWERPC 149 /* big-endian PowerPC */
|
|
#define MID_VAX 150 /* vax */
|
|
#define MID_SPARC64 151 /* LP64 sparc */
|
|
#define MID_HP300 300 /* hp300 (68020+68881) BSD binary */
|
|
#define MID_HPUX 0x20C /* hp200/300 HP-UX binary */
|
|
#define MID_HPUX800 0x20B /* hp800 HP-UX binary */
|
|
|
|
/*
|
|
* a_flags ((a_midmag & 0xfc000000 ) << 26)
|
|
*/
|
|
#define EX_PIC 0x10
|
|
#define EX_DYNAMIC 0x20
|
|
#define EX_DPMASK 0x30
|
|
/*
|
|
* Interpretation of the (a_flags & EX_DPMASK) bits:
|
|
*
|
|
* 00 traditional executable or object file
|
|
* 01 object file contains PIC code (set by `as -k')
|
|
* 10 dynamic executable
|
|
* 11 position independent executable image
|
|
* (eg. a shared library)
|
|
*/
|
|
|
|
/*
|
|
* The a.out structure's a_midmag field is a network-byteorder encoding
|
|
* of this int
|
|
* FFFFFFmmmmmmmmmmMMMMMMMMMMMMMMMM
|
|
* Where `F' is 6 bits of flag like EX_DYNAMIC,
|
|
* `m' is 10 bits of machine-id like MID_I386, and
|
|
* `M' is 16 bits worth of magic number, ie. ZMAGIC.
|
|
* The macros below will set/get the needed fields.
|
|
*/
|
|
#define N_GETMAGIC(ex) (((ex).a_midmag)&0x0000ffff)
|
|
#define N_GETMID(ex) ((((ex).a_midmag)&0x03ff0000) >> 16)
|
|
#define N_GETFLAG(ex) ((((ex).a_midmag)&0xfc000000 ) << 26)
|
|
|
|
/* Valid magic number check. */
|
|
#define N_BADMAG(x) (N_GETMAGIC(x) != RMAGIC && \
|
|
N_GETMAGIC(x) != OMAGIC && \
|
|
N_GETMAGIC(x) != NMAGIC)
|
|
|
|
/* Text segment offset. */
|
|
#define N_TXTOFF(x) sizeof(struct exec)
|
|
|
|
/* Data segment offset. */
|
|
#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text)
|
|
|
|
/* Text relocation table offset. */
|
|
#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data)
|
|
|
|
/* Data relocation table offset. */
|
|
#define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_reltext)
|
|
|
|
/* Symbol table offset. */
|
|
#define N_SYMOFF(x) (N_GETMAGIC(x) == RMAGIC ? \
|
|
N_DRELOFF(x) + (x).a_reldata : \
|
|
N_DATOFF(x) + (x).a_data)
|
|
#endif
|