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