OSDN Git Service

2010-03-31 Tristan Gingold <gingold@adacore.com>
authorgingold <gingold>
Wed, 31 Mar 2010 16:35:54 +0000 (16:35 +0000)
committergingold <gingold>
Wed, 31 Mar 2010 16:35:54 +0000 (16:35 +0000)
* dcx.h: New file.
* dsc.h: New file.
* esdfm.h: New file.
* esdfv.h: New file.
* internal.h: New file.
* lbr.h: New file.
* prt.h: New file.
* shl.h (struct vms_shl): Add comments.
* esrf.h (ESRF__B_NAMLNG): New macro.
* esdf.h (ESDF__B_NAMLNG): New macro.
* emh.h: Add macros for fields maximum value.
* eisd.h (EISD__M_PROTECT): Fix typo in comment.
Add macros for offsets, version, section type and match control.
Merge vms_eisd_ext into vms_eisd.
* eihvn.h (EIHVN__MULTI_PROCESSING_BIT, EIHVN__GALAXY_BIT): Added.
* eihs.h: Remove blank line.
* eihd.h (struct vms_eihd): Add comments, add image subtype names.
* eiha.h (struct vms_eiha): Add inishr and inishr_h fields.
* eiaf.h (struct vms_eiaf): Fix base_va size.
* egsy.h: Add comments.
* egsd.h: Remove blank line.
* egps.h: Add flag names.
* eeom.h (EEOM__M_WKTFR): Added.
* dst.h (DST__K_CXX): Added, and reident languages.
(DST__K_SRC_INCRLNUM_B): Added.
Indent and order pcline commands.
Add record begin/end, enumerations, type specification, value
specification, label, discontinue range definitions.

23 files changed:
include/vms/ChangeLog
include/vms/dcx.h [new file with mode: 0644]
include/vms/dsc.h [new file with mode: 0644]
include/vms/dst.h
include/vms/eeom.h
include/vms/egps.h
include/vms/egsd.h
include/vms/egsy.h
include/vms/eiaf.h
include/vms/eiha.h
include/vms/eihd.h
include/vms/eihs.h
include/vms/eihvn.h
include/vms/eisd.h
include/vms/emh.h
include/vms/esdf.h
include/vms/esdfm.h [new file with mode: 0644]
include/vms/esdfv.h [new file with mode: 0644]
include/vms/esrf.h
include/vms/internal.h [new file with mode: 0644]
include/vms/lbr.h [new file with mode: 0644]
include/vms/prt.h [new file with mode: 0644]
include/vms/shl.h

index 19ad1d3..e6945f3 100644 (file)
@@ -1,3 +1,34 @@
+2010-03-31  Tristan Gingold  <gingold@adacore.com>
+
+       * dcx.h: New file.
+       * dsc.h: New file.
+       * esdfm.h: New file.
+       * esdfv.h: New file.
+       * internal.h: New file.
+       * lbr.h: New file.
+       * prt.h: New file.
+       * shl.h (struct vms_shl): Add comments.
+       * esrf.h (ESRF__B_NAMLNG): New macro.
+       * esdf.h (ESDF__B_NAMLNG): New macro.
+       * emh.h: Add macros for fields maximum value.
+       * eisd.h (EISD__M_PROTECT): Fix typo in comment.
+       Add macros for offsets, version, section type and match control.
+       Merge vms_eisd_ext into vms_eisd.
+       * eihvn.h (EIHVN__MULTI_PROCESSING_BIT, EIHVN__GALAXY_BIT): Added.
+       * eihs.h: Remove blank line.
+       * eihd.h (struct vms_eihd): Add comments, add image subtype names.
+       * eiha.h (struct vms_eiha): Add inishr and inishr_h fields.
+       * eiaf.h (struct vms_eiaf): Fix base_va size.
+       * egsy.h: Add comments.
+       * egsd.h: Remove blank line.
+       * egps.h: Add flag names.
+       * eeom.h (EEOM__M_WKTFR): Added.
+       * dst.h (DST__K_CXX): Added, and reident languages.
+       (DST__K_SRC_INCRLNUM_B): Added.
+       Indent and order pcline commands.
+       Add record begin/end, enumerations, type specification, value
+       specification, label, discontinue range definitions.
+
 2010-02-17  Tristan Gingold  <gingold@adacore.com>
 
        * dmt.h, dst.h, eeom.h, egps.h, egsd.h, egst.h, egsy.h: New Files.
