summaryrefslogtreecommitdiffstats
path: root/binutils-2.25/include/vms/lbr.h
diff options
context:
space:
mode:
Diffstat (limited to 'binutils-2.25/include/vms/lbr.h')
-rw-r--r--binutils-2.25/include/vms/lbr.h332
1 files changed, 332 insertions, 0 deletions
diff --git a/binutils-2.25/include/vms/lbr.h b/binutils-2.25/include/vms/lbr.h
new file mode 100644
index 00000000..fd3c256a
--- /dev/null
+++ b/binutils-2.25/include/vms/lbr.h
@@ -0,0 +1,332 @@
+/* Alpha VMS external format of Libraries.
+
+ Copyright 2010 Free Software Foundation, Inc.
+ Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _VMS_LBR_H
+#define _VMS_LBR_H
+
+/* Libray HeaDer. */
+
+/* Magic numbers. Should match the major version. */
+
+#define LHD_SANEID_DCX 319232342
+#define LHD_SANEID3 233579905
+#define LHD_SANEID6 233579911
+
+/* Library type. */
+#define LBR__C_TYP_UNK 0 /* Unknown / unspecified. */
+#define LBR__C_TYP_OBJ 1 /* Vax object. */
+#define LBR__C_TYP_MLB 2 /* Macro. */
+#define LBR__C_TYP_HLP 3 /* Help. */
+#define LBR__C_TYP_TXT 4 /* Text. */
+#define LBR__C_TYP_SHSTB 5 /* Vax shareable image. */
+#define LBR__C_TYP_NCS 6 /* NCS. */
+#define LBR__C_TYP_EOBJ 7 /* Alpha object. */
+#define LBR__C_TYP_ESHSTB 8 /* Alpha shareable image. */
+#define LBR__C_TYP_IOBJ 9 /* IA-64 object. */
+#define LBR__C_TYP_ISHSTB 10 /* IA-64 shareable image. */
+
+struct vms_lhd
+{
+ /* Type of the library. See above. */
+ unsigned char type;
+
+ /* Number of indexes. Generally 1, 2 for object libraries. */
+ unsigned char nindex;
+
+ unsigned char fill_1[2];
+
+ /* Sanity Id. */
+ unsigned char sanity[4];
+
+ /* Version. */
+ unsigned char majorid[2];
+ unsigned char minorid[2];
+
+ /* Tool name. */
+ unsigned char lbrver[32];
+
+ /* Create time. */
+ unsigned char credat[8];
+
+ /* Update time. */
+ unsigned char updtim[8];
+
+ /* Size of the MHD. */
+ unsigned char mhdusz;
+
+ unsigned char idxblkf[2]; /* Unused. */
+ unsigned char fill_2;
+ unsigned char closerror[2];
+
+ unsigned char spareword[2];
+
+ /* First free block, and number of free blocks. */
+ unsigned char freevbn[4];
+ unsigned char freeblk[4];
+
+ unsigned char nextrfa[6];
+ unsigned char nextvbn[4];
+
+ /* Free pre-allocated index block. */
+ /* Number of free blocks. */
+ unsigned char freidxblk[4];
+ /* VBN of a simply linked list of free blocks. The list is terminated by a
+ nul VBN. */
+ unsigned char freeidx[4];
+
+ /* Highest pre-allocated index block and in use. */
+ unsigned char hipreal[4];
+ unsigned char hiprusd[4];
+
+ /* Number of index blocks in use. */
+ unsigned char idxblks[4];
+
+ /* Number of index entries. */
+ unsigned char idxcnt[4];
+
+ /* Number of modules entries. */
+ unsigned char modcnt[4];
+
+ unsigned char fill_3[2];
+
+ /* Number of module headers. */
+ unsigned char modhdrs[4];
+
+ /* Overhead index pointers. */
+ unsigned char idxovh[4];
+
+ /* Update history records. */
+ unsigned char maxluhrec[2];
+ unsigned char numluhrec[2];
+ unsigned char begluhrfa[6];
+ unsigned char endluhrfa[6];
+
+ /* DCX map. */
+ unsigned char dcxmapvbn[4];
+
+ unsigned char fill_4[4 * 13];
+};
+
+/* Known major ids. */
+#define LBR_MAJORID 3 /* Alpha libraries. */
+#define LBR_ELFMAJORID 6 /* Elf libraries (new index, new data). */
+
+/* Offset of the first IDD. */
+#define LHD_IDXDESC 196
+
+/* InDex Description. */
+struct vms_idd
+{
+ unsigned char flags[2];
+
+ /* Max length of the key. */
+ unsigned char keylen[2];
+
+ /* First index block. */
+ unsigned char vbn[4];
+};
+
+/* IDD flags. */
+#define IDD__FLAGS_ASCII 1
+#define IDD__FLAGS_LOCKED 2
+#define IDD__FLAGS_VARLENIDX 4
+#define IDD__FLAGS_NOCASECMP 8
+#define IDD__FLAGS_NOCASENTR 16
+#define IDD__FLAGS_UPCASNTRY 32
+
+#define IDD_LENGTH 8
+
+/* Index block. */
+#define INDEXDEF__LENGTH 512
+#define INDEXDEF__BLKSIZ 500
+
+struct vms_indexdef
+{
+ /* Number of bytes used. */
+ unsigned char used[2];
+
+ /* VBN of the parent. */
+ unsigned char parent[4];
+
+ unsigned char fill_1[6];
+
+ /* The key field contains vms_idx/vms_elfidx structures, which are
+ simply a key (= a string) and a rfa. */
+ unsigned char keys[INDEXDEF__BLKSIZ];
+};
+
+/* An offset in a file. */
+
+struct vms_rfa
+{
+ /* Logical block number, 1 based.
+ 0 means that the field is absent. Block size is 512. */
+ unsigned char vbn[4];
+
+ /* Offset within the block. */
+ unsigned char offset[2];
+};
+
+/* Index keys. For version 3. */
+
+struct vms_idx
+{
+ /* Offset from the start of the vbn, so minimum should be
+ DATA__DATA (ie 6). */
+ struct vms_rfa rfa;
+
+ unsigned char keylen;
+ /* The length of this field is in fact keylen. */
+ unsigned char keyname[256];
+};
+
+/* Index keys, for version 4 and later. */
+
+struct vms_elfidx
+{
+ struct vms_rfa rfa;
+
+ unsigned char keylen[2];
+ unsigned char flags;
+ unsigned char keyname[256];
+};
+
+/* Flags of elfidx. */
+
+#define ELFIDX__WEAK 0x01 /* Weak symbol. */
+#define ELFIDX__GROUP 0x02 /* Group symbol. */
+#define ELFIDX__LISTRFA 0x04 /* RFA field points to an LHS. */
+#define ELFIDX__SYMESC 0x08 /* Long symbol. */
+
+#define RFADEF__C_INDEX 0xffff
+
+/* List head structure. That's what is pointed by rfa when LISTRFA flag
+ is set in elfidx. */
+
+struct vms_lhs
+{
+ struct vms_rfa ng_g_rfa; /* Non-group global. */
+ struct vms_rfa ng_wk_rfa; /* Non-group weak. */
+ struct vms_rfa g_g_rfa; /* Group global. */
+ struct vms_rfa g_wk_rfa; /* Group weak. */
+ unsigned char flags;
+};
+
+/* List node structure. Fields of LHS point to this structure. */
+
+struct vms_lns
+{
+ /* Next node in the list. */
+ struct vms_rfa nxtrfa;
+
+ /* Module associated with the key. */
+ struct vms_rfa modrfa;
+};
+
+struct vms_datadef
+{
+ /* Number of records in this block. */
+ unsigned char recs;
+ unsigned char fill_1;
+
+ /* Next vbn. */
+ unsigned char link[4];
+
+ /* Data. The first word is the record length, followed by record
+ data and a possible pad byte so that record length is always aligned. */
+ unsigned char data[506];
+};
+#define DATA__LENGTH 512
+#define DATA__DATA 6
+
+/* Key name block. This is used for keys longer than 128 bytes. */
+
+struct vms_kbn
+{
+ /* Length of the key chunk. */
+ unsigned char keylen[2];
+
+ /* RFA of the next chunk. */
+ struct vms_rfa rfa;
+
+ /* Followed by the key chunk. */
+};
+
+/* Module header. */
+struct vms_mhd
+{
+ /* Fixed part. */
+ unsigned char lbrflag;
+ unsigned char id;
+ unsigned char fill_1[2];
+ unsigned char refcnt[4];
+ unsigned char datim[8];
+
+ unsigned char objstat;
+ /* Ident or GSMATCH. */
+ unsigned char objidlng;
+ unsigned char objid[31];
+
+ unsigned char pad1[3];
+ unsigned char otherefcnt[4];
+ unsigned char modsize[4];
+ unsigned char pad2[4];
+};
+
+#define MHD__C_MHDID 0xad /* Value for id. */
+#define MHD__C_MHDLEN 16 /* Fixed part length. */
+#define MHD__C_USRDAT 16
+
+/* Flags for objstat. */
+#define MHD__M_SELSRC 0x1 /* Selective search. */
+#define MHD__M_OBJTIR 0x2
+#define MHD__M_WKSYM 0x4
+
+struct vms_luh
+{
+ unsigned char nxtluhblk[4];
+ unsigned char spare[2];
+ unsigned char data[506];
+};
+
+struct vms_luhdef
+{
+ unsigned char rechdr[2];
+ unsigned char reclen[2];
+};
+#define LUH__RECHDRLEN 4
+#define LUH__RECHDRMRK 0xabba
+#define LUH__DATAFLDLEN 506
+
+/* Entry in the history. */
+
+struct vms_leh
+{
+ unsigned char date[8];
+ unsigned char nbr_units[2];
+ unsigned char action[2]; /* 1: delete, 2: insert, 3: replaced. */
+ unsigned char idlen;
+ /* username
+ modules... */
+};
+
+#endif /* _VMS_LBR_H */