source: trunk/libs/newlib/src/include/vms/lbr.h @ 670

Last change on this file since 670 was 444, checked in by satin@…, 7 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 7.6 KB
Line 
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
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.  */
90  /* Number of free blocks.  */
91  unsigned char freidxblk[4];
92  /* VBN of a simply linked list of free blocks.  The list is terminated by a
93     nul VBN.  */
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
129/* Known major ids.  */
130#define LBR_MAJORID 3           /* Alpha libraries.  */
131#define LBR_ELFMAJORID 6        /* Elf libraries (new index, new data).  */
132
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];
171
172  /* The key field contains vms_idx/vms_elfidx structures, which are
173     simply a key (= a string) and a rfa.  */
174  unsigned char keys[INDEXDEF__BLKSIZ];
175};
176
177/* An offset in a file.  */
178
179struct vms_rfa
180{
181  /* Logical block number, 1 based.
182     0 means that the field is absent.  Block size is 512.  */
183  unsigned char vbn[4];
184
185  /* Offset within the block.  */
186  unsigned char offset[2];
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;
196
197  unsigned char keylen;
198  /* The length of this field is in fact keylen.  */
199  unsigned char keyname[256];
200};
201
202/* Index keys, for version 4 and later.  */
203
204struct vms_elfidx
205{
206  struct vms_rfa rfa;
207
208  unsigned char keylen[2];
209  unsigned char flags;
210  unsigned char keyname[256];
211};
212
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
220#define RFADEF__C_INDEX 0xffff
221
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
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
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
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];
288
289  unsigned char pad1[3];
290  unsigned char otherefcnt[4];
291  unsigned char modsize[4];
292  unsigned char pad2[4];
293};
294
295#define MHD__C_MHDID 0xad       /* Value for id.  */
296#define MHD__C_MHDLEN 16        /* Fixed part length.  */
297#define MHD__C_USRDAT 16
298
299/* Flags for objstat.  */
300#define MHD__M_SELSRC 0x1       /* Selective search.  */
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 */
Note: See TracBrowser for help on using the repository browser.