Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/gnu/dist/bfd This is going to be the new shared lib enabled ...



details:   https://anonhg.NetBSD.org/src/rev/80a3463ac713
branches:  trunk
changeset: 485757:80a3463ac713
user:      kristerw <kristerw%NetBSD.org@localhost>
date:      Thu May 04 20:01:56 2000 +0000

description:
This is going to be the new shared lib enabled a.out backend. It's
just a copy of the semi-generic a.out back-end (aoutx.h) for now.

diffstat:

 gnu/dist/bfd/aoutnbsd.h |  5668 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 5668 insertions(+), 0 deletions(-)

diffs (truncated from 5672 to 300 lines):

diff -r 214fa8e02e14 -r 80a3463ac713 gnu/dist/bfd/aoutnbsd.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/gnu/dist/bfd/aoutnbsd.h   Thu May 04 20:01:56 2000 +0000
@@ -0,0 +1,5668 @@
+/* BFD semi-generic back-end for a.out binaries.
+   Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 1998
+   Free Software Foundation, Inc.
+   Written by Cygnus Support.
+
+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.  */
+
+/*
+SECTION
+       a.out backends
+
+
+DESCRIPTION
+
+       BFD supports a number of different flavours of a.out format,
+       though the major differences are only the sizes of the
+       structures on disk, and the shape of the relocation
+       information.
+
+       The support is split into a basic support file @file{aoutx.h}
+       and other files which derive functions from the base. One
+       derivation file is @file{aoutf1.h} (for a.out flavour 1), and
+       adds to the basic a.out functions support for sun3, sun4, 386
+       and 29k a.out files, to create a target jump vector for a
+       specific target.
+
+       This information is further split out into more specific files
+       for each machine, including @file{sunos.c} for sun3 and sun4,
+       @file{newsos3.c} for the Sony NEWS, and @file{demo64.c} for a
+       demonstration of a 64 bit a.out format.
+
+       The base file @file{aoutx.h} defines general mechanisms for
+       reading and writing records to and from disk and various
+       other methods which BFD requires. It is included by
+       @file{aout32.c} and @file{aout64.c} to form the names
+       <<aout_32_swap_exec_header_in>>, <<aout_64_swap_exec_header_in>>, etc.
+
+       As an example, this is what goes on to make the back end for a
+       sun4, from @file{aout32.c}:
+
+|      #define ARCH_SIZE 32
+|      #include "aoutx.h"
+
+       Which exports names:
+
+|      ...
+|      aout_32_canonicalize_reloc
+|      aout_32_find_nearest_line
+|      aout_32_get_lineno
+|      aout_32_get_reloc_upper_bound
+|      ...
+
+       from @file{sunos.c}:
+
+|      #define TARGET_NAME "a.out-sunos-big"
+|      #define VECNAME    sunos_big_vec
+|      #include "aoutf1.h"
+
+       requires all the names from @file{aout32.c}, and produces the jump vector
+
+|      sunos_big_vec
+
+       The file @file{host-aout.c} is a special case.  It is for a large set
+       of hosts that use ``more or less standard'' a.out files, and
+       for which cross-debugging is not interesting.  It uses the
+       standard 32-bit a.out support routines, but determines the
+       file offsets and addresses of the text, data, and BSS
+       sections, the machine architecture and machine type, and the
+       entry point address, in a host-dependent manner.  Once these
+       values have been determined, generic code is used to handle
+       the  object file.
+
+       When porting it to run on a new system, you must supply:
+
+|        HOST_PAGE_SIZE
+|        HOST_SEGMENT_SIZE
+|        HOST_MACHINE_ARCH       (optional)
+|        HOST_MACHINE_MACHINE    (optional)
+|        HOST_TEXT_START_ADDR
+|        HOST_STACK_END_ADDR
+
+       in the file @file{../include/sys/h-@var{XXX}.h} (for your host).  These
+       values, plus the structures and macros defined in @file{a.out.h} on
+       your host system, will produce a BFD target that will access
+       ordinary a.out files on your host. To configure a new machine
+       to use @file{host-aout.c}, specify:
+
+|      TDEFAULTS = -DDEFAULT_VECTOR=host_aout_big_vec
+|      TDEPFILES= host-aout.o trad-core.o
+
+       in the @file{config/@var{XXX}.mt} file, and modify @file{configure.in}
+       to use the
+       @file{@var{XXX}.mt} file (by setting "<<bfd_target=XXX>>") when your
+       configuration is selected.
+
+*/
+
+/* Some assumptions:
+   * Any BFD with D_PAGED set is ZMAGIC, and vice versa.
+     Doesn't matter what the setting of WP_TEXT is on output, but it'll
+     get set on input.
+   * Any BFD with D_PAGED clear and WP_TEXT set is NMAGIC.
+   * Any BFD with both flags clear is OMAGIC.
+   (Just want to make these explicit, so the conditions tested in this
+   file make sense if you're more familiar with a.out than with BFD.)  */
+
+#define KEEPIT udata.i
+
+#include <string.h>            /* For strchr and friends */
+#include <ctype.h>
+#include "bfd.h"
+#include <sysdep.h>
+#include "bfdlink.h"
+
+#include "libaout.h"
+#include "libbfd.h"
+#include "aout/aout64.h"
+#include "aout/stab_gnu.h"
+#include "aout/ar.h"
+
+static boolean aout_get_external_symbols PARAMS ((bfd *));
+static boolean translate_from_native_sym_flags
+  PARAMS ((bfd *, aout_symbol_type *));
+static boolean translate_to_native_sym_flags
+  PARAMS ((bfd *, asymbol *, struct external_nlist *));
+static void adjust_o_magic PARAMS ((bfd *, struct internal_exec *));
+static void adjust_z_magic PARAMS ((bfd *, struct internal_exec *));
+static void adjust_n_magic PARAMS ((bfd *, struct internal_exec *));
+
+/*
+SUBSECTION
+       Relocations
+
+DESCRIPTION
+       The file @file{aoutx.h} provides for both the @emph{standard}
+       and @emph{extended} forms of a.out relocation records.
+
+       The standard records contain only an
+       address, a symbol index, and a type field. The extended records
+       (used on 29ks and sparcs) also have a full integer for an
+       addend.
+
+*/
+#ifndef CTOR_TABLE_RELOC_HOWTO
+#define CTOR_TABLE_RELOC_IDX 2
+#define CTOR_TABLE_RELOC_HOWTO(BFD) ((obj_reloc_entry_size(BFD) == RELOC_EXT_SIZE \
+            ? howto_table_ext : howto_table_std) \
+           + CTOR_TABLE_RELOC_IDX)
+#endif
+
+#ifndef MY_swap_std_reloc_in
+#define MY_swap_std_reloc_in NAME(aout,swap_std_reloc_in)
+#endif
+
+#ifndef MY_swap_std_reloc_out
+#define MY_swap_std_reloc_out NAME(aout,swap_std_reloc_out)
+#endif
+
+#ifndef MY_final_link_relocate
+#define MY_final_link_relocate _bfd_final_link_relocate
+#endif
+
+#ifndef MY_relocate_contents
+#define MY_relocate_contents _bfd_relocate_contents
+#endif
+
+#define howto_table_ext NAME(aout,ext_howto_table)
+#define howto_table_std NAME(aout,std_howto_table)
+
+reloc_howto_type howto_table_ext[] =
+{
+  /* type           rs   size bsz  pcrel bitpos ovrf                  sf name          part_inpl readmask setmask pcdone */
+  HOWTO(RELOC_8,      0,  0,   8,  false, 0, complain_overflow_bitfield,0,"8",        false, 0,0x000000ff, false),
+  HOWTO(RELOC_16,     0,  1,   16, false, 0, complain_overflow_bitfield,0,"16",       false, 0,0x0000ffff, false),
+  HOWTO(RELOC_32,     0,  2,   32, false, 0, complain_overflow_bitfield,0,"32",       false, 0,0xffffffff, false),
+  HOWTO(RELOC_DISP8,  0,  0,   8,  true,  0, complain_overflow_signed,0,"DISP8",       false, 0,0x000000ff, false),
+  HOWTO(RELOC_DISP16, 0,  1,   16, true,  0, complain_overflow_signed,0,"DISP16",      false, 0,0x0000ffff, false),
+  HOWTO(RELOC_DISP32, 0,  2,   32, true,  0, complain_overflow_signed,0,"DISP32",      false, 0,0xffffffff, false),
+  HOWTO(RELOC_WDISP30,2,  2,   30, true,  0, complain_overflow_signed,0,"WDISP30",     false, 0,0x3fffffff, false),
+  HOWTO(RELOC_WDISP22,2,  2,   22, true,  0, complain_overflow_signed,0,"WDISP22",     false, 0,0x003fffff, false),
+  HOWTO(RELOC_HI22,   10, 2,   22, false, 0, complain_overflow_bitfield,0,"HI22",      false, 0,0x003fffff, false),
+  HOWTO(RELOC_22,     0,  2,   22, false, 0, complain_overflow_bitfield,0,"22",       false, 0,0x003fffff, false),
+  HOWTO(RELOC_13,     0,  2,   13, false, 0, complain_overflow_bitfield,0,"13",       false, 0,0x00001fff, false),
+  HOWTO(RELOC_LO10,   0,  2,   10, false, 0, complain_overflow_dont,0,"LO10",     false, 0,0x000003ff, false),
+  HOWTO(RELOC_SFA_BASE,0, 2,   32, false, 0, complain_overflow_bitfield,0,"SFA_BASE", false, 0,0xffffffff, false),
+  HOWTO(RELOC_SFA_OFF13,0,2,   32, false, 0, complain_overflow_bitfield,0,"SFA_OFF13",false, 0,0xffffffff, false),
+  HOWTO(RELOC_BASE10, 0,  2,   10, false, 0, complain_overflow_dont,0,"BASE10",   false, 0,0x000003ff, false),
+  HOWTO(RELOC_BASE13, 0,  2,   13, false, 0, complain_overflow_bitfield,0,"BASE13",   false, 0,0x00001fff, false),
+  HOWTO(RELOC_BASE22, 10, 2,   22, false, 0, complain_overflow_bitfield,0,"BASE22",   false, 0,0x003fffff, false),
+  HOWTO(RELOC_PC10,   0,  2,   10, true,  0, complain_overflow_dont,0,"PC10",  false, 0,0x000003ff, true),
+  HOWTO(RELOC_PC22,   10,  2,  22, true,  0, complain_overflow_signed,0,"PC22", false, 0,0x003fffff, true),
+  HOWTO(RELOC_JMP_TBL,2,  2,   30, true,  0, complain_overflow_signed,0,"JMP_TBL",     false, 0,0x3fffffff, false),
+  HOWTO(RELOC_SEGOFF16,0, 2,   0,  false, 0, complain_overflow_bitfield,0,"SEGOFF16",  false, 0,0x00000000, false),
+  HOWTO(RELOC_GLOB_DAT,0, 2,   0,  false, 0, complain_overflow_bitfield,0,"GLOB_DAT",  false, 0,0x00000000, false),
+  HOWTO(RELOC_JMP_SLOT,0, 2,   0,  false, 0, complain_overflow_bitfield,0,"JMP_SLOT",  false, 0,0x00000000, false),
+  HOWTO(RELOC_RELATIVE,0, 2,   0,  false, 0, complain_overflow_bitfield,0,"RELATIVE",  false, 0,0x00000000, false),
+};
+
+/* Convert standard reloc records to "arelent" format (incl byte swap).  */
+
+reloc_howto_type howto_table_std[] = {
+  /* type              rs size bsz  pcrel bitpos ovrf                     sf name     part_inpl readmask  setmask    pcdone */
+HOWTO( 0,             0,  0,   8,  false, 0, complain_overflow_bitfield,0,"8",         true, 0x000000ff,0x000000ff, false),
+HOWTO( 1,             0,  1,   16, false, 0, complain_overflow_bitfield,0,"16",        true, 0x0000ffff,0x0000ffff, false),
+HOWTO( 2,             0,  2,   32, false, 0, complain_overflow_bitfield,0,"32",        true, 0xffffffff,0xffffffff, false),
+HOWTO( 3,             0,  4,   64, false, 0, complain_overflow_bitfield,0,"64",        true, 0xdeaddead,0xdeaddead, false),
+HOWTO( 4,             0,  0,   8,  true,  0, complain_overflow_signed,  0,"DISP8",     true, 0x000000ff,0x000000ff, false),
+HOWTO( 5,             0,  1,   16, true,  0, complain_overflow_signed,  0,"DISP16",    true, 0x0000ffff,0x0000ffff, false),
+HOWTO( 6,             0,  2,   32, true,  0, complain_overflow_signed,  0,"DISP32",    true, 0xffffffff,0xffffffff, false),
+HOWTO( 7,             0,  4,   64, true,  0, complain_overflow_signed,  0,"DISP64",    true, 0xfeedface,0xfeedface, false),
+HOWTO( 8,             0,  2,    0, false, 0, complain_overflow_bitfield,0,"GOT_REL",   false,         0,0x00000000, false),
+HOWTO( 9,             0,  1,   16, false, 0, complain_overflow_bitfield,0,"BASE16",    false,0xffffffff,0xffffffff, false),
+HOWTO(10,             0,  2,   32, false, 0, complain_overflow_bitfield,0,"BASE32",    false,0xffffffff,0xffffffff, false),
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+  HOWTO(16,           0,  2,    0, false, 0, complain_overflow_bitfield,0,"JMP_TABLE", false,         0,0x00000000, false),
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 },
+  HOWTO(32,           0,  2,    0, false, 0, complain_overflow_bitfield,0,"RELATIVE",  false,         0,0x00000000, false),
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+{ -1 },
+  HOWTO(40,           0,  2,    0, false, 0, complain_overflow_bitfield,0,"BASEREL",   false,         0,0x00000000, false),
+};
+
+#define TABLE_SIZE(TABLE)      (sizeof(TABLE)/sizeof(TABLE[0]))
+
+reloc_howto_type *
+NAME(aout,reloc_type_lookup) (abfd,code)
+     bfd *abfd;
+     bfd_reloc_code_real_type code;
+{
+#define EXT(i,j)       case i: return &howto_table_ext[j]
+#define STD(i,j)       case i: return &howto_table_std[j]
+  int ext = obj_reloc_entry_size (abfd) == RELOC_EXT_SIZE;
+  if (code == BFD_RELOC_CTOR)
+    switch (bfd_get_arch_info (abfd)->bits_per_address)
+      {
+      case 32:
+       code = BFD_RELOC_32;
+       break;
+      case 64:
+       code = BFD_RELOC_64;
+       break;
+      }
+  if (ext)
+    switch (code)
+      {
+       EXT (BFD_RELOC_32, 2);
+       EXT (BFD_RELOC_HI22, 8);
+       EXT (BFD_RELOC_LO10, 11);
+       EXT (BFD_RELOC_32_PCREL_S2, 6);
+       EXT (BFD_RELOC_SPARC_WDISP22, 7);
+       EXT (BFD_RELOC_SPARC13, 10);
+       EXT (BFD_RELOC_SPARC_GOT10, 14);
+       EXT (BFD_RELOC_SPARC_BASE13, 15);
+       EXT (BFD_RELOC_SPARC_GOT13, 15);
+       EXT (BFD_RELOC_SPARC_GOT22, 16);
+       EXT (BFD_RELOC_SPARC_PC10, 17);
+       EXT (BFD_RELOC_SPARC_PC22, 18);
+       EXT (BFD_RELOC_SPARC_WPLT30, 19);
+      default: return (reloc_howto_type *) NULL;
+      }
+  else
+    /* std relocs */
+    switch (code)
+      {
+       STD (BFD_RELOC_16, 1);
+       STD (BFD_RELOC_32, 2);



Home | Main Index | Thread Index | Old Index