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