OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [include/] [vms/] [lbr.h] - Blame information for rev 158

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 17 khays
/* 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_idx/vms_elfidx 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
 
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
/* Key name block.  This is used for keys longer than 128 bytes.  */
259
 
260
struct vms_kbn
261
{
262
  /* Length of the key chunk.  */
263
  unsigned char keylen[2];
264
 
265
  /* RFA of the next chunk.  */
266
  struct vms_rfa rfa;
267
 
268
  /* Followed by the key chunk.  */
269
};
270
 
271
/* Module header.  */
272
struct vms_mhd
273
{
274
  /* Fixed part.  */
275
  unsigned char lbrflag;
276
  unsigned char id;
277
  unsigned char fill_1[2];
278
  unsigned char refcnt[4];
279
  unsigned char datim[8];
280
 
281
  unsigned char objstat;
282
  /* Ident or GSMATCH.  */
283
  unsigned char objidlng;
284
  unsigned char objid[31];
285
 
286
  unsigned char pad1[3];
287
  unsigned char otherefcnt[4];
288
  unsigned char modsize[4];
289
  unsigned char pad2[4];
290
};
291
 
292
#define MHD__C_MHDID 0xad       /* Value for id.  */
293
#define MHD__C_MHDLEN 16        /* Fixed part length.  */
294
#define MHD__C_USRDAT 16
295
 
296
/* Flags for objstat.  */
297
#define MHD__M_SELSRC 0x1       /* Selective search.  */
298
#define MHD__M_OBJTIR 0x2
299
#define MHD__M_WKSYM  0x4
300
 
301
struct vms_luh
302
{
303
  unsigned char nxtluhblk[4];
304
  unsigned char spare[2];
305
  unsigned char data[506];
306
};
307
 
308
struct vms_luhdef
309
{
310
  unsigned char rechdr[2];
311
  unsigned char reclen[2];
312
};
313
#define LUH__RECHDRLEN 4
314
#define LUH__RECHDRMRK 0xabba
315
#define LUH__DATAFLDLEN 506
316
 
317
/* Entry in the history.  */
318
 
319
struct vms_leh
320
{
321
  unsigned char date[8];
322
  unsigned char nbr_units[2];
323
  unsigned char action[2]; /* 1: delete, 2: insert, 3: replaced.  */
324
  unsigned char idlen;
325
  /* username
326
     modules... */
327
};
328
 
329
#endif /* _VMS_LBR_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.