Files
retrobsd/sys/include/exec_aout.h
Serge Vakulenko 3a38f291a7 Merged kernel support for ELF executable format from karolina.lindqvist.
Now kernel can directly run executables generated by gcc.
2014-04-23 21:43:09 -07:00

103 lines
3.3 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