diff --git a/include/vms/dcx.h b/include/vms/dcx.h
new file mode 100644 (file)
index 0000000..b6f373a
--- /dev/null
@@ -0,0 +1,50 @@
+/* Alpha VMS external format for DeCompression.
+
+   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_DCX_H
+#define _VMS_DCX_H
+
+struct vms_dcxmap
+{
+  unsigned char size[4];
+  unsigned char version[2];
+
+  unsigned char pad[2];
+  unsigned char sanity[4];
+  unsigned char flags[4];
+  unsigned char nsubs[2];
+  unsigned char sub0[2];
+};
+
+struct vms_dcxsbm
+{
+  unsigned char size[2];
+  unsigned char min_char;
+  unsigned char max_char;
+  unsigned char escape;
+  unsigned char flags_bits;
+  unsigned char flags[2];
+  unsigned char nodes[2];
+  unsigned char next[2];
+};
+
+#endif /* _VMS_DCX_H */
diff --git a/include/vms/dsc.h b/include/vms/dsc.h
new file mode 100644 (file)
index 0000000..5a1b0e2
--- /dev/null
@@ -0,0 +1,129 @@
+/* Alpha VMS external format of Descriptors.
+
+   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_DSC_H
+#define _VMS_DSC_H
+
+/* Descriptors.  */
+#define DSC__K_DTYPE_Z   0 /* Unspecified.  */
+#define DSC__K_DTYPE_V   1 /* Bit.  */
+#define DSC__K_DTYPE_BU   2 /* Byte logical.  */
+#define DSC__K_DTYPE_WU   3 /* Word logical.  */
+#define DSC__K_DTYPE_LU   4 /* Longword logical.  */
+#define DSC__K_DTYPE_QU   5 /* Quadword logical.  */
+#define DSC__K_DTYPE_B    6 /* Byte integer.  */
+#define DSC__K_DTYPE_W    7 /* Word integer.  */
+#define DSC__K_DTYPE_L    8 /* Longword integer.  */
+#define DSC__K_DTYPE_Q    9 /* Quadword integer.  */
+#define DSC__K_DTYPE_F   10 /* Single-precision floating.  */
+#define DSC__K_DTYPE_D   11 /* Double-precision floating.  */
+#define DSC__K_DTYPE_FC  12 /* Complex.  */
+#define DSC__K_DTYPE_DC  13 /* Double-precision Complex.  */
+#define DSC__K_DTYPE_T   14 /* ASCII text string.  */
+#define DSC__K_DTYPE_NU  15 /* Numeric string, unsigned.  */
+#define DSC__K_DTYPE_NL  16 /* Numeric string, left separate sign.  */
+#define DSC__K_DTYPE_NLO 17 /* Numeric string, left overpunched sign.  */
+#define DSC__K_DTYPE_NR  18 /* Numeric string, right separate sign.  */
+#define DSC__K_DTYPE_NRO 19 /* Numeric string, right overpunched sign.  */
+#define DSC__K_DTYPE_NZ  20 /* Numeric string, zoned sign.  */
+#define DSC__K_DTYPE_P   21 /* Packed decimal string.  */
+#define DSC__K_DTYPE_ZI  22 /* Sequence of instructions.  */
+#define DSC__K_DTYPE_ZEM 23 /* Procedure entry mask.  */
+#define DSC__K_DTYPE_DSC 24 /* Descriptor, used for arrays of dyn strings.  */
+#define DSC__K_DTYPE_OU  25 /* Octaword logical.  */
+#define DSC__K_DTYPE_O   26 /* Octaword integer.  */
+#define DSC__K_DTYPE_G   27 /* Double precision G floating, 64 bit.  */
+#define DSC__K_DTYPE_H   28 /* Quadruple precision floating, 128 bit.  */
+#define DSC__K_DTYPE_GC  29 /* Double precision complex, G floating.  */
+#define DSC__K_DTYPE_HC  30 /* Quadruple precision complex, H floating.  */
+#define DSC__K_DTYPE_CIT 31 /* COBOL intermediate temporary.  */
+#define DSC__K_DTYPE_BPV 32 /* Bound Procedure Value.  */
+#define DSC__K_DTYPE_BLV 33 /* Bound Label Value.  */
+#define DSC__K_DTYPE_VU  34 /* Bit Unaligned.  */
+#define DSC__K_DTYPE_ADT 35 /* Absolute Date-Time.  */
+#define DSC__K_DTYPE_VT  37 /* Varying Text.  */
+#define DSC__K_DTYPE_T2  38 /* 16-bit char.  */
+#define DSC__K_DTYPE_VT2 39 /* 16-bit varying char.  */
+
+#define DSC__K_CLASS_S     1 /* Fixed-length scalar/string.  */
+#define DSC__K_CLASS_D     2 /* Dynamic string.  */
+#define DSC__K_CLASS_V     3 /* Reserved.  */
+#define DSC__K_CLASS_A     4 /* Contiguous array.  */
+#define DSC__K_CLASS_P     5 /* Procedure argument descriptor.  */
+#define DSC__K_CLASS_PI    6 /* Procedure incarnation descriptor.  */
+#define DSC__K_CLASS_J     7 /* Reserved.  */
+#define DSC__K_CLASS_JI    8 /* Obsolete.  */
+#define DSC__K_CLASS_SD    9 /* Decimal (scalar) string.  */
+#define DSC__K_CLASS_NCA  10 /* Non-contiguous array.  */
+#define DSC__K_CLASS_VS   11 /* Varying string.  */
+#define DSC__K_CLASS_VSA  12 /* Varying string array.  */
+#define DSC__K_CLASS_UBS  13 /* Unaligned bit string.  */
+#define DSC__K_CLASS_UBA  14 /* Unaligned bit array.  */
+#define DSC__K_CLASS_SB   15 /* String with bounds.  */
+#define DSC__K_CLASS_UBSB 16 /* Unaligned bit string with bounds.  */
+
+/* Common part.  */
+
+struct vms_dsc
+{
+  unsigned char length[2];
+  unsigned char dtype;
+  unsigned char bclass;
+  unsigned char pointer[4];
+};
+
+struct vms_dsc64
+{
+  unsigned char mbo[2];
+  unsigned char dtype;
+  unsigned char bclass;
+  unsigned char mbmo[4];
+  unsigned char length[8];
+  unsigned char pointer[8];
+};
+
+struct vms_dsc_nca
+{
+  unsigned char length[2];
+  unsigned char dtype;
+  unsigned char bclass;
+  unsigned char pointer[4];
+
+  unsigned char scale;
+  unsigned char digits;
+  unsigned char aflags;
+  unsigned char dimct;
+
+  unsigned char arsize[4];
+  unsigned char a0[4];
+};
+
+struct vms_dsc_ubs
+{
+  unsigned char length[2];
+  unsigned char dtype;
+  unsigned char bclass;
+  unsigned char base[4];
+  unsigned char pos[4];
+};
+
+#endif /* _VMS_DSC_H */
index d179018..231d397 100644 (file)
@@ -38,10 +38,11 @@ struct vms_dst_header
 #define DST__K_MODBEG 188
 
 /* Some well known languages.  */
