Blame include/coff/rs6000.h

Packit bbfece
/* IBM RS/6000 "XCOFF" file definitions for BFD.
Packit bbfece
   Copyright (C) 1990-2018 Free Software Foundation, Inc.
Packit bbfece
   Written by Mimi Phuong-Thao Vo of IBM
Packit bbfece
   and John Gilmore of Cygnus Support.
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
/********************** FILE HEADER **********************/
Packit bbfece
Packit bbfece
struct external_filehdr {
Packit bbfece
	char f_magic[2];	/* magic number			*/
Packit bbfece
	char f_nscns[2];	/* number of sections		*/
Packit bbfece
	char f_timdat[4];	/* time & date stamp		*/
Packit bbfece
	char f_symptr[4];	/* file pointer to symtab	*/
Packit bbfece
	char f_nsyms[4];	/* number of symtab entries	*/
Packit bbfece
	char f_opthdr[2];	/* sizeof(optional hdr)		*/
Packit bbfece
	char f_flags[2];	/* flags			*/
Packit bbfece
};
Packit bbfece
Packit bbfece
        /* IBM RS/6000 */
Packit bbfece
#define U802WRMAGIC     0730    /* writeable text segments **chh**      */
Packit bbfece
#define U802ROMAGIC     0735    /* readonly sharable text segments      */
Packit bbfece
#define U802TOCMAGIC    0737    /* readonly text segments and TOC       */
Packit bbfece
Packit bbfece
#define BADMAG(x)	\
Packit bbfece
	((x).f_magic != U802ROMAGIC && (x).f_magic != U802WRMAGIC && \
Packit bbfece
	 (x).f_magic != U802TOCMAGIC)
