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
#define LHD_SANEID_DCX 319232342
#define LHD_SANEID3 233579905
#define LHD_SANEID6 233579911
#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
{
unsigned char type;
unsigned char nindex;
unsigned char fill_1[2];
unsigned char sanity[4];
unsigned char majorid[2];
unsigned char minorid[2];
unsigned char lbrver[32];
unsigned char credat[8];
unsigned char updtim[8];
unsigned char mhdusz;
unsigned char idxblkf[2];
unsigned char fill_2;
unsigned char closerror[2];
unsigned char spareword[2];
unsigned char freevbn[4];
unsigned char freeblk[4];
unsigned char nextrfa[6];
unsigned char nextvbn[4];
unsigned char freidxblk[4];
unsigned char freeidx[4];
unsigned char hipreal[4];
unsigned char hiprusd[4];
unsigned char idxblks[4];
unsigned char idxcnt[4];
unsigned char modcnt[4];
unsigned char fill_3[2];
unsigned char modhdrs[4];
unsigned char idxovh[4];
unsigned char maxluhrec[2];
unsigned char numluhrec[2];
unsigned char begluhrfa[6];
unsigned char endluhrfa[6];
unsigned char dcxmapvbn[4];
unsigned char fill_4[4 * 13];
};
#define LBR_MAJORID 3 /* Alpha libraries. */
#define LBR_ELFMAJORID 6 /* Elf libraries (new index, new data). */
#define LHD_IDXDESC 196
struct vms_idd
{
unsigned char flags[2];
unsigned char keylen[2];
unsigned char vbn[4];
};
#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
#define INDEXDEF__LENGTH 512
#define INDEXDEF__BLKSIZ 500
struct vms_indexdef
{
unsigned char used[2];
unsigned char parent[4];
unsigned char fill_1[6];
simply a key (= a string) and a rfa. */
unsigned char keys[INDEXDEF__BLKSIZ];
};
struct vms_rfa
{
0 means that the field is absent. Block size is 512. */
unsigned char vbn[4];
unsigned char offset[2];
};
struct vms_idx
{
DATA__DATA (ie 6). */
struct vms_rfa rfa;
unsigned char keylen;
unsigned char keyname[256];
};
struct vms_elfidx
{
struct vms_rfa rfa;
unsigned char keylen[2];
unsigned char flags;
unsigned char keyname[256];
};
#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
is set in elfidx. */
struct vms_lhs
{
struct vms_rfa ng_g_rfa;
struct vms_rfa ng_wk_rfa;
struct vms_rfa g_g_rfa;
struct vms_rfa g_wk_rfa;
unsigned char flags;
};
struct vms_lns
{
struct vms_rfa nxtrfa;
struct vms_rfa modrfa;
};
struct vms_datadef
{
unsigned char recs;
unsigned char fill_1;
unsigned char link[4];
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
struct vms_kbn
{
unsigned char keylen[2];
struct vms_rfa rfa;
};
struct vms_mhd
{
unsigned char lbrflag;
unsigned char id;
unsigned char fill_1[2];
unsigned char refcnt[4];
unsigned char datim[8];
unsigned char objstat;
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
#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
struct vms_leh
{
unsigned char date[8];
unsigned char nbr_units[2];
unsigned char action[2];
unsigned char idlen;
modules... */
};
#endif