OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [binutils-2.18.50/] [bfd/] [vms.h] - Blame information for rev 851

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

Line No. Rev Author Line
1 38 julius
/* vms.h -- Header file for VMS (Alpha and Vax) support.
2
   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007
3
   Free Software Foundation, Inc.
4
 
5
   Written by Klaus K"ampf (kkaempf@rmi.de)
6
 
7
   This file is part of BFD, the Binary File Descriptor library.
8
 
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
11
   the Free Software Foundation; either version 3 of the License, or
12
   (at your option) any later version.
13
 
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.
18
 
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
21
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
22
   MA 02110-1301, USA.  */
23
 
24
#undef vms
25
#ifndef VMS_H
26
#define VMS_H
27
 
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
 
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.  */
130
#define ETIR_S_C_STO_HINT_PS 65         /* Store 14 bit HINT at psect + offset */
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.   */
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
 
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.          */
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
 
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++".   */
258
#define DST_S_C_VERSION         153
259
#define DST_S_C_SOURCE          155     /* Source file.         */
260
#define DST_S_C_PROLOG          162
261
#define DST_S_C_BLKBEG          176     /* Beginning of block.  */
262
#define DST_S_C_BLKEND          177     /* End of block.        */
263
#define DST_S_C_ENTRY           181
264
#define DST_S_C_PSECT           184
265
#define DST_S_C_LINE_NUM        185     /* Line Number.         */
266
#define DST_S_C_LBLORLIT        186
267
#define DST_S_C_LABEL           187
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 #.         */
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
280
#define DST_S_C_SET_LINE_NUM    9       /* Set Line #.          */
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
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'.  */
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
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.  */
317
#define DBG_S_C_FUNCTION_ADDR   0x17
318
#define DBG_S_C_ADVANCED_TYPE   0xa3
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.  */
331
/*  These are the codes that are used to generate the definitions of struct
332
    union and enum records.  */
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
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.  */
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
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.  */
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))
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.  */
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
 
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.      */
401
 
402
/* vms.c.  */
403
 
404
extern asymbol *_bfd_vms_make_empty_symbol (bfd *);
405
 
406
/* vms-gsd.c.  */
407
 
408
extern int _bfd_vms_slurp_gsd (bfd *, int);
409
extern int _bfd_vms_write_gsd (bfd *, int);
410
 
411
/* vms-mhd.c.  */
412
 
413
extern int _bfd_vms_slurp_hdr (bfd *, int);
414
extern int _bfd_vms_write_hdr (bfd *, int);
415
extern int _bfd_vms_slurp_eom (bfd *, int);
416
extern int _bfd_vms_write_eom (bfd *, int);
417
 
418
/* vms-tir.c.  */
419
 
420
extern int _bfd_vms_slurp_tir (bfd *, int);
421
extern int _bfd_vms_slurp_dbg (bfd *, int);
422
extern int _bfd_vms_slurp_tbt (bfd *, int);
423
extern int _bfd_vms_slurp_lnk (bfd *, int);
424
 
425
extern int _bfd_vms_write_tir (bfd *, int);
426
extern int _bfd_vms_write_tbt (bfd *, int);
427
extern 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__                             
483
typedef unsigned long long uquad;
484
#else                                    
485
typedef unsigned long uquad;
486
#endif                                   
487
 
488
#define MAX_OUTREC_SIZE 4096             
489
#define MIN_OUTREC_LUFT 64               
490
 
491
typedef 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
 
499
extern vms_section * _bfd_get_vms_section (bfd *, int);
500
 
501
typedef struct _vms_reloc
502
{
503
  struct _vms_reloc *next;
504
  arelent *reloc;
505
  asection *section;
506
} vms_reloc;
507
 
508
/* VMS module header.  */
509
 
510
struct 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
 
526
struct 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
 
536
enum file_format_enum { FF_UNKNOWN, FF_FOREIGN, FF_NATIVE, FF_VAX };
537
 
538
typedef 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
 
546
struct 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
 
555
struct 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
 
564
struct vms_private_data_struct
565
{
566
  bfd_boolean is_vax;
567
  bfd_boolean fixup_done;               /* Flag to indicate if all
568
                                           section pointers and PRIV(sections)
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
 
589
  vms_section *vms_section_table[VMS_SECTION_COUNT];
590
 
591
  struct bfd_hash_table *vms_symbol_table;
592
  struct bfd_symbol **symcache;
593
  int symnum;
594
 
595
  struct location_struct *location_stack;
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
 
621
#define SECTION_NAME_TEMPLATE "__SEC__%d"
622
 
623
#if VMS_DEBUG                            
624
extern void _bfd_vms_debug (int, char *, ...) ATTRIBUTE_PRINTF_2;
625
extern void _bfd_hexdump   (int, unsigned char *, int, int);
626
 
627
#define vms_debug _bfd_vms_debug         
628
#endif                                   
629
 
630
extern struct bfd_hash_entry * _bfd_vms_hash_newfunc (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
631
extern void        _bfd_vms_get_header_values (bfd *, unsigned char *, int *, int *);
632
extern int         _bfd_vms_get_record  (bfd *abf);
633
extern int         _bfd_vms_next_record (bfd *abf);
634
extern char *      _bfd_vms_save_sized_string (unsigned char *, int);
635
extern char *      _bfd_vms_save_counted_string (unsigned char *);
636
extern void        _bfd_vms_push (bfd *, uquad, int);
637
extern uquad       _bfd_vms_pop (bfd *, int *);
638
extern bfd_boolean _bfd_save_vms_section (bfd *, asection *, const void *, file_ptr, bfd_size_type);
639
extern void        _bfd_vms_output_begin (bfd *, int, int);
640
extern void        _bfd_vms_output_alignment (bfd *, int);
641
extern void        _bfd_vms_output_push (bfd *);
642
extern void        _bfd_vms_output_pop (bfd *);
643
extern void        _bfd_vms_output_flush (bfd *);
644
extern void        _bfd_vms_output_end (bfd *);
645
extern int         _bfd_vms_output_check (bfd *, int);
646
extern void        _bfd_vms_output_byte (bfd *, unsigned);
647
extern void        _bfd_vms_output_short (bfd *, unsigned);
648
extern void        _bfd_vms_output_long (bfd *, unsigned long);
649
extern void        _bfd_vms_output_quad (bfd *, uquad);
650
extern void        _bfd_vms_output_counted (bfd *, char *);
651
extern void        _bfd_vms_output_dump (bfd *, unsigned char *, int);
652
extern void        _bfd_vms_output_fill (bfd *, int, int);
653
extern char *      _bfd_vms_length_hash_symbol (bfd *, const char *, int);
654
extern vms_symbol_entry * _bfd_vms_enter_symbol (bfd *, char *);
655
 
656
#endif /* VMS_H */

powered by: WebSVN 2.1.0

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