aboutsummaryrefslogtreecommitdiff
path: root/include/vms/dst.h
blob: 795b997fe96b200c5ff628188f76a64d1cc5b410 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
/* Alpha VMS external format of Debug Symbol Table.

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

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

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

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

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

#ifndef _VMS_DST_H
#define _VMS_DST_H

/* Also available in vms freeware v5.0 debug/alpha_dstrecrds.sdl.  */

struct vms_dst_header
{
  /* Length.  */
  unsigned char length[2];

  /* Type.  */
  unsigned char type[2];
};

/* Beginning of module.  */
#define DST__K_MODBEG 188

/* Some well known languages.  */
#define DST__K_MACRO	0
#define DST__K_BLISS	2
#define DST__K_C	7
#define DST__K_ADA	9
#define DST__K_CXX	15

struct vms_dst_modbeg
{
  unsigned char flags;
  unsigned char unused;
  unsigned char language[4];
  unsigned char major[2];
  unsigned char minor[2];
  /* Module name ASCIC.  */
  /* Ident name ASCIC.  */
};

/* Routine begin.  */
#define DST__K_RTNBEG 190

struct vms_dst_rtnbeg
{
  unsigned char flags;

  /* Address of the code.  */
  unsigned char address[4];

  /* Procedure descriptor address.  */
  unsigned char pd_address[4];

  /* Name: ASCIC  */
};

/* Line number.  */
#define DST__K_LINE_NUM 185

struct vms_dst_pcline
{
  unsigned char pcline_command;
  unsigned char field[4];
};

#define DST__K_DELTA_PC_W	1
#define DST__K_INCR_LINUM	2
#define DST__K_INCR_LINUM_W	3
#define DST__K_SET_LINUM_INCR	4
#define DST__K_SET_LINUM_INCR_W	5
#define DST__K_RESET_LINUM_INCR	6
#define DST__K_BEG_STMT_MODE	7
#define DST__K_END_STMT_MODE	8
#define DST__K_SET_LINUM	9
#define DST__K_SET_PC		10
#define DST__K_SET_PC_W		11
#define DST__K_SET_PC_L		12
#define DST__K_SET_STMTNUM	13
#define DST__K_TERM		14
#define DST__K_TERM_W		15
#define DST__K_SET_ABS_PC	16
#define DST__K_DELTA_PC_L	17
#define DST__K_INCR_LINUM_L	18
#define DST__K_SET_LINUM_B	19
#define DST__K_SET_LINUM_L	20
#define DST__K_TERM_L		21

/* Routine end.  */
#define DST__K_RTNEND 191

struct vms_dst_rtnend
{
  unsigned char unused;
  unsigned char size[4];
};

/* Prologue.  */
#define DST__K_PROLOG 162

struct vms_dst_prolog
{
  unsigned char bkpt_addr[4];
};

/* Epilog.  */
#define DST__K_EPILOG 127

struct vms_dst_epilog
{
  unsigned char flags;
  unsigned char count[4];
};

/* Module end.  */
#define DST__K_MODEND 189

/* Block begin.  */
#define DST__K_BLKBEG 176

struct vms_dst_blkbeg
{
  unsigned char unused;
  unsigned char address[4];
  /* Name ASCIC.  */
};

/* Block end.  */
#define DST__K_BLKEND 177

struct vms_dst_blkend
{
  unsigned char unused;
  unsigned char size[4];
};

/* Source correlation.  */
#define DST__K_SOURCE 155

#define DST__K_SRC_DECLFILE    1
#define DST__K_SRC_SETFILE     2
#define DST__K_SRC_SETREC_L    3
#define DST__K_SRC_SETREC_W    4
#define DST__K_SRC_SETLNUM_L   5
#define DST__K_SRC_SETLNUM_W   6
#define DST__K_SRC_INCRLNUM_B  7
#define DST__K_SRC_DEFLINES_W 10
#define DST__K_SRC_DEFLINES_B 11
#define DST__K_SRC_FORMFEED   16

struct vms_dst_src_decl_src
{
  unsigned char length;
  unsigned char flags;
  unsigned char fileid[2];
  unsigned char rms_cdt[8];
  unsigned char rms_ebk[4];
  unsigned char rms_ffb[2];
  unsigned char rms_rfo;
  /* Filename ASCIC.  */
};

