]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - include/vms/lbr.h
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / include / vms / lbr.h
CommitLineData
fd63344e
TG
1/* Alpha VMS external format of Libraries.
2
250d07de 3 Copyright (C) 2010-2021 Free Software Foundation, Inc.
fd63344e
TG
4 Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
5
6 This file is part of BFD, the Binary File Descriptor library.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 MA 02110-1301, USA. */
22
23#ifndef _VMS_LBR_H
24#define _VMS_LBR_H
25
26/* Libray HeaDer. */
27
8e57e1d1
TG
28/* Magic numbers. Should match the major version. */
29
fd63344e
TG
30#define LHD_SANEID_DCX 319232342
31#define LHD_SANEID3 233579905
8e57e1d1 32#define LHD_SANEID6 233579911
fd63344e
TG
33
34/* Library type. */
35#define LBR__C_TYP_UNK 0 /* Unknown / unspecified. */
36#define LBR__C_TYP_OBJ 1 /* Vax object. */
37#define LBR__C_TYP_MLB 2 /* Macro. */
38#define LBR__C_TYP_HLP 3 /* Help. */
39#define LBR__C_TYP_TXT 4 /* Text. */
40#define LBR__C_TYP_SHSTB 5 /* Vax shareable image. */
41#define LBR__C_TYP_NCS 6 /* NCS. */
42#define LBR__C_TYP_EOBJ 7 /* Alpha object. */
43#define LBR__C_TYP_ESHSTB 8 /* Alpha shareable image. */
44#define LBR__C_TYP_IOBJ 9 /* IA-64 object. */
8e57e1d1 45#define LBR__C_TYP_ISHSTB 10 /* IA-64 shareable image. */
fd63344e
TG
46
47struct vms_lhd
48{
49 /* Type of the library. See above. */
50 unsigned char type;
51
52 /* Number of indexes. Generally 1, 2 for object libraries. */
53 unsigned char nindex;
54
55 unsigned char fill_1[2];
56
57 /* Sanity Id. */
58 unsigned char sanity[4];
59
60 /* Version. */
61 unsigned char majorid[2];
62 unsigned char minorid[2];
63
64 /* Tool name. */
65 unsigned char lbrver[32];
66
67 /* Create time. */
68 unsigned char credat[8];
69
70 /* Update time. */
71 unsigned char updtim[8];
72
73 /* Size of the MHD. */
74 unsigned char mhdusz;
75
76 unsigned char idxblkf[2]; /* Unused. */
77 unsigned char fill_2;
78 unsigned char closerror[2];
79
80 unsigned char spareword[2];
81
82 /* First free block, and number of free blocks. */
83 unsigned char freevbn[4];
84 unsigned char freeblk[4];
85
86 unsigned char nextrfa[6];
87 unsigned char nextvbn[4];
88
89 /* Free pre-allocated index block. */
f3cf45d5 90 /* Number of free blocks. */
fd63344e 91 unsigned char freidxblk[4];
f3cf45d5
TG
92 /* VBN of a simply linked list of free blocks. The list is terminated by a
93 nul VBN. */
fd63344e
TG
94 unsigned char freeidx[4];
95
96 /* Highest pre-allocated index block and in use. */
97 unsigned char hipreal[4];
98 unsigned char hiprusd[4];
99
100 /* Number of index blocks in use. */
101 unsigned char idxblks[4];
102
103 /* Number of index entries. */
104 unsigned char idxcnt[4];
105
106 /* Number of modules entries. */
107 unsigned char modcnt[4];
108
109 unsigned char fill_3[2];
110
111 /* Number of module headers. */
112 unsigned char modhdrs[4];
113
114 /* Overhead index pointers. */
115 unsigned char idxovh[4];
116
117 /* Update history records. */
118 unsigned char maxluhrec[2];
119 unsigned char numluhrec[2];
120 unsigned char begluhrfa[6];
121 unsigned char endluhrfa[6];
122
123 /* DCX map. */
124 unsigned char dcxmapvbn[4];
125
126 unsigned char fill_4[4 * 13];
127};
128
8e57e1d1
TG
129/* Known major ids. */
130#define LBR_MAJORID 3 /* Alpha libraries. */
131#define LBR_ELFMAJORID 6 /* Elf libraries (new index, new data). */
132
fd63344e
TG
133/* Offset of the first IDD. */
134#define LHD_IDXDESC 196
135
136/* InDex Description. */
137struct vms_idd
138{
139 unsigned char flags[2];
140
141 /* Max length of the key. */
142 unsigned char keylen[2];
143
144 /* First index block. */
145 unsigned char vbn[4];
146};
147
148/* IDD flags. */
149#define IDD__FLAGS_ASCII 1
150#define IDD__FLAGS_LOCKED 2
151#define IDD__FLAGS_VARLENIDX 4
152#define IDD__FLAGS_NOCASECMP 8
153#define IDD__FLAGS_NOCASENTR 16
154#define IDD__FLAGS_UPCASNTRY 32
155
156#define IDD_LENGTH 8
157
158/* Index block. */
159#define INDEXDEF__LENGTH 512
160#define INDEXDEF__BLKSIZ 500
161
162struct vms_indexdef
163{
164 /* Number of bytes used. */
165 unsigned char used[2];
166
167 /* VBN of the parent. */
168 unsigned char parent[4];
169
170 unsigned char fill_1[6];
8e57e1d1 171
91a45c33 172 /* The key field contains vms_idx/vms_elfidx structures, which are
8e57e1d1 173 simply a key (= a string) and a rfa. */
fd63344e
TG
174 unsigned char keys[INDEXDEF__BLKSIZ];
175};
176
8e57e1d1
TG
177/* An offset in a file. */
178
179struct vms_rfa
fd63344e 180{
8e57e1d1
TG
181 /* Logical block number, 1 based.
182 0 means that the field is absent. Block size is 512. */
fd63344e 183 unsigned char vbn[4];
8e57e1d1
TG
184
185 /* Offset within the block. */
fd63344e 186 unsigned char offset[2];
8e57e1d1
TG
187};
188
189/* Index keys. For version 3. */
190
191struct vms_idx
192{
193 /* Offset from the start of the vbn, so minimum should be
194 DATA__DATA (ie 6). */
195 struct vms_rfa rfa;
fd63344e
TG
196
197 unsigned char keylen;
8e57e1d1 198 /* The length of this field is in fact keylen. */
fd63344e
TG
199 unsigned char keyname[256];
200};
201
8e57e1d1 202/* Index keys, for version 4 and later. */
fd63344e 203
8e57e1d1
TG
204struct vms_elfidx
205{
206 struct vms_rfa rfa;
fd63344e
TG
207
208 unsigned char keylen[2];
8e57e1d1 209 unsigned char flags;
fd63344e
TG
210 unsigned char keyname[256];
211};
212
8e57e1d1
TG
213/* Flags of elfidx. */
214
215#define ELFIDX__WEAK 0x01 /* Weak symbol. */
216#define ELFIDX__GROUP 0x02 /* Group symbol. */
217#define ELFIDX__LISTRFA 0x04 /* RFA field points to an LHS. */
218#define ELFIDX__SYMESC 0x08 /* Long symbol. */
219
fd63344e
TG
220#define RFADEF__C_INDEX 0xffff
221
8e57e1d1
TG
222/* List head structure. That's what is pointed by rfa when LISTRFA flag
223 is set in elfidx. */
224
225struct vms_lhs
226{
227 struct vms_rfa ng_g_rfa; /* Non-group global. */
228 struct vms_rfa ng_wk_rfa; /* Non-group weak. */
229 struct vms_rfa g_g_rfa; /* Group global. */
230 struct vms_rfa g_wk_rfa; /* Group weak. */
231 unsigned char flags;
232};
233
234/* List node structure. Fields of LHS point to this structure. */
235
236struct vms_lns
237{
238 /* Next node in the list. */
239 struct vms_rfa nxtrfa;
240
241 /* Module associated with the key. */
242 struct vms_rfa modrfa;
243};
244
fd63344e
TG
245struct vms_datadef
246{
247 /* Number of records in this block. */
248 unsigned char recs;
249 unsigned char fill_1;
250
251 /* Next vbn. */
252 unsigned char link[4];
253
254 /* Data. The first word is the record length, followed by record
255 data and a possible pad byte so that record length is always aligned. */
256 unsigned char data[506];
257};
258#define DATA__LENGTH 512
259#define DATA__DATA 6
260
13a985e1
TG
261/* Key name block. This is used for keys longer than 128 bytes. */
262
263struct vms_kbn
264{
265 /* Length of the key chunk. */
266 unsigned char keylen[2];
267
268 /* RFA of the next chunk. */
269 struct vms_rfa rfa;
270
271 /* Followed by the key chunk. */
272};
273
fd63344e
TG
274/* Module header. */
275struct vms_mhd
276{
277 /* Fixed part. */
278 unsigned char lbrflag;
279 unsigned char id;
280 unsigned char fill_1[2];
281 unsigned char refcnt[4];
282 unsigned char datim[8];
283
284 unsigned char objstat;
285 /* Ident or GSMATCH. */
286 unsigned char objidlng;
287 unsigned char objid[31];
8e57e1d1
TG
288
289 unsigned char pad1[3];
290 unsigned char otherefcnt[4];
291 unsigned char modsize[4];
292 unsigned char pad2[4];
fd63344e
TG
293};
294
295#define MHD__C_MHDID 0xad /* Value for id. */
8e57e1d1 296#define MHD__C_MHDLEN 16 /* Fixed part length. */
fd63344e 297#define MHD__C_USRDAT 16
91a45c33
TG
298
299/* Flags for objstat. */
300#define MHD__M_SELSRC 0x1 /* Selective search. */
fd63344e
TG
301#define MHD__M_OBJTIR 0x2
302#define MHD__M_WKSYM 0x4
303
304struct vms_luh
305{
306 unsigned char nxtluhblk[4];
307 unsigned char spare[2];
308 unsigned char data[506];
309};
310
311struct vms_luhdef
312{
313 unsigned char rechdr[2];
314 unsigned char reclen[2];
315};
316#define LUH__RECHDRLEN 4
317#define LUH__RECHDRMRK 0xabba
318#define LUH__DATAFLDLEN 506
319
320/* Entry in the history. */
321
322struct vms_leh
323{
324 unsigned char date[8];
325 unsigned char nbr_units[2];
326 unsigned char action[2]; /* 1: delete, 2: insert, 3: replaced. */
327 unsigned char idlen;
328 /* username
329 modules... */
330};
331
332#endif /* _VMS_LBR_H */