Home | History | Annotate | Download | only in vms
      1 /* Alpha VMS external format of Extended Image Header.
      2 
      3    Copyright (C) 2010-2014 Free Software Foundation, Inc.
      4    Written by Tristan Gingold <gingold (at) adacore.com>, AdaCore.
      5 
      6    This file is part of BFD, the Binary File Descriptor library.
      7 
      8    This program is free software; you can redistribute it and/or modify
      9    it under the terms of the GNU General Public License as published by
     10    the Free Software Foundation; either version 3 of the License, or
     11    (at your option) any later version.
     12 
     13    This program is distributed in the hope that it will be useful,
     14    but WITHOUT ANY WARRANTY; without even the implied warranty of
     15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16    GNU General Public License for more details.
     17 
     18    You should have received a copy of the GNU General Public License
     19    along with this program; if not, write to the Free Software
     20    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     21    MA 02110-1301, USA.  */
     22 
     23 #ifndef _VMS_EIHD_H
     24 #define _VMS_EIHD_H
     25 
     26 /* Extended Image Header (eihd) structure.  */
     27 struct vms_eihd
     28 {
     29   /* Version of this EIHD.  */
     30   unsigned char majorid[4];
     31   unsigned char minorid[4];
     32 
     33   /* Size in bytes of the header.  */
     34   unsigned char size[4];
     35 
     36   /* Byte offset to ISD (Image Section Descriptors) list.  */
     37   unsigned char isdoff[4];
     38 
     39   /* Byte offset to activation data (off=16).  */
     40   unsigned char activoff[4];
     41 
     42   /* Byte offset to symbol table and debugging data.  */
     43   unsigned char symdbgoff[4];
     44 
     45   /* Byte offset to image ident.  */
     46   unsigned char imgidoff[4];
     47 
     48   /* Byte offset to patch data.  */
     49   unsigned char patchoff[4];
     50 
     51   /* RVA of fixup info (off=32).  */
     52   unsigned char iafva[8];
     53 
     54   /* RVA of symbol vector.  */
     55   unsigned char symvva[8];
     56 
     57   /* Byte offset to version number array (off=48).  */
     58   unsigned char version_array_off[4];
     59 
     60   /* Image type.  */
     61   unsigned char imgtype[4];
     62 
     63   /* Image subtype.  */
     64   unsigned char subtype[4];
     65 
     66   /* Size in bytes of image I/O section requested.  */
     67   unsigned char imgiocnt[4];
     68 
     69   /* Nbr of channels requested (off=64).  */
     70   unsigned char iochancnt[4];
     71 
     72   /* Requested privilege mask.  */
     73   unsigned char privreqs[8];
     74 
     75   /* Number of header diskblocks.  */
     76   unsigned char hdrblkcnt[4];
     77 
     78   /* Linker produced image flags.  */
     79   unsigned char lnkflags[4];
     80 
     81   /* GBL SEC ident value for linkable image.  */
     82   unsigned char ident[4];
     83 
     84   /* SYS$K_VERSION or 0 if not linked with exec.  */
     85   unsigned char sysver[4];
     86 
     87   /* Linker match control.  */
     88   unsigned char matchctl;
     89   unsigned char fill_1[3];
     90 
     91   /* Size of the symbol vector in bytes.  */
     92   unsigned char symvect_size[4];
     93 
     94   /* Value of /BPAGE.  */
     95   unsigned char virt_mem_block_size[4];
     96 
     97   /* Byte offset to extended fixup data.  */
     98   unsigned char ext_fixup_off[4];
     99 
    100   /* Byte offset to no_optimize psect table.  */
    101   unsigned char noopt_psect_off[4];
    102 
    103   unsigned char fill_2[398];
    104 
    105   /* CODE identifies image type to MOM.  */
    106   unsigned char alias[2];
    107 };
    108 
    109 #define EIHD__K_MAJORID	3	/* Major id constant	*/
    110 #define EIHD__K_MINORID	0	/* Minor id constant	*/
    111 
    112 /* Image type.  */
    113 #define EIHD__K_EXE		1	/* Executable image	*/
    114 #define EIHD__K_LIM		2	/* Linkable image.  */
    115 
    116 /* Image subtype.  */
    117 #define EIHD__C_NATIVE		0	/* Alpha native image.  */
    118 #define EIHD__C_CLI		1	/* Image is a CLI, run LOGINOUT.  */
    119 
    120 /* Linker image flags.  */
    121 #define EIHD__M_LNKDEBUG	0x0001	/* Full debugging requested.  */
    122 #define EIHD__M_LNKNOTFR	0x0002	/* No first transfer address.  */
    123 #define EIHD__M_NOP0BUFS	0x0004	/* No RMS use of P0 for image I/O.  */
    124 #define EIHD__M_PICIMG		0x0008	/* PIC image.  */
    125 #define EIHD__M_P0IMAGE		0x0010	/* P0 only image.  */
    126 #define EIHD__M_DBGDMT		0x0020	/* Image header has dmt fields.  */
    127 #define EIHD__M_INISHR		0x0040	/* Transfer array contains LNISHR.  */
    128 #define EIHD__M_XLATED		0x0080	/* Translated image.  */
    129 #define EIHD__M_BIND_CODE_SEC	0x0100	/* EXE sect can be put into S0.  */
    130 #define EIHD__M_BIND_DATA_SEC	0x0200	/* DATA sect can be put into S0.  */
    131 #define EIHD__M_MKTHREADS	0x0400	/* Multiple kernel threads.  */
    132 #define EIHD__M_UPCALLS		0x0800	/* Upcalls enabled.  */
    133 #define EIHD__M_OMV_READY	0x1000	/* Can be processed by OMV.  */
    134 #define EIHD__M_EXT_BIND_SECT	0x2000	/* May be moved, using ext fixups.  */
    135 
    136 /* Offsets of some fields.  */
    137 #define EIHD__L_SIZE		8
    138 #define EIHD__L_ISDOFF		12
    139 #define EIHD__L_SYMDBGOFF	20
    140 #define EIHD__Q_SYMVVA		40
    141 #define EIHD__L_IMGTYPE		52
    142 
    143 #define EIHD__C_LENGTH 104
    144 
    145 #endif /* _VMS_EIHD_H */
    146