Packit bbfece
Packit bbfece
#define	FILHDR	struct external_filehdr
Packit bbfece
#define	FILHSZ	20
Packit bbfece
Packit bbfece
Packit bbfece
/********************** AOUT "OPTIONAL HEADER" **********************/
Packit bbfece
Packit bbfece
Packit bbfece
typedef struct
Packit bbfece
{
Packit bbfece
  unsigned char	magic[2];	/* type of file			*/
Packit bbfece
  unsigned char	vstamp[2];	/* version stamp		*/
Packit bbfece
  unsigned char	tsize[4];	/* text size in bytes, padded to FW bdry */
Packit bbfece
  unsigned char	dsize[4];	/* initialized data "  "	*/
Packit bbfece
  unsigned char	bsize[4];	/* uninitialized data "   "	*/
Packit bbfece
  unsigned char	entry[4];	/* entry pt.			*/
Packit bbfece
  unsigned char	text_start[4];	/* base of text used for this file */
Packit bbfece
  unsigned char	data_start[4];	/* base of data used for this file */
Packit bbfece
  unsigned char	o_toc[4];	/* address of TOC */
Packit bbfece
  unsigned char	o_snentry[2];	/* section number of entry point */
Packit bbfece
  unsigned char	o_sntext[2];	/* section number of .text section */
Packit bbfece
  unsigned char	o_sndata[2];	/* section number of .data section */
Packit bbfece
  unsigned char	o_sntoc[2];	/* section number of TOC */
Packit bbfece
  unsigned char	o_snloader[2];	/* section number of .loader section */
Packit bbfece
  unsigned char	o_snbss[2];	/* section number of .bss section */
Packit bbfece
  unsigned char	o_algntext[2];	/* .text alignment */
Packit bbfece
  unsigned char	o_algndata[2];	/* .data alignment */
Packit bbfece
  unsigned char	o_modtype[2];	/* module type (??) */
Packit bbfece
  unsigned char o_cputype[2];	/* cpu type */
Packit bbfece
  unsigned char	o_maxstack[4];	/* max stack size (??) */
Packit bbfece
  unsigned char o_maxdata[4];	/* max data size (??) */
Packit bbfece
  unsigned char	o_resv2[12];	/* reserved */
Packit bbfece
}
Packit bbfece
AOUTHDR;
Packit bbfece
Packit bbfece
#define AOUTSZ 72
Packit bbfece
#define SMALL_AOUTSZ (28)
Packit bbfece
#define AOUTHDRSZ 72
Packit bbfece
Packit bbfece
/********************** SECTION HEADER **********************/
Packit bbfece
Packit bbfece
Packit bbfece
struct external_scnhdr {
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[2];	/* number of relocation entries	*/
Packit bbfece
	char		s_nlnno[2];	/* 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	40
Packit bbfece
Packit bbfece
/********************** LINE NUMBERS **********************/
Packit bbfece
Packit bbfece
/* 1 line number entry for every "breakpointable" source line in a section.
Packit bbfece
 * Line numbers are grouped on a per function basis; first entry in a function
Packit bbfece
 * grouping will have l_lnno = 0 and in place of physical address will be the
Packit bbfece
 * symbol table index of the function name.
Packit bbfece
 */
Packit bbfece
struct external_lineno {
Packit bbfece
	union {
Packit bbfece
		char l_symndx[4];	/* function name symbol index, iff l_lnno == 0*/
Packit bbfece
		char l_paddr[4];	/* (physical) address of line number	*/
Packit bbfece
	} l_addr;
Packit bbfece
	char l_lnno[2];	/* line number		*/
Packit bbfece
};
Packit bbfece
Packit bbfece
Packit bbfece
#define	LINENO	struct external_lineno
Packit bbfece
#define	LINESZ	6
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
    char e_name[E_SYMNMLEN];
Packit bbfece
    struct {
Packit bbfece
      char e_zeroes[4];
Packit bbfece
      char e_offset[4];
Packit bbfece
    } e;
Packit bbfece
  } e;
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
};
Packit bbfece
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
Packit bbfece
union external_auxent {
Packit bbfece
	struct {
Packit bbfece
		char x_tagndx[4];	/* str, un, or enum tag indx */
Packit bbfece
		union {
Packit bbfece
			struct {
Packit bbfece
			    char  x_lnno[2]; /* declaration line number */
Packit bbfece
			    char  x_size[2]; /* str/union/array size */
Packit bbfece
			} x_lnsz;
Packit bbfece
			char x_fsize[4];	/* size of function */
Packit bbfece
		} x_misc;
Packit bbfece
		union {
Packit bbfece
			struct {		/* if ISFCN, tag, or .bb */
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
			struct {		/* if ISARY, up to 4 dimen. */
Packit bbfece
			    char x_dimen[E_DIMNUM][2];
Packit bbfece
			} x_ary;
Packit bbfece
		} x_fcnary;
Packit bbfece
		char x_tvndx[2];		/* tv index */
Packit bbfece
	} x_sym;
Packit bbfece
Packit bbfece
        struct {
Packit bbfece
                union {
Packit bbfece
                        char x_fname[E_FILNMLEN];
Packit bbfece
                        struct {
Packit bbfece
                                char x_zeroes[4];
Packit bbfece
                                char x_offset[4];
Packit bbfece
                        } x_n;
Packit bbfece
                } x_n;
Packit bbfece
                char x_ftype[1];
Packit bbfece
        } x_file;
Packit bbfece
Packit bbfece
	struct {
Packit bbfece
		char x_scnlen[4];			/* section length */
Packit bbfece
		char x_nreloc[2];	/* # relocation entries */
Packit bbfece
		char x_nlinno[2];	/* # line numbers */
Packit bbfece
	} x_scn;
Packit bbfece
Packit bbfece
        struct {
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
	struct {
Packit bbfece
		unsigned char x_scnlen[4];
Packit bbfece
		unsigned char x_parmhash[4];
Packit bbfece
		unsigned char x_snhash[2];
Packit bbfece
		unsigned char x_smtyp[1];
Packit bbfece
		unsigned char x_smclas[1];
Packit bbfece
		unsigned char x_stab[4];
Packit bbfece
		unsigned char x_snstab[2];
Packit bbfece
	} x_csect;
Packit bbfece
Packit bbfece
};
Packit bbfece
Packit bbfece
#define	SYMENT	struct external_syment
Packit bbfece
#define	SYMESZ	18
Packit bbfece
#define	AUXENT	union external_auxent
Packit bbfece
#define	AUXESZ	18
Packit bbfece
#define DBXMASK 0x80		/* for dbx storage mask */
Packit bbfece
#define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK)
Packit bbfece
Packit bbfece
Packit bbfece
Packit bbfece
/********************** RELOCATION DIRECTIVES **********************/
Packit bbfece
Packit bbfece
Packit bbfece
struct external_reloc {
Packit bbfece
  char r_vaddr[4];
Packit bbfece
  char r_symndx[4];
Packit bbfece
  char r_size[1];
Packit bbfece
  char r_type[1];
Packit bbfece
};
Packit bbfece
Packit bbfece
Packit bbfece
#define RELOC struct external_reloc
Packit bbfece
#define RELSZ 10
Packit bbfece
Packit bbfece
#define DEFAULT_DATA_SECTION_ALIGNMENT 4
Packit bbfece
#define DEFAULT_BSS_SECTION_ALIGNMENT 4
Packit bbfece
#define DEFAULT_TEXT_SECTION_ALIGNMENT 4
Packit bbfece
/* For new sections we havn't heard of before */
Packit bbfece
#define DEFAULT_SECTION_ALIGNMENT 4
Packit bbfece
Packit bbfece
/* The ldhdr structure.  This appears at the start of the .loader
Packit bbfece
   section.  */
Packit bbfece
Packit bbfece
struct external_ldhdr
Packit bbfece
{
Packit bbfece
  bfd_byte l_version[4];
Packit bbfece
  bfd_byte l_nsyms[4];
Packit bbfece
  bfd_byte l_nreloc[4];
Packit bbfece
  bfd_byte l_istlen[4];
Packit bbfece
  bfd_byte l_nimpid[4];
Packit bbfece
  bfd_byte l_impoff[4];
Packit bbfece
  bfd_byte l_stlen[4];
Packit bbfece
  bfd_byte l_stoff[4];
Packit bbfece
};
Packit bbfece
Packit bbfece
#define LDHDRSZ (8 * 4)
Packit bbfece
Packit bbfece
struct external_ldsym
Packit bbfece
{
Packit bbfece
  union
Packit bbfece
    {
Packit bbfece
      bfd_byte _l_name[E_SYMNMLEN];
Packit bbfece
      struct
Packit bbfece
	{
Packit bbfece
	  bfd_byte _l_zeroes[4];
Packit bbfece
	  bfd_byte _l_offset[4];
Packit bbfece
	} _l_l;
Packit bbfece
    } _l;
Packit bbfece
  bfd_byte l_value[4];
Packit bbfece
  bfd_byte l_scnum[2];
Packit bbfece
  bfd_byte l_smtype[1];
Packit bbfece
  bfd_byte l_smclas[1];
Packit bbfece
  bfd_byte l_ifile[4];
Packit bbfece
  bfd_byte l_parm[4];
Packit bbfece
};
Packit bbfece
Packit bbfece
#define LDSYMSZ (8 + 3 * 4 + 2 + 2)
Packit bbfece
Packit bbfece
struct external_ldrel
Packit bbfece
{
Packit bbfece
  bfd_byte l_vaddr[4];
Packit bbfece
  bfd_byte l_symndx[4];
Packit bbfece
  bfd_byte l_rtype[2];
Packit bbfece
  bfd_byte l_rsecnm[2];
Packit bbfece
};
Packit bbfece
Packit bbfece
#define LDRELSZ (2 * 4 + 2 * 2)
Packit bbfece
Packit bbfece
struct external_exceptab
Packit bbfece
{
Packit bbfece
  union {
Packit bbfece
    bfd_byte e_symndx[4];
Packit bbfece
    bfd_byte e_paddr[4];
Packit bbfece
  } e_addr;
Packit bbfece
  bfd_byte e_lang[1];
Packit bbfece
  bfd_byte e_reason[1];
Packit bbfece
};
Packit bbfece
Packit bbfece
#define EXCEPTSZ (4 + 2)
Packit bbfece
Packit bbfece
/******************** Core files *************************/
Packit bbfece
Packit bbfece
struct external_core_dumpx
Packit bbfece
{
Packit bbfece
  unsigned char c_signo[1];
Packit bbfece
  unsigned char c_flag[1];
Packit bbfece
  unsigned char c_entries[2];
Packit bbfece
Packit bbfece
  unsigned char c_version[4];
Packit bbfece
Packit bbfece
  unsigned char c_fdsinfox[8];
Packit bbfece
  unsigned char c_loader[8];
Packit bbfece
  unsigned char c_lsize[8];
Packit bbfece
Packit bbfece
  unsigned char c_n_thr[4];
Packit bbfece
  unsigned char c_reserved0[4];
Packit bbfece
  unsigned char c_thr[8];
Packit bbfece
Packit bbfece
  unsigned char c_segs[8];
Packit bbfece
  unsigned char c_segregion[8];
Packit bbfece
Packit bbfece
  unsigned char c_stack[8];
Packit bbfece
  unsigned char c_stackorg[8];
Packit bbfece
  unsigned char c_size[8];
Packit bbfece
Packit bbfece
  unsigned char c_data[8];
Packit bbfece
  unsigned char c_dataorg[8];
Packit bbfece
  unsigned char c_datasize[8];
Packit bbfece
  unsigned char c_sdorg[8];
Packit bbfece
  unsigned char c_sdsize[8];
Packit bbfece
Packit bbfece
  unsigned char c_vmmregions[8];
Packit bbfece
  unsigned char c_vmm[8];
Packit bbfece
Packit bbfece
  unsigned char c_impl[4];
Packit bbfece
  unsigned char c_pad[4];
Packit bbfece
  unsigned char c_cprs[8];
Packit bbfece
  unsigned char c_reserved[7 * 8];
Packit bbfece
Packit bbfece
  /* Followed by:
Packit bbfece
     - context of the faulting thread.
Packit bbfece
     - user structure.  */
Packit bbfece
};
Packit bbfece
Packit bbfece
Packit bbfece
/* Core file verion.  */
Packit bbfece
#define CORE_DUMPX_VERSION 0x0feeddb1
Packit bbfece
#define CORE_DUMPXX_VERSION 0x0feeddb2
Packit bbfece
Packit bbfece
struct external_ld_info32
Packit bbfece
{
Packit bbfece
  unsigned char ldinfo_next[4];
Packit bbfece
  unsigned char core_offset[4];
Packit bbfece
  unsigned char ldinfo_textorg[4];
Packit bbfece
  unsigned char ldinfo_textsize[4];
Packit bbfece
  unsigned char ldinfo_dataorg[4];
Packit bbfece
  unsigned char ldinfo_datasize[4];
Packit bbfece
  unsigned char ldinfo_filename[2];
Packit bbfece
};