Blame include/coff/m88k.h

Packit bbfece
/* coff information for 88k bcs
Packit bbfece
   
Packit bbfece
   Copyright (C) 2001-2018 Free Software Foundation, Inc.
Packit bbfece
Packit bbfece
   This program is free software; you can redistribute it and/or modify
Packit bbfece
   it under the terms of the GNU General Public License as published by
Packit bbfece
   the Free Software Foundation; either version 3 of the License, or
Packit bbfece
   (at your option) any later version.
Packit bbfece
   
Packit bbfece
   This program is distributed in the hope that it will be useful,
Packit bbfece
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit bbfece
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit bbfece
   GNU General Public License for more details.
Packit bbfece
   
Packit bbfece
   You should have received a copy of the GNU General Public License
Packit bbfece
   along with this program; if not, write to the Free Software
Packit bbfece
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
Packit bbfece
   MA 02110-1301, USA.  */
Packit bbfece
Packit bbfece
#define DO_NOT_DEFINE_SCNHDR
Packit bbfece
#define L_LNNO_SIZE 4
Packit bbfece
#define DO_NOT_DEFINE_SYMENT
Packit bbfece
#define DO_NOT_DEFINE_AUXENT
Packit bbfece
#include "coff/external.h"
Packit bbfece
Packit bbfece
#define MC88MAGIC  0540           /* 88k BCS executable */
Packit bbfece
#define MC88DMAGIC 0541           /* DG/UX executable   */
Packit bbfece
#define MC88OMAGIC 0555	          /* Object file        */
Packit bbfece
Packit bbfece
#define MC88BADMAG(x) (((x).f_magic != MC88MAGIC) \
Packit bbfece
                    && ((x).f_magic != MC88DMAGIC) \
Packit bbfece
                    && ((x).f_magic != MC88OMAGIC))
Packit bbfece
Packit bbfece
#define PAGEMAGIC3   0414 /* Split i&d, zero mapped */
Packit bbfece
#define PAGEMAGICBCS 0413
Packit bbfece
Packit bbfece
/********************** SECTION HEADER **********************/
Packit bbfece
Packit bbfece
struct external_scnhdr 
Packit bbfece
{
Packit bbfece
  char		s_name[8];	/* section name			*/
Packit bbfece
  char		s_paddr[4];	/* physical address, aliased s_nlib */
Packit bbfece
  char		s_vaddr[4];	/* virtual address		*/
Packit bbfece
  char		s_size[4];	/* section size			*/
Packit bbfece
  char		s_scnptr[4];	/* file ptr to raw data for section */
Packit bbfece
  char		s_relptr[4];	/* file ptr to relocation	*/
Packit bbfece
  char		s_lnnoptr[4];	/* file ptr to line numbers	*/
Packit bbfece
  char		s_nreloc[4];	/* number of relocation entries	*/
Packit bbfece
  char		s_nlnno[4];	/* number of line number entries*/
Packit bbfece
  char		s_flags[4];	/* flags			*/
Packit bbfece
};
Packit bbfece
Packit bbfece
#define	SCNHDR	struct external_scnhdr
Packit bbfece
#define	SCNHSZ	44
Packit bbfece
Packit bbfece
/* Names of "special" sections.  */
Packit bbfece
#define _TEXT   ".text"
Packit bbfece
#define _DATA   ".data"
Packit bbfece
#define _BSS    ".bss"
Packit bbfece
#define _COMMENT ".comment"
Packit bbfece
Packit bbfece
Packit bbfece
/********************** SYMBOLS **********************/
Packit bbfece
Packit bbfece
#define E_SYMNMLEN	8	/* # characters in a symbol name	*/
Packit bbfece
#define E_FILNMLEN	14	/* # characters in a file name		*/
Packit bbfece
#define E_DIMNUM	4	/* # array dimensions in auxiliary entry */
Packit bbfece
Packit bbfece
struct external_syment 
Packit bbfece
{
Packit bbfece
  union
Packit bbfece
  {
Packit bbfece
    char e_name[E_SYMNMLEN];
Packit bbfece
Packit bbfece
    struct
Packit bbfece
    {
Packit bbfece
      char e_zeroes[4];
Packit bbfece
      char e_offset[4];
Packit bbfece
    } e;
Packit bbfece
Packit bbfece
  } e;
Packit bbfece
Packit bbfece
  char e_value[4];
Packit bbfece
  char e_scnum[2];
Packit bbfece
  char e_type[2];
Packit bbfece
  char e_sclass[1];
Packit bbfece
  char e_numaux[1];
Packit bbfece
  char pad2[2];
Packit bbfece
};
Packit bbfece
Packit bbfece
#define N_BTMASK	017
Packit bbfece
#define N_TMASK		060
Packit bbfece
#define N_BTSHFT	4
Packit bbfece
#define N_TSHIFT	2
Packit bbfece
Packit bbfece
/* Note that this isn't the same shape as other coffs */
Packit bbfece
union external_auxent
Packit bbfece
{
Packit bbfece
  struct
Packit bbfece
  {
Packit bbfece
    char x_tagndx[4];		/* str, un, or enum tag indx */
Packit bbfece
    /* 4 */
Packit bbfece
    
Packit bbfece
    union
Packit bbfece
    {
Packit bbfece
      char x_fsize[4];		/* size of function */
Packit bbfece
Packit bbfece
      struct
Packit bbfece
      {
Packit bbfece
	char  x_lnno[4];	/* declaration line number */
Packit bbfece
	char  x_size[4];	/* str/union/array size */
Packit bbfece
      } x_lnsz;
Packit bbfece
Packit bbfece
    } x_misc;
Packit bbfece
    
Packit bbfece
    /* 12 */
Packit bbfece
    union
Packit bbfece
    {
Packit bbfece
      struct 			/* if ISFCN, tag, or .bb */
Packit bbfece
      {
Packit bbfece
	char x_lnnoptr[4];	/* ptr to fcn line # */
Packit bbfece
	char x_endndx[4];		/* entry ndx past block end */
Packit bbfece
      } x_fcn;
Packit bbfece
Packit bbfece
      struct 			/* if ISARY, up to 4 dimen. */
Packit bbfece
      {
Packit bbfece
	char x_dimen[E_DIMNUM][2];
Packit bbfece
      } x_ary;
Packit bbfece
Packit bbfece
    } x_fcnary;
Packit bbfece
    /* 20 */
Packit bbfece
    
Packit bbfece
  } x_sym;
Packit bbfece
  
Packit bbfece
  union
Packit bbfece
  {
Packit bbfece
    char x_fname[E_FILNMLEN];
Packit bbfece
Packit bbfece
    struct
Packit bbfece
    {
Packit bbfece
      char x_zeroes[4];
Packit bbfece
      char x_offset[4];
Packit bbfece
    } x_n;
Packit bbfece
Packit bbfece
  } x_file;
Packit bbfece
  
Packit bbfece
  struct
Packit bbfece
  {
Packit bbfece
    char x_scnlen[4];		/* section length */
Packit bbfece
    char x_nreloc[4];		/* # relocation entries */
Packit bbfece
    char x_nlinno[4];		/* # line numbers */
Packit bbfece
  } x_scn;
Packit bbfece
  
Packit bbfece
  struct
Packit bbfece
  {
Packit bbfece
    char x_tvfill[4];		/* tv fill value */
Packit bbfece
    char x_tvlen[2];		/* length of .tv */
Packit bbfece
    char x_tvran[2][2];		/* tv range */
Packit bbfece
  } x_tv;			/* info about .tv section (in auxent of symbol .tv)) */
Packit bbfece
};
Packit bbfece
Packit bbfece
#define GET_LNSZ_SIZE(abfd, ext) \
Packit bbfece
  H_GET_32 (abfd, ext->x_sym.x_misc.x_lnsz.x_size)
