OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.1/] [bfd/] [vms.h] - Blame information for rev 612

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.