summaryrefslogtreecommitdiff
path: root/include/vms/eihd.h
blob: 77fb95868de2bc6c74d8b0e8d0c7f2e9b7470b74 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/* Alpha VMS external format of Extended Image Header.

   Copyright (C) 2010-2022 Free Software Foundation, Inc.
   Written by Tristan Gingold <gingold@adacore.com>, AdaCore.

   This file is part of BFD, the Binary File Descriptor library.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
   MA 02110-1301, USA.  */

#ifndef _VMS_EIHD_H
#define _VMS_EIHD_H

/* Extended Image Header (eihd) structure.  */
struct vms_eihd
{
  /* Version of this EIHD.  */
  unsigned char majorid[4];
  unsigned char minorid[4];

  /* Size in bytes of the header.  */
  unsigned char size[4];

  /* Byte offset to ISD (Image Section Descriptors) list.  */
  unsigned char isdoff[4];

  /* Byte offset to activation data (off=16).  */
  unsigned char activoff[4];

  /* Byte offset to symbol table and debugging data.  */ 
  unsigned char symdbgoff[4];

  /* Byte offset to image ident.  */
  unsigned char imgidoff[4];

  /* Byte offset to patch data.  */
  unsigned char patchoff[4];

  /* RVA of fixup info (off=32).  */
  unsigned char iafva[8];

  /* RVA of symbol vector.  */
  unsigned char symvva[8];

  /* Byte offset to version number array (off=48).  */
  unsigned char version_array_off[4];

  /* Image type.  */
  unsigned char imgtype[4];

  /* Image subtype.  */
  unsigned char subtype[4];

  /* Size in bytes of image I/O section requested.  */
  unsigned char imgiocnt[4];

  /* Nbr of channels requested (off=64).  */
  unsigned char iochancnt[4];

  /* Requested privilege mask.  */
  unsigned char privreqs[8];

  /* Number of header diskblocks.  */
  unsigned char hdrblkcnt[4];

  /* Linker produced image flags.  */
  unsigned char lnkflags[4];

  /* GBL SEC ident value for linkable image.  */
  unsigned char ident[4];

  /* SYS$K_VERSION or 0 if not linked with exec.  */
  unsigned char sysver[4];

  /* Linker match control.  */
  unsigned char matchctl;
  unsigned char fill_1[3];

  /* Size of the symbol vector in bytes.  */
  unsigned char symvect_size[4];

  /* Value of /BPAGE.  */
  unsigned char virt_mem_block_size[4];

  /* Byte offset to extended fixup data.  */
  unsigned char ext_fixup_off[4];

  /* Byte offset to no_optimize psect table.  */
  unsigned char noopt_psect_off[4];

  unsigned char fill_2[398];

  /* CODE identifies image type to MOM.  */
  unsigned char alias[2];
};

#define EIHD__K_MAJORID	3	/* Major id constant	*/
#define EIHD__K_MINORID	0	/* Minor id constant	*/

/* Image type.  */
#define EIHD__K_EXE		1	/* Executable image	*/
#define EIHD__K_LIM		2	/* Linkable image.  */

/* Image subtype.  */
#define EIHD__C_NATIVE		0	/* Alpha native image.  */
#define EIHD__C_CLI		1	/* Image is a CLI, run LOGINOUT.  */

/* Linker image flags.  */
#define EIHD__M_LNKDEBUG	0x0001	/* Full debugging requested.  */
#define EIHD__M_LNKNOTFR	0x0002	/* No first transfer address.  */
#define EIHD__M_NOP0BUFS	0x0004	/* No RMS use of P0 for image I/O.  */
#define EIHD__M_PICIMG		0x0008	/* PIC image.  */
#define EIHD__M_P0IMAGE		0x0010	/* P0 only image.  */
#define EIHD__M_DBGDMT		0x0020	/* Image header has dmt fields.  */
#define EIHD__M_INISHR		0x0040	/* Transfer array contains LNISHR.  */
#define EIHD__M_XLATED		0x0080	/* Translated image.  */
#define EIHD__M_BIND_CODE_SEC	0x0100	/* EXE sect can be put into S0.  */
#define EIHD__M_BIND_DATA_SEC	0x0200	/* DATA sect can be put into S0.  */
#define EIHD__M_MKTHREADS	0x0400	/* Multiple kernel threads.  */
#define EIHD__M_UPCALLS		0x0800	/* Upcalls enabled.  */
#define EIHD__M_OMV_READY	0x1000	/* Can be processed by OMV.  */
#define EIHD__M_EXT_BIND_SECT	0x2000	/* May be moved, using ext fixups.  */

/* Offsets of some fields.  */
#define EIHD__L_SIZE		8
#define EIHD__L_ISDOFF		12
#define EIHD__L_SYMDBGOFF	20
#define EIHD__Q_SYMVVA		40
#define EIHD__L_IMGTYPE		52

#define EIHD__C_LENGTH 104

#endif /* _VMS_EIHD_H */