Packit bbfece
#define GET_LNSZ_LNNO(abfd, ext) \
Packit bbfece
  H_GET_32 (abfd, ext->x_sym.x_misc.x_lnsz.x_lnno)
Packit bbfece
#define PUT_LNSZ_LNNO(abfd, in, ext) \
Packit bbfece
  H_PUT_32 (abfd, in, ext->x_sym.x_misc.x_lnsz.x_lnno)
Packit bbfece
#define PUT_LNSZ_SIZE(abfd, in, ext) \
Packit bbfece
  H_PUT_32 (abfd, in, ext->x_sym.x_misc.x_lnsz.x_size)
Packit bbfece
#define GET_SCN_NRELOC(abfd, ext) \
Packit bbfece
  H_GET_32 (abfd, ext->x_scn.x_nreloc)
Packit bbfece
#define GET_SCN_NLINNO(abfd, ext) \
Packit bbfece
  H_GET_32 (abfd, ext->x_scn.x_nlinno)
Packit bbfece
#define PUT_SCN_NRELOC(abfd, in, ext) \
Packit bbfece
  H_PUT_32 (abfd, in, ext->x_scn.x_nreloc)
Packit bbfece
#define PUT_SCN_NLINNO(abfd, in, ext) \
Packit bbfece
  H_PUT_32 (abfd,in, ext->x_scn.x_nlinno)
Packit bbfece
Packit bbfece
#define	SYMENT	struct external_syment
Packit bbfece
#define	SYMESZ	20
Packit bbfece
#define	AUXENT	union external_auxent
Packit bbfece
#define	AUXESZ	20
Packit bbfece
Packit bbfece
/********************** RELOCATION DIRECTIVES **********************/
Packit bbfece
Packit bbfece
struct external_reloc
Packit bbfece
{
Packit bbfece
  char r_vaddr[4];
Packit bbfece
  char r_symndx[4];
Packit bbfece
  char r_type[2];
Packit bbfece
  char r_offset[2];
Packit bbfece
};
Packit bbfece
Packit bbfece
#define RELOC struct external_reloc
Packit bbfece
#define RELSZ  12
Packit bbfece
Packit bbfece
#define NO_TVNDX