-#define DST__K_MACRO 0
-#define DST__K_BLISS 2
-#define DST__K_C 7
-#define DST__K_ADA 9
+#define DST__K_MACRO   0
+#define DST__K_BLISS   2
+#define DST__K_C       7
+#define DST__K_ADA     9
+#define DST__K_CXX     15
 
 struct vms_dst_modbeg
 {
@@ -79,15 +80,27 @@ struct vms_dst_pcline
   unsigned char field[4];
 };
 
-#define DST__K_DELTA_PC_W 1
-#define DST__K_INCR_LINUM 2
-#define DST__K_INCR_LINUM_W 3
-#define DST__K_SET_LINUM  9
-#define DST__K_SET_LINUM_B 19
-#define DST__K_SET_LINUM_L 20
-#define DST__K_TERM 14
-#define DST__K_SET_ABS_PC 16
-#define DST__K_DELTA_PC_L 17
+#define DST__K_DELTA_PC_W      1
+#define DST__K_INCR_LINUM      2
+#define DST__K_INCR_LINUM_W    3
+#define DST__K_SET_LINUM_INCR  4
+#define DST__K_SET_LINUM_INCR_W        5
+#define DST__K_RESET_LINUM_INCR        6
+#define DST__K_BEG_STMT_MODE   7
+#define DST__K_END_STMT_MODE   8
+#define DST__K_SET_LINUM       9
+#define DST__K_SET_PC          10
+#define DST__K_SET_PC_W                11
+#define DST__K_SET_PC_L                12
+#define DST__K_SET_STMTNUM     13
+#define DST__K_TERM            14
+#define DST__K_TERM_W          15
+#define DST__K_SET_ABS_PC      16
+#define DST__K_DELTA_PC_L      17
+#define DST__K_INCR_LINUM_L    18
+#define DST__K_SET_LINUM_B     19
+#define DST__K_SET_LINUM_L     20
+#define DST__K_TERM_L          21
 
 /* Routine end.  */
 #define DST__K_RTNEND 191
