mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-24 12:35:55 +08:00
bfd/
2010-05-17 Tristan Gingold <gingold@adacore.com> * vms-alpha.c: Include esgps.h and eidc.h. (_bfd_vms_slurp_egsd): Ignore SPSC and IDC sub-records. (evax_bfd_print_egsd_flags): New function, extracted from ... (evax_bfd_print_egsd): ..., calls evax_bfd_print_egsd_flags. Handles EGSD__C_SPSC and EGSD__C_IDC. include/vms: 2010-05-17 Tristan Gingold <gingold@adacore.com> * eidc.h: New file. * esgps.h: New file.
This commit is contained in:
parent
070abf125e
commit
9a1b4480b4
@ -1,3 +1,11 @@
|
||||
2010-05-17 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* vms-alpha.c: Include esgps.h and eidc.h.
|
||||
(_bfd_vms_slurp_egsd): Ignore SPSC and IDC sub-records.
|
||||
(evax_bfd_print_egsd_flags): New function, extracted from evax_bfd_print_egsd.
|
||||
(evax_bfd_print_egsd): Calls evax_bfd_print_egsd_flags. Handles
|
||||
EGSD__C_SPSC and EGSD__C_IDC.
|
||||
|
||||
2010-05-14 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* vms-alpha.c (alpha_vms_object_p): Accept header size of 0.
|
||||
|
113
bfd/vms-alpha.c
113
bfd/vms-alpha.c
@ -51,6 +51,7 @@
|
||||
#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"
|
||||
@ -63,6 +64,7 @@
|
||||
#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"
|
||||
@ -1240,7 +1242,10 @@ _bfd_vms_slurp_egsd (bfd * abfd)
|
||||
}
|
||||
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:
|
||||
@ -5628,6 +5633,37 @@ exav_bfd_print_egsy_flags (unsigned int flags, FILE *file)
|
||||
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)
|
||||
{
|
||||
@ -5661,32 +5697,7 @@ 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);
|
||||
@ -5694,6 +5705,27 @@ evax_bfd_print_egsd (FILE *file, unsigned char *rec, unsigned int rec_len)
|
||||
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;
|
||||
@ -5731,6 +5763,33 @@ evax_bfd_print_egsd (FILE *file, unsigned char *rec, unsigned int rec_len)
|
||||
}
|
||||
}
|
||||
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;
|
||||
|
@ -1,3 +1,8 @@
|
||||
2010-05-17 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* eidc.h: New file.
|
||||
* esgps.h: New file.
|
||||
|
||||
2010-05-03 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* dmt.h: Improve comments.
|
||||
|
49
include/vms/eidc.h
Normal file
49
include/vms/eidc.h
Normal file
@ -0,0 +1,49 @@
|
||||
/* 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 */
|
72
include/vms/esgps.h
Normal file
72
include/vms/esgps.h
Normal file
@ -0,0 +1,72 @@
|
||||
/* 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 */
|
Loading…
Reference in New Issue
Block a user