Home | History | Annotate | Line # | Download | only in coff
rs6000.h revision 1.1.1.8
      1      1.1     skrll /* IBM RS/6000 "XCOFF" file definitions for BFD.
      2  1.1.1.8  christos    Copyright (C) 1990-2022 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.1.8  christos   unsigned char magic[2];		/* type of file			*/
     52  1.1.1.8  christos   unsigned char vstamp[2];		/* version stamp		*/
     53  1.1.1.8  christos   unsigned char tsize[4];		/* text size in bytes, padded to FW bdry */
     54  1.1.1.8  christos   unsigned char dsize[4];		/* initialized data "	 "	*/
     55  1.1.1.8  christos   unsigned char bsize[4];		/* uninitialized data "	  "	*/
     56  1.1.1.8  christos   unsigned char entry[4];		/* entry pt.			*/
     57  1.1.1.8  christos   unsigned char text_start[4];		/* base of text used for this file */
     58  1.1.1.8  christos   unsigned char data_start[4];		/* base of data used for this file */
     59  1.1.1.8  christos   unsigned char o_toc[4];		/* address of TOC */
     60  1.1.1.8  christos   unsigned char o_snentry[2];		/* section number of entry point */
     61  1.1.1.8  christos   unsigned char o_sntext[2];		/* section number of .text section */
     62  1.1.1.8  christos   unsigned char o_sndata[2];		/* section number of .data section */
     63  1.1.1.8  christos   unsigned char o_sntoc[2];		/* section number of TOC */
     64  1.1.1.8  christos   unsigned char o_snloader[2];		/* section number of .loader section */
     65  1.1.1.8  christos   unsigned char o_snbss[2];		/* section number of .bss section */
     66  1.1.1.8  christos   unsigned char o_algntext[2];		/* .text alignment */
     67  1.1.1.8  christos   unsigned char o_algndata[2];		/* .data alignment */
     68  1.1.1.8  christos   unsigned char o_modtype[2];		/* module type (??) */
     69  1.1.1.8  christos   unsigned char o_cputype[2];		/* cpu type */
     70  1.1.1.8  christos   unsigned char o_maxstack[4];		/* max stack size (??) */
     71  1.1.1.8  christos   unsigned char o_maxdata[4];		/* max data size (??) */
     72  1.1.1.8  christos   unsigned char o_debugger[4];		/* reserved */
     73  1.1.1.8  christos   unsigned char o_textpsize[1]; 	/* text page size */
     74  1.1.1.8  christos   unsigned char o_datapsize[1]; 	/* data page size */
     75  1.1.1.8  christos   unsigned char o_stackpsize[1];	/* stack page size */
     76  1.1.1.8  christos   unsigned char o_flags[1];		/* Flags and TLS alignment */
     77  1.1.1.8  christos   unsigned char o_sntdata[2];		/* section number of .tdata section */
     78  1.1.1.8  christos   unsigned char o_sntbss[2];		/* section number of .tbss section */
     79      1.1     skrll }
     80      1.1     skrll AOUTHDR;
     81      1.1     skrll 
     82      1.1     skrll #define AOUTSZ 72
     83      1.1     skrll #define SMALL_AOUTSZ (28)
     84      1.1     skrll #define AOUTHDRSZ 72
     85      1.1     skrll 
     86      1.1     skrll /********************** SECTION HEADER **********************/
     87      1.1     skrll 
     88      1.1     skrll 
     89      1.1     skrll struct external_scnhdr {
     90      1.1     skrll 	char		s_name[8];	/* section name			*/
     91      1.1     skrll 	char		s_paddr[4];	/* physical address, aliased s_nlib */
     92      1.1     skrll 	char		s_vaddr[4];	/* virtual address		*/
     93      1.1     skrll 	char		s_size[4];	/* section size			*/
     94      1.1     skrll 	char		s_scnptr[4];	/* file ptr to raw data for section */
     95      1.1     skrll 	char		s_relptr[4];	/* file ptr to relocation	*/
     96      1.1     skrll 	char		s_lnnoptr[4];	/* file ptr to line numbers	*/
     97      1.1     skrll 	char		s_nreloc[2];	/* number of relocation entries	*/
     98      1.1     skrll 	char		s_nlnno[2];	/* number of line number entries*/
     99      1.1     skrll 	char		s_flags[4];	/* flags			*/
    100      1.1     skrll };
    101      1.1     skrll 
    102      1.1     skrll #define	SCNHDR	struct external_scnhdr
    103      1.1     skrll #define	SCNHSZ	40
    104      1.1     skrll 
    105      1.1     skrll /********************** LINE NUMBERS **********************/
    106      1.1     skrll 
    107      1.1     skrll /* 1 line number entry for every "breakpointable" source line in a section.
    108      1.1     skrll  * Line numbers are grouped on a per function basis; first entry in a function
    109      1.1     skrll  * grouping will have l_lnno = 0 and in place of physical address will be the
    110      1.1     skrll  * symbol table index of the function name.
    111      1.1     skrll  */
    112      1.1     skrll struct external_lineno {
    113      1.1     skrll 	union {
    114      1.1     skrll 		char l_symndx[4];	/* function name symbol index, iff l_lnno == 0*/
    115      1.1     skrll 		char l_paddr[4];	/* (physical) address of line number	*/
    116      1.1     skrll 	} l_addr;
    117      1.1     skrll 	char l_lnno[2];	/* line number		*/
    118      1.1     skrll };
    119      1.1     skrll 
    120      1.1     skrll 
    121      1.1     skrll #define	LINENO	struct external_lineno
    122      1.1     skrll #define	LINESZ	6
    123      1.1     skrll 
    124      1.1     skrll 
    125      1.1     skrll /********************** SYMBOLS **********************/
    126      1.1     skrll 
    127      1.1     skrll #define E_SYMNMLEN	8	/* # characters in a symbol name	*/
    128      1.1     skrll #define E_FILNMLEN	14	/* # characters in a file name		*/
    129      1.1     skrll #define E_DIMNUM	4	/* # array dimensions in auxiliary entry */
    130      1.1     skrll 
    131      1.1     skrll struct external_syment
    132      1.1     skrll {
    133      1.1     skrll   union {
    134      1.1     skrll     char e_name[E_SYMNMLEN];
    135      1.1     skrll     struct {
    136      1.1     skrll       char e_zeroes[4];
    137      1.1     skrll       char e_offset[4];
    138      1.1     skrll     } e;
    139      1.1     skrll   } e;
    140      1.1     skrll   char e_value[4];
    141      1.1     skrll   char e_scnum[2];
    142      1.1     skrll   char e_type[2];
    143      1.1     skrll   char e_sclass[1];
    144      1.1     skrll   char e_numaux[1];
    145      1.1     skrll };
    146      1.1     skrll 
    147      1.1     skrll 
    148      1.1     skrll 
    149      1.1     skrll #define N_BTMASK	(017)
    150      1.1     skrll #define N_TMASK		(060)
    151      1.1     skrll #define N_BTSHFT	(4)
    152      1.1     skrll #define N_TSHIFT	(2)
    153      1.1     skrll 
    154      1.1     skrll 
    155      1.1     skrll union external_auxent {
    156  1.1.1.8  christos   struct {
    157  1.1.1.8  christos     char x_pad1[2];
    158  1.1.1.8  christos     char x_lnno[4]; 	/* Source line number */
    159  1.1.1.8  christos     char x_pad[12];
    160  1.1.1.8  christos   } x_sym;
    161  1.1.1.8  christos 
    162  1.1.1.8  christos   struct {
    163  1.1.1.8  christos     char x_exptr[4];
    164  1.1.1.8  christos     char x_fsize[4];
    165  1.1.1.8  christos     char x_lnnoptr[4];
    166  1.1.1.8  christos     char x_endndx[4];
    167  1.1.1.8  christos     char x_pad[1];
    168  1.1.1.8  christos   } x_fcn;
    169  1.1.1.8  christos 
    170  1.1.1.8  christos   struct {
    171  1.1.1.8  christos     union {
    172  1.1.1.8  christos       char x_fname[E_FILNMLEN];
    173  1.1.1.8  christos       struct {
    174  1.1.1.8  christos 	char x_zeroes[4];
    175  1.1.1.8  christos 	char x_offset[4];
    176  1.1.1.8  christos       } x_n;
    177  1.1.1.8  christos     } x_n;
    178  1.1.1.8  christos     char x_ftype[1];
    179  1.1.1.8  christos     char x_resv[3];
    180  1.1.1.8  christos   } x_file;
    181  1.1.1.8  christos 
    182  1.1.1.8  christos   struct {
    183  1.1.1.8  christos     char x_scnlen[4];	/* section length */
    184  1.1.1.8  christos     char x_nreloc[2];	/* # relocation entries */
    185  1.1.1.8  christos     char x_nlinno[2];	/* # line numbers */
    186  1.1.1.8  christos     char x_pad[10];
    187  1.1.1.8  christos   } x_scn;
    188  1.1.1.8  christos 
    189  1.1.1.8  christos   struct {
    190  1.1.1.8  christos     char x_scnlen[4];
    191  1.1.1.8  christos     char x_parmhash[4];
    192  1.1.1.8  christos     char x_snhash[2];
    193  1.1.1.8  christos     char x_smtyp[1];
    194  1.1.1.8  christos     char x_smclas[1];
    195  1.1.1.8  christos     char x_stab[4];
    196  1.1.1.8  christos     char x_snstab[2];
    197  1.1.1.8  christos   } x_csect;
    198  1.1.1.8  christos 
    199  1.1.1.8  christos   struct {
    200  1.1.1.8  christos     char x_scnlen[4];
    201  1.1.1.8  christos     char x_pad1[4];
    202  1.1.1.8  christos     char x_nreloc[4];
    203  1.1.1.8  christos     char x_pad2[6];
    204  1.1.1.8  christos   } x_sect;
    205      1.1     skrll 
    206      1.1     skrll };
    207      1.1     skrll 
    208      1.1     skrll #define	SYMENT	struct external_syment
    209  1.1.1.4  christos #define	SYMESZ	18
    210      1.1     skrll #define	AUXENT	union external_auxent
    211      1.1     skrll #define	AUXESZ	18
    212      1.1     skrll #define DBXMASK 0x80		/* for dbx storage mask */
    213      1.1     skrll #define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK)
    214      1.1     skrll 
    215      1.1     skrll 
    216      1.1     skrll 
    217      1.1     skrll /********************** RELOCATION DIRECTIVES **********************/
    218      1.1     skrll 
    219      1.1     skrll 
    220      1.1     skrll struct external_reloc {
    221      1.1     skrll   char r_vaddr[4];
    222      1.1     skrll   char r_symndx[4];
    223      1.1     skrll   char r_size[1];
    224      1.1     skrll   char r_type[1];
    225      1.1     skrll };
    226      1.1     skrll 
    227      1.1     skrll 
    228      1.1     skrll #define RELOC struct external_reloc
    229      1.1     skrll #define RELSZ 10
    230      1.1     skrll 
    231      1.1     skrll #define DEFAULT_DATA_SECTION_ALIGNMENT 4
    232      1.1     skrll #define DEFAULT_BSS_SECTION_ALIGNMENT 4
    233      1.1     skrll #define DEFAULT_TEXT_SECTION_ALIGNMENT 4
    234      1.1     skrll /* For new sections we havn't heard of before */
    235      1.1     skrll #define DEFAULT_SECTION_ALIGNMENT 4
    236      1.1     skrll 
    237      1.1     skrll /* The ldhdr structure.  This appears at the start of the .loader
    238      1.1     skrll    section.  */
    239      1.1     skrll 
    240      1.1     skrll struct external_ldhdr
    241      1.1     skrll {
    242      1.1     skrll   bfd_byte l_version[4];
    243      1.1     skrll   bfd_byte l_nsyms[4];
    244      1.1     skrll   bfd_byte l_nreloc[4];
    245      1.1     skrll   bfd_byte l_istlen[4];
    246      1.1     skrll   bfd_byte l_nimpid[4];
    247      1.1     skrll   bfd_byte l_impoff[4];
    248      1.1     skrll   bfd_byte l_stlen[4];
    249      1.1     skrll   bfd_byte l_stoff[4];
    250      1.1     skrll };
    251      1.1     skrll 
    252      1.1     skrll #define LDHDRSZ (8 * 4)
    253      1.1     skrll 
    254      1.1     skrll struct external_ldsym
    255      1.1     skrll {
    256      1.1     skrll   union
    257      1.1     skrll     {
    258  1.1.1.3  christos       bfd_byte _l_name[E_SYMNMLEN];
    259      1.1     skrll       struct
    260      1.1     skrll 	{
    261      1.1     skrll 	  bfd_byte _l_zeroes[4];
    262      1.1     skrll 	  bfd_byte _l_offset[4];
    263      1.1     skrll 	} _l_l;
    264      1.1     skrll     } _l;
    265      1.1     skrll   bfd_byte l_value[4];
    266      1.1     skrll   bfd_byte l_scnum[2];
    267      1.1     skrll   bfd_byte l_smtype[1];
    268      1.1     skrll   bfd_byte l_smclas[1];
    269      1.1     skrll   bfd_byte l_ifile[4];
    270      1.1     skrll   bfd_byte l_parm[4];
    271      1.1     skrll };
    272      1.1     skrll 
    273      1.1     skrll #define LDSYMSZ (8 + 3 * 4 + 2 + 2)
    274      1.1     skrll 
    275      1.1     skrll struct external_ldrel
    276      1.1     skrll {
    277      1.1     skrll   bfd_byte l_vaddr[4];
    278      1.1     skrll   bfd_byte l_symndx[4];
    279      1.1     skrll   bfd_byte l_rtype[2];
    280      1.1     skrll   bfd_byte l_rsecnm[2];
    281      1.1     skrll };
    282      1.1     skrll 
    283      1.1     skrll #define LDRELSZ (2 * 4 + 2 * 2)
    284  1.1.1.3  christos 
    285  1.1.1.3  christos struct external_exceptab
    286  1.1.1.3  christos {
    287  1.1.1.3  christos   union {
    288  1.1.1.3  christos     bfd_byte e_symndx[4];
    289  1.1.1.3  christos     bfd_byte e_paddr[4];
    290  1.1.1.3  christos   } e_addr;
    291  1.1.1.3  christos   bfd_byte e_lang[1];
    292  1.1.1.3  christos   bfd_byte e_reason[1];
    293  1.1.1.3  christos };
    294  1.1.1.3  christos 
    295  1.1.1.3  christos #define EXCEPTSZ (4 + 2)
    296  1.1.1.4  christos 
    297  1.1.1.4  christos /******************** Core files *************************/
    298  1.1.1.4  christos 
    299  1.1.1.4  christos struct external_core_dumpx
    300  1.1.1.4  christos {
    301  1.1.1.4  christos   unsigned char c_signo[1];
    302  1.1.1.4  christos   unsigned char c_flag[1];
    303  1.1.1.4  christos   unsigned char c_entries[2];
    304  1.1.1.4  christos 
    305  1.1.1.4  christos   unsigned char c_version[4];
    306  1.1.1.4  christos 
    307  1.1.1.4  christos   unsigned char c_fdsinfox[8];
    308  1.1.1.4  christos   unsigned char c_loader[8];
    309  1.1.1.4  christos   unsigned char c_lsize[8];
    310  1.1.1.4  christos 
    311  1.1.1.4  christos   unsigned char c_n_thr[4];
    312  1.1.1.4  christos   unsigned char c_reserved0[4];
    313  1.1.1.4  christos   unsigned char c_thr[8];
    314  1.1.1.4  christos 
    315  1.1.1.4  christos   unsigned char c_segs[8];
    316  1.1.1.4  christos   unsigned char c_segregion[8];
    317  1.1.1.4  christos 
    318  1.1.1.4  christos   unsigned char c_stack[8];
    319  1.1.1.4  christos   unsigned char c_stackorg[8];
    320  1.1.1.4  christos   unsigned char c_size[8];
    321  1.1.1.4  christos 
    322  1.1.1.4  christos   unsigned char c_data[8];
    323  1.1.1.4  christos   unsigned char c_dataorg[8];
    324  1.1.1.4  christos   unsigned char c_datasize[8];
    325  1.1.1.4  christos   unsigned char c_sdorg[8];
    326  1.1.1.4  christos   unsigned char c_sdsize[8];
    327  1.1.1.4  christos 
    328  1.1.1.4  christos   unsigned char c_vmmregions[8];
    329  1.1.1.4  christos   unsigned char c_vmm[8];
    330  1.1.1.4  christos 
    331  1.1.1.4  christos   unsigned char c_impl[4];
    332  1.1.1.4  christos   unsigned char c_pad[4];
    333  1.1.1.4  christos   unsigned char c_cprs[8];
    334  1.1.1.4  christos   unsigned char c_reserved[7 * 8];
    335  1.1.1.4  christos 
    336  1.1.1.4  christos   /* Followed by:
    337  1.1.1.4  christos      - context of the faulting thread.
    338  1.1.1.4  christos      - user structure.  */
    339  1.1.1.4  christos };
    340  1.1.1.4  christos 
    341  1.1.1.4  christos 
    342  1.1.1.4  christos /* Core file verion.  */
    343  1.1.1.4  christos #define CORE_DUMPX_VERSION 0x0feeddb1
    344  1.1.1.4  christos #define CORE_DUMPXX_VERSION 0x0feeddb2
    345  1.1.1.4  christos 
    346  1.1.1.4  christos struct external_ld_info32
    347  1.1.1.4  christos {
    348  1.1.1.4  christos   unsigned char ldinfo_next[4];
    349  1.1.1.4  christos   unsigned char core_offset[4];
    350  1.1.1.4  christos   unsigned char ldinfo_textorg[4];
    351  1.1.1.4  christos   unsigned char ldinfo_textsize[4];
    352  1.1.1.4  christos   unsigned char ldinfo_dataorg[4];
    353  1.1.1.4  christos   unsigned char ldinfo_datasize[4];
    354  1.1.1.4  christos   unsigned char ldinfo_filename[2];
    355  1.1.1.4  christos };
    356