123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333 |
- /* Alpha VMS external format of Libraries.
- Copyright (C) 2010-2015 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 */
|