@@ -146,6 +159,7 @@ struct vms_dst_blkend
 #define DST__K_SRC_SETREC_W    4
 #define DST__K_SRC_SETLNUM_L   5
 #define DST__K_SRC_SETLNUM_W   6
+#define DST__K_SRC_INCRLNUM_B  7
 #define DST__K_SRC_DEFLINES_W 10
 #define DST__K_SRC_DEFLINES_B 11
 #define DST__K_SRC_FORMFEED   16
@@ -162,4 +176,99 @@ struct vms_dst_src_decl_src
   /* Filename ASCIC.  */
 };
 
+/* Record begin.  */
+#define DST__K_RECBEG 171
+
+struct vms_dst_recbeg
+{
+  unsigned char vflags;
+  unsigned char value[4];
+  /* Filename ASCIC.  */
+};
+
+/* Record end.  */
+#define DST__K_RECEND 172
+
+/* Enumeration begin.  */
+#define DST__K_ENUMBEG 165
+
+/* Enumeration element.  */
+#define DST__K_ENUMELT 164
+
+/* Enumeration end.  */
+#define DST__K_ENUMEND 166
+
+/* Separate type specification.  */
+#define DST__K_SEPTYP 163
+
+/* Type specification.  */
+#define DST__K_TYPSPEC 175
+
+#define DST__K_TS_ATOM          1      /* Atomic.  */
+#define DST__K_TS_DSC           2      /* VMS Standard descriptor.  */
+#define DST__K_TS_IND           3      /* Indirect.  */
+#define DST__K_TS_TPTR          4      /* Typed pointer.  */
+#define DST__K_TS_PTR           5      /* Pointer.  */
+#define DST__K_TS_PIC           6      /* Pictured.  */
+#define DST__K_TS_ARRAY         7
+#define DST__K_TS_SET           8
+#define DST__K_TS_SUBRANGE      9      /* Subrange.  */
+#define DST__K_TS_ADA_DSC      10      /* Ada descriptor.  */
+#define DST__K_TS_FILE         11
+#define DST__K_TS_AREA         12      /* Area (PL/I).  */
+#define DST__K_TS_OFFSET       13      /* Offset (PL/I).  */
+#define DST__K_TS_NOV_LENG     14      /* Novel Length.  */
+#define DST__K_TS_IND_TSPEC    15      /* Internal to debugger.  */
+#define DST__K_TS_SELF_REL_LABEL 16    /* Self-relative label (PL/I).  */
+#define DST__K_TS_RFA          17      /* (Basic).  */
+#define DST__K_TS_TASK         18      /* (Ada).  */
+#define DST__K_TS_ADA_ARRAY    19
+#define DST__K_TS_XMOD_IND     20      /* Cross-module indirect type spec.  */
+#define DST__K_TS_CONSTRAINED  21      /* (Ada).  */
+#define DST__K_TS_MAYBE_CONSTR 22      /* Might-be-constrained (Ada).  */
+#define DST__K_TS_DYN_LOV_LENG 23
+#define DST__K_TS_TPTR_D       24      /* Typed pointer to descriptor.  */
+#define DST__K_TS_SCAN_TREE    25
+#define DST__K_TS_SCAN_TREEPTR 26
+#define DST__K_TS_INCOMPLETE   27
+#define DST__K_TS_BLISS_BLOCK  28
+#define DST__K_TS_TPTR_64      29
+#define DST__K_TS_PTR_64       30
+#define DST__K_TS_REF          31      /* C++ referenced type.  */
+#define DST__K_TS_REF_64       32
+
+/* Value Specification.  */
+#define DST__K_VFLAGS_NOVAL    128 /* No value.  */
+#define DST__K_VFLAGS_NOTACTIVE        248 /* Not active at current PC.  */
+#define DST__K_VFLAGS_UNALLOC  249 /* Not allocated.  */
+#define DST__K_VFLAGS_DSC      250 /* Descriptor format.  */
+#define DST__K_VFLAGS_TVS      251 /* Trailing value spec.  */
+#define DST__K_VS_FOLLOWS      253 /* Value specification follow.  */
+#define DST__K_VFLAGS_BITOFFS  255 /* Value is a bit offset.  */
+
+/* Vflags fields.  */
+#define DST__K_VALKIND_MASK 0x03
+#define DST__K_INDIR        0x04
+#define DST__K_DISP         0x08
+#define DST__K_REGNUM_MASK  0xf0
+#define DST__K_REGNUM_SHIFT  4
+
+#define DST__K_VALKIND_LITERAL 0
+#define DST__K_VALKIND_ADDR    1
+#define DST__K_VALKIND_DESC    2
+#define DST__K_VALKIND_REG     3
+
+/* Label.  */
+#define DST__K_LABEL 187
+
+struct vms_dst_label
+{
+  unsigned char unused;
+
+  unsigned char value[4];
+  unsigned char name[1];
+};
+
+/* Discontiguous range.  */
+#define DST__K_DIS_RANGE 118
 #endif /* _VMS_DST_H */
