Blame include/coff/apollo.h

Packit bbfece
/* coff information for Apollo M68K
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_AOUTHDR
Packit bbfece
#define L_LNNO_SIZE 2
Packit bbfece
#include "coff/external.h"
Packit bbfece
Packit bbfece
/* Motorola 68000/68008/68010/68020 */
Packit bbfece
#define	MC68MAGIC	0520
Packit bbfece
#define MC68KWRMAGIC	0520	/* writeable text segments */
Packit bbfece
#define	MC68TVMAGIC	0521
Packit bbfece
#define MC68KROMAGIC	0521	/* readonly shareable text segments */
Packit bbfece
#define MC68KPGMAGIC	0522	/* demand paged text segments */
Packit bbfece
#define	M68MAGIC	0210
Packit bbfece
#define	M68TVMAGIC	0211
Packit bbfece
Packit bbfece
/* Apollo 68000-based machines have a different magic number. This comes
Packit bbfece
 * from /usr/include/apollo/filehdr.h
Packit bbfece
 */
Packit bbfece
#define APOLLOM68KMAGIC 0627
Packit bbfece
Packit bbfece
#define OMAGIC M68MAGIC
Packit bbfece
#define M68KBADMAG(x) (((x).f_magic!=MC68MAGIC) && ((x).f_magic!=MC68KWRMAGIC) && ((x).f_magic!=MC68TVMAGIC) && \
Packit bbfece
  ((x).f_magic!=MC68KROMAGIC) && ((x).f_magic!=MC68KPGMAGIC) && ((x).f_magic!=M68MAGIC) && ((x).f_magic!=M68TVMAGIC)  && \
Packit bbfece
  ((x).f_magic!=APOLLOM68KMAGIC) )
Packit bbfece
Packit bbfece
/********************** AOUT "OPTIONAL HEADER" **********************/
Packit bbfece
Packit bbfece
typedef struct 
Packit bbfece
{
Packit bbfece
  char 	magic[2];		/* type of file				*/
Packit bbfece
  char	vstamp[2];		/* version stamp			*/
Packit bbfece
  char	tsize[4];		/* text size in bytes, padded to FW bdry*/
Packit bbfece
  char	dsize[4];		/* initialized data "  "		*/
Packit bbfece
  char	bsize[4];		/* uninitialized data "   "		*/
Packit bbfece
  char	entry[4];		/* entry pt.				*/
Packit bbfece
  char 	text_start[4];		/* base of text used for this file */
Packit bbfece
  char 	data_start[4];		/* base of data used for this file */
Packit bbfece
  char	o_sri[4];		/* Apollo specific - .sri data pointer */
Packit bbfece
  char  o_inlib[4];		/* Apollo specific - .inlib data pointer */
Packit bbfece
  char	vid[8];			/* Apollo specific - 64 bit version ID */
Packit bbfece
}
Packit bbfece
AOUTHDR;
Packit bbfece
Packit bbfece
#define	APOLLO_COFF_VERSION_NUMBER 1 /* the value of the aouthdr magic */
Packit bbfece
#define	AOUTHDRSZ 44
Packit bbfece
#define AOUTSZ 44
Packit bbfece
Packit bbfece
/* Apollo allowa for larger section names by allowing
Packit bbfece
   them to be in the string table.  */
Packit bbfece
Packit bbfece
/* If s_zeores is all zeroes, s_offset gives the real
Packit bbfece
   location of the name in the string table.  */
Packit bbfece
Packit bbfece
#define	s_zeroes section_name.s_name
Packit bbfece
#define	s_offset (section_name.s_name+4)
Packit bbfece
Packit bbfece
/* More names of "special" sections.  */
Packit bbfece
#define _TV	".tv"
Packit bbfece
#define _INIT	".init"
Packit bbfece
#define _FINI	".fini"
Packit bbfece
#define	_LINES	".lines"
Packit bbfece
#define	_BLOCKS	".blocks"
Packit bbfece
#define _SRI    ".sri"                  /* Static Resource Information (systype,
Packit bbfece
 et al.) */
Packit bbfece
#define _MIR    ".mir"                  /* Module Information Records  */
Packit bbfece
#define _APTV   ".aptv"                 /* Apollo-style transfer vectors. */
Packit bbfece
#define _INLIB  ".inlib"                /* Shared Library information */
Packit bbfece
#define _RWDI   ".rwdi"         /* Read/write data initialization directives for
Packit bbfece
 compressed sections */
Packit bbfece
#define _UNWIND ".unwind"               /* Stack unwind information */
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
#ifdef M68K_COFF_OFFSET
Packit bbfece
  char r_offset[4];
Packit bbfece
#endif
Packit bbfece
Packit bbfece
};
Packit bbfece
Packit bbfece
#define RELOC struct external_reloc
Packit bbfece
Packit bbfece
#ifdef M68K_COFF_OFFSET
Packit bbfece
#define RELSZ 14
Packit bbfece
#else
Packit bbfece
#define RELSZ 10
Packit bbfece
#endif
Packit bbfece
Packit bbfece
/* Apollo specific STYP flags */
Packit bbfece
Packit bbfece
#define STYP_RELOCATED_NOT_LOADED 0x00010000	/* Section is relocated normally during linking, but need
Packit bbfece
                                            	   not be loaded during program execution */
Packit bbfece
#define STYP_DEBUG              0x00020000	/* debug section */
Packit bbfece
#define STYP_OVERLAY		0x00040000	/* Section is overlayed */
Packit bbfece
#define STYP_INSTRUCTION    	0x00200000	/* Section contains executable code */
Packit bbfece
Packit bbfece
#define STYP_ZERO		0x00800000	/* Section is initialized to zero */
Packit bbfece
#define STYP_INSTALLED		0x02000000	/* Section should be installable in KGT */
Packit bbfece
#define STYP_LOOK_INSTALLED	0x04000000	/* Look for section in KGT */
Packit bbfece
#define STYP_SECALIGN1		0x08000000	/* Specially aligned section */
Packit bbfece
#define STYP_SECALIGN2		0x10000000	/*      "       "       "    */
Packit bbfece
#define STYP_COMPRESSED		0x20000000	/* No section data per se (s_scnptr = 0), but there are
Packit bbfece
						   initialization directives for it in .rwdi section
Packit bbfece
						   (used in conjunction with STYP_BSS) */