/* Record begin.  */
#define DST__K_RECBEG 171

struct vms_dst_recbeg
{
  unsigned char vflags;
  unsigned char value[4];
  /* Filename ASCIC.  */
};

/* Record end.  */
#define DST__K_RECEND 172

/* Enumeration begin.  */
#define DST__K_ENUMBEG 165

/* Enumeration element.  */
#define DST__K_ENUMELT 164

/* Enumeration end.  */
#define DST__K_ENUMEND 166

/* Separate type specification.  */
#define DST__K_SEPTYP 163

/* Type specification.  */
#define DST__K_TYPSPEC 175

#define DST__K_TS_ATOM          1	/* Atomic.  */
#define DST__K_TS_DSC           2	/* VMS Standard descriptor.  */
#define DST__K_TS_IND           3	/* Indirect.  */
#define DST__K_TS_TPTR          4	/* Typed pointer.  */
#define DST__K_TS_PTR           5	/* Pointer.  */
#define DST__K_TS_PIC           6	/* Pictured.  */
#define DST__K_TS_ARRAY         7
#define DST__K_TS_SET           8
#define DST__K_TS_SUBRANGE      9	/* Subrange.  */
#define DST__K_TS_ADA_DSC      10	/* Ada descriptor.  */
#define DST__K_TS_FILE         11
#define DST__K_TS_AREA         12	/* Area (PL/I).  */
#define DST__K_TS_OFFSET       13	/* Offset (PL/I).  */
#define DST__K_TS_NOV_LENG     14	/* Novel Length.  */
#define DST__K_TS_IND_TSPEC    15	/* Internal to debugger.  */
#define DST__K_TS_SELF_REL_LABEL 16	/* Self-relative label (PL/I).  */
#define DST__K_TS_RFA          17	/* (Basic).  */
#define DST__K_TS_TASK         18	/* (Ada).  */
#define DST__K_TS_ADA_ARRAY    19
#define DST__K_TS_XMOD_IND     20	/* Cross-module indirect type spec.  */
#define DST__K_TS_CONSTRAINED  21	/* (Ada).  */
#define DST__K_TS_MAYBE_CONSTR 22	/* Might-be-constrained (Ada).  */
#define DST__K_TS_DYN_LOV_LENG 23
#define DST__K_TS_TPTR_D       24	/* Typed pointer to descriptor.  */
#define DST__K_TS_SCAN_TREE    25
#define DST__K_TS_SCAN_TREEPTR 26
#define DST__K_TS_INCOMPLETE   27
#define DST__K_TS_BLISS_BLOCK  28
#define DST__K_TS_TPTR_64      29
#define DST__K_TS_PTR_64       30
#define DST__K_TS_REF          31	/* C++ referenced type.  */
#define DST__K_TS_REF_64       32

/* Value Specification.  */
#define DST__K_VFLAGS_NOVAL	128 /* No value.  */
#define DST__K_VFLAGS_NOTACTIVE	248 /* Not active at current PC.  */
#define DST__K_VFLAGS_UNALLOC	249 /* Not allocated.  */
#define DST__K_VFLAGS_DSC	250 /* Descriptor format.  */
#define DST__K_VFLAGS_TVS	251 /* Trailing value spec.  */
#define DST__K_VS_FOLLOWS	253 /* Value specification follow.  */
#define DST__K_VFLAGS_BITOFFS	255 /* Value is a bit offset.  */

/* Vflags fields.  */
#define DST__K_VALKIND_MASK 0x03
#define DST__K_INDIR        0x04
#define DST__K_DISP         0x08
#define DST__K_REGNUM_MASK  0xf0
#define DST__K_REGNUM_SHIFT  4

#define DST__K_VALKIND_LITERAL 0
#define DST__K_VALKIND_ADDR    1
#define DST__K_VALKIND_DESC    2
#define DST__K_VALKIND_REG     3

/* Label.  */
#define DST__K_LABEL 187

struct vms_dst_label
{
  unsigned char unused;

  unsigned char value[4];
  unsigned char name[1];
};

/* Discontiguous range.  */
#define DST__K_DIS_RANGE 118
#endif /* _VMS_DST_H */