index 36f4e56..807e448 100644 (file)
@@ -57,4 +57,6 @@ struct vms_eeom
   unsigned char tfradr[8];
 };
 
+#define EEOM__M_WKTFR (1 << 0) /* Transfer address is weak.  */
+
 #endif /* _VMS_EEOM_H */
index 2b09999..e92df81 100644 (file)
@@ -47,4 +47,18 @@ struct vms_egps
   unsigned char name[31];
 };
 
+#define EGPS__V_PIC (1 << 0)   /* Not meaningful.  */
+#define EGPS__V_LIB (1 << 1)   /* Defined in a shareable image.  */
+#define EGPS__V_OVR (1 << 2)   /* Overlaid contribution.  */
+#define EGPS__V_REL (1 << 3)   /* Relocatable.  */
+#define EGPS__V_GBL (1 << 4)   /* Global.  */
+#define EGPS__V_SHR (1 << 5)   /* Shareable.  */
+#define EGPS__V_EXE (1 << 6)   /* Executable.  */
+#define EGPS__V_RD  (1 << 7)   /* Readable.  */
+#define EGPS__V_WRT (1 << 8)   /* Writable.  */
+#define EGPS__V_VEC (1 << 9)   /* Change mode dispatch or message vectors.  */
+#define EGPS__V_NOMOD (1 << 10)        /* Demand-zero.  */
+#define EGPS__V_COM (1 << 11)  /* Conditional storage.  */
+#define EGPS__V_ALLOC_64BIT (1 << 12)  /* Allocated in 64-bit space.  */
+
 #endif /* _VMS_EGPS_H */
index 9a665cd..f9be398 100644 (file)
@@ -57,5 +57,4 @@ struct vms_egsd_entry
   unsigned char gsdsiz[2];
 };
 
-
 #endif /* _VMS_EGSD_H */
index 5add879..dd36ab2 100644 (file)
 
 #define EGSY__W_FLAGS  6
 
-#define EGSY__V_WEAK           0x0001
-#define EGSY__V_DEF            0x0002
-#define EGSY__V_UNI            0x0004
-#define EGSY__V_REL            0x0008
-#define EGSY__V_COMM           0x0010
-#define EGSY__V_VECEP          0x0020
-#define EGSY__V_NORM           0x0040
-#define EGSY__V_QUAD_VAL       0x0080
+#define EGSY__V_WEAK           0x0001  /* Weak symbol definition.  */
+#define EGSY__V_DEF            0x0002  /* Symbol definition.  */
+#define EGSY__V_UNI            0x0004  /* Reserved.  */
+#define EGSY__V_REL            0x0008  /* Relocatable (vs absolute).  */
+#define EGSY__V_COMM           0x0010  /* Conditional symbol def.  */
+#define EGSY__V_VECEP          0x0020  /* Reserved.  */
+#define EGSY__V_NORM           0x0040  /* Normal procedure definition.  */
+#define EGSY__V_QUAD_VAL       0x0080  /* Value exceed 32 bits.  */
 
 struct vms_egsy
 {
index 37830da..c3c3988 100644 (file)
@@ -71,7 +71,7 @@ struct vms_eiaf
   unsigned char permctx[4];
 
   /* Base address of the image itself.  */
-  unsigned char base_va[8];
+  unsigned char base_va[4];
 
   /* Offset to linkage pair with procedure signature fixups.  */
   unsigned char lppsbfixoff[4];
index d488178..5965ef9 100644 (file)
@@ -45,6 +45,10 @@ struct vms_eiha
   /* Fourth (must be 0).  */
   unsigned char tfradr4[4];
   unsigned char tfradr4_h[4];
+
+  /* Shared image initialization (only if EIHD__V_INISHR is set).  */
+  unsigned char inishr[4];
+  unsigned char inishr_h[4];
 };
 
 #endif /* _VMS_EIHA_H */
index 771727e..fdb3a6e 100644 (file)
@@ -36,7 +36,7 @@ struct vms_eihd
   /* Byte offset to ISD (Image Section Descriptors) list.  */
   unsigned char isdoff[4];
 
-  /* Byte offset to activation data.  */
+  /* Byte offset to activation data (off=16).  */
   unsigned char activoff[4];
 
   /* Byte offset to symbol table and debugging data.  */ 
