Home | History | Annotate | Line # | Download | only in coff
rs6000.h revision 1.1.1.3
      1      1.1  christos /* IBM RS/6000 "XCOFF" file definitions for BFD.
      2      1.1  christos    Copyright (C) 1990, 1991, 2001, 2010 Free Software Foundation, Inc.
      3      1.1  christos    Written by Mimi Phuong-Thao Vo of IBM
      4      1.1  christos    and John Gilmore of Cygnus Support.
      5      1.1  christos 
      6      1.1  christos    This program is free software; you can redistribute it and/or modify
      7      1.1  christos    it under the terms of the GNU General Public License as published by
      8      1.1  christos    the Free Software Foundation; either version 3 of the License, or
      9      1.1  christos    (at your option) any later version.
     10      1.1  christos 
     11      1.1  christos    This program is distributed in the hope that it will be useful,
     12      1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13      1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14      1.1  christos    GNU General Public License for more details.
     15      1.1  christos 
     16      1.1  christos    You should have received a copy of the GNU General Public License
     17      1.1  christos    along with this program; if not, write to the Free Software
     18      1.1  christos    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     19      1.1  christos    MA 02110-1301, USA.  */
     20      1.1  christos 
     21      1.1  christos /********************** FILE HEADER **********************/
     22      1.1  christos 
     23      1.1  christos struct external_filehdr {
     24      1.1  christos 	char f_magic[2];	/* magic number			*/
     25      1.1  christos 	char f_nscns[2];	/* number of sections		*/
     26      1.1  christos 	char f_timdat[4];	/* time & date stamp		*/
     27      1.1  christos 	char f_symptr[4];	/* file pointer to symtab	*/
     28      1.1  christos 	char f_nsyms[4];	/* number of symtab entries	*/
     29      1.1  christos 	char f_opthdr[2];	/* sizeof(optional hdr)		*/
     30      1.1  christos 	char f_flags[2];	/* flags			*/
     31      1.1  christos };
     32      1.1  christos 
     33      1.1  christos         /* IBM RS/6000 */
     34      1.1  christos #define U802WRMAGIC     0730    /* writeable text segments **chh**      */
     35      1.1  christos #define U802ROMAGIC     0735    /* readonly sharable text segments      */
     36      1.1  christos #define U802TOCMAGIC    0737    /* readonly text segments and TOC       */
     37      1.1  christos 
     38      1.1  christos #define BADMAG(x)	\
     39      1.1  christos 	((x).f_magic != U802ROMAGIC && (x).f_magic != U802WRMAGIC && \
     40      1.1  christos 	 (x).f_magic != U802TOCMAGIC)
     41      1.1  christos 
     42      1.1  christos #define	FILHDR	struct external_filehdr
     43      1.1  christos #define	FILHSZ	20
     44      1.1  christos 
     45      1.1  christos 
     46      1.1  christos /********************** AOUT "OPTIONAL HEADER" **********************/
     47      1.1  christos 
     48      1.1  christos 
     49  1.1.1.3  christos typedef struct
     50      1.1  christos {
     51      1.1  christos   unsigned char	magic[2];	/* type of file			*/
     52      1.1  christos   unsigned char	vstamp[2];	/* version stamp		*/
     53      1.1  christos   unsigned char	tsize[4];	/* text size in bytes, padded to FW bdry */
     54      1.1  christos   unsigned char	dsize[4];	/* initialized data "  "	*/
     55      1.1  christos   unsigned char	bsize[4];	/* uninitialized data "   "	*/
     56      1.1  christos   unsigned char	entry[4];	/* entry pt.			*/
     57      1.1  christos   unsigned char	text_start[4];	/* base of text used for this file */
     58      1.1  christos   unsigned char	data_start[4];	/* base of data used for this file */
     59      1.1  christos   unsigned char	o_toc[4];	/* address of TOC */
     60      1.1  christos   unsigned char	o_snentry[2];	/* section number of entry point */
     61      1.1  christos   unsigned char	o_sntext[2];	/* section number of .text section */
     62      1.1  christos   unsigned char	o_sndata[2];	/* section number of .data section */
     63      1.1  christos   unsigned char	o_sntoc[2];	/* section number of TOC */
     64      1.1  christos   unsigned char	o_snloader[2];	/* section number of .loader section */
     65      1.1  christos   unsigned char	o_snbss[2];	/* section number of .bss section */
     66      1.1  christos   unsigned char	o_algntext[2];	/* .text alignment */
     67      1.1  christos   unsigned char	o_algndata[2];	/* .data alignment */
     68      1.1  christos   unsigned char	o_modtype[2];	/* module type (??) */
     69      1.1  christos   unsigned char o_cputype[2];	/* cpu type */
     70      1.1  christos   unsigned char	o_maxstack[4];	/* max stack size (??) */
     71      1.1  christos   unsigned char o_maxdata[4];	/* max data size (??) */
     72      1.1  christos   unsigned char	o_resv2[12];	/* reserved */
     73      1.1  christos }
     74      1.1  christos AOUTHDR;
     75      1.1  christos 
     76      1.1  christos #define AOUTSZ 72
     77      1.1  christos #define SMALL_AOUTSZ (28)
     78      1.1  christos #define AOUTHDRSZ 72
     79      1.1  christos 
     80      1.1  christos /********************** SECTION HEADER **********************/
     81      1.1  christos 
     82      1.1  christos 
     83      1.1  christos struct external_scnhdr {
     84      1.1  christos 	char		s_name[8];	/* section name			*/
     85      1.1  christos 	char		s_paddr[4];	/* physical address, aliased s_nlib */
     86      1.1  christos 	char		s_vaddr[4];	/* virtual address		*/
     87      1.1  christos 	char		s_size[4];	/* section size			*/
     88      1.1  christos 	char		s_scnptr[4];	/* file ptr to raw data for section */
     89      1.1  christos 	char		s_relptr[4];	/* file ptr to relocation	*/
     90      1.1  christos 	char		s_lnnoptr[4];	/* file ptr to line numbers	*/
     91      1.1  christos 	char		s_nreloc[2];	/* number of relocation entries	*/
     92      1.1  christos 	char		s_nlnno[2];	/* number of line number entries*/
     93      1.1  christos 	char		s_flags[4];	/* flags			*/
     94      1.1  christos };
     95      1.1  christos 
     96      1.1  christos #define	SCNHDR	struct external_scnhdr
     97      1.1  christos #define	SCNHSZ	40
     98      1.1  christos 
     99      1.1  christos /********************** LINE NUMBERS **********************/
    100      1.1  christos 
    101      1.1  christos /* 1 line number entry for every "breakpointable" source line in a section.
    102      1.1  christos  * Line numbers are grouped on a per function basis; first entry in a function
    103      1.1  christos  * grouping will have l_lnno = 0 and in place of physical address will be the
    104      1.1  christos  * symbol table index of the function name.
    105      1.1  christos  */
    106      1.1  christos struct external_lineno {
    107      1.1  christos 	union {
    108      1.1  christos 		char l_symndx[4];	/* function name symbol index, iff l_lnno == 0*/
    109      1.1  christos 		char l_paddr[4];	/* (physical) address of line number	*/
    110      1.1  christos 	} l_addr;
    111      1.1  christos 	char l_lnno[2];	/* line number		*/
    112      1.1  christos };
    113      1.1  christos 
    114      1.1  christos 
    115      1.1  christos #define	LINENO	struct external_lineno
    116      1.1  christos #define	LINESZ	6
    117      1.1  christos 
    118      1.1  christos 
    119      1.1  christos /********************** SYMBOLS **********************/
    120      1.1  christos 
    121      1.1  christos #define E_SYMNMLEN	8	/* # characters in a symbol name	*/
    122      1.1  christos #define E_FILNMLEN	14	/* # characters in a file name		*/
    123      1.1  christos #define E_DIMNUM	4	/* # array dimensions in auxiliary entry */
    124      1.1  christos 
    125      1.1  christos struct external_syment
    126      1.1  christos {
    127      1.1  christos   union {
    128      1.1  christos     char e_name[E_SYMNMLEN];
    129      1.1  christos     struct {
    130      1.1  christos       char e_zeroes[4];
    131      1.1  christos       char e_offset[4];
    132      1.1  christos     } e;
    133      1.1  christos   } e;
    134      1.1  christos   char e_value[4];
    135      1.1  christos   char e_scnum[2];
    136      1.1  christos   char e_type[2];
    137      1.1  christos   char e_sclass[1];
    138      1.1  christos   char e_numaux[1];
    139      1.1  christos };
    140      1.1  christos 
    141      1.1  christos 
    142      1.1  christos 
    143      1.1  christos #define N_BTMASK	(017)
    144      1.1  christos #define N_TMASK		(060)
    145      1.1  christos #define N_BTSHFT	(4)
    146      1.1  christos #define N_TSHIFT	(2)
    147      1.1  christos 
    148      1.1  christos 
    149      1.1  christos union external_auxent {
    150      1.1  christos 	struct {
    151      1.1  christos 		char x_tagndx[4];	/* str, un, or enum tag indx */
    152      1.1  christos 		union {
    153      1.1  christos 			struct {
    154      1.1  christos 			    char  x_lnno[2]; /* declaration line number */
    155      1.1  christos 			    char  x_size[2]; /* str/union/array size */
    156      1.1  christos 			} x_lnsz;
    157      1.1  christos 			char x_fsize[4];	/* size of function */
    158      1.1  christos 		} x_misc;
    159      1.1  christos 		union {
    160      1.1  christos 			struct {		/* if ISFCN, tag, or .bb */
    161      1.1  christos 			    char x_lnnoptr[4];	/* ptr to fcn line # */
    162      1.1  christos 			    char x_endndx[4];	/* entry ndx past block end */
    163      1.1  christos 			} x_fcn;
    164      1.1  christos 			struct {		/* if ISARY, up to 4 dimen. */
    165      1.1  christos 			    char x_dimen[E_DIMNUM][2];
    166      1.1  christos 			} x_ary;
    167      1.1  christos 		} x_fcnary;
    168      1.1  christos 		char x_tvndx[2];		/* tv index */
    169      1.1  christos 	} x_sym;
    170      1.1  christos 
    171  1.1.1.2  christos         struct {
    172  1.1.1.2  christos                 union {
    173  1.1.1.2  christos                         char x_fname[E_FILNMLEN];
    174  1.1.1.2  christos                         struct {
    175  1.1.1.2  christos                                 char x_zeroes[4];
    176  1.1.1.2  christos                                 char x_offset[4];
    177  1.1.1.2  christos                         } x_n;
    178  1.1.1.2  christos                 } x_n;
    179  1.1.1.2  christos                 char x_ftype[1];
    180  1.1.1.2  christos         } x_file;
    181      1.1  christos 
    182      1.1  christos 	struct {
    183      1.1  christos 		char x_scnlen[4];			/* section length */
    184      1.1  christos 		char x_nreloc[2];	/* # relocation entries */
    185      1.1  christos 		char x_nlinno[2];	/* # line numbers */
    186      1.1  christos 	} x_scn;
    187      1.1  christos 
    188      1.1  christos         struct {
    189      1.1  christos 		char x_tvfill[4];	/* tv fill value */
    190      1.1  christos 		char x_tvlen[2];	/* length of .tv */
    191      1.1  christos 		char x_tvran[2][2];	/* tv range */
    192      1.1  christos 	} x_tv;		/* info about .tv section (in auxent of symbol .tv)) */
    193      1.1  christos 
    194      1.1  christos 	struct {
    195      1.1  christos 		unsigned char x_scnlen[4];
    196      1.1  christos 		unsigned char x_parmhash[4];
    197      1.1  christos 		unsigned char x_snhash[2];
    198      1.1  christos 		unsigned char x_smtyp[1];
    199      1.1  christos 		unsigned char x_smclas[1];
    200      1.1  christos 		unsigned char x_stab[4];
    201      1.1  christos 		unsigned char x_snstab[2];
    202      1.1  christos 	} x_csect;
    203      1.1  christos 
    204      1.1  christos };
    205      1.1  christos 
    206      1.1  christos #define	SYMENT	struct external_syment
    207  1.1.1.3  christos #define	SYMESZ	18
    208      1.1  christos #define	AUXENT	union external_auxent
    209      1.1  christos #define	AUXESZ	18
    210      1.1  christos #define DBXMASK 0x80		/* for dbx storage mask */
    211      1.1  christos #define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK)
    212      1.1  christos 
    213      1.1  christos 
    214      1.1  christos 
    215      1.1  christos /********************** RELOCATION DIRECTIVES **********************/
    216      1.1  christos 
    217      1.1  christos 
    218      1.1  christos struct external_reloc {
    219      1.1  christos   char r_vaddr[4];
    220      1.1  christos   char r_symndx[4];
    221      1.1  christos   char r_size[1];
    222      1.1  christos   char r_type[1];
    223      1.1  christos };
    224      1.1  christos 
    225      1.1  christos 
    226      1.1  christos #define RELOC struct external_reloc
    227      1.1  christos #define RELSZ 10
    228      1.1  christos 
    229      1.1  christos #define DEFAULT_DATA_SECTION_ALIGNMENT 4
    230      1.1  christos #define DEFAULT_BSS_SECTION_ALIGNMENT 4
    231      1.1  christos #define DEFAULT_TEXT_SECTION_ALIGNMENT 4
    232      1.1  christos /* For new sections we havn't heard of before */
    233      1.1  christos #define DEFAULT_SECTION_ALIGNMENT 4
    234      1.1  christos 
    235      1.1  christos /* The ldhdr structure.  This appears at the start of the .loader
    236      1.1  christos    section.  */
    237      1.1  christos 
    238      1.1  christos struct external_ldhdr
    239      1.1  christos {
    240      1.1  christos   bfd_byte l_version[4];
    241      1.1  christos   bfd_byte l_nsyms[4];
    242      1.1  christos   bfd_byte l_nreloc[4];
    243      1.1  christos   bfd_byte l_istlen[4];
    244      1.1  christos   bfd_byte l_nimpid[4];
    245      1.1  christos   bfd_byte l_impoff[4];
    246      1.1  christos   bfd_byte l_stlen[4];
    247      1.1  christos   bfd_byte l_stoff[4];
    248      1.1  christos };
    249      1.1  christos 
    250      1.1  christos #define LDHDRSZ (8 * 4)
    251      1.1  christos 
    252      1.1  christos struct external_ldsym
    253      1.1  christos {
    254      1.1  christos   union
    255      1.1  christos     {
    256  1.1.1.2  christos       bfd_byte _l_name[E_SYMNMLEN];
    257      1.1  christos       struct
    258      1.1  christos 	{
    259      1.1  christos 	  bfd_byte _l_zeroes[4];
    260      1.1  christos 	  bfd_byte _l_offset[4];
    261      1.1  christos 	} _l_l;
    262      1.1  christos     } _l;
    263      1.1  christos   bfd_byte l_value[4];
    264      1.1  christos   bfd_byte l_scnum[2];
    265      1.1  christos   bfd_byte l_smtype[1];
    266      1.1  christos   bfd_byte l_smclas[1];
    267      1.1  christos   bfd_byte l_ifile[4];
    268      1.1  christos   bfd_byte l_parm[4];
    269      1.1  christos };
    270      1.1  christos 
    271      1.1  christos #define LDSYMSZ (8 + 3 * 4 + 2 + 2)
    272      1.1  christos 
    273      1.1  christos struct external_ldrel
    274      1.1  christos {
    275      1.1  christos   bfd_byte l_vaddr[4];
    276      1.1  christos   bfd_byte l_symndx[4];
    277      1.1  christos   bfd_byte l_rtype[2];
    278      1.1  christos   bfd_byte l_rsecnm[2];
    279      1.1  christos };
    280      1.1  christos 
    281      1.1  christos #define LDRELSZ (2 * 4 + 2 * 2)
    282  1.1.1.2  christos 
    283  1.1.1.2  christos struct external_exceptab
    284  1.1.1.2  christos {
    285  1.1.1.2  christos   union {
    286  1.1.1.2  christos     bfd_byte e_symndx[4];
    287  1.1.1.2  christos     bfd_byte e_paddr[4];
    288  1.1.1.2  christos   } e_addr;
    289  1.1.1.2  christos   bfd_byte e_lang[1];
    290  1.1.1.2  christos   bfd_byte e_reason[1];
    291  1.1.1.2  christos };
    292  1.1.1.2  christos 
    293  1.1.1.2  christos #define EXCEPTSZ (4 + 2)
    294  1.1.1.3  christos 
    295  1.1.1.3  christos /******************** Core files *************************/
    296  1.1.1.3  christos 
    297  1.1.1.3  christos struct external_core_dumpx
    298  1.1.1.3  christos {
    299  1.1.1.3  christos   unsigned char c_signo[1];
    300  1.1.1.3  christos   unsigned char c_flag[1];
    301  1.1.1.3  christos   unsigned char c_entries[2];
    302  1.1.1.3  christos 
    303  1.1.1.3  christos   unsigned char c_version[4];
    304  1.1.1.3  christos 
    305  1.1.1.3  christos   unsigned char c_fdsinfox[8];
    306  1.1.1.3  christos   unsigned char c_loader[8];
    307  1.1.1.3  christos   unsigned char c_lsize[8];
    308  1.1.1.3  christos 
    309  1.1.1.3  christos   unsigned char c_n_thr[4];
    310  1.1.1.3  christos   unsigned char c_reserved0[4];
    311  1.1.1.3  christos   unsigned char c_thr[8];
    312  1.1.1.3  christos 
    313  1.1.1.3  christos   unsigned char c_segs[8];
    314  1.1.1.3  christos   unsigned char c_segregion[8];
    315  1.1.1.3  christos 
    316  1.1.1.3  christos   unsigned char c_stack[8];
    317  1.1.1.3  christos   unsigned char c_stackorg[8];
    318  1.1.1.3  christos   unsigned char c_size[8];
    319  1.1.1.3  christos 
    320  1.1.1.3  christos   unsigned char c_data[8];
    321  1.1.1.3  christos   unsigned char c_dataorg[8];
    322  1.1.1.3  christos   unsigned char c_datasize[8];
    323  1.1.1.3  christos   unsigned char c_sdorg[8];
    324  1.1.1.3  christos   unsigned char c_sdsize[8];
    325  1.1.1.3  christos 
    326  1.1.1.3  christos   unsigned char c_vmmregions[8];
    327  1.1.1.3  christos   unsigned char c_vmm[8];
    328  1.1.1.3  christos 
    329  1.1.1.3  christos   unsigned char c_impl[4];
    330  1.1.1.3  christos   unsigned char c_pad[4];
    331  1.1.1.3  christos   unsigned char c_cprs[8];
    332  1.1.1.3  christos   unsigned char c_reserved[7 * 8];
    333  1.1.1.3  christos 
    334  1.1.1.3  christos   /* Followed by:
    335  1.1.1.3  christos      - context of the faulting thread.
    336  1.1.1.3  christos      - user structure.  */
    337  1.1.1.3  christos };
    338  1.1.1.3  christos 
    339  1.1.1.3  christos 
    340  1.1.1.3  christos /* Core file verion.  */
    341  1.1.1.3  christos #define CORE_DUMPX_VERSION 0x0feeddb1
    342  1.1.1.3  christos #define CORE_DUMPXX_VERSION 0x0feeddb2
    343  1.1.1.3  christos 
    344  1.1.1.3  christos struct external_ld_info32
    345  1.1.1.3  christos {
    346  1.1.1.3  christos   unsigned char ldinfo_next[4];
    347  1.1.1.3  christos   unsigned char core_offset[4];
    348  1.1.1.3  christos   unsigned char ldinfo_textorg[4];
    349  1.1.1.3  christos   unsigned char ldinfo_textsize[4];
    350  1.1.1.3  christos   unsigned char ldinfo_dataorg[4];
    351  1.1.1.3  christos   unsigned char ldinfo_datasize[4];
    352  1.1.1.3  christos   unsigned char ldinfo_filename[2];
    353  1.1.1.3  christos };
    354