daily update
[deliverable/binutils-gdb.git] / bfd / vms.h
CommitLineData
252b5132 1/* vms.h -- Header file for VMS (Alpha and Vax) support.
aa820537 2 Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007,
0c376465
TG
3 2008, 2009 Free Software Foundation, Inc.
4
5 Main header file.
252b5132
RH
6
7 Written by Klaus K"ampf (kkaempf@rmi.de)
8
7920ce38 9 This file is part of BFD, the Binary File Descriptor library.
252b5132 10
7920ce38
NC
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
cd123cb7 13 the Free Software Foundation; either version 3 of the License, or
7920ce38 14 (at your option) any later version.
252b5132 15
7920ce38
NC
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
252b5132 20
7920ce38
NC
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
cd123cb7
NC
23 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
24 MA 02110-1301, USA. */
252b5132 25
4b544b64
TG
26#include <time.h>
27
cd123cb7 28#undef vms
252b5132
RH
29#ifndef VMS_H
30#define VMS_H
31
0c376465
TG
32/* Constants starting with 'Exxx_' are for openVMS/Alpha (EVAX object
33 language). */
34
35#define VMS_BLOCK_SIZE 512
252b5132 36
0c376465 37/* VMS Text Information and Relocation Records (TIR/ETIR). */
252b5132
RH
38
39#define TIR_S_C_STA_GBL 0
40#define TIR_S_C_STA_SB 1
41#define TIR_S_C_STA_SW 2
42#define TIR_S_C_STA_LW 3
43#define TIR_S_C_STA_PB 4
44#define TIR_S_C_STA_PW 5
45#define TIR_S_C_STA_PL 6
46#define TIR_S_C_STA_UB 7
47#define TIR_S_C_STA_UW 8
48#define TIR_S_C_STA_BFI 9
49#define TIR_S_C_STA_WFI 10
50#define TIR_S_C_STA_LFI 11
51#define TIR_S_C_STA_EPM 12
52#define TIR_S_C_STA_CKARG 13
53#define TIR_S_C_STA_WPB 14
54#define TIR_S_C_STA_WPW 15
55#define TIR_S_C_STA_WPL 16
56#define TIR_S_C_STA_LSY 17
57#define TIR_S_C_STA_LIT 18
58#define TIR_S_C_STA_LEPM 19
59#define TIR_S_C_MAXSTACOD 19
60#define TIR_S_C_MINSTOCOD 20
61#define TIR_S_C_STO_SB 20
62#define TIR_S_C_STO_SW 21
63#define TIR_S_C_STO_L 22
64#define TIR_S_C_STO_LW 22
65#define TIR_S_C_STO_BD 23
66#define TIR_S_C_STO_WD 24
67#define TIR_S_C_STO_LD 25
68#define TIR_S_C_STO_LI 26
69#define TIR_S_C_STO_PIDR 27
70#define TIR_S_C_STO_PICR 28
71#define TIR_S_C_STO_RSB 29
72#define TIR_S_C_STO_RSW 30
73#define TIR_S_C_STO_RL 31
74#define TIR_S_C_STO_VPS 32
75#define TIR_S_C_STO_USB 33
76#define TIR_S_C_STO_USW 34
77#define TIR_S_C_STO_RUB 35
78#define TIR_S_C_STO_RUW 36
79#define TIR_S_C_STO_B 37
80#define TIR_S_C_STO_W 38
81#define TIR_S_C_STO_RB 39
82#define TIR_S_C_STO_RW 40
83#define TIR_S_C_STO_RIVB 41
84#define TIR_S_C_STO_PIRR 42
85#define TIR_S_C_MAXSTOCOD 42
86#define TIR_S_C_MINOPRCOD 50
87#define TIR_S_C_OPR_NOP 50
88#define TIR_S_C_OPR_ADD 51
89#define TIR_S_C_OPR_SUB 52
90#define TIR_S_C_OPR_MUL 53
91#define TIR_S_C_OPR_DIV 54
92#define TIR_S_C_OPR_AND 55
93#define TIR_S_C_OPR_IOR 56
94#define TIR_S_C_OPR_EOR 57
95#define TIR_S_C_OPR_NEG 58
96#define TIR_S_C_OPR_COM 59
97#define TIR_S_C_OPR_INSV 60
98#define TIR_S_C_OPR_ASH 61
99#define TIR_S_C_OPR_USH 62
100#define TIR_S_C_OPR_ROT 63
101#define TIR_S_C_OPR_SEL 64
102#define TIR_S_C_OPR_REDEF 65
103#define TIR_S_C_OPR_DFLIT 66
104#define TIR_S_C_MAXOPRCOD 66
105#define TIR_S_C_MINCTLCOD 80
106#define TIR_S_C_CTL_SETRB 80
107#define TIR_S_C_CTL_AUGRB 81
108#define TIR_S_C_CTL_DFLOC 82
109#define TIR_S_C_CTL_STLOC 83
110#define TIR_S_C_CTL_STKDL 84
111#define TIR_S_C_MAXCTLCOD 84
112
7920ce38
NC
113#define ETIR_S_C_MINSTACOD 0 /* Minimum store code. */
114#define ETIR_S_C_STA_GBL 0 /* Stack global symbol value. */
115#define ETIR_S_C_STA_LW 1 /* Stack longword. */
116#define ETIR_S_C_STA_QW 2 /* Stack quadword. */
0c376465 117#define ETIR_S_C_STA_PQ 3 /* Stack psect base + quadword off. */
7920ce38
NC
118#define ETIR_S_C_STA_LI 4 /* Stack literal. */
119#define ETIR_S_C_STA_MOD 5 /* Stack module. */
120#define ETIR_S_C_STA_CKARG 6 /* Check Arguments. */
121#define ETIR_S_C_MAXSTACOD 6 /* Maximum stack code. */
122#define ETIR_S_C_MINSTOCOD 50 /* Minimum store code. */
123#define ETIR_S_C_STO_B 50 /* Store byte. */
124#define ETIR_S_C_STO_W 51 /* Store word. */
125#define ETIR_S_C_STO_LW 52 /* Store longword. */
126#define ETIR_S_C_STO_QW 53 /* Store quadword. */
127#define ETIR_S_C_STO_IMMR 54 /* Store immediate Repeated. */
128#define ETIR_S_C_STO_GBL 55 /* Store global. */
129#define ETIR_S_C_STO_CA 56 /* Store code address. */
130#define ETIR_S_C_STO_RB 57 /* Store relative branch. */
131#define ETIR_S_C_STO_AB 58 /* Store absolute branch. */
132#define ETIR_S_C_STO_OFF 59 /* Store offset within psect. */
133#define ETIR_S_C_STO_IMM 61 /* Store immediate. */
134#define ETIR_S_C_STO_GBL_LW 62 /* Store global Longword. */
135#define ETIR_S_C_STO_LP_PSB 63 /* STO_LP_PSB not valid in level 2 use STC_LP_PSB. */
136#define ETIR_S_C_STO_HINT_GBL 64 /* Store 14 bit HINT at global address. */
252b5132 137#define ETIR_S_C_STO_HINT_PS 65 /* Store 14 bit HINT at psect + offset */
7920ce38
NC
138#define ETIR_S_C_MAXSTOCOD 65 /* Maximum store code. */
139#define ETIR_S_C_MINOPRCOD 100 /* Minimum operate code. */
140#define ETIR_S_C_OPR_NOP 100 /* No-op. */
141#define ETIR_S_C_OPR_ADD 101 /* Add. */
142#define ETIR_S_C_OPR_SUB 102 /* Subtract. */
143#define ETIR_S_C_OPR_MUL 103 /* Multiply. */
144#define ETIR_S_C_OPR_DIV 104 /* Divide. */
145#define ETIR_S_C_OPR_AND 105 /* Logical AND. */
146#define ETIR_S_C_OPR_IOR 106 /* Logical inclusive OR. */
147#define ETIR_S_C_OPR_EOR 107 /* Logical exclusive OR. */
148#define ETIR_S_C_OPR_NEG 108 /* Negate. */
149#define ETIR_S_C_OPR_COM 109 /* Complement. */
150#define ETIR_S_C_OPR_INSV 110 /* Insert bit field. */
151#define ETIR_S_C_OPR_ASH 111 /* Arithmetic shift. */
152#define ETIR_S_C_OPR_USH 112 /* Unsigned shift. */
153#define ETIR_S_C_OPR_ROT 113 /* Rotate. */
154#define ETIR_S_C_OPR_SEL 114 /* Select one of three longwords on top of stack. */
155#define ETIR_S_C_OPR_REDEF 115 /* Redefine this symbol after pass 2. */
156#define ETIR_S_C_OPR_DFLIT 116 /* Define a literal. */
157#define ETIR_S_C_MAXOPRCOD 116 /* Maximum operate code. */
158#define ETIR_S_C_MINCTLCOD 150 /* Minimum control code. */
159#define ETIR_S_C_CTL_SETRB 150 /* Set relocation base. */
160#define ETIR_S_C_CTL_AUGRB 151 /* Augment relocation base. */
161#define ETIR_S_C_CTL_DFLOC 152 /* Define debug location. */
162#define ETIR_S_C_CTL_STLOC 153 /* Set debug location. */
163#define ETIR_S_C_CTL_STKDL 154 /* Stack debug location. */
164#define ETIR_S_C_MAXCTLCOD 154 /* Maximum control code. */
165#define ETIR_S_C_MINSTCCOD 200 /* Minimum store-conditional code. */
166#define ETIR_S_C_STC_LP 200 /* Store-conditional Linkage Pair. */
167#define ETIR_S_C_STC_LP_PSB 201 /* Store-conditional Linkage Pair with Procedure Signature. */
168#define ETIR_S_C_STC_GBL 202 /* Store-conditional Address at global address. */
169#define ETIR_S_C_STC_GCA 203 /* Store-conditional Code Address at global address. */
170#define ETIR_S_C_STC_PS 204 /* Store-conditional Address at psect + offset. */
171#define ETIR_S_C_STC_NOP_GBL 205 /* Store-conditional NOP at address of global. */
172#define ETIR_S_C_STC_NOP_PS 206 /* Store-conditional NOP at pect + offset. */
173#define ETIR_S_C_STC_BSR_GBL 207 /* Store-conditional BSR at global address. */
174#define ETIR_S_C_STC_BSR_PS 208 /* Store-conditional BSR at pect + offset. */
175#define ETIR_S_C_STC_LDA_GBL 209 /* Store-conditional LDA at global address. */
176#define ETIR_S_C_STC_LDA_PS 210 /* Store-conditional LDA at psect + offset. */
177#define ETIR_S_C_STC_BOH_GBL 211 /* Store-conditional BSR or Hint at global address. */
178#define ETIR_S_C_STC_BOH_PS 212 /* Store-conditional BSR or Hint at pect + offset. */
179#define ETIR_S_C_STC_NBH_GBL 213 /* Store-conditional NOP,BSR or HINT at global address. */
180#define ETIR_S_C_STC_NBH_PS 214 /* Store-conditional NOP,BSR or HINT at psect + offset. */
181#define ETIR_S_C_MAXSTCCOD 214 /* Maximum store-conditional code. */
252b5132 182
0c376465
TG
183#define ETIR_S_C_HEADER_SIZE 4 /* Size of the header of a command */
184
185/* VMS Global Symbol Directory Records (GSD/EGSD). */
252b5132
RH
186
187#define GSD_S_K_ENTRIES 1
188#define GSD_S_C_ENTRIES 1
189#define GSD_S_C_PSC 0
190#define GSD_S_C_SYM 1
191#define GSD_S_C_EPM 2
192#define GSD_S_C_PRO 3
193#define GSD_S_C_SYMW 4
194#define GSD_S_C_EPMW 5
195#define GSD_S_C_PROW 6
196#define GSD_S_C_IDC 7
197#define GSD_S_C_ENV 8
198#define GSD_S_C_LSY 9
199#define GSD_S_C_LEPM 10
200#define GSD_S_C_LPRO 11
201#define GSD_S_C_SPSC 12
202#define GSD_S_C_SYMV 13
203#define GSD_S_C_EPMV 14
204#define GSD_S_C_PROV 15
205#define GSD_S_C_MAXRECTYP 15
206
7920ce38
NC
207#define EGSD_S_K_ENTRIES 2 /* Offset to first entry in record. */
208#define EGSD_S_C_ENTRIES 2 /* Offset to first entry in record. */
209#define EGSD_S_C_PSC 0 /* Psect definition. */
210#define EGSD_S_C_SYM 1 /* Symbol specification. */
211#define EGSD_S_C_IDC 2 /* Random entity check. */
212#define EGSD_S_C_SPSC 5 /* Shareable image psect definition. */
213#define EGSD_S_C_SYMV 6 /* Vectored (dual-valued) versions of SYM. */
214#define EGSD_S_C_SYMM 7 /* Masked versions of SYM. */
215#define EGSD_S_C_SYMG 8 /* EGST - gst version of SYM. */
216#define EGSD_S_C_MAXRECTYP 8 /* Maximum entry type defined. */
252b5132 217
0c376465 218/* Program Section Definition. */
252b5132
RH
219#define GPS_S_M_PIC 1
220#define GPS_S_M_LIB 2
221#define GPS_S_M_OVR 4
222#define GPS_S_M_REL 8
223#define GPS_S_M_GBL 16
224#define GPS_S_M_SHR 32
225#define GPS_S_M_EXE 64
226#define GPS_S_M_RD 128
227#define GPS_S_M_WRT 256
228#define GPS_S_M_VEC 512
229#define GPS_S_K_NAME 9
230#define GPS_S_C_NAME 9
231
0c376465
TG
232#define EGPS_S_B_ALIGN 4
233#define EGPS_S_W_FLAGS 6
234#define EGPS_S_L_ALLOC 8
235#define EGPS_S_B_NAMLNG 12
236
237#define EGPS_S_V_PIC 0x0001
238#define EGPS_S_V_LIB 0x0002
239#define EGPS_S_V_OVR 0x0004
240#define EGPS_S_V_REL 0x0008
241#define EGPS_S_V_GBL 0x0010
242#define EGPS_S_V_SHR 0x0020
243#define EGPS_S_V_EXE 0x0040
244#define EGPS_S_V_RD 0x0080
245#define EGPS_S_V_WRT 0x0100
246#define EGPS_S_V_VEC 0x0200
247#define EGPS_S_V_NOMOD 0x0400
248#define EGPS_S_V_COM 0x0800
249#define EGPS_S_V_ALLOC_64BIT 0x1000
250
251/* Symbol Defintion or Reference. */
252b5132
RH
252#define GSY_S_M_WEAK 1
253#define GSY_S_M_DEF 2
254#define GSY_S_M_UNI 4
255#define GSY_S_M_REL 8
256
0c376465
TG
257#define EGSY_S_W_FLAGS 6
258
259#define EGSY_S_V_WEAK 0x0001
260#define EGSY_S_V_DEF 0x0002
261#define EGSY_S_V_UNI 0x0004
262#define EGSY_S_V_REL 0x0008
263#define EGSY_S_V_COMM 0x0010
264#define EGSY_S_V_VECEP 0x0020
265#define EGSY_S_V_NORM 0x0040
266#define EGSY_S_V_QUAD_VAL 0x0080
252b5132
RH
267
268#define LSY_S_M_DEF 2
269#define LSY_S_M_REL 8
270
271#define ENV_S_M_DEF 1
272#define ENV_S_M_NESTED 2
273
0c376465
TG
274/* Symbol Definition. */
275#define ESDF_S_L_VALUE 8
276#define ESDF_S_L_PSINDX 28
277#define ESDF_S_B_NAMLNG 32
278
279/* Universal Symbol Definition. */
280#define EGST_S_W_FLAGS 6
281#define EGST_S_Q_LP_1 16
282#define EGST_S_Q_LP_2 24
283#define EGST_S_L_PSINDX 32
284#define EGST_S_B_NAMLNG 36
285
286/* Symbol Reference. */
287#define ESRF_S_B_NAMLNG 8
288
7920ce38
NC
289/* Debugger symbol definitions: These are done by hand,
290 as no machine-readable version seems to be available. */
291#define DST_S_C_C 7 /* Language == "C". */
292#define DST_S_C_CXX 15 /* Language == "C++". */
0c376465 293#define DST_S_C_EPILOG 127
252b5132 294#define DST_S_C_VERSION 153
7920ce38 295#define DST_S_C_SOURCE 155 /* Source file. */
252b5132 296#define DST_S_C_PROLOG 162
7920ce38
NC
297#define DST_S_C_BLKBEG 176 /* Beginning of block. */
298#define DST_S_C_BLKEND 177 /* End of block. */
252b5132
RH
299#define DST_S_C_ENTRY 181
300#define DST_S_C_PSECT 184
7920ce38 301#define DST_S_C_LINE_NUM 185 /* Line Number. */
252b5132
RH
302#define DST_S_C_LBLORLIT 186
303#define DST_S_C_LABEL 187
7920ce38
NC
304#define DST_S_C_MODBEG 188 /* Beginning of module. */
305#define DST_S_C_MODEND 189 /* End of module. */
306#define DST_S_C_RTNBEG 190 /* Beginning of routine.*/
307#define DST_S_C_RTNEND 191 /* End of routine. */
0c376465
TG
308
309/* These are used with DST_S_C_LINE_NUM. */
310#define DST_S_C_LINE_NUM_HEADER_SIZE 4
311
312#define DST_S_C_DELTA_PC_W 1 /* Incr PC. */
313#define DST_S_C_INCR_LINUM 2 /* Incr Line #. */
314#define DST_S_C_INCR_LINUM_W 3 /* Incr Line #. */
315#define DST_S_C_SET_LINUM_INCR 4
252b5132
RH
316#define DST_S_C_SET_LINUM_INCR_W 5
317#define DST_S_C_RESET_LINUM_INCR 6
0c376465
TG
318#define DST_S_C_BEG_STMT_MODE 7
319#define DST_S_C_END_STMT_MODE 8
320#define DST_S_C_SET_LINE_NUM 9 /* Set Line #. */
252b5132
RH
321#define DST_S_C_SET_PC 10
322#define DST_S_C_SET_PC_W 11
323#define DST_S_C_SET_PC_L 12
324#define DST_S_C_SET_STMTNUM 13
7920ce38
NC
325#define DST_S_C_TERM 14 /* End of lines. */
326#define DST_S_C_TERM_W 15 /* End of lines. */
327#define DST_S_C_SET_ABS_PC 16 /* Set PC. */
328#define DST_S_C_DELTA_PC_L 17 /* Incr PC. */
329#define DST_S_C_INCR_LINUM_L 18 /* Incr Line #. */
330#define DST_S_C_SET_LINUM_B 19 /* Set Line #. */
331#define DST_S_C_SET_LINUM_L 20 /* Set Line #. */
332#define DST_S_C_TERM_L 21 /* End of lines. */
333/* These are used with DST_S_C_SOURCE */
334#define DST_S_C_SRC_DECLFILE 1 /* Declare source file. */
335#define DST_S_C_SRC_SETFILE 2 /* Set source file. */
336#define DST_S_C_SRC_SETREC_L 3 /* Set record, longword value. */
337#define DST_S_C_SRC_SETREC_W 4 /* Set record, word value. */
0c376465
TG
338#define DST_S_C_SRC_SETLNUM_L 5 /* Set line, longword value. */
339#define DST_S_C_SRC_SETLNUM_W 6 /* Set line, word value. */
340#define DST_S_C_SRC_INCRLNUM_B 7 /* Increment line. */
7920ce38
NC
341#define DST_S_C_SRC_DEFLINES_W 10 /* # of line, word counter. */
342#define DST_S_C_SRC_DEFLINES_B 11 /* # of line, byte counter. */
343#define DST_S_C_SRC_FORMFEED 16 /* ^L counts as a record. */
0c376465
TG
344
345#define DST_S_B_PCLINE_UNSBYTE 1
346#define DST_S_W_PCLINE_UNSWORD 1
347#define DST_S_L_PCLINE_UNSLONG 1
348
349#define DST_S_B_MODBEG_NAME 14
350#define DST_S_L_RTNBEG_ADDRESS 5
351#define DST_S_B_RTNBEG_NAME 13
352#define DST_S_L_RTNEND_SIZE 5
353
354/* These are used with DST_S_C_SOURCE. */
355#define DST_S_C_SOURCE_HEADER_SIZE 4
356
357#define DST_S_B_SRC_DF_LENGTH 1
358#define DST_S_W_SRC_DF_FILEID 3
359#define DST_S_B_SRC_DF_FILENAME 20
360#define DST_S_B_SRC_UNSBYTE 1
361#define DST_S_W_SRC_UNSWORD 1
362#define DST_S_L_SRC_UNSLONG 1
363
7920ce38
NC
364/* The following are the codes for the various data types. Anything not on
365 the list is included under 'advanced_type'. */
252b5132
RH
366#define DBG_S_C_UCHAR 0x02
367#define DBG_S_C_USINT 0x03
368#define DBG_S_C_ULINT 0x04
369#define DBG_S_C_UQUAD 0x05
370#define DBG_S_C_SCHAR 0x06
371#define DBG_S_C_SSINT 0x07
372#define DBG_S_C_SLINT 0x08
373#define DBG_S_C_SQUAD 0x09
374#define DBG_S_C_REAL4 0x0a
7920ce38
NC
375#define DBG_S_C_REAL8 0x0b /* D_float double. */
376#define DBG_S_C_COMPLX4 0x0c /* 2xF_float complex float. */
377#define DBG_S_C_COMPLX8 0x0d /* 2xD_float complex double. */
378#define DBG_S_C_REAL8_G 0x1b /* G_float double. */
379#define DBG_S_C_COMPLX8_G 0x1d /* 2xG_float complex double. */
252b5132
RH
380#define DBG_S_C_FUNCTION_ADDR 0x17
381#define DBG_S_C_ADVANCED_TYPE 0xa3
7920ce38
NC
382/* Some of these are just for future reference. [pr]. */
383#define DBG_S_C_UBITA 0x01 /* Unsigned, aligned bit field. */
384#define DBG_S_C_UBITU 0x22 /* Unsigned, unaligned bit field. */
385#define DBG_S_C_SBITA 0x29 /* Signed, aligned bit field. */
386#define DBG_S_C_SBITU 0x2a /* Signed, unaligned bit field. */
387#define DBG_S_C_CSTRING 0x2e /* Asciz ('\0' terminated) string. */
388#define DBG_S_C_WCHAR 0x38 /* Wchar_t. */
389/* These are descriptor class codes. */
390#define DSC_K_CLASS_S 0x01 /* Static (fixed length). */
391#define DSC_K_CLASS_D 0x02 /* Dynamic string (not via malloc!). */
392#define DSC_K_CLASS_A 0x04 /* Array. */
393#define DSC_K_CLASS_UBS 0x0d /* Unaligned bit string. */
0c376465 394
252b5132 395/* These are the codes that are used to generate the definitions of struct
7920ce38 396 union and enum records. */
252b5132
RH
397#define DBG_S_C_ENUM_ITEM 0xa4
398#define DBG_S_C_ENUM_START 0xa5
399#define DBG_S_C_ENUM_END 0xa6
400#define DBG_S_C_STRUCT_ITEM DST_K_VFLAGS_BITOFFS /* 0xff */
401#define DBG_S_C_STRUCT_START 0xab
402#define DBG_S_C_STRUCT_END 0xac
0c376465 403#define DST_K_TYPSPEC 0xaf /* Type specification. */
7920ce38
NC
404/* These codes are used in the generation of the symbol definition records. */
405#define DST_K_VFLAGS_NOVAL 0x80 /* Struct definition only. */
406#define DST_K_VFLAGS_DSC 0xfa /* Descriptor used. */
407#define DST_K_VFLAGS_TVS 0xfb /* Trailing value specified. */
408#define DST_K_VS_FOLLOWS 0xfd /* Value spec follows. */
409#define DST_K_VFLAGS_BITOFFS 0xff /* Value contains bit offset. */
252b5132
RH
410#define DST_K_VALKIND_LITERAL 0
411#define DST_K_VALKIND_ADDR 1
412#define DST_K_VALKIND_DESC 2
413#define DST_K_VALKIND_REG 3
7920ce38
NC
414#define DST_K_REG_VAX_AP 0x0c /* R12. */
415#define DST_K_REG_VAX_FP 0x0d /* R13. */
416#define DST_K_REG_VAX_SP 0x0e /* R14. */
417#define DST_V_VALKIND 0 /* Offset of valkind field. */
418#define DST_V_INDIRECT 2 /* Offset to indirect bit. */
419#define DST_V_DISP 3 /* Offset to displacement bit. */
420#define DST_V_REGNUM 4 /* Offset to register number. */
252b5132
RH
421#define DST_M_INDIRECT (1<<DST_V_INDIRECT)
422#define DST_M_DISP (1<<DST_V_DISP)
423#define DBG_C_FUNCTION_PARAM /* 0xc9 */ \
424 (DST_K_VALKIND_ADDR|DST_M_DISP|(DST_K_REG_VAX_AP<<DST_V_REGNUM))
425#define DBG_C_LOCAL_SYM /* 0xd9 */ \
426 (DST_K_VALKIND_ADDR|DST_M_DISP|(DST_K_REG_VAX_FP<<DST_V_REGNUM))
7920ce38
NC
427/* Kinds of value specifications. */
428#define DST_K_VS_ALLOC_SPLIT 3 /* Split lifetime. */
429/* Kinds of type specifications. */
430#define DST_K_TS_ATOM 0x01 /* Atomic type specification. */
431#define DST_K_TS_DSC 0x02 /* Descriptor type spec. */
432#define DST_K_TS_IND 0x03 /* Indirect type specification. */
433#define DST_K_TS_TPTR 0x04 /* Typed pointer type spec. */
434#define DST_K_TS_PTR 0x05 /* Pointer type spec. */
435#define DST_K_TS_ARRAY 0x07 /* Array type spec. */
436#define DST_K_TS_NOV_LENG 0x0e /* Novel length type spec. */
437/* These are the codes that are used in the suffix records to determine the
438 actual data type. */
252b5132
RH
439#define DBG_S_C_BASIC DST_K_TS_ATOM
440#define DBG_S_C_BASIC_ARRAY DST_K_TS_DSC
441#define DBG_S_C_STRUCT DST_K_TS_IND
442#define DBG_S_C_POINTER DST_K_TS_TPTR
443#define DBG_S_C_VOID DST_K_TS_PTR
444#define DBG_S_C_COMPLEX_ARRAY DST_K_TS_ARRAY
445
0c376465 446/* VMS Module Header Records (MHD/EMH). */
252b5132
RH
447
448#define MHD_S_C_MHD 0
449#define MHD_S_C_LNM 1
450#define MHD_S_C_SRC 2
451#define MHD_S_C_TTL 3
452#define MHD_S_C_CPR 4
453#define MHD_S_C_MTC 5
454#define MHD_S_C_GTX 6
455#define MHD_S_C_MAXHDRTYP 6
456
7920ce38
NC
457#define EMH_S_C_MHD 0 /* Main header record. */
458#define EMH_S_C_LNM 1 /* Language name and version. */
459#define EMH_S_C_SRC 2 /* Source file specification. */
460#define EMH_S_C_TTL 3 /* Title text of module. */
461#define EMH_S_C_CPR 4 /* Copyright notice. */
462#define EMH_S_C_MTC 5 /* Maintenance status. */
463#define EMH_S_C_GTX 6 /* General text. */
464#define EMH_S_C_MAXHDRTYP 6 /* Maximum allowable type. */
252b5132
RH
465
466/* vms.c. */
467
7920ce38 468extern asymbol *_bfd_vms_make_empty_symbol (bfd *);
0c376465 469extern int _bfd_vms_slurp_object_records (bfd *abfd);
252b5132
RH
470
471/* vms-gsd.c. */
472
0c376465
TG
473extern int _bfd_vms_slurp_gsd (bfd *abfd, int objtype);
474extern int _bfd_vms_write_gsd (bfd *abfd, int objtype);
475extern int _bfd_vms_slurp_dbg (bfd *abfd, int objtype);
476extern int _bfd_vms_write_dbg (bfd *abfd, int objtype);
477extern int _bfd_vms_slurp_tbt (bfd *abfd, int objtype);
478extern int _bfd_vms_write_tbt (bfd *abfd, int objtype);
252b5132 479
0c376465 480/* vms-misc.c. */
252b5132 481
0c376465
TG
482extern int _bfd_vms_get_object_record (bfd *abfd);
483extern int _bfd_vms_get_first_record (bfd *abfd);
484
4b544b64
TG
485extern char *vms_get_module_name (const char *filename, bfd_boolean);
486extern time_t vms_time_to_time_t (unsigned int hi, unsigned int lo);
487extern time_t vms_rawtime_to_time_t (unsigned char *buf);
488
0c376465
TG
489/* vms-hdr.c. */
490
491extern int _bfd_vms_slurp_hdr (bfd *abfd, int objtype);
492extern int _bfd_vms_write_hdr (bfd *abfd, int objtype);
493extern int _bfd_vms_slurp_eom (bfd *abfd, int objtype);
494extern int _bfd_vms_write_eom (bfd *abfd, int objtype);
495extern bfd_boolean _bfd_vms_find_nearest_dst_line
496 (bfd *abfd, asection *section, asymbol **symbols, bfd_vma offset,
497 const char **file, const char **func, unsigned int *line);
498extern int _bfd_vms_slurp_ihd
499 (bfd *abfd, unsigned int *isd_offset, unsigned int *ihs_offset);
500extern int _bfd_vms_slurp_isd (bfd *abfd, unsigned int offset);
501extern int _bfd_vms_slurp_ihs (bfd *abfd, unsigned int offset);
252b5132
RH
502
503/* vms-tir.c. */
504
0c376465
TG
505extern int _bfd_vms_slurp_tir (bfd *abfd, int objtype);
506extern int _bfd_vms_write_tir (bfd *abfd, int objtype);
507extern int _bfd_vms_slurp_lnk (bfd *abfd, int objtype);
508
509extern int _bfd_vms_slurp_relocs (bfd *abfd);
510extern int _bfd_vms_decode_relocs
511 (bfd *abfd, arelent *relocs, asection *section, asymbol **symbols);
512
513/* The r_type field in a reloc is one of the following values. */
514#define ALPHA_R_IGNORE 0
515#define ALPHA_R_REFQUAD 1
516#define ALPHA_R_BRADDR 2
517#define ALPHA_R_HINT 3
518#define ALPHA_R_SREL16 4
519#define ALPHA_R_SREL32 5
520#define ALPHA_R_SREL64 6
521#define ALPHA_R_OP_PUSH 7
522#define ALPHA_R_OP_STORE 8
523#define ALPHA_R_OP_PSUB 9
524#define ALPHA_R_OP_PRSHIFT 10
525#define ALPHA_R_LINKAGE 11
526#define ALPHA_R_REFLONG 12
527#define ALPHA_R_CODEADDR 13
528#define ALPHA_R_NOP 14
529#define ALPHA_R_BSR 15
530#define ALPHA_R_LDA 16
531#define ALPHA_R_BOH 17
532
533/* VMS Object Language (OBJ/EOBJ). */
534
7920ce38
NC
535#define OBJ_S_C_HDR 0 /* VAX moule header record. */
536#define OBJ_S_C_GSD 1 /* VAX glbal symbol definition record. */
537#define OBJ_S_C_TIR 2 /* VAX tet information record. */
538#define OBJ_S_C_EOM 3 /* VAX en of module record. */
539#define OBJ_S_C_DBG 4 /* VAX Deugger information record. */
540#define OBJ_S_C_TBT 5 /* VAX Trceback information record. */
541#define OBJ_S_C_LNK 6 /* VAX liker options record. */
542#define OBJ_S_C_EOMW 7 /* VAX en of module word-psect record. */
543#define OBJ_S_C_MAXRECTYP 7 /* VAX Lat assigned record type. */
0c376465 544
7920ce38
NC
545#define EOBJ_S_C_EMH 8 /* EVAX mdule header record. */
546#define EOBJ_S_C_EEOM 9 /* EVAX ed of module record. */
0c376465
TG
547#define EOBJ_S_C_EGSD 10 /* EVAX gobal symbol definition record. */
548#define EOBJ_S_C_ETIR 11 /* EVAX txt information record. */
7920ce38
NC
549#define EOBJ_S_C_EDBG 12 /* EVAX Dbugger information record. */
550#define EOBJ_S_C_ETBT 13 /* EVAX Taceback information record. */
551#define EOBJ_S_C_MAXRECTYP 13 /* EVAX Lst assigned record type. */
0c376465 552
771deb08
TG
553#define OBJ_S_K_SUBTYP 1
554#define OBJ_S_C_SUBTYP 1
555#define EOBJ_S_K_SUBTYP 4
556#define EOBJ_S_C_SUBTYP 4
7920ce38
NC
557#define OBJ_S_C_MAXRECSIZ 2048 /* Maximu legal record size. */
558#define EOBJ_S_C_MAXRECSIZ 8192 /* Maximu legal record size. */
559#define OBJ_S_C_STRLVL 0 /* Structre level. */
560#define EOBJ_S_C_STRLVL 2 /* Structre level. */
561#define OBJ_S_C_SYMSIZ 31 /* Maximu symbol length. */
562#define EOBJ_S_C_SYMSIZ 64 /* Maximu symbol length. */
563#define EOBJ_S_C_SECSIZ 31 /* Maximu section name length. */
564#define OBJ_S_C_STOREPLIM -1 /* Maximu repeat count on store commands. */
565#define EOBJ_S_C_STOREPLIM -1 /* Maximu repeat count on store commands. */
566#define OBJ_S_C_PSCALILIM 9 /* Maximu p-sect alignment. */
567#define EOBJ_S_C_PSCALILIM 16 /* Maximu p-sect alignment. */
0c376465 568
7920ce38 569#define EVAX_OFFSET 256 /* Type ofset for EVAX codes in switch. */
0c376465 570
771deb08 571/* Miscellaneous definitions. */
7920ce38 572
771deb08
TG
573#if __GNUC__
574typedef unsigned long long uquad;
575#else
576typedef unsigned long uquad;
577#endif
0c376465
TG
578
579#define MAX_OUTREC_SIZE 4096
580#define MIN_OUTREC_LUFT 64
581
771deb08 582/* VMS module header. */
0c376465
TG
583
584struct hdr_struct
585{
586 char hdr_b_strlvl;
587 int hdr_l_arch1;
588 int hdr_l_arch2;
589 int hdr_l_recsiz;
590 char *hdr_t_name;
591 char *hdr_t_version;
592 char *hdr_t_date;
593 char *hdr_c_lnm;
594 char *hdr_c_src;
595 char *hdr_c_ttl;
0c376465
TG
596};
597
598#define EMH_S_W_HDRTYP 4
599#define EMH_S_B_STRLVL 6
600#define EMH_S_L_ARCH1 8
601#define EMH_S_L_ARCH2 12
602#define EH_S_L_RECSIZ 16
603#define EMH_S_B_NAMLNG 20
604
605#define EMH_DATE_LENGTH 17
606
607/* VMS End-Of-Module records (EOM/EEOM). */
608
609struct eom_struct
610{
611 int eom_l_total_lps;
612 short eom_w_comcod;
613 bfd_boolean eom_has_transfer;
614 char eom_b_tfrflg;
615 int eom_l_psindx;
616 int eom_l_tfradr;
617};
618
619#define EEOM_S_L_TOTAL_LPS 4
620#define EEOM_S_W_COMCOD 8
621#define EEOM_S_B_TFRFLG 10
622#define EEOM_S_L_PSINDX 12
623#define EEOM_S_L_TFRADR 16
624
625/* VMS Image Header Records (IHD/EIHD). */
626
627#define EIHD_S_K_MAJORID 3 /* Major id constant */
628#define EIHD_S_K_MINORID 0 /* Minor id constant */
629#define EIHD_S_K_EXE 1 /* Executable image */
630
631#define EIHD_S_L_SIZE 8
632#define EIHD_S_L_ISDOFF 12
633#define EIHD_S_L_SYMDBGOFF 20
634#define EIHD_S_Q_SYMVVA 40
635#define EIHD_S_L_IMGTYPE 52
636
637/* VMS Image Section Description Records (ISD/EISD). */
638
639#define EISD_S_L_EISDSIZE 8
640#define EISD_S_L_SECSIZE 12
641#define EISD_S_Q_VIR_ADDR 16
642#define EISD_S_L_FLAGS 24
643#define EISD_S_L_VBN 28
644#define EISD_S_R_CONTROL 32
645#define EISD_S_L_IDENT 36
646#define EISD_S_T_GBLNAM 40
647
648#define EISD_S_M_GBL 0x0001
649#define EISD_S_M_CRF 0x0002
650#define EISD_S_M_DZRO 0x0004
651#define EISD_S_M_WRT 0x0008
652#define EISD_S_M_INITALCODE 0x0010
653#define EISD_S_M_BASED 0x0020
654#define EISD_S_M_FIXUPVEC 0x0040
655#define EISD_S_M_RESIDENT 0x0080
656#define EISD_S_M_VECTOR 0x0100
657#define EISD_S_M_PROTECT 0x0200
658#define EISD_S_M_LASTCLU 0x0400
659#define EISD_S_M_EXE 0x0800
660#define EISD_S_M_NONSHRADR 0x1000
661#define EISD_S_M_QUAD_LENGTH 0x2000
662#define EISD_S_M_ALLOC_64BIT 0x4000
663
664/* VMS Image Header Symbol Records (IHS/EIHS). */
665
666#define EIHS_S_L_DSTVBN 8
667#define EIHS_S_L_DSTSIZE 12
668#define EIHS_S_L_GSTVBN 16
669#define EIHS_S_L_GSTSIZE 20
670#define EIHS_S_L_DMTVBN 24
671#define EIHS_S_L_DMTBYTES 28
672
673/* Debugger symbol definitions. */
674
675#define DBG_S_L_DMT_MODBEG 0
676#define DBG_S_L_DST_SIZE 4
677#define DBG_S_W_DMT_PSECT_COUNT 8
678#define DBG_S_C_DMT_HEADER_SIZE 12
679
680#define DBG_S_L_DMT_PSECT_START 0
681#define DBG_S_L_DMT_PSECT_LENGTH 4
682#define DBG_S_C_DMT_PSECT_SIZE 8
683
771deb08
TG
684/* File format. */
685enum file_format_enum
686 {
687 /* Not yet known. */
688 FF_UNKNOWN,
689
690 /* Unix format. Each record is preceeded by the record length,
691 on 2 bytes. */
692 FF_FOREIGN,
693
694 /* Native (=VMS) format. The file only contains the content of the
695 records. This may also appear on Unix, depending on which tool
696 was used to transfer files. */
697 FF_NATIVE
698 };
0c376465 699
0c376465
TG
700enum file_type_enum { FT_UNKNOWN, FT_MODULE, FT_IMAGE };
701
702typedef struct vms_symbol_struct
703{
704 struct bfd_hash_entry bfd_hash;
705 asymbol *symbol;
706} vms_symbol_entry;
707
7920ce38 708/* Stack value for push/pop commands. */
0c376465
TG
709
710struct stack_struct
711{
712 uquad value;
713 int psect;
714};
715
716#define STACKSIZE 8192
717
718/* A minimal decoding of DST compilation units. We only decode
719 what's needed to get to the line number information. */
720
721struct fileinfo
722{
723 char *name;
724 unsigned int srec;
725};
726
727struct srecinfo
728{
729 struct srecinfo *next;
730 unsigned int line;
731 unsigned int sfile;
732 unsigned int srec;
733};
734
735struct lineinfo
736{
737 struct lineinfo *next;
738 bfd_vma address;
739 unsigned int line;
740};
741
742struct funcinfo
743{
744 struct funcinfo *next;
745 char *name;
746 bfd_vma low;
747 bfd_vma high;
748};
749
750struct module
751{
752 /* Chain the previously read compilation unit. */
753 struct module *next;
754
755 /* The module name. */
756 char *name;
757
758 /* The start offset and size of debug info in the DST section. */
759 unsigned int modbeg;
760 unsigned int size;
761
762 /* The lowest and highest addresses contained in this compilation
763 unit as specified in the compilation unit header. */
764 bfd_vma low;
765 bfd_vma high;
766
767 /* The listing line table. */
768 struct lineinfo *line_table;
769
770 /* The source record table. */
771 struct srecinfo *srec_table;
772
773 /* A list of the functions found in this module. */
774 struct funcinfo *func_table;
775
776 /* Current allocation of file_table. */
777 unsigned int file_table_count;
778
779 /* An array of the files making up this module. */
780 struct fileinfo *file_table;
781};
782
783struct vms_private_data_struct
784{
785 bfd_boolean is_vax;
b34976b6 786 bfd_boolean fixup_done; /* Flag to indicate if all
252b5132 787 section pointers and PRIV(sections)
7920ce38 788 are set up correctly. */
0c376465
TG
789 unsigned char *vms_buf; /* record buffer */
790 unsigned int buf_size; /* size of record buffer */
791 unsigned char *vms_rec; /* record pointer in record buffer */
792 unsigned int rec_size; /* record size */
793 enum file_format_enum file_format;
794
795 struct hdr_struct hdr_data; /* data from HDR/EMH record */
796 struct eom_struct eom_data; /* data from EOM/EEOM record */
797 unsigned int section_count; /* # of sections in following array */
798 asection **sections; /* array of GSD/EGSD sections */
799 unsigned int gsd_sym_count; /* # of GSD/EGSD symbols */
800 asymbol **symbols; /* vector of GSD/EGSD symbols */
801 struct proc_value *procedure;
802
803 struct stack_struct *stack;
804 int stackptr;
805
252b5132 806 struct bfd_hash_table *vms_symbol_table;
0c376465
TG
807 struct bfd_symbol **symcache;
808 int symnum;
809
810 asection *image_section; /* section for image_ptr */
811 unsigned char *image_ptr; /* a pointer to section->contents */
812
813 unsigned char pdsc[8]; /* procedure descriptor */
814
815 struct module *modules; /* list of all compilation units */
816
817 struct dst_info *dst_info;
818 asection *dst_section;
819 unsigned char *dst_ptr_end;
820 unsigned int dst_ptr_offsets_count; /* # of offsets in following array */
821 unsigned int *dst_ptr_offsets; /* array of saved image_ptr offsets */
822
823 /* Shared library support */
824 bfd_vma symvva; /* relative virtual address of symbol vector */
825
826 /* Output routine storage */
827 unsigned char *output_buf; /* output data */
828 int push_level;
829 int pushed_size;
830 int length_pos;
831 int output_size;
832 int output_alignment;
833
834 /* linkage index counter used by conditional store commands */
835 int vms_linkage_index;
836
837 /* see tc-alpha.c of gas for a description. */
838 int flag_hash_long_names; /* -+, hash instead of truncate */
839 int flag_show_after_trunc; /* -H, show hashing/truncation */
840};
841
842#define PRIV(name) ((struct vms_private_data_struct *)abfd->tdata.any)->name
843
844/* Used to keep extra VMS specific information for a given section.
845
846 reloc_size holds the size of the relocation stream, note this
847 is very different from the number of relocations as VMS relocations
848 are variable length.
849
850 reloc_stream is the actual stream of relocation entries. */
851
852struct vms_section_data_struct
853{
854 bfd_size_type reloc_size;
855 unsigned char *reloc_stream;
856 bfd_size_type reloc_offset;
857 flagword vflags;
858};
859
860#define vms_section_data(sec) \
861 ((struct vms_section_data_struct *)sec->used_by_bfd)
771deb08 862
0c376465
TG
863struct evax_private_udata_struct
864{
865 asymbol *bsym;
866 asymbol *enbsym;
867 char *origname;
868 int lkindex;
869};
870
252b5132 871#define SECTION_NAME_TEMPLATE "__SEC__%d"
771deb08
TG
872
873#if VMS_DEBUG
0fd3a477
JW
874extern void _bfd_vms_debug (int, char *, ...) ATTRIBUTE_PRINTF_2;
875extern void _bfd_hexdump (int, unsigned char *, int, int);
e4d2e665
TG
876
877#define vms_debug _bfd_vms_debug
878#define vms_debug2(X) _bfd_vms_debug X
879#else
880#define vms_debug2(X)
771deb08
TG
881#endif
882
7920ce38
NC
883extern struct bfd_hash_entry * _bfd_vms_hash_newfunc (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
884extern void _bfd_vms_get_header_values (bfd *, unsigned char *, int *, int *);
885extern int _bfd_vms_get_record (bfd *abf);
886extern int _bfd_vms_next_record (bfd *abf);
887extern char * _bfd_vms_save_sized_string (unsigned char *, int);
888extern char * _bfd_vms_save_counted_string (unsigned char *);
889extern void _bfd_vms_push (bfd *, uquad, int);
890extern uquad _bfd_vms_pop (bfd *, int *);
7920ce38
NC
891extern void _bfd_vms_output_begin (bfd *, int, int);
892extern void _bfd_vms_output_alignment (bfd *, int);
893extern void _bfd_vms_output_push (bfd *);
894extern void _bfd_vms_output_pop (bfd *);
895extern void _bfd_vms_output_flush (bfd *);
896extern void _bfd_vms_output_end (bfd *);
897extern int _bfd_vms_output_check (bfd *, int);
898extern void _bfd_vms_output_byte (bfd *, unsigned);
899extern void _bfd_vms_output_short (bfd *, unsigned);
900extern void _bfd_vms_output_long (bfd *, unsigned long);
901extern void _bfd_vms_output_quad (bfd *, uquad);
902extern void _bfd_vms_output_counted (bfd *, char *);
903extern void _bfd_vms_output_dump (bfd *, unsigned char *, int);
904extern void _bfd_vms_output_fill (bfd *, int, int);
905extern char * _bfd_vms_length_hash_symbol (bfd *, const char *, int);
906extern vms_symbol_entry * _bfd_vms_enter_symbol (bfd *, char *);
252b5132 907
0c376465
TG
908#define EGPS_S_V_NO_SHIFT 16
909
910extern void bfd_vms_set_section_flags (bfd *, asection *, flagword);
252b5132 911#endif /* VMS_H */
This page took 0.567071 seconds and 4 git commands to generate.