]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - bfd/vms.h
This commit was manufactured by cvs2svn to create branch
[thirdparty/binutils-gdb.git] / bfd / vms.h
CommitLineData
252b5132 1/* vms.h -- Header file for VMS (Alpha and Vax) support.
cd123cb7 2 Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007
dc810e39 3 Free Software Foundation, Inc.
252b5132
RH
4
5 Written by Klaus K"ampf (kkaempf@rmi.de)
6
7920ce38 7 This file is part of BFD, the Binary File Descriptor library.
252b5132 8
7920ce38
NC
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
cd123cb7 11 the Free Software Foundation; either version 3 of the License, or
7920ce38 12 (at your option) any later version.
252b5132 13
7920ce38
NC
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
252b5132 18
7920ce38
NC
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
cd123cb7
NC
21 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
22 MA 02110-1301, USA. */
252b5132 23
cd123cb7 24#undef vms
252b5132
RH
25#ifndef VMS_H
26#define VMS_H
27
252b5132
RH
28/* Constants starting with 'Exxx_' are for openVMS/Alpha (EVAX object language) */
29
30/* VMS Text, information and relocation record (TIR/ETIR) definitions. */
31
32#define TIR_S_C_STA_GBL 0
33#define TIR_S_C_STA_SB 1
34#define TIR_S_C_STA_SW 2
35#define TIR_S_C_STA_LW 3
36#define TIR_S_C_STA_PB 4
37#define TIR_S_C_STA_PW 5
38#define TIR_S_C_STA_PL 6
39#define TIR_S_C_STA_UB 7
40#define TIR_S_C_STA_UW 8
41#define TIR_S_C_STA_BFI 9
42#define TIR_S_C_STA_WFI 10
43#define TIR_S_C_STA_LFI 11
44#define TIR_S_C_STA_EPM 12
45#define TIR_S_C_STA_CKARG 13
46#define TIR_S_C_STA_WPB 14
47#define TIR_S_C_STA_WPW 15
48#define TIR_S_C_STA_WPL 16
49#define TIR_S_C_STA_LSY 17
50#define TIR_S_C_STA_LIT 18
51#define TIR_S_C_STA_LEPM 19
52#define TIR_S_C_MAXSTACOD 19
53#define TIR_S_C_MINSTOCOD 20
54#define TIR_S_C_STO_SB 20
55#define TIR_S_C_STO_SW 21
56#define TIR_S_C_STO_L 22
57#define TIR_S_C_STO_LW 22
58#define TIR_S_C_STO_BD 23
59#define TIR_S_C_STO_WD 24
60#define TIR_S_C_STO_LD 25
61#define TIR_S_C_STO_LI 26
62#define TIR_S_C_STO_PIDR 27
63#define TIR_S_C_STO_PICR 28
64#define TIR_S_C_STO_RSB 29
65#define TIR_S_C_STO_RSW 30
66#define TIR_S_C_STO_RL 31
67#define TIR_S_C_STO_VPS 32
68#define TIR_S_C_STO_USB 33
69#define TIR_S_C_STO_USW 34
70#define TIR_S_C_STO_RUB 35
71#define TIR_S_C_STO_RUW 36
72#define TIR_S_C_STO_B 37
73#define TIR_S_C_STO_W 38
74#define TIR_S_C_STO_RB 39
75#define TIR_S_C_STO_RW 40
76#define TIR_S_C_STO_RIVB 41
77#define TIR_S_C_STO_PIRR 42
78#define TIR_S_C_MAXSTOCOD 42
79#define TIR_S_C_MINOPRCOD 50
80#define TIR_S_C_OPR_NOP 50
81#define TIR_S_C_OPR_ADD 51
82#define TIR_S_C_OPR_SUB 52
83#define TIR_S_C_OPR_MUL 53
84#define TIR_S_C_OPR_DIV 54
85#define TIR_S_C_OPR_AND 55
86#define TIR_S_C_OPR_IOR 56
87#define TIR_S_C_OPR_EOR 57
88#define TIR_S_C_OPR_NEG 58
89#define TIR_S_C_OPR_COM 59
90#define TIR_S_C_OPR_INSV 60
91#define TIR_S_C_OPR_ASH 61
92#define TIR_S_C_OPR_USH 62
93#define TIR_S_C_OPR_ROT 63
94#define TIR_S_C_OPR_SEL 64
95#define TIR_S_C_OPR_REDEF 65
96#define TIR_S_C_OPR_DFLIT 66
97#define TIR_S_C_MAXOPRCOD 66
98#define TIR_S_C_MINCTLCOD 80
99#define TIR_S_C_CTL_SETRB 80
100#define TIR_S_C_CTL_AUGRB 81
101#define TIR_S_C_CTL_DFLOC 82
102#define TIR_S_C_CTL_STLOC 83
103#define TIR_S_C_CTL_STKDL 84
104#define TIR_S_C_MAXCTLCOD 84
105
7920ce38
NC
106#define ETIR_S_C_MINSTACOD 0 /* Minimum store code. */
107#define ETIR_S_C_STA_GBL 0 /* Stack global symbol value. */
108#define ETIR_S_C_STA_LW 1 /* Stack longword. */
109#define ETIR_S_C_STA_QW 2 /* Stack quadword. */
110#define ETIR_S_C_STA_PQ 3 /* Stack psect base plus quadword offset. */
111#define ETIR_S_C_STA_LI 4 /* Stack literal. */
112#define ETIR_S_C_STA_MOD 5 /* Stack module. */
113#define ETIR_S_C_STA_CKARG 6 /* Check Arguments. */
114#define ETIR_S_C_MAXSTACOD 6 /* Maximum stack code. */
115#define ETIR_S_C_MINSTOCOD 50 /* Minimum store code. */
116#define ETIR_S_C_STO_B 50 /* Store byte. */
117#define ETIR_S_C_STO_W 51 /* Store word. */
118#define ETIR_S_C_STO_LW 52 /* Store longword. */
119#define ETIR_S_C_STO_QW 53 /* Store quadword. */
120#define ETIR_S_C_STO_IMMR 54 /* Store immediate Repeated. */
121#define ETIR_S_C_STO_GBL 55 /* Store global. */
122#define ETIR_S_C_STO_CA 56 /* Store code address. */
123#define ETIR_S_C_STO_RB 57 /* Store relative branch. */
124#define ETIR_S_C_STO_AB 58 /* Store absolute branch. */
125#define ETIR_S_C_STO_OFF 59 /* Store offset within psect. */
126#define ETIR_S_C_STO_IMM 61 /* Store immediate. */
127#define ETIR_S_C_STO_GBL_LW 62 /* Store global Longword. */
128#define ETIR_S_C_STO_LP_PSB 63 /* STO_LP_PSB not valid in level 2 use STC_LP_PSB. */
129#define ETIR_S_C_STO_HINT_GBL 64 /* Store 14 bit HINT at global address. */
252b5132 130#define ETIR_S_C_STO_HINT_PS 65 /* Store 14 bit HINT at psect + offset */
7920ce38
NC
131#define ETIR_S_C_MAXSTOCOD 65 /* Maximum store code. */
132#define ETIR_S_C_MINOPRCOD 100 /* Minimum operate code. */
133#define ETIR_S_C_OPR_NOP 100 /* No-op. */
134#define ETIR_S_C_OPR_ADD 101 /* Add. */
135#define ETIR_S_C_OPR_SUB 102 /* Subtract. */
136#define ETIR_S_C_OPR_MUL 103 /* Multiply. */
137#define ETIR_S_C_OPR_DIV 104 /* Divide. */
138#define ETIR_S_C_OPR_AND 105 /* Logical AND. */
139#define ETIR_S_C_OPR_IOR 106 /* Logical inclusive OR. */
140#define ETIR_S_C_OPR_EOR 107 /* Logical exclusive OR. */
141#define ETIR_S_C_OPR_NEG 108 /* Negate. */
142#define ETIR_S_C_OPR_COM 109 /* Complement. */
143#define ETIR_S_C_OPR_INSV 110 /* Insert bit field. */
144#define ETIR_S_C_OPR_ASH 111 /* Arithmetic shift. */
145#define ETIR_S_C_OPR_USH 112 /* Unsigned shift. */
146#define ETIR_S_C_OPR_ROT 113 /* Rotate. */
147#define ETIR_S_C_OPR_SEL 114 /* Select one of three longwords on top of stack. */
148#define ETIR_S_C_OPR_REDEF 115 /* Redefine this symbol after pass 2. */
149#define ETIR_S_C_OPR_DFLIT 116 /* Define a literal. */
150#define ETIR_S_C_MAXOPRCOD 116 /* Maximum operate code. */
151#define ETIR_S_C_MINCTLCOD 150 /* Minimum control code. */
152#define ETIR_S_C_CTL_SETRB 150 /* Set relocation base. */
153#define ETIR_S_C_CTL_AUGRB 151 /* Augment relocation base. */
154#define ETIR_S_C_CTL_DFLOC 152 /* Define debug location. */
155#define ETIR_S_C_CTL_STLOC 153 /* Set debug location. */
156#define ETIR_S_C_CTL_STKDL 154 /* Stack debug location. */
157#define ETIR_S_C_MAXCTLCOD 154 /* Maximum control code. */
158#define ETIR_S_C_MINSTCCOD 200 /* Minimum store-conditional code. */
159#define ETIR_S_C_STC_LP 200 /* Store-conditional Linkage Pair. */
160#define ETIR_S_C_STC_LP_PSB 201 /* Store-conditional Linkage Pair with Procedure Signature. */
161#define ETIR_S_C_STC_GBL 202 /* Store-conditional Address at global address. */
162#define ETIR_S_C_STC_GCA 203 /* Store-conditional Code Address at global address. */
163#define ETIR_S_C_STC_PS 204 /* Store-conditional Address at psect + offset. */
164#define ETIR_S_C_STC_NOP_GBL 205 /* Store-conditional NOP at address of global. */
165#define ETIR_S_C_STC_NOP_PS 206 /* Store-conditional NOP at pect + offset. */
166#define ETIR_S_C_STC_BSR_GBL 207 /* Store-conditional BSR at global address. */
167#define ETIR_S_C_STC_BSR_PS 208 /* Store-conditional BSR at pect + offset. */
168#define ETIR_S_C_STC_LDA_GBL 209 /* Store-conditional LDA at global address. */
169#define ETIR_S_C_STC_LDA_PS 210 /* Store-conditional LDA at psect + offset. */
170#define ETIR_S_C_STC_BOH_GBL 211 /* Store-conditional BSR or Hint at global address. */
171#define ETIR_S_C_STC_BOH_PS 212 /* Store-conditional BSR or Hint at pect + offset. */
172#define ETIR_S_C_STC_NBH_GBL 213 /* Store-conditional NOP,BSR or HINT at global address. */
173#define ETIR_S_C_STC_NBH_PS 214 /* Store-conditional NOP,BSR or HINT at psect + offset. */
174#define ETIR_S_C_MAXSTCCOD 214 /* Maximum store-conditional code. */
252b5132
RH
175
176/* VMS Global symbol definition record (GSD/EGSD). */
177
178#define GSD_S_K_ENTRIES 1
179#define GSD_S_C_ENTRIES 1
180#define GSD_S_C_PSC 0
181#define GSD_S_C_SYM 1
182#define GSD_S_C_EPM 2
183#define GSD_S_C_PRO 3
184#define GSD_S_C_SYMW 4
185#define GSD_S_C_EPMW 5
186#define GSD_S_C_PROW 6
187#define GSD_S_C_IDC 7
188#define GSD_S_C_ENV 8
189#define GSD_S_C_LSY 9
190#define GSD_S_C_LEPM 10
191#define GSD_S_C_LPRO 11
192#define GSD_S_C_SPSC 12
193#define GSD_S_C_SYMV 13
194#define GSD_S_C_EPMV 14
195#define GSD_S_C_PROV 15
196#define GSD_S_C_MAXRECTYP 15
197
7920ce38
NC
198#define EGSD_S_K_ENTRIES 2 /* Offset to first entry in record. */
199#define EGSD_S_C_ENTRIES 2 /* Offset to first entry in record. */
200#define EGSD_S_C_PSC 0 /* Psect definition. */
201#define EGSD_S_C_SYM 1 /* Symbol specification. */
202#define EGSD_S_C_IDC 2 /* Random entity check. */
203#define EGSD_S_C_SPSC 5 /* Shareable image psect definition. */
204#define EGSD_S_C_SYMV 6 /* Vectored (dual-valued) versions of SYM. */
205#define EGSD_S_C_SYMM 7 /* Masked versions of SYM. */
206#define EGSD_S_C_SYMG 8 /* EGST - gst version of SYM. */
207#define EGSD_S_C_MAXRECTYP 8 /* Maximum entry type defined. */
252b5132
RH
208
209#define GPS_S_M_PIC 1
210#define GPS_S_M_LIB 2
211#define GPS_S_M_OVR 4
212#define GPS_S_M_REL 8
213#define GPS_S_M_GBL 16
214#define GPS_S_M_SHR 32
215#define GPS_S_M_EXE 64
216#define GPS_S_M_RD 128
217#define GPS_S_M_WRT 256
218#define GPS_S_M_VEC 512
219#define GPS_S_K_NAME 9
220#define GPS_S_C_NAME 9
221
222#define EGPS_S_V_PIC 0x0001
223#define EGPS_S_V_LIB 0x0002
224#define EGPS_S_V_OVR 0x0004
225#define EGPS_S_V_REL 0x0008
226#define EGPS_S_V_GBL 0x0010
227#define EGPS_S_V_SHR 0x0020
228#define EGPS_S_V_EXE 0x0040
229#define EGPS_S_V_RD 0x0080
230#define EGPS_S_V_WRT 0x0100
231#define EGPS_S_V_VEC 0x0200
232#define EGPS_S_V_NOMOD 0x0400
233#define EGPS_S_V_COM 0x0800
234
235#define GSY_S_M_WEAK 1
236#define GSY_S_M_DEF 2
237#define GSY_S_M_UNI 4
238#define GSY_S_M_REL 8
239
240#define EGSY_S_V_WEAK 0x0001
241#define EGSY_S_V_DEF 0x0002
242#define EGSY_S_V_UNI 0x0004
243#define EGSY_S_V_REL 0x0008
244#define EGSY_S_V_COMM 0x0010
245#define EGSY_S_V_VECEP 0x0020
246#define EGSY_S_V_NORM 0x0040
247
248#define LSY_S_M_DEF 2
249#define LSY_S_M_REL 8
250
251#define ENV_S_M_DEF 1
252#define ENV_S_M_NESTED 2
253
7920ce38
NC
254/* Debugger symbol definitions: These are done by hand,
255 as no machine-readable version seems to be available. */
256#define DST_S_C_C 7 /* Language == "C". */
257#define DST_S_C_CXX 15 /* Language == "C++". */
252b5132 258#define DST_S_C_VERSION 153
7920ce38 259#define DST_S_C_SOURCE 155 /* Source file. */
252b5132 260#define DST_S_C_PROLOG 162
7920ce38
NC
261#define DST_S_C_BLKBEG 176 /* Beginning of block. */
262#define DST_S_C_BLKEND 177 /* End of block. */
252b5132
RH
263#define DST_S_C_ENTRY 181
264#define DST_S_C_PSECT 184
7920ce38 265#define DST_S_C_LINE_NUM 185 /* Line Number. */
252b5132
RH
266#define DST_S_C_LBLORLIT 186
267#define DST_S_C_LABEL 187
7920ce38
NC
268#define DST_S_C_MODBEG 188 /* Beginning of module. */
269#define DST_S_C_MODEND 189 /* End of module. */
270#define DST_S_C_RTNBEG 190 /* Beginning of routine.*/
271#define DST_S_C_RTNEND 191 /* End of routine. */
272#define DST_S_C_DELTA_PC_W 1 /* Incr PC. */
273#define DST_S_C_INCR_LINUM 2 /* Incr Line #. */
274#define DST_S_C_INCR_LINUM_W 3 /* Incr Line #. */
252b5132
RH
275#define DST_S_C_SET_LINUM_INCR 4
276#define DST_S_C_SET_LINUM_INCR_W 5
277#define DST_S_C_RESET_LINUM_INCR 6
278#define DST_S_C_BEG_STMT_MODE 7
279#define DST_S_C_END_STMT_MODE 8
7920ce38 280#define DST_S_C_SET_LINE_NUM 9 /* Set Line #. */
252b5132
RH
281#define DST_S_C_SET_PC 10
282#define DST_S_C_SET_PC_W 11
283#define DST_S_C_SET_PC_L 12
284#define DST_S_C_SET_STMTNUM 13
7920ce38
NC
285#define DST_S_C_TERM 14 /* End of lines. */
286#define DST_S_C_TERM_W 15 /* End of lines. */
287#define DST_S_C_SET_ABS_PC 16 /* Set PC. */
288#define DST_S_C_DELTA_PC_L 17 /* Incr PC. */
289#define DST_S_C_INCR_LINUM_L 18 /* Incr Line #. */
290#define DST_S_C_SET_LINUM_B 19 /* Set Line #. */
291#define DST_S_C_SET_LINUM_L 20 /* Set Line #. */
292#define DST_S_C_TERM_L 21 /* End of lines. */
293/* These are used with DST_S_C_SOURCE */
294#define DST_S_C_SRC_DECLFILE 1 /* Declare source file. */
295#define DST_S_C_SRC_SETFILE 2 /* Set source file. */
296#define DST_S_C_SRC_SETREC_L 3 /* Set record, longword value. */
297#define DST_S_C_SRC_SETREC_W 4 /* Set record, word value. */
298#define DST_S_C_SRC_DEFLINES_W 10 /* # of line, word counter. */
299#define DST_S_C_SRC_DEFLINES_B 11 /* # of line, byte counter. */
300#define DST_S_C_SRC_FORMFEED 16 /* ^L counts as a record. */
301/* The following are the codes for the various data types. Anything not on
302 the list is included under 'advanced_type'. */
252b5132
RH
303#define DBG_S_C_UCHAR 0x02
304#define DBG_S_C_USINT 0x03
305#define DBG_S_C_ULINT 0x04
306#define DBG_S_C_UQUAD 0x05
307#define DBG_S_C_SCHAR 0x06
308#define DBG_S_C_SSINT 0x07
309#define DBG_S_C_SLINT 0x08
310#define DBG_S_C_SQUAD 0x09
311#define DBG_S_C_REAL4 0x0a
7920ce38
NC
312#define DBG_S_C_REAL8 0x0b /* D_float double. */
313#define DBG_S_C_COMPLX4 0x0c /* 2xF_float complex float. */
314#define DBG_S_C_COMPLX8 0x0d /* 2xD_float complex double. */
315#define DBG_S_C_REAL8_G 0x1b /* G_float double. */
316#define DBG_S_C_COMPLX8_G 0x1d /* 2xG_float complex double. */
252b5132
RH
317#define DBG_S_C_FUNCTION_ADDR 0x17
318#define DBG_S_C_ADVANCED_TYPE 0xa3
7920ce38
NC
319/* Some of these are just for future reference. [pr]. */
320#define DBG_S_C_UBITA 0x01 /* Unsigned, aligned bit field. */
321#define DBG_S_C_UBITU 0x22 /* Unsigned, unaligned bit field. */
322#define DBG_S_C_SBITA 0x29 /* Signed, aligned bit field. */
323#define DBG_S_C_SBITU 0x2a /* Signed, unaligned bit field. */
324#define DBG_S_C_CSTRING 0x2e /* Asciz ('\0' terminated) string. */
325#define DBG_S_C_WCHAR 0x38 /* Wchar_t. */
326/* These are descriptor class codes. */
327#define DSC_K_CLASS_S 0x01 /* Static (fixed length). */
328#define DSC_K_CLASS_D 0x02 /* Dynamic string (not via malloc!). */
329#define DSC_K_CLASS_A 0x04 /* Array. */
330#define DSC_K_CLASS_UBS 0x0d /* Unaligned bit string. */
252b5132 331/* These are the codes that are used to generate the definitions of struct
7920ce38 332 union and enum records. */
252b5132
RH
333#define DBG_S_C_ENUM_ITEM 0xa4
334#define DBG_S_C_ENUM_START 0xa5
335#define DBG_S_C_ENUM_END 0xa6
336#define DBG_S_C_STRUCT_ITEM DST_K_VFLAGS_BITOFFS /* 0xff */
337#define DBG_S_C_STRUCT_START 0xab
338#define DBG_S_C_STRUCT_END 0xac
7920ce38
NC
339#define DST_K_TYPSPEC 0xaf /* Type specification. */
340/* These codes are used in the generation of the symbol definition records. */
341#define DST_K_VFLAGS_NOVAL 0x80 /* Struct definition only. */
342#define DST_K_VFLAGS_DSC 0xfa /* Descriptor used. */
343#define DST_K_VFLAGS_TVS 0xfb /* Trailing value specified. */
344#define DST_K_VS_FOLLOWS 0xfd /* Value spec follows. */
345#define DST_K_VFLAGS_BITOFFS 0xff /* Value contains bit offset. */
252b5132
RH
346#define DST_K_VALKIND_LITERAL 0
347#define DST_K_VALKIND_ADDR 1
348#define DST_K_VALKIND_DESC 2
349#define DST_K_VALKIND_REG 3
7920ce38
NC
350#define DST_K_REG_VAX_AP 0x0c /* R12. */
351#define DST_K_REG_VAX_FP 0x0d /* R13. */
352#define DST_K_REG_VAX_SP 0x0e /* R14. */
353#define DST_V_VALKIND 0 /* Offset of valkind field. */
354#define DST_V_INDIRECT 2 /* Offset to indirect bit. */
355#define DST_V_DISP 3 /* Offset to displacement bit. */
356#define DST_V_REGNUM 4 /* Offset to register number. */
252b5132
RH
357#define DST_M_INDIRECT (1<<DST_V_INDIRECT)
358#define DST_M_DISP (1<<DST_V_DISP)
359#define DBG_C_FUNCTION_PARAM /* 0xc9 */ \
360 (DST_K_VALKIND_ADDR|DST_M_DISP|(DST_K_REG_VAX_AP<<DST_V_REGNUM))
361#define DBG_C_LOCAL_SYM /* 0xd9 */ \
362 (DST_K_VALKIND_ADDR|DST_M_DISP|(DST_K_REG_VAX_FP<<DST_V_REGNUM))
7920ce38
NC
363/* Kinds of value specifications. */
364#define DST_K_VS_ALLOC_SPLIT 3 /* Split lifetime. */
365/* Kinds of type specifications. */
366#define DST_K_TS_ATOM 0x01 /* Atomic type specification. */
367#define DST_K_TS_DSC 0x02 /* Descriptor type spec. */
368#define DST_K_TS_IND 0x03 /* Indirect type specification. */
369#define DST_K_TS_TPTR 0x04 /* Typed pointer type spec. */
370#define DST_K_TS_PTR 0x05 /* Pointer type spec. */
371#define DST_K_TS_ARRAY 0x07 /* Array type spec. */
372#define DST_K_TS_NOV_LENG 0x0e /* Novel length type spec. */
373/* These are the codes that are used in the suffix records to determine the
374 actual data type. */
252b5132
RH
375#define DBG_S_C_BASIC DST_K_TS_ATOM
376#define DBG_S_C_BASIC_ARRAY DST_K_TS_DSC
377#define DBG_S_C_STRUCT DST_K_TS_IND
378#define DBG_S_C_POINTER DST_K_TS_TPTR
379#define DBG_S_C_VOID DST_K_TS_PTR
380#define DBG_S_C_COMPLEX_ARRAY DST_K_TS_ARRAY
381
382/* VMS Module header record (EMH) definitions. */
383
384#define MHD_S_C_MHD 0
385#define MHD_S_C_LNM 1
386#define MHD_S_C_SRC 2
387#define MHD_S_C_TTL 3
388#define MHD_S_C_CPR 4
389#define MHD_S_C_MTC 5
390#define MHD_S_C_GTX 6
391#define MHD_S_C_MAXHDRTYP 6
392
7920ce38
NC
393#define EMH_S_C_MHD 0 /* Main header record. */
394#define EMH_S_C_LNM 1 /* Language name and version. */
395#define EMH_S_C_SRC 2 /* Source file specification. */
396#define EMH_S_C_TTL 3 /* Title text of module. */
397#define EMH_S_C_CPR 4 /* Copyright notice. */
398#define EMH_S_C_MTC 5 /* Maintenance status. */
399#define EMH_S_C_GTX 6 /* General text. */
400#define EMH_S_C_MAXHDRTYP 6 /* Maximum allowable type. */
252b5132
RH
401
402/* vms.c. */
403
7920ce38 404extern asymbol *_bfd_vms_make_empty_symbol (bfd *);
252b5132
RH
405
406/* vms-gsd.c. */
407
7920ce38
NC
408extern int _bfd_vms_slurp_gsd (bfd *, int);
409extern int _bfd_vms_write_gsd (bfd *, int);
252b5132
RH
410
411/* vms-mhd.c. */
412
7920ce38
NC
413extern int _bfd_vms_slurp_hdr (bfd *, int);
414extern int _bfd_vms_write_hdr (bfd *, int);
415extern int _bfd_vms_slurp_eom (bfd *, int);
416extern int _bfd_vms_write_eom (bfd *, int);
252b5132
RH
417
418/* vms-tir.c. */
419
7920ce38
NC
420extern int _bfd_vms_slurp_tir (bfd *, int);
421extern int _bfd_vms_slurp_dbg (bfd *, int);
422extern int _bfd_vms_slurp_tbt (bfd *, int);
423extern int _bfd_vms_slurp_lnk (bfd *, int);
424
425extern int _bfd_vms_write_tir (bfd *, int);
426extern int _bfd_vms_write_tbt (bfd *, int);
427extern int _bfd_vms_write_dbg (bfd *, int);
428
429/* The r_type field in a reloc is one of he following values. */
430#define ALPHA_R_IGNORE 0
431#define ALPHA_R_REFQUAD 1
432#define ALPHA_R_BRADDR 2
433#define ALPHA_R_HINT 3
434#define ALPHA_R_SREL16 4
435#define ALPHA_R_SREL32 5
436#define ALPHA_R_SREL64 6
437#define ALPHA_R_OP_PUSH 7
438#define ALPHA_R_OP_STORE 8
439#define ALPHA_R_OP_PSUB 9
440#define ALPHA_R_OP_PRSHIFT 10
441#define ALPHA_R_LINKAGE 11
442#define ALPHA_R_REFLONG 12
443#define ALPHA_R_CODEADDR 13
444
445/* Object language definitions. */
446
447#define OBJ_S_C_HDR 0 /* VAX moule header record. */
448#define OBJ_S_C_GSD 1 /* VAX glbal symbol definition record. */
449#define OBJ_S_C_TIR 2 /* VAX tet information record. */
450#define OBJ_S_C_EOM 3 /* VAX en of module record. */
451#define OBJ_S_C_DBG 4 /* VAX Deugger information record. */
452#define OBJ_S_C_TBT 5 /* VAX Trceback information record. */
453#define OBJ_S_C_LNK 6 /* VAX liker options record. */
454#define OBJ_S_C_EOMW 7 /* VAX en of module word-psect record. */
455#define OBJ_S_C_MAXRECTYP 7 /* VAX Lat assigned record type. */
456#define EOBJ_S_C_EMH 8 /* EVAX mdule header record. */
457#define EOBJ_S_C_EEOM 9 /* EVAX ed of module record. */
458#define EOBJ_S_C_EGSD 10 /* EVAX gobal symbol definition record.*/
459#define EOBJ_S_C_ETIR 11 /* EVAX txt information record. */
460#define EOBJ_S_C_EDBG 12 /* EVAX Dbugger information record. */
461#define EOBJ_S_C_ETBT 13 /* EVAX Taceback information record. */
462#define EOBJ_S_C_MAXRECTYP 13 /* EVAX Lst assigned record type. */
463#define OBJ_S_K_SUBTYP 1
464#define OBJ_S_C_SUBTYP 1
465#define EOBJ_S_K_SUBTYP 4
466#define EOBJ_S_C_SUBTYP 4
467#define OBJ_S_C_MAXRECSIZ 2048 /* Maximu legal record size. */
468#define EOBJ_S_C_MAXRECSIZ 8192 /* Maximu legal record size. */
469#define OBJ_S_C_STRLVL 0 /* Structre level. */
470#define EOBJ_S_C_STRLVL 2 /* Structre level. */
471#define OBJ_S_C_SYMSIZ 31 /* Maximu symbol length. */
472#define EOBJ_S_C_SYMSIZ 64 /* Maximu symbol length. */
473#define EOBJ_S_C_SECSIZ 31 /* Maximu section name length. */
474#define OBJ_S_C_STOREPLIM -1 /* Maximu repeat count on store commands. */
475#define EOBJ_S_C_STOREPLIM -1 /* Maximu repeat count on store commands. */
476#define OBJ_S_C_PSCALILIM 9 /* Maximu p-sect alignment. */
477#define EOBJ_S_C_PSCALILIM 16 /* Maximu p-sect alignment. */
478
479#define EVAX_OFFSET 256 /* Type ofset for EVAX codes in switch. */
480/* Miscellaneous definitions. */
481
482#if __GNUC__
483typedef unsigned long long uquad;
484#else
485typedef unsigned long uquad;
486#endif
487
488#define MAX_OUTREC_SIZE 4096
489#define MIN_OUTREC_LUFT 64
490
491typedef struct _vms_section
492{
493 unsigned char *contents;
494 bfd_vma offset;
495 bfd_size_type size;
496 struct _vms_section *next;
497} vms_section;
498
499extern vms_section * _bfd_get_vms_section (bfd *, int);
500
501typedef struct _vms_reloc
502{
503 struct _vms_reloc *next;
504 arelent *reloc;
505 asection *section;
506} vms_reloc;
507
508/* VMS module header. */
509
510struct hdr_struc
511{
512 int hdr_b_strlvl;
513 long hdr_l_arch1;
514 long hdr_l_arch2;
515 long hdr_l_recsiz;
516 char * hdr_t_name;
517 char * hdr_t_version;
518 char * hdr_t_date;
519 char * hdr_c_lnm;
520 char * hdr_c_src;
521 char * hdr_c_ttl;
522};
523
524/* VMS end of module. */
525
526struct eom_struc
527{
528 long eom_l_total_lps;
529 unsigned char eom_b_comcod;
530 bfd_boolean eom_has_transfer;
531 unsigned char eom_b_tfrflg;
532 long eom_l_psindx;
533 long eom_l_tfradr;
534};
535
252b5132 536enum file_format_enum { FF_UNKNOWN, FF_FOREIGN, FF_NATIVE, FF_VAX };
7920ce38
NC
537
538typedef struct vms_symbol_struct
539{
540 struct bfd_hash_entry bfd_hash;
541 asymbol *symbol;
542} vms_symbol_entry;
543
544/* Stack value for push/pop commands. */
545
546struct stack_struct
547{
548 uquad value;
549 int psect;
550};
551#define STACKSIZE 8192
552
553/* location stack definitions for CTL_DFLC, CTL_STLOC, and CTL_STKDL */
554
555struct location_struct
556{
557 unsigned long value;
558 int psect;
559};
560#define LOCATION_SAVE_SIZE 32
561
562#define VMS_SECTION_COUNT 1024
563
564struct vms_private_data_struct
565{
566 bfd_boolean is_vax;
b34976b6 567 bfd_boolean fixup_done; /* Flag to indicate if all
252b5132 568 section pointers and PRIV(sections)
7920ce38
NC
569 are set up correctly. */
570 unsigned char *vms_buf; /* Buffer to record. */
571 int buf_size; /* Max size of buffer. */
572 unsigned char *vms_rec; /* Actual record ptr. */
573 int rec_length; /* Remaining record length. */
574 int rec_size; /* Actual record size. */
575 int rec_type; /* Actual record type. */
576 enum file_format_enum file_format;
577
578 struct hdr_struc hdr_data; /* Data from HDR/EMH record. */
579 struct eom_struc eom_data; /* Data from EOM/EEOM record. */
580 unsigned int section_count; /* # of sections in following array. */
581 asection **sections; /* Array of GSD/EGSD sections. */
582 int gsd_sym_count; /* # of GSD/EGSD symbols. */
583 asymbol **symbols; /* Vector of GSD/EGSD symbols. */
584 struct proc_value *procedure;
585
586 struct stack_struct *stack;
587 int stackptr;
588
252b5132 589 vms_section *vms_section_table[VMS_SECTION_COUNT];
7920ce38 590
252b5132 591 struct bfd_hash_table *vms_symbol_table;
7920ce38
NC
592 struct bfd_symbol **symcache;
593 int symnum;
594
252b5132 595 struct location_struct *location_stack;
7920ce38
NC
596
597 asection *image_section; /* Section for image_ptr. */
598 unsigned char *image_ptr; /* A pointer to section->contents. */
599
600 unsigned char pdsc[8]; /* Procedure descriptor. */
601
602 /* Output routine storage. */
603 unsigned char *output_buf; /* Output data. */
604 int push_level;
605 int pushed_size;
606 int length_pos;
607 int output_size;
608 int output_alignment;
609
610 /* Linkage index counter
611 used by conditional store commands (TIR_S_C_STC_). */
612 int vms_linkage_index;
613
614 /* see tc-alpha.c of gas for a descripton. */
615 int flag_hash_long_names; /* -+, hash instead of truncate. */
616 int flag_show_after_trunc; /* -H, shw hashing/truncation. */
617};
618
619#define PRIV(name) ((struct vms_private_data_struct *) abfd->tdata.any)->name
620
252b5132 621#define SECTION_NAME_TEMPLATE "__SEC__%d"
7920ce38
NC
622
623#if VMS_DEBUG
0fd3a477
JW
624extern void _bfd_vms_debug (int, char *, ...) ATTRIBUTE_PRINTF_2;
625extern void _bfd_hexdump (int, unsigned char *, int, int);
7920ce38
NC
626
627#define vms_debug _bfd_vms_debug
628#endif
629
630extern struct bfd_hash_entry * _bfd_vms_hash_newfunc (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
631extern void _bfd_vms_get_header_values (bfd *, unsigned char *, int *, int *);
632extern int _bfd_vms_get_record (bfd *abf);
633extern int _bfd_vms_next_record (bfd *abf);
634extern char * _bfd_vms_save_sized_string (unsigned char *, int);
635extern char * _bfd_vms_save_counted_string (unsigned char *);
636extern void _bfd_vms_push (bfd *, uquad, int);
637extern uquad _bfd_vms_pop (bfd *, int *);
638extern bfd_boolean _bfd_save_vms_section (bfd *, asection *, const void *, file_ptr, bfd_size_type);
639extern void _bfd_vms_output_begin (bfd *, int, int);
640extern void _bfd_vms_output_alignment (bfd *, int);
641extern void _bfd_vms_output_push (bfd *);
642extern void _bfd_vms_output_pop (bfd *);
643extern void _bfd_vms_output_flush (bfd *);
644extern void _bfd_vms_output_end (bfd *);
645extern int _bfd_vms_output_check (bfd *, int);
646extern void _bfd_vms_output_byte (bfd *, unsigned);
647extern void _bfd_vms_output_short (bfd *, unsigned);
648extern void _bfd_vms_output_long (bfd *, unsigned long);
649extern void _bfd_vms_output_quad (bfd *, uquad);
650extern void _bfd_vms_output_counted (bfd *, char *);
651extern void _bfd_vms_output_dump (bfd *, unsigned char *, int);
652extern void _bfd_vms_output_fill (bfd *, int, int);
653extern char * _bfd_vms_length_hash_symbol (bfd *, const char *, int);
654extern vms_symbol_entry * _bfd_vms_enter_symbol (bfd *, char *);
252b5132
RH
655
656#endif /* VMS_H */