Blame sysdeps/generic/a.out.h

Packit Service 82fcde
#ifndef __A_OUT_GNU_H__
Packit Service 82fcde
#define __A_OUT_GNU_H__
Packit Service 82fcde
Packit Service 82fcde
#ifdef	__cplusplus
Packit Service 82fcde
extern "C" {
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#define __GNU_EXEC_MACROS__
Packit Service 82fcde
Packit Service 82fcde
#ifndef __STRUCT_EXEC_OVERRIDE__
Packit Service 82fcde
Packit Service 82fcde
struct exec
Packit Service 82fcde
{
Packit Service 82fcde
  unsigned long a_info;		/* Use macros N_MAGIC, etc for access */
Packit Service 82fcde
  unsigned a_text;		/* size of text, in bytes */
Packit Service 82fcde
  unsigned a_data;		/* size of data, in bytes */
Packit Service 82fcde
  unsigned a_bss;		/* size of uninitialized data area, in bytes */
Packit Service 82fcde
  unsigned a_syms;		/* length of symbol table data, in bytes */
Packit Service 82fcde
  unsigned a_entry;		/* start address */
Packit Service 82fcde
  unsigned a_trsize;		/* size of reloc info for text, in bytes */
Packit Service 82fcde
  unsigned a_drsize;		/* size of reloc info for data, in bytes */
Packit Service 82fcde
Packit Service 82fcde
#if defined (sequent) && defined (i386)
Packit Service 82fcde
  struct gdtbl
Packit Service 82fcde
    {				/* Global Descriptor Table */
Packit Service 82fcde
      unsigned g_code[2];
Packit Service 82fcde
      unsigned g_data[2];
Packit Service 82fcde
      unsigned g_desc[2];
Packit Service 82fcde
    } a_gdtbl;
Packit Service 82fcde
   unsigned a_shdata;		/* size of initialized shared data */
Packit Service 82fcde
   unsigned a_shbss;		/* size of uninitialized shared data */
Packit Service 82fcde
   unsigned a_shdrsize;		/* size of shared data relocation */
Packit Service 82fcde
   unsigned a_bootstrap[11];	/* bootstrap for standalone */
Packit Service 82fcde
   unsigned a_reserved[3];	/* reserved for future use */
Packit Service 82fcde
   unsigned a_version;		/* object version */
Packit Service 82fcde
#endif /* Sequent Symmetry, Dynix 3.x */
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
#endif /* __STRUCT_EXEC_OVERRIDE__ */
Packit Service 82fcde
Packit Service 82fcde
/* these go in the N_MACHTYPE field */
Packit Service 82fcde
enum machine_type {
Packit Service 82fcde
#if defined (M_OLDSUN2)
Packit Service 82fcde
  M__OLDSUN2 = M_OLDSUN2,
Packit Service 82fcde
#else
Packit Service 82fcde
  M_OLDSUN2 = 0,
Packit Service 82fcde
#endif
Packit Service 82fcde
#if defined (M_68010)
Packit Service 82fcde
  M__68010 = M_68010,
Packit Service 82fcde
#else
Packit Service 82fcde
  M_68010 = 1,
Packit Service 82fcde
#endif
Packit Service 82fcde
#if defined (M_68020)
Packit Service 82fcde
  M__68020 = M_68020,
Packit Service 82fcde
#else
Packit Service 82fcde
  M_68020 = 2,
Packit Service 82fcde
#endif
Packit Service 82fcde
#if defined (M_SPARC)
Packit Service 82fcde
  M__SPARC = M_SPARC,
Packit Service 82fcde
#else
Packit Service 82fcde
  M_SPARC = 3,
Packit Service 82fcde
#endif
Packit Service 82fcde
  /* skip a bunch so we don't run into any of sun's numbers */
Packit Service 82fcde
  M_386 = 100
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
#if defined (sequent) && defined (i386)
Packit Service 82fcde
Packit Service 82fcde
/* Dynix 3 wants the magic number to be the whole first longword.  */
Packit Service 82fcde
Packit Service 82fcde
#define N_MAGIC(exec)		((exec).a_info)
Packit Service 82fcde
#define N_MACHTYPE(exec)	0
Packit Service 82fcde
#define N_FLAGS(exec)		0
Packit Service 82fcde
#define N_SET_INFO(exec, magic, type, flags) N_SET_MAGIC ((exec), (magic))
Packit Service 82fcde
#define N_SET_MAGIC(exec, magic)	((exec).a_info = (magic))
Packit Service 82fcde
#define N_SET_MACHTYPE(exec, machtype)	((void) 0)
Packit Service 82fcde
#define N_SET_FLAGS(exec, flags)	((void) 0)
Packit Service 82fcde
#define	OMAGIC		0x12eb	/* impure format - for .o's */
Packit Service 82fcde
#define	ZMAGIC		0x22eb	/* demand load format - zero at zero */
Packit Service 82fcde
#define NMAGIC		you lose /* syntax error -- no pure format */
Packit Service 82fcde
#define N_BADMAG(x)	(N_MAGIC(x) != OMAGIC && N_MAGIC(x) != ZMAGIC)
Packit Service 82fcde
#define N_ADDRADJ(x)	(N_MAGIC(x) == ZMAGIC ? SEGMENT_SIZE : 0)
Packit Service 82fcde
#define N_DATOFF(x)	(N_TXTOFF(x) + (x).a_text - N_ADDRADJ(x))
Packit Service 82fcde
#define N_TRELOFF(x)	(N_DATOFF(x) + (x).a_data + (x).a_shdata)
Packit Service 82fcde
#define N_SYMOFF(x)	(N_DRELOFF(x) + (x).a_drsize + (x).a_shdrsize)
Packit Service 82fcde
#define N_TXTADDR(x)	SEGMENT_SIZE
Packit Service 82fcde
#define N_COMM		0x0a	/** conflicts with N_INDR **/
Packit Service 82fcde
#define N_FN		0x0c
Packit Service 82fcde
/* Note that the Dynix binutils believe that N_SET[TDB] are
Packit Service 82fcde
   N_SH{DATA,BSS,COMM} -- be wary when mixing GNU & Dynix objects.  */
Packit Service 82fcde
#define PAGE_SIZE	4096
Packit Service 82fcde
#define SEGMENT_SIZE	PAGE_SIZE
Packit Service 82fcde
Packit Service 82fcde
#else /* !(sequent && i386) */
Packit Service 82fcde
Packit Service 82fcde
#if !defined (N_MAGIC)
Packit Service 82fcde
#define N_MAGIC(exec) ((exec).a_info & 0xffff)
Packit Service 82fcde
#endif
Packit Service 82fcde
#define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff))
Packit Service 82fcde
#define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff)
Packit Service 82fcde
#define N_SET_INFO(exec, magic, type, flags) \
Packit Service 82fcde
	((exec).a_info = ((magic) & 0xffff) \
Packit Service 82fcde
	 | (((int)(type) & 0xff) << 16) \
Packit Service 82fcde
	 | (((flags) & 0xff) << 24))
Packit Service 82fcde
#define N_SET_MAGIC(exec, magic) \
Packit Service 82fcde
	((exec).a_info = (((exec).a_info & 0xffff0000) | ((magic) & 0xffff)))
Packit Service 82fcde
Packit Service 82fcde
#define N_SET_MACHTYPE(exec, machtype) \
Packit Service 82fcde
	((exec).a_info = \
Packit Service 82fcde
	 ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16))
Packit Service 82fcde
Packit Service 82fcde
#define N_SET_FLAGS(exec, flags) \
Packit Service 82fcde
	((exec).a_info = \
Packit Service 82fcde
	 ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24))
Packit Service 82fcde
Packit Service 82fcde
#endif	/* sequent && i386 */
Packit Service 82fcde
Packit Service 82fcde
#ifndef OMAGIC
Packit Service 82fcde
/* Code indicating object file or impure executable.  */
Packit Service 82fcde
#define OMAGIC 0407
Packit Service 82fcde
/* Code indicating pure executable.  */
Packit Service 82fcde
#define NMAGIC 0410
Packit Service 82fcde
/* Code indicating demand-paged executable.  */
Packit Service 82fcde
#define ZMAGIC 0413
Packit Service 82fcde
#endif /* not OMAGIC */
Packit Service 82fcde
Packit Service 82fcde
#if !defined (N_BADMAG)
Packit Service 82fcde
#define N_BADMAG(x)					\
Packit Service 82fcde
 (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC		\
Packit Service 82fcde
  && N_MAGIC(x) != ZMAGIC)
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#define _N_BADMAG(x)					\
Packit Service 82fcde
 (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC		\
Packit Service 82fcde
  && N_MAGIC(x) != ZMAGIC)
Packit Service 82fcde
Packit Service 82fcde
#ifndef	sparc
Packit Service 82fcde
#define _N_HDROFF(x) (SEGMENT_SIZE - sizeof (struct exec))
Packit Service 82fcde
#else
Packit Service 82fcde
#define _N_HDROFF(x) (- sizeof (struct exec))
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#if !defined (N_TXTOFF)
Packit Service 82fcde
#define N_TXTOFF(x) \
Packit Service 82fcde
 (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) : sizeof (struct exec))
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#if !defined (N_DATOFF)
Packit Service 82fcde
#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text)
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#if !defined (N_TRELOFF)
Packit Service 82fcde
#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data)
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#if !defined (N_DRELOFF)
Packit Service 82fcde
#define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_trsize)
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#if !defined (N_SYMOFF)
Packit Service 82fcde
#define N_SYMOFF(x) (N_DRELOFF(x) + (x).a_drsize)
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#if !defined (N_STROFF)
Packit Service 82fcde
#define N_STROFF(x) (N_SYMOFF(x) + (x).a_syms)
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Address of text segment in memory after it is loaded.  */
Packit Service 82fcde
#if !defined (N_TXTADDR)
Packit Service 82fcde
#define N_TXTADDR(x) 0
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Address of data segment in memory after it is loaded.
Packit Service 82fcde
   Note that it is up to you to define SEGMENT_SIZE
