/* COFF specification for OpenRISC 1000.
   Copyright (C) 1993-2000, 2002, 2010 Free Software Foundation, Inc.
   Contributed by David Wood @ New York University.
   Modified by Johan Rydberg, <johan.rydberg@netinsight.se>

   This file is part of BFD, the Binary File Descriptor library.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
   MA 02110-1301, USA.  */

#ifndef OR32
# define OR32
#endif

/* File Header and related definitions.  */
struct external_filehdr
{
  char f_magic[2];	/* magic number		    */
  char f_nscns[2];	/* number of sections	    */
  char f_timdat[4];     /* time & date stamp	    */
  char f_symptr[4];     /* file pointer to symtab   */
  char f_nsyms[4];	/* number of symtab entries */
  char f_opthdr[2];     /* sizeof(optional hdr)	    */
  char f_flags[2];	/* flags		    */
};

#define FILHDR  struct external_filehdr
#define FILHSZ	20

/* Magic numbers for OpenRISC 1000. As it is know we use the
   numbers for Am29000.

   (AT&T will assign the "real" magic number).  */
#define SIPFBOMAGIC     0572    /* Am29000 (Byte 0 is MSB).  */
#define SIPRBOMAGIC     0573    /* Am29000 (Byte 0 is LSB).  */

#define OR32_MAGIC_BIG 		SIPFBOMAGIC	
#define OR32_MAGIC_LITTLE	SIPRBOMAGIC	
#define OR32BADMAG(x)     (((x).f_magic!=OR32_MAGIC_BIG) && \
			                      ((x).f_magic!=OR32_MAGIC_LITTLE))

#define OMAGIC OR32_MAGIC_BIG

/* Optional (a.out) header.  */
typedef	struct external_aouthdr 
{
  char  magic[2];         /* type of file                     */
  char  vstamp[2];	  /* version stamp                    */
  char  tsize[4];	  /* text size in bytes, padded to FW bdry */
  char  dsize[4];	  /* initialized data "  "            */
  char  bsize[4];	  /* uninitialized data "   "         */
  char  entry[4];	  /* entry pt.                        */
  char  text_start[4];	  /* base of text used for this file  */
  char  data_start[4];	  /* base of data used for this file  */
} AOUTHDR;

#define AOUTSZ      28
#define AOUTHDRSZ   28

/* aouthdr magic numbers.  */
#define NMAGIC    0410	  /* separate i/d executable.  */
#define SHMAGIC   0406	  /* NYU/Ultra3 shared data executable 
                             (writable text).  */

#define _ETEXT   	"_etext"

/* Section header and related definitions.  */
struct external_scnhdr 
{
  char	    s_name[8];      /* section name                   */
  char	    s_paddr[4];     /* physical address, aliased s_nlib */
  char	    s_vaddr[4];     /* virtual address                */
  char	    s_size[4];      /* section size                   */
  char	    s_scnptr[4];    /* file ptr to raw data for section */
  char	    s_relptr[4];    /* file ptr to relocation         */
  char	    s_lnnoptr[4];   /* file ptr to line numbers       */
  char	    s_nreloc[2];    /* number of relocation entries   */
  char	    s_nlnno[2];     /* number of line number entries  */
  char	    s_flags[4];     /* flags                          */
};

#define	SCNHDR	struct external_scnhdr
#define	SCNHSZ	40

/* Names of "special" sections:  */
#define _TEXT   ".text"
#define _DATA   ".data"
#define _BSS    ".bss"
#define _LIT    ".lit"

/* Section types - with additional section type for global 
   registers which will be relocatable for the OpenRISC 1000.

   In instances where it is necessary for a linker to produce an
   output file which contains text or data not based at virtual
   address 0, e.g. for a ROM, then the linker should accept
   address base information as command input and use PAD sections
   to skip over unused addresses.  */
#define	STYP_BSSREG 0x1200	/* Global register area (like STYP_INFO) */
#define STYP_ENVIR  0x2200	/* Environment (like STYP_INFO) */
#define STYP_ABS    0x4000	/* Absolute (allocated, not reloc, loaded) */

/* Relocation information declaration and related definitions:  */
struct external_reloc
{
  char r_vaddr[4];    /* (virtual) address of reference */
  char r_symndx[4];   /* index into symbol table */
  char r_type[2];     /* relocation type */
};

#define	RELOC		struct external_reloc
#define	RELSZ		10		/* sizeof (RELOC) */ 

/* Relocation types for the OpenRISC 1000: */