@@ -48,13 +48,13 @@ struct vms_eihd
   /* Byte offset to patch data.  */
   unsigned char patchoff[4];
 
-  /* RVA of fixup info.  */
+  /* RVA of fixup info (off=32).  */
   unsigned char iafva[8];
 
   /* RVA of symbol vector.  */
   unsigned char symvva[8];
 
-  /* Byte offset to version number array.  */
+  /* Byte offset to version number array (off=48).  */
   unsigned char version_array_off[4];
 
   /* Image type.  */
@@ -66,7 +66,7 @@ struct vms_eihd
   /* Size in bytes of image I/O section requested.  */
   unsigned char imgiocnt[4];
 
-  /* Nbr of channels requested.  */
+  /* Nbr of channels requested (off=64).  */
   unsigned char iochancnt[4];
 
   /* Requested privilege mask.  */
@@ -113,6 +113,10 @@ struct vms_eihd
 #define EIHD__K_EXE            1       /* Executable image     */
 #define EIHD__K_LIM            2       /* Linkable image.  */
 
+/* Image subtype.  */
+#define EIHD__C_NATIVE         0       /* Alpha native image.  */
+#define EIHD__C_CLI            1       /* Image is a CLI, run LOGINOUT.  */
+
 /* Linker image flags.  */
 #define EIHD__M_LNKDEBUG       0x0001  /* Full debugging requested.  */
 #define EIHD__M_LNKNOTFR       0x0002  /* No first transfer address.  */
@@ -129,7 +133,6 @@ struct vms_eihd
 #define EIHD__M_OMV_READY      0x1000  /* Can be processed by OMV.  */
 #define EIHD__M_EXT_BIND_SECT  0x2000  /* May be moved, using ext fixups.  */
 
-
 /* Offsets of some fields.  */
 #define EIHD__L_SIZE           8
 #define EIHD__L_ISDOFF         12
@@ -137,4 +140,6 @@ struct vms_eihd
 #define EIHD__Q_SYMVVA         40
 #define EIHD__L_IMGTYPE                52
 
+#define EIHD__C_LENGTH 104
+
 #endif /* _VMS_EIHD_H */
index d5f1eac..cf048b1 100644 (file)
@@ -59,5 +59,4 @@ struct vms_eihs
 #define EIHS__L_DMTVBN         24
 #define EIHS__L_DMTBYTES       28
 
-
 #endif /* _VMS_EIHS_H */
index 7f587a3..07f9eee 100644 (file)
@@ -52,5 +52,7 @@ struct vms_eihvn_subversion
 #define EIHVN__VOLATILE_BIT            15
 #define EIHVN__SHELL_BIT               16
 #define EIHVN__POSIX_BIT               17
+#define EIHVN__MULTI_PROCESSING_BIT    18
+#define EIHVN__GALAXY_BIT              19
 
 #endif /* _VMS_EIHVN_H */
index b4e47e2..7579e72 100644 (file)
 #define EISD__M_FIXUPVEC       0x0040  /* Isect is fixup section.  */
 #define EISD__M_RESIDENT       0x0080  /* Isect is memory resident.  */
 #define EISD__M_VECTOR         0x0100  /* Vector contained in isect.  */
-#define EISD__M_PROTECT                0x0200  /* Isect is proected.  */
+#define EISD__M_PROTECT                0x0200  /* Isect is protected.  */
 #define EISD__M_LASTCLU                0x0400  /* Last cluster.  */
 #define EISD__M_EXE            0x0800  /* Code isect.  */
 #define EISD__M_NONSHRADR      0x1000  /* Contains non-shareable data.  */
 #define EISD__M_QUAD_LENGTH    0x2000  /* Quad length field valid.  */
 #define EISD__M_ALLOC_64BIT    0x4000  /* Allocate 64-bit space.  */
 
+#define EISD__K_LEN 36
+#define EISD__K_LENEND 12      /* For end marker or next block.  */
+#define EISD__K_MAXLENGLBL 84
+
+#define EISD__K_GBLNAMLEN 44   /* Size of the field.  */
+
 struct vms_eisd
 {
   unsigned char majorid[4];
@@ -70,17 +76,34 @@ struct vms_eisd
   unsigned char type;
 
   unsigned char fill_1;
-};
 
-struct vms_eisd_ext
-{
+  /* End of structure for normal records.  */
+
   /* Ident for global section.  */
   unsigned char ident[4];
-
+      
   /* Global name ascic.  First 8 bytes are quad length field.  */
-  unsigned char gblnam[44];
+  unsigned char gblnam[EISD__K_GBLNAMLEN];
 };
 