Packit Service 82fcde
   on machines not listed here.  */
Packit Service 82fcde
#if	defined (hp300) || defined (mips)
Packit Service 82fcde
#define	PAGE_SIZE	4096
Packit Service 82fcde
#endif
Packit Service 82fcde
#if	defined (sparc) || defined (NeXT)
Packit Service 82fcde
#define	PAGE_SIZE	0x2000
Packit Service 82fcde
#endif
Packit Service 82fcde
#if	defined (sony) || (defined (sun) && defined (mc68000))
Packit Service 82fcde
#define	SEGMENT_SIZE	0x2000
Packit Service 82fcde
#endif	/* Sony or 68k Sun.  */
Packit Service 82fcde
#ifdef is68k
Packit Service 82fcde
#define SEGMENT_SIZE 0x20000
Packit Service 82fcde
#endif
Packit Service 82fcde
#if defined(m68k) && defined(PORTAR)
Packit Service 82fcde
#define PAGE_SIZE 0x400
Packit Service 82fcde
#endif
Packit Service 82fcde
#if defined(i386) && !defined(sequent)
Packit Service 82fcde
/* For COFF encapsulation.  */
Packit Service 82fcde
#define SEGMENT_SIZE 0x400000
Packit Service 82fcde
#endif
Packit Service 82fcde
#ifndef	SEGMENT_SIZE
Packit Service 82fcde
/* This used to be first in this paragraph and under:
Packit Service 82fcde
   if (defined(vax) || defined(hp300) || defined(pyr) || defined(sparc) \
Packit Service 82fcde
     || (defined(m68k) && defined(PORTAR)) \
Packit Service 82fcde
     || defined (NeXT) || defined (mips)) */