#define	R_ABS     0     /* reference is absolute */
#define	R_IREL    030	/* instruction relative (jmp/call) */
#define	R_IABS    031	/* instruction absolute (jmp/call) */
#define	R_ILOHALF 032	/* instruction low half  (const)  */
#define	R_IHIHALF 033	/* instruction high half (consth) part 1 */
#define	R_IHCONST 034	/* instruction high half (consth) part 2 */
                        /* constant offset of R_IHIHALF relocation */
#define	R_BYTE    035	/* relocatable byte value */
#define R_HWORD   036	/* relocatable halfword value */
#define R_WORD    037	/* relocatable word value */

#define	R_IGLBLRC 040	/* instruction global register RC */
#define	R_IGLBLRA 041	/* instruction global register RA */
#define	R_IGLBLRB 042	/* instruction global register RB */
 
/*
  NOTE:
  All the "I" forms refer to 29000 instruction formats.  The linker is 
  expected to know how the numeric information is split and/or aligned
  within the instruction word(s).  R_BYTE works for instructions, too.

  If the parameter to a CONSTH instruction is a relocatable type, two 
  relocation records are written.  The first has an r_type of R_IHIHALF 
  (33 octal) and a normal r_vaddr and r_symndx.  The second relocation 
  record has an r_type of R_IHCONST (34 octal), a normal r_vaddr (which 
  is redundant), and an r_symndx containing the 32-bit constant offset 
  to the relocation instead of the actual symbol table index.  This 
  second record is always written, even if the constant offset is zero.
  The constant fields of the instruction are set to zero.  */

/* Line number entry declaration and related definitions:  */
struct external_lineno 
{
  union
  {
    char l_symndx[4];  /* function name symbol index, iff l_lnno == 0*/
    char l_paddr[4];   /* (physical) address of line number    */
  }
  l_addr;

  char l_lnno[2];      /* line number	  */
};

#define	LINENO		struct external_lineno
#define	LINESZ		6		  /* sizeof (LINENO) */

/* Symbol entry declaration and related definitions:  */
#define	E_SYMNMLEN	8	  /* Number of characters in a symbol name */

struct external_syment
{
  union
  {
    char e_name[E_SYMNMLEN];
    struct
    {
      char e_zeroes[4];
      char e_offset[4];
    }
    e;
  }
  e;

  char e_value[4];
  char e_scnum[2];
  char e_type[2];
  char e_sclass[1];
  char e_numaux[1];
};

#define	SYMENT	struct external_syment
#define	SYMESZ 	18

/* Storage class definitions - new classes for global registers:  */
#define C_GLBLREG	19		/* global register */
#define C_EXTREG	20		/* external global register */
#define	C_DEFREG	21		/* ext. def. of global register */

/* Derived symbol mask/shifts:  */
#define N_BTMASK	(0xf)
#define N_BTSHFT	(4)
#define N_TMASK		(0x30)
#define N_TSHIFT	(2)

/* Auxiliary symbol table entry declaration and related 
   definitions.  */
#define E_FILNMLEN  14  /* # characters in a file name	  */
#define E_DIMNUM    4   /* # array dimensions in auxiliary entry */

union external_auxent
{
  struct
  {
    char x_tagndx[4];       /* str, un, or enum tag indx */
    union
    {
      struct
      {
	char  x_lnno[2];    /* declaration line number */
        char  x_size[2];    /* str/union/array size */
      }
      x_lnsz;

      char x_fsize[4];      /* size of function */
    }
    x_misc;

    union
    {
      struct 		          /* if ISFCN, tag, or .bb */
      {
	char x_lnnoptr[4];  /* ptr to fcn line # */
        char x_endndx[4];   /* entry ndx past block end */
      }
      x_fcn;

      struct   	          /* if ISARY, up to 4 dimen. */
      {
	char x_dimen[E_DIMNUM][2];
      }
      x_ary;
    }
    x_fcnary;

    char x_tvndx[2];        /* tv index */
  }
  x_sym;

  union
  {
    char x_fname[E_FILNMLEN];

    struct
    {
      char x_zeroes[4];
      char x_offset[4];
    }
    x_n;
  }
  x_file;

  struct
  {
    char x_scnlen[4];       /* section length */
    char x_nreloc[2];       /* # relocation entries */
    char x_nlinno[2];       /* # line numbers */
  }
  x_scn;

  struct
  {
    char x_tvfill[4];       /* tv fill value */
    char x_tvlen[2];        /* length of .tv */
    char x_tvran[2][2];     /* tv range */
  }
  x_tv;                   /* info about .tv section 
			     (in auxent of symbol .tv)) */
};

#define	AUXENT		union external_auxent
#define	AUXESZ		18	
