#include "vms/eobjrec.h"
#include "vms/egsd.h"
#include "vms/egps.h"
+#include "vms/esgps.h"
#include "vms/eeom.h"
#include "vms/emh.h"
#include "vms/eiaf.h"
#include "vms/esdfv.h"
#include "vms/esrf.h"
#include "vms/egst.h"
+#include "vms/eidc.h"
#include "vms/dsc.h"
#include "vms/prt.h"
#include "vms/internal.h"
}
break;
- case EGSD__C_IDC:
+ case EGSD__C_SPSC:
+ case EGSD__C_IDC:
+ /* Currently ignored. */
+ break;
case EGSD__C_SYMM:
case EGSD__C_SYMV:
default:
fputs (_(" QVAL"), file);
}
+static void
+evax_bfd_print_egsd_flags (FILE *file, unsigned int flags)
+{
+ if (flags & EGPS__V_PIC)
+ fputs (_(" PIC"), file);
+ if (flags & EGPS__V_LIB)
+ fputs (_(" LIB"), file);
+ if (flags & EGPS__V_OVR)
+ fputs (_(" OVR"), file);
+ if (flags & EGPS__V_REL)
+ fputs (_(" REL"), file);
+ if (flags & EGPS__V_GBL)
+ fputs (_(" GBL"), file);
+ if (flags & EGPS__V_SHR)
+ fputs (_(" SHR"), file);
+ if (flags & EGPS__V_EXE)
+ fputs (_(" EXE"), file);
+ if (flags & EGPS__V_RD)
+ fputs (_(" RD"), file);
+ if (flags & EGPS__V_WRT)
+ fputs (_(" WRT"), file);
+ if (flags & EGPS__V_VEC)
+ fputs (_(" VEC"), file);
+ if (flags & EGPS__V_NOMOD)
+ fputs (_(" NOMOD"), file);
+ if (flags & EGPS__V_COM)
+ fputs (_(" COM"), file);
+ if (flags & EGPS__V_ALLOC_64BIT)
+ fputs (_(" 64B"), file);
+}
+
static void
evax_bfd_print_egsd (FILE *file, unsigned char *rec, unsigned int rec_len)
{
fprintf (file, _("PSC - Program section definition\n"));
fprintf (file, _(" alignment : 2**%u\n"), egps->align);
fprintf (file, _(" flags : 0x%04x"), flags);
- if (flags & EGPS__V_PIC)
- fputs (_(" PIC"), file);
- if (flags & EGPS__V_LIB)
- fputs (_(" LIB"), file);
- if (flags & EGPS__V_OVR)
- fputs (_(" OVR"), file);
- if (flags & EGPS__V_REL)
- fputs (_(" REL"), file);
- if (flags & EGPS__V_GBL)
- fputs (_(" GBL"), file);
- if (flags & EGPS__V_SHR)
- fputs (_(" SHR"), file);
- if (flags & EGPS__V_EXE)
- fputs (_(" EXE"), file);
- if (flags & EGPS__V_RD)
- fputs (_(" RD"), file);
- if (flags & EGPS__V_WRT)
- fputs (_(" WRT"), file);
- if (flags & EGPS__V_VEC)
- fputs (_(" VEC"), file);
- if (flags & EGPS__V_NOMOD)
- fputs (_(" NOMOD"), file);
- if (flags & EGPS__V_COM)
- fputs (_(" COM"), file);
- if (flags & EGPS__V_ALLOC_64BIT)
- fputs (_(" 64B"), file);
+ evax_bfd_print_egsd_flags (file, flags);
fputc ('\n', file);
l = bfd_getl32 (egps->alloc);
fprintf (file, _(" alloc (len): %u (0x%08x)\n"), l, l);
egps->namlng, egps->name);
}
break;
+ case EGSD__C_SPSC:
+ {
+ struct vms_esgps *esgps = (struct vms_esgps *)e;
+ unsigned int flags = bfd_getl16 (esgps->flags);
+ unsigned int l;
+
+ fprintf (file, _("SPSC - Shared Image Program section def\n"));
+ fprintf (file, _(" alignment : 2**%u\n"), esgps->align);
+ fprintf (file, _(" flags : 0x%04x"), flags);
+ evax_bfd_print_egsd_flags (file, flags);
+ fputc ('\n', file);
+ l = bfd_getl32 (esgps->alloc);
+ fprintf (file, _(" alloc (len) : %u (0x%08x)\n"), l, l);
+ fprintf (file, _(" image offset : 0x%08x\n"),
+ (unsigned int)bfd_getl32 (esgps->base));
+ fprintf (file, _(" symvec offset : 0x%08x\n"),
+ (unsigned int)bfd_getl32 (esgps->value));
+ fprintf (file, _(" name : %.*s\n"),
+ esgps->namlng, esgps->name);
+ }
+ break;
case EGSD__C_SYM:
{
struct vms_egsy *egsy = (struct vms_egsy *)e;
}
}
break;
+ case EGSD__C_IDC:
+ {
+ struct vms_eidc *eidc = (struct vms_eidc *)e;
+ unsigned int flags = bfd_getl32 (eidc->flags);
+ unsigned char *p;
+
+ fprintf (file, _("IDC - Ident Consistency check\n"));
+ fprintf (file, _(" flags : 0x%08x"), flags);
+ if (flags & EIDC__V_BINIDENT)
+ fputs (" BINDENT", file);
+ fputc ('\n', file);
+ fprintf (file, _(" id match : %x\n"),
+ (flags >> EIDC__V_IDMATCH_SH) & EIDC__V_IDMATCH_MASK);
+ fprintf (file, _(" error severity: %x\n"),
+ (flags >> EIDC__V_ERRSEV_SH) & EIDC__V_ERRSEV_MASK);
+ p = eidc->name;
+ fprintf (file, _(" entity name : %.*s\n"), p[0], p + 1);
+ p += 1 + p[0];
+ fprintf (file, _(" object name : %.*s\n"), p[0], p + 1);
+ p += 1 + p[0];
+ if (flags & EIDC__V_BINIDENT)
+ fprintf (file, _(" binary ident : 0x%08x\n"),
+ (unsigned)bfd_getl32 (p + 1));
+ else
+ fprintf (file, _(" ascii ident : %.*s\n"), p[0], p + 1);
+ }
+ break;
case EGSD__C_SYMG:
{
struct vms_egst *egst = (struct vms_egst *)e;
--- /dev/null
+/* Alpha VMS external format of Ident Consistency check.
+
+ 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_EIDC_H
+#define _VMS_EIDC_H
+
+struct vms_eidc
+{
+ /* Record type. */
+ unsigned char rectyp[2];
+
+ /* Record size. */
+ unsigned char recsiz[2];
+
+ unsigned char flags[4];
+
+ /* Entity name (ASCIC). */
+ /* Object name (ASCIC). */
+ /* Ident string (ASCIC or binary BINIDENT set). */
+ unsigned char name[1];
+};
+
+/* Fields of flags. */
+#define EIDC__V_BINIDENT (1 << 0) /* Ident is a longword. */
+#define EIDC__V_IDMATCH_SH 1 /* Ident match control. */
+#define EIDC__V_IDMATCH_MASK 3
+#define EIDC__V_ERRSEV_SH 3 /* Error severity. */
+#define EIDC__V_ERRSEV_MASK 7
+
+#endif /* _VMS_EIDC_H */
--- /dev/null
+/* Alpha VMS external format of Extended Shared Program Section Definition.
+
+ 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_ESGPS_H
+#define _VMS_ESGPS_H
+
+struct vms_esgps
+{
+ /* Entry type. */
+ unsigned char gsdtyp[2];
+
+ /* Length of the entry. */
+ unsigned char gsdsiz[2];
+
+ /* Psect alignment. */
+ unsigned char align;
+
+ /* Pad for alignment. */
+ unsigned char temp;
+
+ unsigned char flags[2];
+
+ /* Length of this contribution. */
+ unsigned char alloc[4];
+
+ /* Image offset of the psect. */
+ unsigned char base[4];
+
+ /* Symbol vector offset. */
+ unsigned char value[8];
+
+ /* Name. */
+ unsigned char namlng;
+ unsigned char name[31];
+};
+
+/* These are the same as EGPS flags. */
+
+#define ESGPS__V_PIC (1 << 0) /* Not meaningful. */
+#define ESGPS__V_LIB (1 << 1) /* Defined in a shareable image. */
+#define ESGPS__V_OVR (1 << 2) /* Overlaid contribution. */
+#define ESGPS__V_REL (1 << 3) /* Relocatable. */
+#define ESGPS__V_GBL (1 << 4) /* Global. */
+#define ESGPS__V_SHR (1 << 5) /* Shareable. */
+#define ESGPS__V_EXE (1 << 6) /* Executable. */
+#define ESGPS__V_RD (1 << 7) /* Readable. */
+#define ESGPS__V_WRT (1 << 8) /* Writable. */
+#define ESGPS__V_VEC (1 << 9) /* Change mode dispatch or message vectors. */
+#define ESGPS__V_NOMOD (1 << 10) /* Demand-zero. */
+#define ESGPS__V_COM (1 << 11) /* Conditional storage. */
+#define ESGPS__V_ALLOC_64BIT (1 << 12) /* Allocated in 64-bit space. */
+
+#endif /* _VMS_ESGPS_H */