home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / gnu / gdb-4.12.tar.gz / gdb-4.12.tar / gdb-4.12 / include / coff / alpha.h < prev    next >
C/C++ Source or Header  |  1994-02-03  |  10KB  |  341 lines

  1. /* ECOFF support on Alpha machines.
  2.    coff/ecoff.h must be included before this file.  */
  3.  
  4. /********************** FILE HEADER **********************/
  5.  
  6. struct external_filehdr {
  7.   unsigned char f_magic[2];    /* magic number            */
  8.   unsigned char f_nscns[2];    /* number of sections        */
  9.   unsigned char f_timdat[4];    /* time & date stamp        */
  10.   unsigned char f_symptr[8];    /* file pointer to symtab    */
  11.   unsigned char f_nsyms[4];    /* number of symtab entries    */
  12.   unsigned char f_opthdr[2];    /* sizeof(optional hdr)        */
  13.   unsigned char f_flags[2];    /* flags            */
  14. };
  15.  
  16. /* Magic numbers are defined in coff/ecoff.h.  */
  17. #define ALPHA_ECOFF_BADMAG(x) ((x).f_magic!=ALPHA_MAGIC)
  18.  
  19. #define    FILHDR    struct external_filehdr
  20. #define    FILHSZ    sizeof(FILHDR)
  21.  
  22. /********************** AOUT "OPTIONAL HEADER" **********************/
  23.  
  24.  
  25. typedef struct external_aouthdr
  26. {
  27.   unsigned char magic[2];    /* type of file                */
  28.   unsigned char    vstamp[2];    /* version stamp            */
  29.   unsigned char bldrev[2];    /* ?? */
  30.   unsigned char padding[2];    /* pad to quadword boundary        */
  31.   unsigned char    tsize[8];    /* text size in bytes            */
  32.   unsigned char    dsize[8];    /* initialized data "  "        */
  33.   unsigned char    bsize[8];    /* uninitialized data "   "        */
  34.   unsigned char    entry[8];    /* entry pt.                */
  35.   unsigned char text_start[8];    /* base of text used for this file */
  36.   unsigned char data_start[8];    /* base of data used for this file */
  37.   unsigned char bss_start[8];    /* base of bss used for this file */
  38.   unsigned char gprmask[4];    /* bitmask of general registers used */
  39.   unsigned char fprmask[4];    /* bitmask of floating point registers used */
  40.   unsigned char gp_value[8];    /* value for gp register */
  41. } AOUTHDR;
  42.  
  43. /* compute size of a header */
  44.  
  45. #define AOUTSZ (sizeof(AOUTHDR))
  46.  
  47. /********************** SECTION HEADER **********************/
  48.  
  49. struct external_scnhdr {
  50.   unsigned char    s_name[8];    /* section name            */
  51.   unsigned char    s_paddr[8];    /* physical address, aliased s_nlib */
  52.   unsigned char    s_vaddr[8];    /* virtual address        */
  53.   unsigned char    s_size[8];    /* section size            */
  54.   unsigned char    s_scnptr[8];    /* file ptr to raw data for section */
  55.   unsigned char    s_relptr[8];    /* file ptr to relocation    */
  56.   unsigned char    s_lnnoptr[8];    /* file ptr to line numbers    */
  57.   unsigned char    s_nreloc[2];    /* number of relocation entries    */
  58.   unsigned char    s_nlnno[2];    /* number of line number entries*/
  59.   unsigned char    s_flags[4];    /* flags            */
  60. };
  61.  
  62. #define    SCNHDR    struct external_scnhdr
  63. #define    SCNHSZ    sizeof(SCNHDR)
  64.  
  65. /********************** RELOCATION DIRECTIVES **********************/
  66.  
  67. struct external_reloc {
  68.   unsigned char r_vaddr[8];
  69.   unsigned char r_symndx[4];
  70.   unsigned char r_bits[4];
  71. };
  72.  
  73. #define RELOC struct external_reloc
  74. #define RELSZ 16
  75.  
  76. /* Constants to unpack the r_bits field.  The Alpha seems to always be
  77.    little endian, so I haven't bothered to define big endian variants
  78.    of these.  */
  79.  
  80. #define RELOC_BITS0_TYPE_LITTLE            0xff
  81. #define RELOC_BITS0_TYPE_SH_LITTLE        0
  82.  
  83. #define RELOC_BITS1_EXTERN_LITTLE        0x01
  84.  
  85. #define RELOC_BITS1_OFFSET_LITTLE        0x7e
  86. #define RELOC_BITS1_OFFSET_SH_LITTLE        1
  87.  
  88. #define RELOC_BITS1_RESERVED_LITTLE        0x80
  89. #define RELOC_BITS1_RESERVED_SH_LITTLE        7
  90. #define RELOC_BITS2_RESERVED_LITTLE        0xff
  91. #define RELOC_BITS2_RESERVED_SH_LEFT_LITTLE    1
  92. #define RELOC_BITS3_RESERVED_LITTLE        0x03
  93. #define RELOC_BITS3_RESERVED_SH_LEFT_LITTLE    9
  94.  
  95. #define RELOC_BITS3_SIZE_LITTLE            0xfc
  96. #define RELOC_BITS3_SIZE_SH_LITTLE        2
  97.  
  98. /* The r_type field in a reloc is one of the following values.  */
  99. #define ALPHA_R_IGNORE        0
  100. #define ALPHA_R_REFLONG        1
  101. #define ALPHA_R_REFQUAD        2
  102. #define ALPHA_R_GPREL32        3
  103. #define ALPHA_R_LITERAL        4
  104. #define ALPHA_R_LITUSE        5
  105. #define ALPHA_R_GPDISP        6
  106. #define ALPHA_R_BRADDR        7
  107. #define ALPHA_R_HINT        8
  108. #define ALPHA_R_SREL16        9
  109. #define ALPHA_R_SREL32           10
  110. #define ALPHA_R_SREL64           11
  111. #define ALPHA_R_OP_PUSH           12
  112. #define ALPHA_R_OP_STORE       13
  113. #define ALPHA_R_OP_PSUB           14
  114. #define ALPHA_R_OP_PRSHIFT     15
  115. #define ALPHA_R_GPVALUE           16
  116.  
  117. #define DEFAULT_DATA_SECTION_ALIGNMENT 16
  118. #define DEFAULT_BSS_SECTION_ALIGNMENT 16
  119. #define DEFAULT_TEXT_SECTION_ALIGNMENT 16
  120. /* For new sections we havn't heard of before */
  121. #define DEFAULT_SECTION_ALIGNMENT 16
  122.  
  123. /********************** SYMBOLIC INFORMATION **********************/
  124.  
  125. /* Written by John Gilmore.  */
  126.  
  127. /* ECOFF uses COFF-like section structures, but its own symbol format.
  128.    This file defines the symbol format in fields whose size and alignment
  129.    will not vary on different host systems.  */
  130.  
  131. /* File header as a set of bytes */
  132.  
  133. struct hdr_ext {
  134.     unsigned char     h_magic[2];
  135.     unsigned char    h_vstamp[2];
  136.     unsigned char    h_ilineMax[4];
  137.     unsigned char    h_idnMax[4];
  138.     unsigned char    h_ipdMax[4];
  139.     unsigned char    h_isymMax[4];
  140.     unsigned char    h_ioptMax[4];
  141.     unsigned char    h_iauxMax[4];
  142.     unsigned char    h_issMax[4];
  143.     unsigned char    h_issExtMax[4];
  144.     unsigned char    h_ifdMax[4];
  145.     unsigned char    h_crfd[4];
  146.     unsigned char    h_iextMax[4];
  147.     unsigned char    h_cbLine[8];
  148.     unsigned char    h_cbLineOffset[8];
  149.     unsigned char    h_cbDnOffset[8];
  150.     unsigned char    h_cbPdOffset[8];
  151.     unsigned char    h_cbSymOffset[8];
  152.     unsigned char    h_cbOptOffset[8];
  153.     unsigned char    h_cbAuxOffset[8];
  154.     unsigned char    h_cbSsOffset[8];
  155.     unsigned char    h_cbSsExtOffset[8];
  156.     unsigned char    h_cbFdOffset[8];
  157.     unsigned char    h_cbRfdOffset[8];
  158.     unsigned char    h_cbExtOffset[8];
  159. };
  160.  
  161. /* File descriptor external record */
  162.  
  163. struct fdr_ext {
  164.     unsigned char    f_adr[8];
  165.     unsigned char    f_cbLineOffset[8];
  166.     unsigned char    f_cbLine[8];
  167.     unsigned char    f_cbSs[8];
  168.     unsigned char    f_rss[4];
  169.     unsigned char    f_issBase[4];
  170.     unsigned char    f_isymBase[4];
  171.     unsigned char    f_csym[4];
  172.     unsigned char    f_ilineBase[4];
  173.     unsigned char    f_cline[4];
  174.     unsigned char    f_ioptBase[4];
  175.     unsigned char    f_copt[4];
  176.     unsigned char    f_ipdFirst[4];
  177.     unsigned char    f_cpd[4];
  178.     unsigned char    f_iauxBase[4];
  179.     unsigned char    f_caux[4];
  180.     unsigned char    f_rfdBase[4];
  181.     unsigned char    f_crfd[4];
  182.     unsigned char    f_bits1[1];
  183.     unsigned char    f_bits2[3];
  184.     unsigned char    f_padding[4];
  185. };
  186.  
  187. #define    FDR_BITS1_LANG_BIG        0xF8
  188. #define    FDR_BITS1_LANG_SH_BIG        3
  189. #define    FDR_BITS1_LANG_LITTLE        0x1F
  190. #define    FDR_BITS1_LANG_SH_LITTLE    0
  191.  
  192. #define    FDR_BITS1_FMERGE_BIG        0x04
  193. #define    FDR_BITS1_FMERGE_LITTLE        0x20
  194.  
  195. #define    FDR_BITS1_FREADIN_BIG        0x02
  196. #define    FDR_BITS1_FREADIN_LITTLE    0x40
  197.  
  198. #define    FDR_BITS1_FBIGENDIAN_BIG    0x01
  199. #define    FDR_BITS1_FBIGENDIAN_LITTLE    0x80
  200.  
  201. #define    FDR_BITS2_GLEVEL_BIG        0xC0
  202. #define    FDR_BITS2_GLEVEL_SH_BIG        6
  203. #define    FDR_BITS2_GLEVEL_LITTLE        0x03
  204. #define    FDR_BITS2_GLEVEL_SH_LITTLE    0
  205.  
  206. /* We ignore the `reserved' field in bits2. */
  207.  
  208. /* Procedure descriptor external record */
  209.  
  210. struct pdr_ext {
  211.     unsigned char    p_adr[8];
  212.     unsigned char    p_cbLineOffset[8];
  213.     unsigned char    p_isym[4];
  214.     unsigned char    p_iline[4];
  215.     unsigned char    p_regmask[4];
  216.     unsigned char    p_regoffset[4];
  217.     unsigned char    p_iopt[4];
  218.     unsigned char    p_fregmask[4];
  219.     unsigned char    p_fregoffset[4];
  220.     unsigned char    p_frameoffset[4];
  221.     unsigned char    p_lnLow[4];
  222.     unsigned char    p_lnHigh[4];
  223.     unsigned char    p_gp_prologue[1];
  224.     unsigned char    p_bits1[1];
  225.     unsigned char    p_bits2[1];
  226.     unsigned char    p_localoff[1];
  227.     unsigned char    p_framereg[2];
  228.     unsigned char    p_pcreg[2];
  229. };
  230.  
  231. #define PDR_BITS1_GP_USED_BIG        0x80
  232. #define PDR_BITS1_REG_FRAME_BIG        0x40
  233. #define PDR_BITS1_RESERVED_BIG        0x3f
  234. #define PDR_BITS1_RESERVED_SH_LEFT_BIG    8
  235. #define PDR_BITS2_RESERVED_BIG        0xff
  236. #define PDR_BITS2_RESERVED_SH_BIG    0
  237.  
  238. #define PDR_BITS1_GP_USED_LITTLE    0x01
  239. #define PDR_BITS1_REG_FRAME_LITTLE    0x02
  240. #define PDR_BITS1_RESERVED_LITTLE    0xfc
  241. #define PDR_BITS1_RESERVED_SH_LITTLE    2
  242. #define PDR_BITS2_RESERVED_LITTLE    0xff
  243. #define PDR_BITS2_RESERVED_SH_LEFT_LITTLE 6
  244.  
  245. /* Line numbers */
  246.  
  247. struct line_ext {
  248.     unsigned char    l_line[4];
  249. };
  250.  
  251. /* Symbol external record */
  252.  
  253. struct sym_ext {
  254.     unsigned char    s_value[8];
  255.     unsigned char    s_iss[4];
  256.     unsigned char    s_bits1[1];
  257.     unsigned char    s_bits2[1];
  258.     unsigned char    s_bits3[1];
  259.     unsigned char    s_bits4[1];
  260. };
  261.  
  262. #define    SYM_BITS1_ST_BIG        0xFC
  263. #define    SYM_BITS1_ST_SH_BIG        2
  264. #define    SYM_BITS1_ST_LITTLE        0x3F
  265. #define    SYM_BITS1_ST_SH_LITTLE        0
  266.  
  267. #define    SYM_BITS1_SC_BIG        0x03
  268. #define    SYM_BITS1_SC_SH_LEFT_BIG    3
  269. #define    SYM_BITS1_SC_LITTLE        0xC0
  270. #define    SYM_BITS1_SC_SH_LITTLE        6
  271.  
  272. #define    SYM_BITS2_SC_BIG        0xE0
  273. #define    SYM_BITS2_SC_SH_BIG        5
  274. #define    SYM_BITS2_SC_LITTLE        0x07
  275. #define    SYM_BITS2_SC_SH_LEFT_LITTLE    2
  276.  
  277. #define    SYM_BITS2_RESERVED_BIG        0x10
  278. #define    SYM_BITS2_RESERVED_LITTLE    0x08
  279.  
  280. #define    SYM_BITS2_INDEX_BIG        0x0F
  281. #define    SYM_BITS2_INDEX_SH_LEFT_BIG    16
  282. #define    SYM_BITS2_INDEX_LITTLE        0xF0
  283. #define    SYM_BITS2_INDEX_SH_LITTLE    4
  284.  
  285. #define    SYM_BITS3_INDEX_SH_LEFT_BIG    8
  286. #define    SYM_BITS3_INDEX_SH_LEFT_LITTLE    4
  287.  
  288. #define    SYM_BITS4_INDEX_SH_LEFT_BIG    0
  289. #define    SYM_BITS4_INDEX_SH_LEFT_LITTLE    12
  290.  
  291. /* External symbol external record */
  292.  
  293. struct ext_ext {
  294.     struct    sym_ext es_asym;
  295.     unsigned char    es_bits1[1];
  296.     unsigned char    es_bits2[3];
  297.     unsigned char    es_ifd[4];
  298. };
  299.  
  300. #define    EXT_BITS1_JMPTBL_BIG        0x80
  301. #define    EXT_BITS1_JMPTBL_LITTLE        0x01
  302.  
  303. #define    EXT_BITS1_COBOL_MAIN_BIG    0x40
  304. #define    EXT_BITS1_COBOL_MAIN_LITTLE    0x02
  305.  
  306. #define    EXT_BITS1_WEAKEXT_BIG        0x20
  307. #define    EXT_BITS1_WEAKEXT_LITTLE    0x04
  308.  
  309. /* Dense numbers external record */
  310.  
  311. struct dnr_ext {
  312.     unsigned char    d_rfd[4];
  313.     unsigned char    d_index[4];
  314. };
  315.  
  316. /* Relative file descriptor */
  317.  
  318. struct rfd_ext {
  319.   unsigned char    rfd[4];
  320. };
  321.  
  322. /* Optimizer symbol external record */
  323.  
  324. struct opt_ext {
  325.   unsigned char o_bits1[1];
  326.   unsigned char o_bits2[1];
  327.   unsigned char o_bits3[1];
  328.   unsigned char o_bits4[1];
  329.   struct rndx_ext o_rndx;
  330.   unsigned char o_offset[4];
  331. };
  332.  
  333. #define OPT_BITS2_VALUE_SH_LEFT_BIG    16
  334. #define OPT_BITS2_VALUE_SH_LEFT_LITTLE    0
  335.  
  336. #define OPT_BITS3_VALUE_SH_LEFT_BIG    8
  337. #define OPT_BITS3_VALUE_SH_LEFT_LITTLE    8
  338.  
  339. #define OPT_BITS4_VALUE_SH_LEFT_BIG    0
  340. #define OPT_BITS4_VALUE_SH_LEFT_LITTLE    16
  341.