home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gdb-4.16-base.tgz / gdb-4.16-base.tar / fsf / gdb / include / coff / rs6000.h < prev    next >
C/C++ Source or Header  |  1995-11-09  |  7KB  |  243 lines

  1. /* IBM RS/6000 "XCOFF" file definitions for BFD.
  2.    Copyright (C) 1990, 1991 Free Software Foundation, Inc.
  3.    FIXME: Can someone provide a transliteration of this name into ASCII?
  4.    Using the following chars caused a compiler warning on HIUX (so I replaced
  5.    them with octal escapes), and isn't useful without an understanding of what
  6.    character set it is.
  7.    Written by Mimi Ph\373\364ng-Th\345o V\365 of IBM
  8.    and John Gilmore of Cygnus Support.  */
  9.  
  10. /********************** FILE HEADER **********************/
  11.  
  12. struct external_filehdr {
  13.     char f_magic[2];    /* magic number            */
  14.     char f_nscns[2];    /* number of sections        */
  15.     char f_timdat[4];    /* time & date stamp        */
  16.     char f_symptr[4];    /* file pointer to symtab    */
  17.     char f_nsyms[4];    /* number of symtab entries    */
  18.     char f_opthdr[2];    /* sizeof(optional hdr)        */
  19.     char f_flags[2];    /* flags            */
  20. };
  21.  
  22.         /* IBM RS/6000 */
  23. #define U802WRMAGIC     0730    /* writeable text segments **chh**      */
  24. #define U802ROMAGIC     0735    /* readonly sharable text segments      */
  25. #define U802TOCMAGIC    0737    /* readonly text segments and TOC       */
  26.  
  27. #define BADMAG(x)    \
  28.     ((x).f_magic != U802ROMAGIC && (x).f_magic != U802WRMAGIC && \
  29.      (x).f_magic != U802TOCMAGIC)
  30.  
  31. #define    FILHDR    struct external_filehdr
  32. #define    FILHSZ    sizeof(FILHDR)
  33.  
  34.  
  35. /********************** AOUT "OPTIONAL HEADER" **********************/
  36.  
  37.  
  38. typedef struct 
  39. {
  40.   unsigned char    magic[2];    /* type of file            */
  41.   unsigned char    vstamp[2];    /* version stamp        */
  42.   unsigned char    tsize[4];    /* text size in bytes, padded to FW bdry */
  43.   unsigned char    dsize[4];    /* initialized data "  "    */
  44.   unsigned char    bsize[4];    /* uninitialized data "   "    */
  45.   unsigned char    entry[4];    /* entry pt.            */
  46.   unsigned char    text_start[4];    /* base of text used for this file */
  47.   unsigned char    data_start[4];    /* base of data used for this file */
  48.   unsigned char    o_toc[4];    /* address of TOC */
  49.   unsigned char    o_snentry[2];    /* section number of entry point */
  50.   unsigned char    o_sntext[2];    /* section number of .text section */
  51.   unsigned char    o_sndata[2];    /* section number of .data section */
  52.   unsigned char    o_sntoc[2];    /* section number of TOC */
  53.   unsigned char    o_snloader[2];    /* section number of .loader section */
  54.   unsigned char    o_snbss[2];    /* section number of .bss section */
  55.   unsigned char    o_algntext[2];    /* .text alignment */
  56.   unsigned char    o_algndata[2];    /* .data alignment */
  57.   unsigned char    o_modtype[2];    /* module type (??) */
  58.   unsigned char o_cputype[2];    /* cpu type */
  59.   unsigned char    o_maxstack[4];    /* max stack size (??) */
  60.   unsigned char o_maxdata[4];    /* max data size (??) */
  61.   unsigned char    o_resv2[12];    /* reserved */
  62. }
  63. AOUTHDR;
  64.  
  65. #define AOUTSZ (sizeof(AOUTHDR))
  66. #define SMALL_AOUTSZ (28)
  67.  
  68. #define    RS6K_AOUTHDR_OMAGIC    0x0107    /* old: text & data writeable */
  69. #define    RS6K_AOUTHDR_NMAGIC    0x0108    /* new: text r/o, data r/w */
  70. #define    RS6K_AOUTHDR_ZMAGIC    0x010B    /* paged: text r/o, both page-aligned */
  71.  
  72.  
  73. /********************** SECTION HEADER **********************/
  74.  
  75.  
  76. struct external_scnhdr {
  77.     char        s_name[8];    /* section name            */
  78.     char        s_paddr[4];    /* physical address, aliased s_nlib */
  79.     char        s_vaddr[4];    /* virtual address        */
  80.     char        s_size[4];    /* section size            */
  81.     char        s_scnptr[4];    /* file ptr to raw data for section */
  82.     char        s_relptr[4];    /* file ptr to relocation    */
  83.     char        s_lnnoptr[4];    /* file ptr to line numbers    */
  84.     char        s_nreloc[2];    /* number of relocation entries    */
  85.     char        s_nlnno[2];    /* number of line number entries*/
  86.     char        s_flags[4];    /* flags            */
  87. };
  88.  
  89. /*
  90.  * names of "special" sections
  91.  */
  92. #define _TEXT    ".text"
  93. #define _DATA    ".data"
  94. #define _BSS    ".bss"
  95. #define _PAD    ".pad"
  96. #define _LOADER    ".loader"
  97.  
  98. #define    SCNHDR    struct external_scnhdr
  99. #define    SCNHSZ    sizeof(SCNHDR)
  100.  
  101. /* XCOFF uses a special .loader section with type STYP_LOADER.  */
  102. #define STYP_LOADER 0x1000
  103.  
  104. /* XCOFF uses a special .debug section with type STYP_DEBUG.  */
  105. #define STYP_DEBUG 0x2000
  106.  
  107. /* XCOFF handles line number or relocation overflow by creating
  108.    another section header with STYP_OVRFLO set.  */
  109. #define STYP_OVRFLO 0x8000
  110.  
  111. /********************** LINE NUMBERS **********************/
  112.  
  113. /* 1 line number entry for every "breakpointable" source line in a section.
  114.  * Line numbers are grouped on a per function basis; first entry in a function
  115.  * grouping will have l_lnno = 0 and in place of physical address will be the
  116.  * symbol table index of the function name.
  117.  */
  118. struct external_lineno {
  119.     union {
  120.         char l_symndx[4];    /* function name symbol index, iff l_lnno == 0*/
  121.         char l_paddr[4];    /* (physical) address of line number    */
  122.     } l_addr;
  123.     char l_lnno[2];    /* line number        */
  124. };
  125.  
  126.  
  127. #define    LINENO    struct external_lineno
  128. #define    LINESZ    sizeof(LINENO) 
  129.  
  130.  
  131. /********************** SYMBOLS **********************/
  132.  
  133. #define E_SYMNMLEN    8    /* # characters in a symbol name    */
  134. #define E_FILNMLEN    14    /* # characters in a file name        */
  135. #define E_DIMNUM    4    /* # array dimensions in auxiliary entry */
  136.  
  137. struct external_syment 
  138. {
  139.   union {
  140.     char e_name[E_SYMNMLEN];
  141.     struct {
  142.       char e_zeroes[4];
  143.       char e_offset[4];
  144.     } e;
  145.   } e;
  146.   char e_value[4];
  147.   char e_scnum[2];
  148.   char e_type[2];
  149.   char e_sclass[1];
  150.   char e_numaux[1];
  151. };
  152.  
  153.  
  154.  
  155. #define N_BTMASK    (017)
  156. #define N_TMASK        (060)
  157. #define N_BTSHFT    (4)
  158. #define N_TSHIFT    (2)
  159.   
  160.  
  161. union external_auxent {
  162.     struct {
  163.         char x_tagndx[4];    /* str, un, or enum tag indx */
  164.         union {
  165.             struct {
  166.                 char  x_lnno[2]; /* declaration line number */
  167.                 char  x_size[2]; /* str/union/array size */
  168.             } x_lnsz;
  169.             char x_fsize[4];    /* size of function */
  170.         } x_misc;
  171.         union {
  172.             struct {        /* if ISFCN, tag, or .bb */
  173.                 char x_lnnoptr[4];    /* ptr to fcn line # */
  174.                 char x_endndx[4];    /* entry ndx past block end */
  175.             } x_fcn;
  176.             struct {        /* if ISARY, up to 4 dimen. */
  177.                 char x_dimen[E_DIMNUM][2];
  178.             } x_ary;
  179.         } x_fcnary;
  180.         char x_tvndx[2];        /* tv index */
  181.     } x_sym;
  182.  
  183.     union {
  184.         char x_fname[E_FILNMLEN];
  185.         struct {
  186.             char x_zeroes[4];
  187.             char x_offset[4];
  188.         } x_n;
  189.     } x_file;
  190.  
  191.     struct {
  192.         char x_scnlen[4];            /* section length */
  193.         char x_nreloc[2];    /* # relocation entries */
  194.         char x_nlinno[2];    /* # line numbers */
  195.     } x_scn;
  196.  
  197.         struct {
  198.         char x_tvfill[4];    /* tv fill value */
  199.         char x_tvlen[2];    /* length of .tv */
  200.         char x_tvran[2][2];    /* tv range */
  201.     } x_tv;        /* info about .tv section (in auxent of symbol .tv)) */
  202.  
  203.     struct {
  204.         unsigned char x_scnlen[4];
  205.         unsigned char x_parmhash[4];
  206.         unsigned char x_snhash[2];
  207.         unsigned char x_smtyp[1];
  208.         unsigned char x_smclas[1];
  209.         unsigned char x_stab[4];
  210.         unsigned char x_snstab[2];
  211.     } x_csect;
  212.  
  213. };
  214.  
  215. #define    SYMENT    struct external_syment
  216. #define    SYMESZ    18    
  217. #define    AUXENT    union external_auxent
  218. #define    AUXESZ    18
  219. #define DBXMASK 0x80        /* for dbx storage mask */
  220. #define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK)
  221.  
  222.  
  223.  
  224. /********************** RELOCATION DIRECTIVES **********************/
  225.  
  226.  
  227. struct external_reloc {
  228.   char r_vaddr[4];
  229.   char r_symndx[4];
  230.   char r_size[1];
  231.   char r_type[1];
  232. };
  233.  
  234.  
  235. #define RELOC struct external_reloc
  236. #define RELSZ 10
  237.  
  238. #define DEFAULT_DATA_SECTION_ALIGNMENT 4
  239. #define DEFAULT_BSS_SECTION_ALIGNMENT 4
  240. #define DEFAULT_TEXT_SECTION_ALIGNMENT 4
  241. /* For new sections we havn't heard of before */
  242. #define DEFAULT_SECTION_ALIGNMENT 4
  243.