+/* Versions.  */
+#define EISD__K_MAJORID 1
+#define EISD__K_MINORID 1
+
+/* Match control.  */
+#define EISD__K_MATALL 0       /* Match always.  */
+#define EISD__K_MATEQU 1       /* Match if equal.  */
+#define EISD__K_MATLEQ 2       /* Match if less or equal.  */
+#define EISD__K_MATNEV 3       /* Match never.  */
+
+/* Section type.  */
+#define EISD__K_NORMAL 0       /* Normal program image section.  */
+#define EISD__K_SHRFXD 1       /* Shareable fixed section.  */
+#define EISD__K_PRVFXD 2       /* Private fixed section.  */
+#define EISD__K_SHRPIC 3       /* Shareable pic section.  */
+#define EISD__K_PRVPIC 4       /* Private PIC section.  */
+#define EISD__K_USRSTACK 253   /* User stack section.  */
+
 /* EISD offsets.  */
 
 #define EISD__L_EISDSIZE        8
index f373c37..973d71e 100644 (file)
@@ -62,6 +62,13 @@ struct vms_emh_mhd
   /* Compile data: ASCIC.  */
 };
 
+#define EOBJ__C_MAXRECSIZ 8192  /* Maximum legal record size.  */
+#define EOBJ__C_STRLVL 2       /* Structure level.  */
+#define EOBJ__C_SYMSIZ 64      /* Maximum symbol length.  */
+#define EOBJ__C_SECSIZ 31      /* Maximum section name length.  */
+#define EOBJ__C_STOREPLIM -1   /* Maximum repeat count on store commands.  */
+#define EOBJ__C_PSCALILIM 16   /* Maximum p-sect alignment.  */
+
 struct vms_emh_lnm
 {
   struct vms_emh_common common;
index c75d33e..79ee3d6 100644 (file)
@@ -36,4 +36,6 @@ struct vms_esdf
   unsigned char name[31];
 };
 
+#define ESDF__B_NAMLNG         32
+
 #endif /* _VMS_ESDF_H */
diff --git a/include/vms/esdfm.h b/include/vms/esdfm.h
new file mode 100644 (file)
index 0000000..e00e44a
--- /dev/null
@@ -0,0 +1,49 @@
+/* Alpha VMS external format of Extended Symbol Definition for version Mask.
+
+   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_ESDFM_H
+#define _VMS_ESDFM_H
+
+struct vms_esdfm
+{
+  /* Entry type.  */
+  unsigned char gsdtyp[2];
+
+  /* Length of the entry.  */
+  unsigned char size[2];
+
+  /* Data type.  */
+  unsigned char datyp;
+
+  /* Pad for alignment.  */
+  unsigned char temp;
+
+  unsigned char flags[2];
+
+  unsigned char value[8];
+  unsigned char psindx[4];
+  unsigned char version_mask[4];
+  unsigned char namlng;
+  unsigned char name[31];
+};
+
+#endif /* _VMS_ESDFM_H */
diff --git a/include/vms/esdfv.h b/include/vms/esdfv.h
new file mode 100644 (file)
index 0000000..fae0dbc
--- /dev/null
@@ -0,0 +1,49 @@
+/* Alpha VMS external format of Extended Symbol Def for Vectored symbols.
+
+   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_ESDFV_H
+#define _VMS_ESDFV_H
+
+struct vms_esdfv
+{
+  /* Entry type.  */
+  unsigned char gsdtyp[2];
+
+  /* Length of the entry.  */
+  unsigned char size[2];
+
+  /* Data type.  */
+  unsigned char datyp;
+
+  /* Pad for alignment.  */
+  unsigned char temp;
+
+  unsigned char flags[2];
+
+  unsigned char value[8];
+  unsigned char psindx[4];
+  unsigned char vector[4];
+  unsigned char namlng;
+  unsigned char name[31];
+};
+
+#endif /* _VMS_ESDFV_H */
index 93d78c8..291250c 100644 (file)
@@ -31,4 +31,6 @@ struct vms_esrf
   unsigned char name[31];
 };
 
+#define ESRF__B_NAMLNG   8
+
 #endif /* _VMS_ESRF_H */
