Home | History | Annotate | Line # | Download | only in coff
rs6000.h revision 1.1
      1  1.1  skrll /* IBM RS/6000 "XCOFF" file definitions for BFD.
      2  1.1  skrll    Copyright (C) 1990, 1991, 2001 Free Software Foundation, Inc.
      3  1.1  skrll    Written by Mimi Phuong-Thao Vo of IBM
      4  1.1  skrll    and John Gilmore of Cygnus Support.  */
      5  1.1  skrll 
      6  1.1  skrll /********************** FILE HEADER **********************/
      7  1.1  skrll 
      8  1.1  skrll struct external_filehdr {
      9  1.1  skrll 	char f_magic[2];	/* magic number			*/
     10  1.1  skrll 	char f_nscns[2];	/* number of sections		*/
     11  1.1  skrll 	char f_timdat[4];	/* time & date stamp		*/
     12  1.1  skrll 	char f_symptr[4];	/* file pointer to symtab	*/
     13  1.1  skrll 	char f_nsyms[4];	/* number of symtab entries	*/
     14  1.1  skrll 	char f_opthdr[2];	/* sizeof(optional hdr)		*/
     15  1.1  skrll 	char f_flags[2];	/* flags			*/
     16  1.1  skrll };
     17  1.1  skrll 
     18  1.1  skrll         /* IBM RS/6000 */
     19  1.1  skrll #define U802WRMAGIC     0730    /* writeable text segments **chh**      */
     20  1.1  skrll #define U802ROMAGIC     0735    /* readonly sharable text segments      */
     21  1.1  skrll #define U802TOCMAGIC    0737    /* readonly text segments and TOC       */
     22  1.1  skrll 
     23  1.1  skrll #define BADMAG(x)	\
     24  1.1  skrll 	((x).f_magic != U802ROMAGIC && (x).f_magic != U802WRMAGIC && \
     25  1.1  skrll 	 (x).f_magic != U802TOCMAGIC)
     26  1.1  skrll 
     27  1.1  skrll #define	FILHDR	struct external_filehdr
     28  1.1  skrll #define	FILHSZ	20
     29  1.1  skrll 
     30  1.1  skrll 
     31  1.1  skrll /********************** AOUT "OPTIONAL HEADER" **********************/
     32  1.1  skrll 
     33  1.1  skrll 
     34  1.1  skrll typedef struct
     35  1.1  skrll {
     36  1.1  skrll   unsigned char	magic[2];	/* type of file			*/
     37  1.1  skrll   unsigned char	vstamp[2];	/* version stamp		*/
     38  1.1  skrll   unsigned char	tsize[4];	/* text size in bytes, padded to FW bdry */
     39  1.1  skrll   unsigned char	dsize[4];	/* initialized data "  "	*/
     40  1.1  skrll   unsigned char	bsize[4];	/* uninitialized data "   "	*/
     41  1.1  skrll   unsigned char	entry[4];	/* entry pt.			*/
     42  1.1  skrll   unsigned char	text_start[4];	/* base of text used for this file */
     43  1.1  skrll   unsigned char	data_start[4];	/* base of data used for this file */
     44  1.1  skrll   unsigned char	o_toc[4];	/* address of TOC */
     45  1.1  skrll   unsigned char	o_snentry[2];	/* section number of entry point */
     46  1.1  skrll   unsigned char	o_sntext[2];	/* section number of .text section */
     47  1.1  skrll   unsigned char	o_sndata[2];	/* section number of .data section */
     48  1.1  skrll   unsigned char	o_sntoc[2];	/* section number of TOC */
     49  1.1  skrll   unsigned char	o_snloader[2];	/* section number of .loader section */
     50  1.1  skrll   unsigned char	o_snbss[2];	/* section number of .bss section */
     51  1.1  skrll   unsigned char	o_algntext[2];	/* .text alignment */
     52  1.1  skrll   unsigned char	o_algndata[2];	/* .data alignment */
     53  1.1  skrll   unsigned char	o_modtype[2];	/* module type (??) */
     54  1.1  skrll   unsigned char o_cputype[2];	/* cpu type */
     55  1.1  skrll   unsigned char	o_maxstack[4];	/* max stack size (??) */
     56  1.1  skrll   unsigned char o_maxdata[4];	/* max data size (??) */
     57  1.1  skrll   unsigned char	o_resv2[12];	/* reserved */
     58  1.1  skrll }
     59  1.1  skrll AOUTHDR;
     60  1.1  skrll 
     61  1.1  skrll #define AOUTSZ 72
     62  1.1  skrll #define SMALL_AOUTSZ (28)
     63  1.1  skrll #define AOUTHDRSZ 72
     64  1.1  skrll 
     65  1.1  skrll /********************** SECTION HEADER **********************/
     66  1.1  skrll 
     67  1.1  skrll 
     68  1.1  skrll struct external_scnhdr {
     69  1.1  skrll 	char		s_name[8];	/* section name			*/
     70  1.1  skrll 	char		s_paddr[4];	/* physical address, aliased s_nlib */
     71  1.1  skrll 	char		s_vaddr[4];	/* virtual address		*/
     72  1.1  skrll 	char		s_size[4];	/* section size			*/
     73  1.1  skrll 	char		s_scnptr[4];	/* file ptr to raw data for section */
     74  1.1  skrll 	char		s_relptr[4];	/* file ptr to relocation	*/
     75  1.1  skrll 	char		s_lnnoptr[4];	/* file ptr to line numbers	*/
     76  1.1  skrll 	char		s_nreloc[2];	/* number of relocation entries	*/
     77  1.1  skrll 	char		s_nlnno[2];	/* number of line number entries*/
     78  1.1  skrll 	char		s_flags[4];	/* flags			*/
     79  1.1  skrll };
     80  1.1  skrll 
     81  1.1  skrll #define	SCNHDR	struct external_scnhdr
     82  1.1  skrll #define	SCNHSZ	40
     83  1.1  skrll 
     84  1.1  skrll /********************** LINE NUMBERS **********************/
     85  1.1  skrll 
     86  1.1  skrll /* 1 line number entry for every "breakpointable" source line in a section.
     87  1.1  skrll  * Line numbers are grouped on a per function basis; first entry in a function
     88  1.1  skrll  * grouping will have l_lnno = 0 and in place of physical address will be the
     89  1.1  skrll  * symbol table index of the function name.
     90  1.1  skrll  */
     91  1.1  skrll struct external_lineno {
     92  1.1  skrll 	union {
     93  1.1  skrll 		char l_symndx[4];	/* function name symbol index, iff l_lnno == 0*/
     94  1.1  skrll 		char l_paddr[4];	/* (physical) address of line number	*/
     95  1.1  skrll 	} l_addr;
     96  1.1  skrll 	char l_lnno[2];	/* line number		*/
     97  1.1  skrll };
     98  1.1  skrll 
     99  1.1  skrll 
    100  1.1  skrll #define	LINENO	struct external_lineno
    101  1.1  skrll #define	LINESZ	6
    102  1.1  skrll 
    103  1.1  skrll 
    104  1.1  skrll /********************** SYMBOLS **********************/
    105  1.1  skrll 
    106  1.1  skrll #define E_SYMNMLEN	8	/* # characters in a symbol name	*/
    107  1.1  skrll #define E_FILNMLEN	14	/* # characters in a file name		*/
    108  1.1  skrll #define E_DIMNUM	4	/* # array dimensions in auxiliary entry */
    109  1.1  skrll 
    110  1.1  skrll struct external_syment
    111  1.1  skrll {
    112  1.1  skrll   union {
    113  1.1  skrll     char e_name[E_SYMNMLEN];
    114  1.1  skrll     struct {
    115  1.1  skrll       char e_zeroes[4];
    116  1.1  skrll       char e_offset[4];
    117  1.1  skrll     } e;
    118  1.1  skrll   } e;
    119  1.1  skrll   char e_value[4];
    120  1.1  skrll   char e_scnum[2];
    121  1.1  skrll   char e_type[2];
    122  1.1  skrll   char e_sclass[1];
    123  1.1  skrll   char e_numaux[1];
    124  1.1  skrll };
    125  1.1  skrll 
    126  1.1  skrll 
    127  1.1  skrll 
    128  1.1  skrll #define N_BTMASK	(017)
    129  1.1  skrll #define N_TMASK		(060)
    130  1.1  skrll #define N_BTSHFT	(4)
    131  1.1  skrll #define N_TSHIFT	(2)
    132  1.1  skrll 
    133  1.1  skrll 
    134  1.1  skrll union external_auxent {
    135  1.1  skrll 	struct {
    136  1.1  skrll 		char x_tagndx[4];	/* str, un, or enum tag indx */
    137  1.1  skrll 		union {
    138  1.1  skrll 			struct {
    139  1.1  skrll 			    char  x_lnno[2]; /* declaration line number */
    140  1.1  skrll 			    char  x_size[2]; /* str/union/array size */
    141  1.1  skrll 			} x_lnsz;
    142  1.1  skrll 			char x_fsize[4];	/* size of function */
    143  1.1  skrll 		} x_misc;
    144  1.1  skrll 		union {
    145  1.1  skrll 			struct {		/* if ISFCN, tag, or .bb */
    146  1.1  skrll 			    char x_lnnoptr[4];	/* ptr to fcn line # */
    147  1.1  skrll 			    char x_endndx[4];	/* entry ndx past block end */
    148  1.1  skrll 			} x_fcn;
    149  1.1  skrll 			struct {		/* if ISARY, up to 4 dimen. */
    150  1.1  skrll 			    char x_dimen[E_DIMNUM][2];
    151  1.1  skrll 			} x_ary;
    152  1.1  skrll 		} x_fcnary;
    153  1.1  skrll 		char x_tvndx[2];		/* tv index */
    154  1.1  skrll 	} x_sym;
    155  1.1  skrll 
    156  1.1  skrll 	union {
    157  1.1  skrll 		char x_fname[E_FILNMLEN];
    158  1.1  skrll 		struct {
    159  1.1  skrll 			char x_zeroes[4];
    160  1.1  skrll 			char x_offset[4];
    161  1.1  skrll 		} x_n;
    162  1.1  skrll 	} x_file;
    163  1.1  skrll 
    164  1.1  skrll 	struct {
    165  1.1  skrll 		char x_scnlen[4];			/* section length */
    166  1.1  skrll 		char x_nreloc[2];	/* # relocation entries */
    167  1.1  skrll 		char x_nlinno[2];	/* # line numbers */
    168  1.1  skrll 	} x_scn;
    169  1.1  skrll 
    170  1.1  skrll         struct {
    171  1.1  skrll 		char x_tvfill[4];	/* tv fill value */
    172  1.1  skrll 		char x_tvlen[2];	/* length of .tv */
    173  1.1  skrll 		char x_tvran[2][2];	/* tv range */
    174  1.1  skrll 	} x_tv;		/* info about .tv section (in auxent of symbol .tv)) */
    175  1.1  skrll 
    176  1.1  skrll 	struct {
    177  1.1  skrll 		unsigned char x_scnlen[4];
    178  1.1  skrll 		unsigned char x_parmhash[4];
    179  1.1  skrll 		unsigned char x_snhash[2];
    180  1.1  skrll 		unsigned char x_smtyp[1];
    181  1.1  skrll 		unsigned char x_smclas[1];
    182  1.1  skrll 		unsigned char x_stab[4];
    183  1.1  skrll 		unsigned char x_snstab[2];
    184  1.1  skrll 	} x_csect;
    185  1.1  skrll 
    186  1.1  skrll };
    187  1.1  skrll 
    188  1.1  skrll #define	SYMENT	struct external_syment
    189  1.1  skrll #define	SYMESZ	18
    190  1.1  skrll #define	AUXENT	union external_auxent
    191  1.1  skrll #define	AUXESZ	18
    192  1.1  skrll #define DBXMASK 0x80		/* for dbx storage mask */
    193  1.1  skrll #define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK)
    194  1.1  skrll 
    195  1.1  skrll 
    196  1.1  skrll 
    197  1.1  skrll /********************** RELOCATION DIRECTIVES **********************/
    198  1.1  skrll 
    199  1.1  skrll 
    200  1.1  skrll struct external_reloc {
    201  1.1  skrll   char r_vaddr[4];
    202  1.1  skrll   char r_symndx[4];
    203  1.1  skrll   char r_size[1];
    204  1.1  skrll   char r_type[1];
    205  1.1  skrll };
    206  1.1  skrll 
    207  1.1  skrll 
    208  1.1  skrll #define RELOC struct external_reloc
    209  1.1  skrll #define RELSZ 10
    210  1.1  skrll 
    211  1.1  skrll #define DEFAULT_DATA_SECTION_ALIGNMENT 4
    212  1.1  skrll #define DEFAULT_BSS_SECTION_ALIGNMENT 4
    213  1.1  skrll #define DEFAULT_TEXT_SECTION_ALIGNMENT 4
    214  1.1  skrll /* For new sections we havn't heard of before */
    215  1.1  skrll #define DEFAULT_SECTION_ALIGNMENT 4
    216  1.1  skrll 
    217  1.1  skrll /* The ldhdr structure.  This appears at the start of the .loader
    218  1.1  skrll    section.  */
    219  1.1  skrll 
    220  1.1  skrll struct external_ldhdr
    221  1.1  skrll {
    222  1.1  skrll   bfd_byte l_version[4];
    223  1.1  skrll   bfd_byte l_nsyms[4];
    224  1.1  skrll   bfd_byte l_nreloc[4];
    225  1.1  skrll   bfd_byte l_istlen[4];
    226  1.1  skrll   bfd_byte l_nimpid[4];
    227  1.1  skrll   bfd_byte l_impoff[4];
    228  1.1  skrll   bfd_byte l_stlen[4];
    229  1.1  skrll   bfd_byte l_stoff[4];
    230  1.1  skrll };
    231  1.1  skrll 
    232  1.1  skrll #define LDHDRSZ (8 * 4)
    233  1.1  skrll 
    234  1.1  skrll struct external_ldsym
    235  1.1  skrll {
    236  1.1  skrll   union
    237  1.1  skrll     {
    238  1.1  skrll       bfd_byte _l_name[SYMNMLEN];
    239  1.1  skrll       struct
    240  1.1  skrll 	{
    241  1.1  skrll 	  bfd_byte _l_zeroes[4];
    242  1.1  skrll 	  bfd_byte _l_offset[4];
    243  1.1  skrll 	} _l_l;
    244  1.1  skrll     } _l;
    245  1.1  skrll   bfd_byte l_value[4];
    246  1.1  skrll   bfd_byte l_scnum[2];
    247  1.1  skrll   bfd_byte l_smtype[1];
    248  1.1  skrll   bfd_byte l_smclas[1];
    249  1.1  skrll   bfd_byte l_ifile[4];
    250  1.1  skrll   bfd_byte l_parm[4];
    251  1.1  skrll };
    252  1.1  skrll 
    253  1.1  skrll #define LDSYMSZ (8 + 3 * 4 + 2 + 2)
    254  1.1  skrll 
    255  1.1  skrll struct external_ldrel
    256  1.1  skrll {
    257  1.1  skrll   bfd_byte l_vaddr[4];
    258  1.1  skrll   bfd_byte l_symndx[4];
    259  1.1  skrll   bfd_byte l_rtype[2];
    260  1.1  skrll   bfd_byte l_rsecnm[2];
    261  1.1  skrll };
    262  1.1  skrll 
    263  1.1  skrll #define LDRELSZ (2 * 4 + 2 * 2)
    264