Packit Service 82fcde
#define SEGMENT_SIZE PAGE_SIZE
Packit Service 82fcde
#endif
Packit Service 82fcde
#ifndef	PAGE_SIZE
Packit Service 82fcde
/* This value is for i386-minix, but that has no predefine.
Packit Service 82fcde
   Making it default will only cause confusion on machines
Packit Service 82fcde
   which have no proper value defined.  */
Packit Service 82fcde
#define	PAGE_SIZE 16
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#define	PAGSIZ	PAGE_SIZE
Packit Service 82fcde
#define	SEGSIZ	SEGMENT_SIZE
Packit Service 82fcde
Packit Service 82fcde
#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1))
Packit Service 82fcde
Packit Service 82fcde
#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text)
Packit Service 82fcde
Packit Service 82fcde
#ifndef N_DATADDR
Packit Service 82fcde
#define N_DATADDR(x) \
Packit Service 82fcde
    (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x)) \
Packit Service 82fcde
     : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x))))
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Address of bss segment in memory after it is loaded.  */
Packit Service 82fcde
#if !defined (N_BSSADDR)
Packit Service 82fcde
#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data)
Packit Service 82fcde
#endif
Packit Service 82fcde

Packit Service 82fcde
#if !defined (N_NLIST_DECLARED)
Packit Service 82fcde
struct nlist {
Packit Service 82fcde
  union {
Packit Service 82fcde
    char *n_name;
Packit Service 82fcde
    struct nlist *n_next;
Packit Service 82fcde
    long n_strx;
Packit Service 82fcde
  } n_un;
Packit Service 82fcde
  unsigned char n_type;
Packit Service 82fcde
  char n_other;
Packit Service 82fcde
  short n_desc;
Packit Service 82fcde
  unsigned long n_value;
Packit Service 82fcde
};
Packit Service 82fcde
#endif /* no N_NLIST_DECLARED.  */
Packit Service 82fcde
Packit Service 82fcde
#if !defined (N_UNDF)
Packit Service 82fcde
#define N_UNDF 0
Packit Service 82fcde
#endif
Packit Service 82fcde
#if !defined (N_ABS)
Packit Service 82fcde
#define N_ABS 2
Packit Service 82fcde
#endif
Packit Service 82fcde
#if !defined (N_TEXT)
Packit Service 82fcde
#define N_TEXT 4
Packit Service 82fcde
#endif
Packit Service 82fcde
#if !defined (N_DATA)
Packit Service 82fcde
#define N_DATA 6
Packit Service 82fcde
#endif
Packit Service 82fcde
#if !defined (N_BSS)
Packit Service 82fcde
#define N_BSS 8
Packit Service 82fcde
#endif
Packit Service 82fcde
#if !defined (N_COMM)
Packit Service 82fcde
#define N_COMM 18
Packit Service 82fcde
#endif
Packit Service 82fcde
#if !defined (N_FN)
Packit Service 82fcde
#define N_FN 15
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#if !defined (N_EXT)
Packit Service 82fcde
#define N_EXT 1
Packit Service 82fcde
#endif
Packit Service 82fcde
#if !defined (N_TYPE)
Packit Service 82fcde
#define N_TYPE 036
Packit Service 82fcde
#endif
Packit Service 82fcde
#if !defined (N_STAB)
Packit Service 82fcde
#define N_STAB 0340
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* The following type indicates the definition of a symbol as being
Packit Service 82fcde
   an indirect reference to another symbol.  The other symbol