diff --git a/include/vms/internal.h b/include/vms/internal.h
new file mode 100644 (file)
index 0000000..1c8c472
--- /dev/null
@@ -0,0 +1,63 @@
+/* Alpha VMS internal format.
+
+   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_INTERNAL_H
+#define _VMS_INTERNAL_H
+
+struct vms_internal_eisd
+{
+  unsigned int majorid;                /* Version.  */
+  unsigned int minorid;
+  unsigned int eisdsize;       /* Size (in bytes) of this eisd.  */
+  unsigned int secsize;                /* Size (in bytes) of the section.  */
+  bfd_vma virt_addr;           /* Virtual address of the section.  */
+  unsigned int flags;          /* Flags.  */
+  unsigned int vbn;            /* Base virtual block number.  */
+  unsigned char pfc;           /* Page fault cluster.  */
+  unsigned char matchctl;      /* Linker match control.  */
+  unsigned char type;          /* Section type.  */
+};
+
+struct vms_internal_gbl_eisd
+{
+  struct vms_internal_eisd common;
+
+  unsigned int ident;          /* Ident for global section.  */
+  unsigned char gblnam[44];    /* Global name ascic.  */
+};
+
+struct vms_internal_eisd_map
+{
+  /* Next eisd in the list.  */
+  struct vms_internal_eisd_map *next;
+
+  /* Offset in output file.  */
+  file_ptr file_pos;
+
+  union
+  {
+    struct vms_internal_eisd eisd;
+    struct vms_internal_gbl_eisd gbl_eisd;
+  } u;
+};
+
+#endif /* _VMS_INTERNAL_H */
diff --git a/include/vms/lbr.h b/include/vms/lbr.h
new file mode 100644 (file)
index 0000000..768bc4c
--- /dev/null
@@ -0,0 +1,255 @@
+/* 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.  */
+
+#define LHD_SANEID_DCX 319232342
+#define LHD_SANEID3 233579905
+#define LHD_SANEID4 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.  */
+
+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.  */
+  unsigned char freidxblk[4];
+  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];
+};
+
+/* 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];
+  unsigned char keys[INDEXDEF__BLKSIZ];
+};
+
+/* Index keys.  */
+struct vms_idxdef
+{
+  unsigned char vbn[4];
+  unsigned char offset[2];
+
+  unsigned char keylen;
+  unsigned char keyname[256];
+};
+
+struct vms_idxdef2
+{
+  unsigned char vbn[4];
+
+  /* Offset from the start of the vbn, so minimum should be
+     DATA__DATA (ie 6).  */
+  unsigned char offset[2];
+
+  unsigned char keylen[2];
+  unsigned char fill_1;
+  unsigned char keyname[256];
+};
+
+#define RFADEF__C_INDEX 0xffff
+
+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
+
+/* 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];
+};
+
+#define MHD__C_MHDID 0xad      /* Value for id.  */
+#define MHD__C_USRDAT 16
+#define MHD__M_SELSRC 0x1
+#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 */
diff --git a/include/vms/prt.h b/include/vms/prt.h
new file mode 100644 (file)
index 0000000..8b8d27b
--- /dev/null
@@ -0,0 +1,43 @@
+/* Alpha VMS external format of Protection values.
+
+   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_PRT_H
+#define _VMS_PRT_H
+
+#define PRT__C_NA      0       /* No access.  */
+#define PRT__C_RESERVED 1
+#define PRT__C_KW      2       /* Kernel RW.  */
+#define PRT__C_KR      3       /* Kernel RO. */
+#define PRT__C_UW      4       /* User RW.  */
+#define PRT__C_EW      5       /* Executive RW.  */
+#define PRT__C_ERKW    6       /* Executive RO, Kernel RW.  */
+#define PRT__C_ER      7       /* Executive RO.  */
+#define PRT__C_SW      8       /* Supervisor RW.  */
+#define PRT__C_SREW    9       /* Supervisor RO, Executive RW.  */
+#define PRT__C_SRKW    10      /* Supervisor RO, Kernel RW.  */
+#define PRT__C_SR      11      /* Supervisor RO.  */
+#define PRT__C_URSW    12      /* User RO, Supervisor RW.  */
+#define PRT__C_UREW    13      /* User RO, Executive RW.  */
+#define PRT__C_URKW    14      /* User RO, Kernel RW.  */
+#define PRT__C_UR      15      /* User RO.  */
+
+#endif /* _VMS_PRT_H */
index f93d9dd..d1d9fae 100644 (file)
@@ -37,11 +37,15 @@ struct vms_shl
   /* Permanent shareable image context.  */
   unsigned char permctx[4];
 
+  /* Size of this structure.  */
   unsigned char size;
+
   unsigned char fill_1[2];
+
+  /* Flags.  */
   unsigned char flags;
 
-  /* Address of the image control block.  */
+  /* Address of the image control block (in memory).  */
   unsigned char icb[4];
 
   /* Image name.  ASCIC.  */