1ed0d50c3Schristos /* Alpha VMS external format of Debug Symbol Table.
2ed0d50c3Schristos 
3*b88e3e88Schristos    Copyright (C) 2010-2020 Free Software Foundation, Inc.
4ed0d50c3Schristos    Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
5ed0d50c3Schristos 
6ed0d50c3Schristos    This file is part of BFD, the Binary File Descriptor library.
7ed0d50c3Schristos 
8ed0d50c3Schristos    This program is free software; you can redistribute it and/or modify
9ed0d50c3Schristos    it under the terms of the GNU General Public License as published by
10ed0d50c3Schristos    the Free Software Foundation; either version 3 of the License, or
11ed0d50c3Schristos    (at your option) any later version.
12ed0d50c3Schristos 
13ed0d50c3Schristos    This program is distributed in the hope that it will be useful,
14ed0d50c3Schristos    but WITHOUT ANY WARRANTY; without even the implied warranty of
15ed0d50c3Schristos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16ed0d50c3Schristos    GNU General Public License for more details.
17ed0d50c3Schristos 
18ed0d50c3Schristos    You should have received a copy of the GNU General Public License
19ed0d50c3Schristos    along with this program; if not, write to the Free Software
20ed0d50c3Schristos    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21ed0d50c3Schristos    MA 02110-1301, USA.  */
22ed0d50c3Schristos 
23ed0d50c3Schristos #ifndef _VMS_DST_H
24ed0d50c3Schristos #define _VMS_DST_H
25ed0d50c3Schristos 
26ed0d50c3Schristos /* Also available in vms freeware v5.0 debug/alpha_dstrecrds.sdl.  */
27ed0d50c3Schristos 
28ed0d50c3Schristos struct vms_dst_header
29ed0d50c3Schristos {
30ed0d50c3Schristos   /* Length.  */
31ed0d50c3Schristos   unsigned char length[2];
32ed0d50c3Schristos 
33ed0d50c3Schristos   /* Type.  */
34ed0d50c3Schristos   unsigned char type[2];
35ed0d50c3Schristos };
36ed0d50c3Schristos 
37ed0d50c3Schristos /* Beginning of module.  */
38ed0d50c3Schristos #define DST__K_MODBEG 188
39ed0d50c3Schristos 
40ed0d50c3Schristos /* Some well known languages.  */
41ed0d50c3Schristos #define DST__K_MACRO	0
42ed0d50c3Schristos #define DST__K_BLISS	2
43ed0d50c3Schristos #define DST__K_C	7
44ed0d50c3Schristos #define DST__K_ADA	9
45ed0d50c3Schristos #define DST__K_CXX	15
46ed0d50c3Schristos 
47ed0d50c3Schristos struct vms_dst_modbeg
48ed0d50c3Schristos {
49ed0d50c3Schristos   unsigned char flags;
50ed0d50c3Schristos   unsigned char unused;
51ed0d50c3Schristos   unsigned char language[4];
52ed0d50c3Schristos   unsigned char major[2];
53ed0d50c3Schristos   unsigned char minor[2];
54ed0d50c3Schristos   /* Module name ASCIC.  */
55ed0d50c3Schristos   /* Ident name ASCIC.  */
56ed0d50c3Schristos };
57ed0d50c3Schristos 
58ed0d50c3Schristos /* Routine begin.  */
59ed0d50c3Schristos #define DST__K_RTNBEG 190
60ed0d50c3Schristos 
61ed0d50c3Schristos struct vms_dst_rtnbeg
62ed0d50c3Schristos {
63ed0d50c3Schristos   unsigned char flags;
64ed0d50c3Schristos 
65ed0d50c3Schristos   /* Address of the code.  */
66ed0d50c3Schristos   unsigned char address[4];
67ed0d50c3Schristos 
68ed0d50c3Schristos   /* Procedure descriptor address.  */
69ed0d50c3Schristos   unsigned char pd_address[4];
70ed0d50c3Schristos 
71ed0d50c3Schristos   /* Name: ASCIC  */
72ed0d50c3Schristos };
73ed0d50c3Schristos 
74ed0d50c3Schristos /* Line number.  */
75ed0d50c3Schristos #define DST__K_LINE_NUM 185
76ed0d50c3Schristos 
77ed0d50c3Schristos struct vms_dst_pcline
78ed0d50c3Schristos {
79ed0d50c3Schristos   unsigned char pcline_command;
80ed0d50c3Schristos   unsigned char field[4];
81ed0d50c3Schristos };
82ed0d50c3Schristos 
83ed0d50c3Schristos #define DST__K_DELTA_PC_W	1
84ed0d50c3Schristos #define DST__K_INCR_LINUM	2
85ed0d50c3Schristos #define DST__K_INCR_LINUM_W	3
86ed0d50c3Schristos #define DST__K_SET_LINUM_INCR	4
87ed0d50c3Schristos #define DST__K_SET_LINUM_INCR_W	5
88ed0d50c3Schristos #define DST__K_RESET_LINUM_INCR	6
89ed0d50c3Schristos #define DST__K_BEG_STMT_MODE	7
90ed0d50c3Schristos #define DST__K_END_STMT_MODE	8
91ed0d50c3Schristos #define DST__K_SET_LINUM	9
92ed0d50c3Schristos #define DST__K_SET_PC		10
93ed0d50c3Schristos #define DST__K_SET_PC_W		11
94ed0d50c3Schristos #define DST__K_SET_PC_L		12
95ed0d50c3Schristos #define DST__K_SET_STMTNUM	13
96ed0d50c3Schristos #define DST__K_TERM		14
97ed0d50c3Schristos #define DST__K_TERM_W		15
98ed0d50c3Schristos #define DST__K_SET_ABS_PC	16
99ed0d50c3Schristos #define DST__K_DELTA_PC_L	17
100ed0d50c3Schristos #define DST__K_INCR_LINUM_L	18
101ed0d50c3Schristos #define DST__K_SET_LINUM_B	19
102ed0d50c3Schristos #define DST__K_SET_LINUM_L	20
103ed0d50c3Schristos #define DST__K_TERM_L		21
104ed0d50c3Schristos 
105ed0d50c3Schristos /* Routine end.  */
106ed0d50c3Schristos #define DST__K_RTNEND 191
107ed0d50c3Schristos 
108ed0d50c3Schristos struct vms_dst_rtnend
109ed0d50c3Schristos {
110ed0d50c3Schristos   unsigned char unused;
111ed0d50c3Schristos   unsigned char size[4];
112ed0d50c3Schristos };
113ed0d50c3Schristos 
114ed0d50c3Schristos /* Prologue.  */
115ed0d50c3Schristos #define DST__K_PROLOG 162
116ed0d50c3Schristos 
117ed0d50c3Schristos struct vms_dst_prolog
118ed0d50c3Schristos {
119ed0d50c3Schristos   unsigned char bkpt_addr[4];
120ed0d50c3Schristos };
121ed0d50c3Schristos 
122ed0d50c3Schristos /* Epilog.  */
123ed0d50c3Schristos #define DST__K_EPILOG 127
124ed0d50c3Schristos 
125ed0d50c3Schristos struct vms_dst_epilog
126ed0d50c3Schristos {
127ed0d50c3Schristos   unsigned char flags;
128ed0d50c3Schristos   unsigned char count[4];
129ed0d50c3Schristos };
130ed0d50c3Schristos 
131ed0d50c3Schristos /* Module end.  */
132ed0d50c3Schristos #define DST__K_MODEND 189
133ed0d50c3Schristos 
134ed0d50c3Schristos /* Block begin.  */
135ed0d50c3Schristos #define DST__K_BLKBEG 176
136ed0d50c3Schristos 
137ed0d50c3Schristos struct vms_dst_blkbeg
138ed0d50c3Schristos {
139ed0d50c3Schristos   unsigned char unused;
140ed0d50c3Schristos   unsigned char address[4];
141ed0d50c3Schristos   /* Name ASCIC.  */
142ed0d50c3Schristos };
143ed0d50c3Schristos 
144ed0d50c3Schristos /* Block end.  */
145ed0d50c3Schristos #define DST__K_BLKEND 177
146ed0d50c3Schristos 
147ed0d50c3Schristos struct vms_dst_blkend
148ed0d50c3Schristos {
149ed0d50c3Schristos   unsigned char unused;
150ed0d50c3Schristos   unsigned char size[4];
151ed0d50c3Schristos };
152ed0d50c3Schristos 
153ed0d50c3Schristos /* Source correlation.  */
154ed0d50c3Schristos #define DST__K_SOURCE 155
155ed0d50c3Schristos 
156ed0d50c3Schristos #define DST__K_SRC_DECLFILE    1
157ed0d50c3Schristos #define DST__K_SRC_SETFILE     2
158ed0d50c3Schristos #define DST__K_SRC_SETREC_L    3
159ed0d50c3Schristos #define DST__K_SRC_SETREC_W    4
160ed0d50c3Schristos #define DST__K_SRC_SETLNUM_L   5
161ed0d50c3Schristos #define DST__K_SRC_SETLNUM_W   6
162ed0d50c3Schristos #define DST__K_SRC_INCRLNUM_B  7
163ed0d50c3Schristos #define DST__K_SRC_DEFLINES_W 10
164ed0d50c3Schristos #define DST__K_SRC_DEFLINES_B 11
165ed0d50c3Schristos #define DST__K_SRC_FORMFEED   16
166ed0d50c3Schristos 
167ed0d50c3Schristos struct vms_dst_src_decl_src
168ed0d50c3Schristos {
169ed0d50c3Schristos   unsigned char length;
170ed0d50c3Schristos   unsigned char flags;
171ed0d50c3Schristos   unsigned char fileid[2];
172ed0d50c3Schristos   unsigned char rms_cdt[8];
173ed0d50c3Schristos   unsigned char rms_ebk[4];
174ed0d50c3Schristos   unsigned char rms_ffb[2];
175ed0d50c3Schristos   unsigned char rms_rfo;
176ed0d50c3Schristos   /* Filename ASCIC.  */
177ed0d50c3Schristos };
178ed0d50c3Schristos 
179ed0d50c3Schristos /* Record begin.  */
180ed0d50c3Schristos #define DST__K_RECBEG 171
181ed0d50c3Schristos 
182ed0d50c3Schristos struct vms_dst_recbeg
183ed0d50c3Schristos {
184ed0d50c3Schristos   unsigned char vflags;
185ed0d50c3Schristos   unsigned char value[4];
186ed0d50c3Schristos   /* Filename ASCIC.  */
187ed0d50c3Schristos };
188ed0d50c3Schristos 
189ed0d50c3Schristos /* Record end.  */
190ed0d50c3Schristos #define DST__K_RECEND 172
191ed0d50c3Schristos 
192ed0d50c3Schristos /* Enumeration begin.  */
193ed0d50c3Schristos #define DST__K_ENUMBEG 165
194ed0d50c3Schristos 
195ed0d50c3Schristos /* Enumeration element.  */
196ed0d50c3Schristos #define DST__K_ENUMELT 164
197ed0d50c3Schristos 
198ed0d50c3Schristos /* Enumeration end.  */
199ed0d50c3Schristos #define DST__K_ENUMEND 166
200ed0d50c3Schristos 
201ed0d50c3Schristos /* Separate type specification.  */
202ed0d50c3Schristos #define DST__K_SEPTYP 163
203ed0d50c3Schristos 
204ed0d50c3Schristos /* Type specification.  */
205ed0d50c3Schristos #define DST__K_TYPSPEC 175
206ed0d50c3Schristos 
207ed0d50c3Schristos #define DST__K_TS_ATOM          1	/* Atomic.  */
208ed0d50c3Schristos #define DST__K_TS_DSC           2	/* VMS Standard descriptor.  */
209ed0d50c3Schristos #define DST__K_TS_IND           3	/* Indirect.  */
210ed0d50c3Schristos #define DST__K_TS_TPTR          4	/* Typed pointer.  */
211ed0d50c3Schristos #define DST__K_TS_PTR           5	/* Pointer.  */
212ed0d50c3Schristos #define DST__K_TS_PIC           6	/* Pictured.  */
213ed0d50c3Schristos #define DST__K_TS_ARRAY         7
214ed0d50c3Schristos #define DST__K_TS_SET           8
215ed0d50c3Schristos #define DST__K_TS_SUBRANGE      9	/* Subrange.  */
216ed0d50c3Schristos #define DST__K_TS_ADA_DSC      10	/* Ada descriptor.  */
217ed0d50c3Schristos #define DST__K_TS_FILE         11
218ed0d50c3Schristos #define DST__K_TS_AREA         12	/* Area (PL/I).  */
219ed0d50c3Schristos #define DST__K_TS_OFFSET       13	/* Offset (PL/I).  */
220ed0d50c3Schristos #define DST__K_TS_NOV_LENG     14	/* Novel Length.  */
221ed0d50c3Schristos #define DST__K_TS_IND_TSPEC    15	/* Internal to debugger.  */
222ed0d50c3Schristos #define DST__K_TS_SELF_REL_LABEL 16	/* Self-relative label (PL/I).  */
223ed0d50c3Schristos #define DST__K_TS_RFA          17	/* (Basic).  */
224ed0d50c3Schristos #define DST__K_TS_TASK         18	/* (Ada).  */
225ed0d50c3Schristos #define DST__K_TS_ADA_ARRAY    19
226ed0d50c3Schristos #define DST__K_TS_XMOD_IND     20	/* Cross-module indirect type spec.  */
227ed0d50c3Schristos #define DST__K_TS_CONSTRAINED  21	/* (Ada).  */
228ed0d50c3Schristos #define DST__K_TS_MAYBE_CONSTR 22	/* Might-be-constrained (Ada).  */
229ed0d50c3Schristos #define DST__K_TS_DYN_LOV_LENG 23
230ed0d50c3Schristos #define DST__K_TS_TPTR_D       24	/* Typed pointer to descriptor.  */
231ed0d50c3Schristos #define DST__K_TS_SCAN_TREE    25
232ed0d50c3Schristos #define DST__K_TS_SCAN_TREEPTR 26
233ed0d50c3Schristos #define DST__K_TS_INCOMPLETE   27
234ed0d50c3Schristos #define DST__K_TS_BLISS_BLOCK  28
235ed0d50c3Schristos #define DST__K_TS_TPTR_64      29
236ed0d50c3Schristos #define DST__K_TS_PTR_64       30
237ed0d50c3Schristos #define DST__K_TS_REF          31	/* C++ referenced type.  */
238ed0d50c3Schristos #define DST__K_TS_REF_64       32
239ed0d50c3Schristos 
240ed0d50c3Schristos /* Value Specification.  */
241ed0d50c3Schristos #define DST__K_VFLAGS_NOVAL	128 /* No value.  */
242ed0d50c3Schristos #define DST__K_VFLAGS_NOTACTIVE	248 /* Not active at current PC.  */
243ed0d50c3Schristos #define DST__K_VFLAGS_UNALLOC	249 /* Not allocated.  */
244ed0d50c3Schristos #define DST__K_VFLAGS_DSC	250 /* Descriptor format.  */
245ed0d50c3Schristos #define DST__K_VFLAGS_TVS	251 /* Trailing value spec.  */
246ed0d50c3Schristos #define DST__K_VS_FOLLOWS	253 /* Value specification follow.  */
247ed0d50c3Schristos #define DST__K_VFLAGS_BITOFFS	255 /* Value is a bit offset.  */
248ed0d50c3Schristos 
249ed0d50c3Schristos /* Vflags fields.  */
250ed0d50c3Schristos #define DST__K_VALKIND_MASK 0x03
251ed0d50c3Schristos #define DST__K_INDIR        0x04
252ed0d50c3Schristos #define DST__K_DISP         0x08
253ed0d50c3Schristos #define DST__K_REGNUM_MASK  0xf0
254ed0d50c3Schristos #define DST__K_REGNUM_SHIFT  4
255ed0d50c3Schristos 
256ed0d50c3Schristos #define DST__K_VALKIND_LITERAL 0
257ed0d50c3Schristos #define DST__K_VALKIND_ADDR    1
258ed0d50c3Schristos #define DST__K_VALKIND_DESC    2
259ed0d50c3Schristos #define DST__K_VALKIND_REG     3
260ed0d50c3Schristos 
261ed0d50c3Schristos /* Label.  */
262ed0d50c3Schristos #define DST__K_LABEL 187
263ed0d50c3Schristos 
264ed0d50c3Schristos struct vms_dst_label
265ed0d50c3Schristos {
266ed0d50c3Schristos   unsigned char unused;
267ed0d50c3Schristos 
268ed0d50c3Schristos   unsigned char value[4];
269ed0d50c3Schristos   unsigned char name[1];
270ed0d50c3Schristos };
271ed0d50c3Schristos 
272ed0d50c3Schristos /* Discontiguous range.  */
273ed0d50c3Schristos #define DST__K_DIS_RANGE 118
274ed0d50c3Schristos #endif /* _VMS_DST_H */
275