Packit Service 82fcde
   appears as an undefined reference, immediately following this symbol.
Packit Service 82fcde
Packit Service 82fcde
   Indirection is asymmetrical.  The other symbol's value will be used
Packit Service 82fcde
   to satisfy requests for the indirect symbol, but not vice versa.
Packit Service 82fcde
   If the other symbol does not have a definition, libraries will
Packit Service 82fcde
   be searched to find a definition.  */
Packit Service 82fcde
#define N_INDR 0xa
Packit Service 82fcde
Packit Service 82fcde
/* The following symbols refer to set elements.
Packit Service 82fcde
   All the N_SET[ATDB] symbols with the same name form one set.
Packit Service 82fcde
   Space is allocated for the set in the text section, and each set
Packit Service 82fcde
   element's value is stored into one word of the space.
Packit Service 82fcde
   The first word of the space is the length of the set (number of elements).
Packit Service 82fcde
Packit Service 82fcde
   The address of the set is made into an N_SETV symbol
Packit Service 82fcde
   whose name is the same as the name of the set.
Packit Service 82fcde
   This symbol acts like a N_DATA global symbol
Packit Service 82fcde
   in that it can satisfy undefined external references.  */
Packit Service 82fcde
Packit Service 82fcde
/* These appear as input to LD, in a .o file.  */
Packit Service 82fcde
#define	N_SETA	0x14		/* Absolute set element symbol */
Packit Service 82fcde
#define	N_SETT	0x16		/* Text set element symbol */
Packit Service 82fcde
#define	N_SETD	0x18		/* Data set element symbol */
Packit Service 82fcde
#define	N_SETB	0x1A		/* Bss set element symbol */
Packit Service 82fcde
Packit Service 82fcde
/* This is output from LD.  */
Packit Service 82fcde
#define N_SETV	0x1C		/* Pointer to set vector in data area.  */
Packit Service 82fcde

