Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/gnu Add rudimentry VAX COFF support. enough so objdump, siz...
details: https://anonhg.NetBSD.org/src/rev/df0e67adb6c2
branches: trunk
changeset: 480397:df0e67adb6c2
user: matt <matt%NetBSD.org@localhost>
date: Tue Jan 11 05:48:27 2000 +0000
description:
Add rudimentry VAX COFF support. enough so objdump, size, nm, etc. are happy
but no near enough for gas or ld.
diffstat:
gnu/dist/bfd/coff-vax.c | 109 +++++++++++++++++++++++
gnu/dist/bfd/coffcode.h | 22 ++++
gnu/dist/bfd/config.bfd | 5 +
gnu/dist/bfd/configure | 1 +
gnu/dist/bfd/targets.c | 2 +
gnu/dist/include/coff/vax.h | 205 ++++++++++++++++++++++++++++++++++++++++++++
gnu/lib/libbfd/Makefile | 6 +-
7 files changed, 347 insertions(+), 3 deletions(-)
diffs (truncated from 433 to 300 lines):
diff -r ea4f4ab87bc5 -r df0e67adb6c2 gnu/dist/bfd/coff-vax.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gnu/dist/bfd/coff-vax.c Tue Jan 11 05:48:27 2000 +0000
@@ -0,0 +1,109 @@
+/* BFD back-end for VAX COFF files.
+ Copyright (C) 1992, 93, 94, 95, 1997 Free Software Foundation, Inc.
+ Contributed by Brendan Kehoe (brendan%cs.widener.edu@localhost).
+
+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 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "bfd.h"
+#include "sysdep.h"
+#include "libbfd.h"
+#include "coff/vax.h"
+#include "coff/internal.h"
+#include "libcoff.h"
+
+#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (3)
+
+static reloc_howto_type howto_table[] =
+{
+ {0},
+ {1},
+ {2},
+ {3},
+ {4},
+ {5},
+ HOWTO(R_DIR32, 0, 2, 32, false, 0,complain_overflow_bitfield, 0, "dir32", true, 0xffffffff,0xffffffff, false),
+ {7},
+ {010},
+ {011},
+ {012},
+ {013},
+ {014},
+ {015},
+ {016},
+ HOWTO(R_RELBYTE, 0, 0, 8, false, 0, complain_overflow_bitfield, 0, "8", true, 0x000000ff,0x000000ff, false),
+ HOWTO(R_RELWORD, 0, 1, 16, false, 0, complain_overflow_bitfield, 0, "16", true, 0x0000ffff,0x0000ffff, false),
+ HOWTO(R_RELLONG, 0, 2, 32, false, 0, complain_overflow_bitfield, 0, "32", true, 0xffffffff,0xffffffff, false),
+ HOWTO(R_PCRBYTE, 0, 0, 8, true, 0, complain_overflow_signed, 0, "DISP8", true, 0x000000ff,0x000000ff, false),
+ HOWTO(R_PCRWORD, 0, 1, 16, true, 0, complain_overflow_signed, 0, "DISP16", true, 0x0000ffff,0x0000ffff, false),
+ HOWTO(R_PCRLONG, 0, 2, 32, true, 0, complain_overflow_signed, 0, "DISP32", true, 0xffffffff,0xffffffff, false),
+};
+
+/* Turn a howto into a reloc nunmber */
+
+#define SELECT_RELOC(x,howto) { x.r_type = howto->type; }
+#define BADMAG(x) VAXBADMAG(x)
+#define VAX 1
+
+#define RTYPE2HOWTO(cache_ptr, dst) \
+ (cache_ptr)->howto = howto_table + (dst)->r_type;
+
+#include "coffcode.h"
+
+#define coff_write_armap bsd_write_armap
+
+const bfd_target vaxcoff_vec =
+{
+ "coff-vax", /* name */
+ bfd_target_coff_flavour,
+ BFD_ENDIAN_LITTLE, /* data byte order is big */
+ BFD_ENDIAN_BIG, /* header byte order is big */
+
+ (HAS_RELOC | EXEC_P | /* object flags */
+ HAS_LINENO | HAS_DEBUG |
+ HAS_SYMS | HAS_LOCALS | WP_TEXT),
+
+ (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
+ 0, /* leading underscore */
+ '/', /* ar_pad_char */
+ 15, /* ar_max_namelen */
+
+ bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+ bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+ bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
+ bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+ bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+ bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
+
+ {_bfd_dummy_target, coff_object_p, /* bfd_check_format */
+ bfd_generic_archive_p, _bfd_dummy_target},
+ {bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format */
+ bfd_false},
+ {bfd_false, coff_write_object_contents, /* bfd_write_contents */
+ _bfd_write_archive_contents, bfd_false},
+
+ BFD_JUMP_TABLE_GENERIC (coff),
+ BFD_JUMP_TABLE_COPY (coff),
+ BFD_JUMP_TABLE_CORE (_bfd_nocore),
+ BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
+ BFD_JUMP_TABLE_SYMBOLS (coff),
+ BFD_JUMP_TABLE_RELOCS (coff),
+ BFD_JUMP_TABLE_WRITE (coff),
+ BFD_JUMP_TABLE_LINK (coff),
+ BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
+
+ COFF_SWAP_TABLE,
+};
diff -r ea4f4ab87bc5 -r df0e67adb6c2 gnu/dist/bfd/coffcode.h
--- a/gnu/dist/bfd/coffcode.h Tue Jan 11 03:41:15 2000 +0000
+++ b/gnu/dist/bfd/coffcode.h Tue Jan 11 05:48:27 2000 +0000
@@ -1554,6 +1554,14 @@
break;
#endif
+#ifdef VAXROMAGIC
+ case VAXRWMAGIC:
+ case VAXROMAGIC:
+ arch = bfd_arch_vax;
+ machine = 0;
+ break;
+#endif
+
#ifdef WE32KMAGIC
case WE32KMAGIC:
arch = bfd_arch_we32k;
@@ -2126,6 +2134,13 @@
break;
#endif
+#ifdef VAXRWMAGIC
+ case bfd_arch_vax:
+ *magicp = (bfd_get_file_flags(abfd) & WP_TEXT) ? VAXROMAGIC : VAXRWMAGIC;
+ return true;
+ break;
+#endif
+
#ifdef WE32KMAGIC
case bfd_arch_we32k:
*magicp = WE32KMAGIC;
@@ -2957,6 +2972,13 @@
internal_a.magic = ZMAGIC;
#endif
+#if defined(VAX)
+#define __A_MAGIC_SET__
+ internal_a.magic = (abfd->flags & D_PAGED) ? VAX_AOUTHDR_ZMAGIC :
+ (abfd->flags & WP_TEXT) ? VAX_AOUTHDR_NMAGIC :
+ VAX_AOUTHDR_OMAGIC;
+#endif
+
#if defined(PPC_PE)
#define __A_MAGIC_SET__
internal_a.magic = IMAGE_NT_OPTIONAL_HDR_MAGIC;
diff -r ea4f4ab87bc5 -r df0e67adb6c2 gnu/dist/bfd/config.bfd
--- a/gnu/dist/bfd/config.bfd Tue Jan 11 03:41:15 2000 +0000
+++ b/gnu/dist/bfd/config.bfd Tue Jan 11 05:48:27 2000 +0000
@@ -607,6 +607,11 @@
targ_underscore=yes
;;
+ vax-*-sysv3)
+ targ_defvec=vaxcoff_vec
+ targ_underscore=yes
+ ;;
+
we32k-*-*)
targ_defvec=we32kcoff_vec
;;
diff -r ea4f4ab87bc5 -r df0e67adb6c2 gnu/dist/bfd/configure
--- a/gnu/dist/bfd/configure Tue Jan 11 03:41:15 2000 +0000
+++ b/gnu/dist/bfd/configure Tue Jan 11 05:48:27 2000 +0000
@@ -2829,6 +2829,7 @@
tekhex_vec) tb="$tb tekhex.lo" ;;
tic30_aout_vec) tb="$tb aout-tic30.lo" ;;
tic30_coff_vec) tb="$tb coff-tic30.lo" ;;
+ vaxcoff_vec) tb="$tb coff-vax.lo" ;;
we32kcoff_vec) tb="$tb coff-we32k.lo" ;;
z8kcoff_vec) tb="$tb coff-z8k.lo reloc16.lo" ;;
w65_vec) tb="$tb coff-w65.lo reloc16.lo" ;;
diff -r ea4f4ab87bc5 -r df0e67adb6c2 gnu/dist/bfd/targets.c
--- a/gnu/dist/bfd/targets.c Tue Jan 11 03:41:15 2000 +0000
+++ b/gnu/dist/bfd/targets.c Tue Jan 11 05:48:27 2000 +0000
@@ -587,6 +587,7 @@
extern const bfd_target tekhex_vec;
extern const bfd_target tic30_aout_vec;
extern const bfd_target tic30_coff_vec;
+extern const bfd_target vaxcoff_vec;
extern const bfd_target vaxnetbsd_vec;
extern const bfd_target host_aout_vec;
extern const bfd_target versados_vec;
@@ -800,6 +801,7 @@
&tekhex_vec,
&tic30_aout_vec,
&tic30_coff_vec,
+ &vaxcoff_vec,
&vaxnetbsd_vec,
&versados_vec,
&we32kcoff_vec,
diff -r ea4f4ab87bc5 -r df0e67adb6c2 gnu/dist/include/coff/vax.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gnu/dist/include/coff/vax.h Tue Jan 11 05:48:27 2000 +0000
@@ -0,0 +1,205 @@
+/*** coff information for vax */
+
+/********************** FILE HEADER **********************/
+
+struct external_filehdr {
+ char f_magic[2]; /* magic number */
+ char f_nscns[2]; /* number of sections */
+ char f_timdat[4]; /* time & date stamp */
+ char f_symptr[4]; /* file pointer to symtab */
+ char f_nsyms[4]; /* number of symtab entries */
+ char f_opthdr[2]; /* sizeof(optional hdr) */
+ char f_flags[2]; /* flags */
+};
+
+
+/* Bits for f_flags:
+ * F_RELFLG relocation info stripped from file
+ * F_EXEC file is executable (no unresolved external references)
+ * F_LNNO line numbers stripped from file
+ * F_LSYMS local symbols stripped from file
+ */
+
+#define F_RELFLG (0x0001)
+#define F_EXEC (0x0002)
+#define F_LNNO (0x0004)
+#define F_LSYMS (0x0008)
+
+#define VAX_AOUTHDR_OMAGIC 0404 /* object files, eg as output */
+#define VAX_AOUTHDR_NMAGIC 0410 /* read only text output */
+#define VAX_AOUTHDR_ZMAGIC 0413 /* demand load format, eg normal ld output */
+#define VAX_AOUTHDR_STMAGIC 0401 /* target shlib */
+#define VAX_AOUTHDR_SHMAGIC 0443 /* host shlib */
+
+#define VAXRWMAGIC 0570 /* vax read-write */
+#define VAXROMAGIC 0575 /* vax read-only */
+#define VAXBADMAG(x) (((x).f_magic != VAXROMAGIC) \
+ && ((x).f_magic != VAXRWMAGIC))
+
+#define FILHDR struct external_filehdr
+#define FILHSZ 20
+
+
+/********************** AOUT "OPTIONAL HEADER" **********************/
+
+
+typedef struct
+{
+ char magic[2]; /* type of file */
+ char vstamp[2]; /* version stamp */
+ char tsize[4]; /* text size in bytes, padded to FW bdry*/
+ char dsize[4]; /* initialized data " " */
+ char bsize[4]; /* uninitialized data " " */
+ char entry[4]; /* entry pt. */
+ char text_start[4]; /* base of text used for this file */
+ char data_start[4]; /* base of data used for this file */
+}
+AOUTHDR;
+
+#define AOUTSZ 28
+#define AOUTHDRSZ 28
+
+/********************** SECTION HEADER **********************/
+
+
+struct external_scnhdr {
+ char s_name[8]; /* section name */
+ char s_paddr[4]; /* physical address, aliased s_nlib */
+ char s_vaddr[4]; /* virtual address */
+ char s_size[4]; /* section size */
+ char s_scnptr[4]; /* file ptr to raw data for section */
+ char s_relptr[4]; /* file ptr to relocation */
+ char s_lnnoptr[4]; /* file ptr to line numbers */
+ char s_nreloc[2]; /* number of relocation entries */
+ char s_nlnno[2]; /* number of line number entries*/
+ char s_flags[4]; /* flags */
+};
+
+#define SCNHDR struct external_scnhdr
+#define SCNHSZ 40
+
+/*
+ * names of "special" sections
+ */
+#define _TEXT ".text"
+#define _DATA ".data"
+#define _BSS ".bss"
+#define _TV ".tv"
+#define _INIT ".init"
+#define _FINI ".fini"
+
+/********************** LINE NUMBERS **********************/
+
Home |
Main Index |
Thread Index |
Old Index