bfd/
[deliverable/binutils-gdb.git] / include / vms / lbr.h
1 /* Alpha VMS external format of Libraries.
2
3 Copyright 2010 Free Software Foundation, Inc.
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
28 /* Magic numbers. Should match the major version. */
29
30 #define LHD_SANEID_DCX 319232342
31 #define LHD_SANEID3 233579905
32 #define LHD_SANEID6 233579911
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. */
45 #define LBR__C_TYP_ISHSTB 10 /* IA-64 shareable image. */
46
47 struct 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. */
90 unsigned char freidxblk[4];
91 unsigned char freeidx[4];
92
93 /* Highest pre-allocated index block and in use. */
94 unsigned char hipreal[4];
95 unsigned char hiprusd[4];
96
97 /* Number of index blocks in use. */
98 unsigned char idxblks[4];
99
100 /* Number of index entries. */
101 unsigned char idxcnt[4];
102
103 /* Number of modules entries. */
104 unsigned char modcnt[4];
105
106 unsigned char fill_3[2];
107
108 /* Number of module headers. */
109 unsigned char modhdrs[4];
110
111 /* Overhead index pointers. */
112 unsigned char idxovh[4];
113
114 /* Update history records. */
115 unsigned char maxluhrec[2];
116 unsigned char numluhrec[2];
117 unsigned char begluhrfa[6];
118 unsigned char endluhrfa[6];
119
120 /* DCX map. */
121 unsigned char dcxmapvbn[4];
122
123 unsigned char fill_4[4 * 13];
124 };
125
126 /* Known major ids. */
127 #define LBR_MAJORID 3 /* Alpha libraries. */
128 #define LBR_ELFMAJORID 6 /* Elf libraries (new index, new data). */
129
130 /* Offset of the first IDD. */
131 #define LHD_IDXDESC 196
132
133 /* InDex Description. */
134 struct vms_idd
135 {
136 unsigned char flags[2];
137
138 /* Max length of the key. */
139 unsigned char keylen[2];
140
141 /* First index block. */
142 unsigned char vbn[4];
143 };
144
145 /* IDD flags. */
146 #define IDD__FLAGS_ASCII 1
147 #define IDD__FLAGS_LOCKED 2
148 #define IDD__FLAGS_VARLENIDX 4
149 #define IDD__FLAGS_NOCASECMP 8
150 #define IDD__FLAGS_NOCASENTR 16
151 #define IDD__FLAGS_UPCASNTRY 32
152
153 #define IDD_LENGTH 8
154
155 /* Index block. */
156 #define INDEXDEF__LENGTH 512
157 #define INDEXDEF__BLKSIZ 500
158
159 struct vms_indexdef
160 {
161 /* Number of bytes used. */
162 unsigned char used[2];
163
164 /* VBN of the parent. */
165 unsigned char parent[4];
166
167 unsigned char fill_1[6];
168
169 /* The key field contains vms_idxdef/vms_idxdef2 structures, which are
170 simply a key (= a string) and a rfa. */
171 unsigned char keys[INDEXDEF__BLKSIZ];
172 };
173
174 /* An offset in a file. */
175
176 struct vms_rfa
177 {
178 /* Logical block number, 1 based.
179 0 means that the field is absent. Block size is 512. */
180 unsigned char vbn[4];
181
182 /* Offset within the block. */
183 unsigned char offset[2];
184 };
185
186 /* Index keys. For version 3. */
187
188 struct vms_idx
189 {
190 /* Offset from the start of the vbn, so minimum should be
191 DATA__DATA (ie 6). */
192 struct vms_rfa rfa;
193
194 unsigned char keylen;
195 /* The length of this field is in fact keylen. */
196 unsigned char keyname[256];
197 };
198
199 /* Index keys, for version 4 and later. */
200
201 struct vms_elfidx
202 {
203 struct vms_rfa rfa;
204
205 unsigned char keylen[2];
206 unsigned char flags;
207 unsigned char keyname[256];
208 };
209
210 /* Flags of elfidx. */
211
212 #define ELFIDX__WEAK 0x01 /* Weak symbol. */
213 #define ELFIDX__GROUP 0x02 /* Group symbol. */
214 #define ELFIDX__LISTRFA 0x04 /* RFA field points to an LHS. */
215 #define ELFIDX__SYMESC 0x08 /* Long symbol. */
216
217 #define RFADEF__C_INDEX 0xffff
218
219 /* List head structure. That's what is pointed by rfa when LISTRFA flag
220 is set in elfidx. */
221
222 struct vms_lhs
223 {
224 struct vms_rfa ng_g_rfa; /* Non-group global. */
225 struct vms_rfa ng_wk_rfa; /* Non-group weak. */
226 struct vms_rfa g_g_rfa; /* Group global. */
227 struct vms_rfa g_wk_rfa; /* Group weak. */
228 unsigned char flags;
229 };
230
231 /* List node structure. Fields of LHS point to this structure. */
232
233 struct vms_lns
234 {
235 /* Next node in the list. */
236 struct vms_rfa nxtrfa;
237
238 /* Module associated with the key. */
239 struct vms_rfa modrfa;
240 };
241
242 struct vms_datadef
243 {
244 /* Number of records in this block. */
245 unsigned char recs;
246 unsigned char fill_1;
247
248 /* Next vbn. */
249 unsigned char link[4];
250
251 /* Data. The first word is the record length, followed by record
252 data and a possible pad byte so that record length is always aligned. */
253 unsigned char data[506];
254 };
255 #define DATA__LENGTH 512
256 #define DATA__DATA 6
257
258 /* Module header. */
259 struct vms_mhd
260 {
261 /* Fixed part. */
262 unsigned char lbrflag;
263 unsigned char id;
264 unsigned char fill_1[2];
265 unsigned char refcnt[4];
266 unsigned char datim[8];
267
268 unsigned char objstat;
269 /* Ident or GSMATCH. */
270 unsigned char objidlng;
271 unsigned char objid[31];
272
273 unsigned char pad1[3];
274 unsigned char otherefcnt[4];
275 unsigned char modsize[4];
276 unsigned char pad2[4];
277 };
278
279 #define MHD__C_MHDID 0xad /* Value for id. */
280 #define MHD__C_MHDLEN 16 /* Fixed part length. */
281 #define MHD__C_USRDAT 16
282 #define MHD__M_SELSRC 0x1
283 #define MHD__M_OBJTIR 0x2
284 #define MHD__M_WKSYM 0x4
285
286 struct vms_luh
287 {
288 unsigned char nxtluhblk[4];
289 unsigned char spare[2];
290 unsigned char data[506];
291 };
292
293 struct vms_luhdef
294 {
295 unsigned char rechdr[2];
296 unsigned char reclen[2];
297 };
298 #define LUH__RECHDRLEN 4
299 #define LUH__RECHDRMRK 0xabba
300 #define LUH__DATAFLDLEN 506
301
302 /* Entry in the history. */
303
304 struct vms_leh
305 {
306 unsigned char date[8];
307 unsigned char nbr_units[2];
308 unsigned char action[2]; /* 1: delete, 2: insert, 3: replaced. */
309 unsigned char idlen;
310 /* username
311 modules... */
312 };
313
314 #endif /* _VMS_LBR_H */
This page took 0.038053 seconds and 4 git commands to generate.