Packit Service 82fcde
#if !defined (N_RELOCATION_INFO_DECLARED)
Packit Service 82fcde
/* This structure describes a single relocation to be performed.
Packit Service 82fcde
   The text-relocation section of the file is a vector of these structures,
Packit Service 82fcde
   all of which apply to the text section.
Packit Service 82fcde
   Likewise, the data-relocation section applies to the data section.  */
Packit Service 82fcde
Packit Service 82fcde
struct relocation_info
Packit Service 82fcde
{
Packit Service 82fcde
  /* Address (within segment) to be relocated.  */
Packit Service 82fcde
  int r_address;
Packit Service 82fcde
  /* The meaning of r_symbolnum depends on r_extern.  */
Packit Service 82fcde
  unsigned int r_symbolnum:24;
Packit Service 82fcde
  /* Nonzero means value is a pc-relative offset
Packit Service 82fcde
     and it should be relocated for changes in its own address
Packit Service 82fcde
     as well as for changes in the symbol or section specified.  */
Packit Service 82fcde
  unsigned int r_pcrel:1;
Packit Service 82fcde
  /* Length (as exponent of 2) of the field to be relocated.
Packit Service 82fcde
     Thus, a value of 2 indicates 1<<2 bytes.  */
Packit Service 82fcde
  unsigned int r_length:2;
Packit Service 82fcde
  /* 1 => relocate with value of symbol.
Packit Service 82fcde
          r_symbolnum is the index of the symbol
Packit Service 82fcde
	  in file's the symbol table.
Packit Service 82fcde
     0 => relocate with the address of a segment.
Packit Service 82fcde
          r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS
Packit Service 82fcde
	  (the N_EXT bit may be set also, but signifies nothing).  */
Packit Service 82fcde
  unsigned int r_extern:1;
Packit Service 82fcde
  /* Four bits that aren't used, but when writing an object file
Packit Service 82fcde
     it is desirable to clear them.  */
Packit Service 82fcde
  unsigned int r_pad:4;
Packit Service 82fcde
};
Packit Service 82fcde
#endif /* no N_RELOCATION_INFO_DECLARED.  */
Packit Service 82fcde
Packit Service 82fcde
#ifdef	__cplusplus
Packit Service 82fcde
}
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#endif /* __A_OUT_GNU_H__ */