* Many files: change all bfd_target vectors to be const. Change
authorIan Lance Taylor <ian@airs.com>
Mon, 20 Jun 1994 21:55:45 +0000 (21:55 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 20 Jun 1994 21:55:45 +0000 (21:55 +0000)
all uses of bfd_target * to be const bfd_target *.  Change
bfd_target_vector and bfd_default_vector arrays to be const
bfd_target * const *.

29 files changed:
bfd/ChangeLog
bfd/aout-encap.c
bfd/aoutx.h
bfd/archive.c
bfd/bfd-in2.h
bfd/bout.c
bfd/coff-a29k.c
bfd/coff-alpha.c
bfd/coff-go32.c [new file with mode: 0644]
bfd/coff-h8300.c
bfd/coff-h8500.c
bfd/coff-mips.c
bfd/coff-sh.c
bfd/coff-z8k.c
bfd/coffgen.c
bfd/ecoff.c
bfd/elf32-target.h
bfd/elf64-target.h
bfd/elfcode.h
bfd/i386lynx.c
bfd/ieee.c
bfd/libelf.h
bfd/m68klynx.c
bfd/mipsbsd.c
bfd/nlmcode.h
bfd/oasys.c
bfd/som.c
bfd/srec.c
bfd/tekhex.c

index bce328d8ddeda23736400c6280698c2e6441602d..a47c441787731cedbb58219aaf7ddb1545c59ff8 100644 (file)
@@ -1,5 +1,10 @@
 Mon Jun 20 11:06:27 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)
 
+       * Many files: change all bfd_target vectors to be const.  Change
+       all uses of bfd_target * to be const bfd_target *.  Change
+       bfd_target_vector and bfd_default_vector arrays to be const
+       bfd_target * const *.
+
        * ecoff.c, libecoff.h, ecoffswap.h, coff-alpha.c, coff-mips.c,
        elf32-mips.c: Renamed all externally visible ECOFF routines which
        are local to BFD to start with _bfd_ecoff instead of just ecoff.
index 56c19369ff80b2a438f28d5aafe7796c11e67045..6c3772e0bbdb5aa0db972caef36ca112f3209165 100644 (file)
@@ -35,9 +35,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "aout/ar.h"
 #include "libaout.h"           /* BFD a.out internal data structures */
 
-bfd_target *encap_real_callback ();
+const bfd_target *encap_real_callback ();
 
-bfd_target *
+const bfd_target *
 encap_object_p (abfd)
      bfd *abfd;
 {
@@ -79,7 +79,7 @@ encap_object_p (abfd)
 }
 
 /* Finish up the reading of a encapsulated-coff a.out file header */
-bfd_target *
+const bfd_target *
 encap_real_callback (abfd)
      bfd *abfd;
 {
index da0fa748f9bd515450412859ceb95ec838894d62..7239ac944562fcfdff16b97b5a042956d5214393 100644 (file)
@@ -383,9 +383,9 @@ FUNCTION
        aout_@var{size}_some_aout_object_p
 
 SYNOPSIS
-       bfd_target *aout_@var{size}_some_aout_object_p
+       const bfd_target *aout_@var{size}_some_aout_object_p
         (bfd *abfd,
-         bfd_target *(*callback_to_real_object_p)());
+         const bfd_target *(*callback_to_real_object_p)());
 
 DESCRIPTION
        Some a.out variant thinks that the file open in @var{abfd}
@@ -395,14 +395,14 @@ DESCRIPTION
        handle any last-minute setup.
 */
 
-bfd_target *
+const bfd_target *
 NAME(aout,some_aout_object_p) (abfd, execp, callback_to_real_object_p)
      bfd *abfd;
      struct internal_exec *execp;
-     bfd_target *(*callback_to_real_object_p) PARAMS ((bfd *));
+     const bfd_target *(*callback_to_real_object_p) PARAMS ((bfd *));
 {
   struct aout_data_struct *rawptr, *oldrawptr;
-  bfd_target *result;
+  const bfd_target *result;
 
   rawptr = (struct aout_data_struct  *) bfd_zalloc (abfd, sizeof (struct aout_data_struct ));
   if (rawptr == NULL) {
index ce79af472200af041e767c49383f71c6cd786d83..9573994dc6d047c43fc9ecdc7f5d5bbd91f8b203 100644 (file)
@@ -627,7 +627,7 @@ bfd_generic_openr_next_archived_file (archive, last_file)
 }
 
 
-bfd_target *
+const bfd_target *
 bfd_generic_archive_p (abfd)
      bfd *abfd;
 {
index 80c45d74286823c54271085afe0e709268bbef8b..62ee6dc51e02430315af3c2c276f952bcafdf425 100644 (file)
@@ -1578,7 +1578,7 @@ struct _bfd
     CONST char *filename;                
 
      /* A pointer to the target jump table.             */
-    struct bfd_target *xvec;
+    const struct bfd_target *xvec;
 
      /* To avoid dragging too many header files into every file that
        includes `<<bfd.h>>', IOSTREAM has been declared as a "char
@@ -1938,7 +1938,7 @@ typedef struct bfd_target
   bfd_vma      (*bfd_h_getx16) PARAMS ((const bfd_byte *));
   bfd_signed_vma (*bfd_h_getx_signed_16) PARAMS ((const bfd_byte *));
   void         (*bfd_h_putx16) PARAMS ((bfd_vma, bfd_byte *));
-  struct bfd_target * (*_bfd_check_format[bfd_type_end]) PARAMS ((bfd *));
+  const struct bfd_target *(*_bfd_check_format[bfd_type_end]) PARAMS ((bfd *));
   boolean             (*_bfd_set_format[bfd_type_end]) PARAMS ((bfd *));
   boolean             (*_bfd_write_contents[bfd_type_end]) PARAMS ((bfd *));
 
@@ -2106,10 +2106,10 @@ CAT(NAME,_canonicalize_dynamic_reloc)
 
  PTR backend_data;
 } bfd_target;
-bfd_target *
+const bfd_target *
 bfd_find_target PARAMS ((CONST char *target_name, bfd *abfd));
 
-CONST char **
+const char **
 bfd_target_list PARAMS ((void));
 
 boolean 
index fcb5265ee787cb9e497b37bc96b7e1f9b3cc085b..314d3b4292102f80ecc3bb4576a3ea2ca97ae0c2 100644 (file)
@@ -35,7 +35,7 @@ static int aligncode PARAMS ((bfd *abfd, asection *input_section,
 static void perform_slip PARAMS ((bfd *abfd, unsigned int slip,
                                  asection *input_section, bfd_vma value));
 static boolean b_out_squirt_out_relocs PARAMS ((bfd *abfd, asection *section));
-static bfd_target *b_out_callback PARAMS ((bfd *));
+static const bfd_target *b_out_callback PARAMS ((bfd *));
 static bfd_reloc_status_type calljx_callback
   PARAMS ((bfd *, struct bfd_link_info *, arelent *, PTR src, PTR dst,
           asection *));
@@ -114,7 +114,7 @@ bout_swap_exec_header_out (abfd, execp, raw_bytes)
 }
 
 
-static bfd_target *
+static const bfd_target *
 b_out_object_p (abfd)
      bfd *abfd;
 {
@@ -143,7 +143,7 @@ b_out_object_p (abfd)
 /* Finish up the opening of a b.out file for reading.  Fill in all the
    fields that are not handled by common code.  */
 
-static bfd_target *
+static const bfd_target *
 b_out_callback (abfd)
      bfd *abfd;
 {
@@ -212,15 +212,10 @@ b_out_mkobject (abfd)
   abfd->tdata.bout_data = rawptr;
   exec_hdr (abfd) = &rawptr->e;
 
-  /* For simplicity's sake we just make all the sections right here. */
   obj_textsec (abfd) = (asection *)NULL;
   obj_datasec (abfd) = (asection *)NULL;
   obj_bsssec (abfd) = (asection *)NULL;
 
-  bfd_make_section (abfd, ".text");
-  bfd_make_section (abfd, ".data");
-  bfd_make_section (abfd, ".bss");
-
   return true;
 }
 
@@ -230,6 +225,9 @@ b_out_write_object_contents (abfd)
 {
   struct external_exec swapped_hdr;
 
+  if (! aout_32_make_sections (abfd))
+    return false;
+
   exec_hdr (abfd)->a_info = BMAGIC;
 
   exec_hdr (abfd)->a_text = obj_textsec (abfd)->_raw_size;
@@ -439,6 +437,7 @@ b_out_bfd_reloc_type_lookup (abfd, code)
     case BFD_RELOC_I960_CALLJ:
       return &howto_reloc_callj;
     case BFD_RELOC_32:
+    case BFD_RELOC_CTOR:
       return &howto_reloc_abs32;
     case BFD_RELOC_24_PCREL:
       return &howto_reloc_pcrel24;
@@ -867,11 +866,8 @@ b_out_set_section_contents (abfd, section, location, offset, count)
 {
 
   if (abfd->output_has_begun == false) { /* set by bfd.c handler */
-    if ((obj_textsec (abfd) == NULL) || (obj_datasec (abfd) == NULL) /*||
-        (obj_textsec (abfd)->_cooked_size == 0) || (obj_datasec (abfd)->_cooked_size == 0)*/) {
-      bfd_set_error (bfd_error_invalid_operation);
+    if (! aout_32_make_sections (abfd))
       return false;
-    }
 
     obj_textsec (abfd)->filepos = sizeof(struct internal_exec);
     obj_datasec(abfd)->filepos = obj_textsec(abfd)->filepos
@@ -1363,7 +1359,7 @@ b_out_bfd_get_relocated_section_contents (in_abfd, link_info, link_order,
 #define b_out_bfd_link_add_symbols _bfd_generic_link_add_symbols
 #define b_out_bfd_final_link _bfd_generic_final_link
 
-bfd_target b_out_vec_big_host =
+const bfd_target b_out_vec_big_host =
 {
   "b.out.big",                 /* name */
   bfd_target_aout_flavour,
@@ -1405,7 +1401,7 @@ bfd_target b_out_vec_big_host =
 };
 
 
-bfd_target b_out_vec_little_host =
+const bfd_target b_out_vec_little_host =
 {
   "b.out.little",              /* name */
   bfd_target_aout_flavour,
index 42127ec4a6acdfa0ccb309f30d7d7d9be4c42834..13897a9e52463874712abf0bb8644f114da92998 100644 (file)
@@ -304,7 +304,7 @@ reloc_processing (relent,reloc, symbols, abfd, section)
 
 #include "coffcode.h"
 
-bfd_target a29kcoff_big_vec =
+const bfd_target a29kcoff_big_vec =
 {
   "coff-a29k-big",             /* name */
   bfd_target_coff_flavour,
index 1cdb340ed14cabceb355de9d6e739c4134a27d5f..1bbfbdbed110aad8e8ad07c87a8e20cb063b5bdf 100644 (file)
@@ -33,7 +33,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 \f
 /* Prototypes for static functions.  */
 
-static bfd_target *alpha_ecoff_object_p PARAMS ((bfd *));
+static const bfd_target *alpha_ecoff_object_p PARAMS ((bfd *));
 static boolean alpha_ecoff_bad_format_hook PARAMS ((bfd *abfd, PTR filehdr));
 static void alpha_ecoff_swap_reloc_in PARAMS ((bfd *, PTR,
                                              struct internal_reloc *));
@@ -421,15 +421,15 @@ static reloc_howto_type alpha_howto_table[] =
 \f
 /* Recognize an Alpha ECOFF file.  */
 
-static bfd_target *
+static const bfd_target *
 alpha_ecoff_object_p (abfd)
      bfd *abfd;
 {
-  static bfd_target *ret;
+  static const bfd_target *ret;
 
   ret = coff_object_p (abfd);
 
-  if (ret != (bfd_target *) NULL)
+  if (ret != NULL)
     {
       asection *sec;
 
@@ -1995,7 +1995,7 @@ static const struct ecoff_backend_data alpha_ecoff_backend_data =
 /* Relaxing sections is generic.  */
 #define _bfd_ecoff_bfd_relax_section bfd_generic_relax_section
 
-bfd_target ecoffalpha_little_vec =
+const bfd_target ecoffalpha_little_vec =
 {
   "ecoff-littlealpha",         /* name */
   bfd_target_ecoff_flavour,
diff --git a/bfd/coff-go32.c b/bfd/coff-go32.c
new file mode 100644 (file)
index 0000000..a26f8f3
--- /dev/null
@@ -0,0 +1,358 @@
+/* BFD back-end for Intel 386 COFF files (go32 variant).
+   Copyright 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
+   Written by DJ Delorie.
+
+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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include "bfd.h"
+#include "sysdep.h"
+#include "libbfd.h"
+#include "obstack.h"
+#include "coff/i386.h"
+#include "coff/internal.h"
+#include "libcoff.h"
+
+static bfd_reloc_status_type coff_go32_reloc PARAMS ((bfd *abfd,
+                                                     arelent *reloc_entry,
+                                                     asymbol *symbol,
+                                                     PTR data,
+                                                     asection *input_section,
+                                                     bfd *output_bfd,
+                                                     char **error_message));
+
+/* For some reason when using i386 COFF the value stored in the .text
+   section for a reference to a common symbol is the value itself plus
+   any desired offset.  Ian Taylor, Cygnus Support.  */
+
+/* If we are producing relocateable output, we need to do some
+   adjustments to the object file that are not done by the
+   bfd_perform_relocation function.  This function is called by every
+   reloc type to make any required adjustments.  */
+
+static bfd_reloc_status_type
+coff_go32_reloc (abfd, reloc_entry, symbol, data, input_section, output_bfd,
+                error_message)
+     bfd *abfd;
+     arelent *reloc_entry;
+     asymbol *symbol;
+     PTR data;
+     asection *input_section;
+     bfd *output_bfd;
+     char **error_message;
+{
+  symvalue diff;
+
+  if (output_bfd == (bfd *) NULL)
+    return bfd_reloc_continue;
+
+  if (bfd_is_com_section (symbol->section))
+    {
+      /* We are relocating a common symbol.  The current value in the
+        object file is ORIG + OFFSET, where ORIG is the value of the
+        common symbol as seen by the object file when it was compiled
+        (this may be zero if the symbol was undefined) and OFFSET is
+        the offset into the common symbol (normally zero, but may be
+        non-zero when referring to a field in a common structure).
+        ORIG is the negative of reloc_entry->addend, which is set by
+        the CALC_ADDEND macro below.  We want to replace the value in
+        the object file with NEW + OFFSET, where NEW is the value of
+        the common symbol which we are going to put in the final
+        object file.  NEW is symbol->value.  */
+      diff = symbol->value + reloc_entry->addend;
+    }
+  else
+    {
+      /* For some reason bfd_perform_relocation always effectively
+        ignores the addend for a COFF target when producing
+        relocateable output.  This seems to be always wrong for 386
+        COFF, so we handle the addend here instead.  */
+      diff = reloc_entry->addend;
+    }
+
+#define DOIT(x) \
+  x = ((x & ~howto->dst_mask) | (((x & howto->src_mask) + diff) & howto->dst_mask))
+
+  if (diff != 0)
+    {
+      const reloc_howto_type *howto = reloc_entry->howto;
+      unsigned char *addr = (unsigned char *) data + reloc_entry->address;
+
+      switch (howto->size)
+       {
+       case 0:
+         {
+           char x = bfd_get_8 (abfd, addr);
+           DOIT (x);
+           bfd_put_8 (abfd, x, addr);
+         }
+         break;
+
+       case 1:
+         {
+           short x = bfd_get_16 (abfd, addr);
+           DOIT (x);
+           bfd_put_16 (abfd, x, addr);
+         }
+         break;
+
+       case 2:
+         {
+           long x = bfd_get_32 (abfd, addr);
+           DOIT (x);
+           bfd_put_32 (abfd, x, addr);
+         }
+         break;
+
+       default:
+         abort ();
+       }
+    }
+
+  /* Now let bfd_perform_relocation finish everything up.  */
+  return bfd_reloc_continue;
+}
+
+static reloc_howto_type howto_table[] = 
+{
+  {0},
+  {1},
+  {2},
+  {3},
+  {4},
+  {5},
+  HOWTO (R_DIR32,               /* type */                                 
+        0,                     /* rightshift */                           
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */ 
+        32,                    /* bitsize */                   
+        false,                 /* pc_relative */                          
+        0,                     /* bitpos */                               
+        complain_overflow_bitfield, /* complain_on_overflow */
+        coff_go32_reloc,       /* special_function */                     
+        "dir32",               /* name */                                 
+        true,                  /* partial_inplace */                      
+        0xffffffff,            /* src_mask */                             
+        0xffffffff,            /* dst_mask */                             
+        false),                /* pcrel_offset */
+  {7},
+  {010},
+  {011},
+  {012},
+  {013},
+  {014},
+  {015},
+  {016},
+  HOWTO (R_RELBYTE,            /* type */                                 
+        0,                     /* rightshift */                           
+        0,                     /* size (0 = byte, 1 = short, 2 = long) */ 
+        8,                     /* bitsize */                   
+        false,                 /* pc_relative */                          
+        0,                     /* bitpos */                               
+        complain_overflow_bitfield, /* complain_on_overflow */
+        coff_go32_reloc,       /* special_function */                     
+        "8",                   /* name */                                 
+        true,                  /* partial_inplace */                      
+        0x000000ff,            /* src_mask */                             
+        0x000000ff,            /* dst_mask */                             
+        false),                /* pcrel_offset */
+  HOWTO (R_RELWORD,            /* type */                                 
+        0,                     /* rightshift */                           
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */ 
+        16,                    /* bitsize */                   
+        false,                 /* pc_relative */                          
+        0,                     /* bitpos */                               
+        complain_overflow_bitfield, /* complain_on_overflow */
+        coff_go32_reloc,       /* special_function */                     
+        "16",                  /* name */                                 
+        true,                  /* partial_inplace */                      
+        0x0000ffff,            /* src_mask */                             
+        0x0000ffff,            /* dst_mask */                             
+        false),                /* pcrel_offset */
+  HOWTO (R_RELLONG,            /* type */                                 
+        0,                     /* rightshift */                           
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */ 
+        32,                    /* bitsize */                   
+        false,                 /* pc_relative */                          
+        0,                     /* bitpos */                               
+        complain_overflow_bitfield, /* complain_on_overflow */
+        coff_go32_reloc,       /* special_function */                     
+        "32",                  /* name */                                 
+        true,                  /* partial_inplace */                      
+        0xffffffff,            /* src_mask */                             
+        0xffffffff,            /* dst_mask */                             
+        false),                /* pcrel_offset */
+  HOWTO (R_PCRBYTE,            /* type */                                 
+        0,                     /* rightshift */                           
+        0,                     /* size (0 = byte, 1 = short, 2 = long) */ 
+        8,                     /* bitsize */                   
+        true,                  /* pc_relative */                          
+        0,                     /* bitpos */                               
+        complain_overflow_signed, /* complain_on_overflow */
+        coff_go32_reloc,       /* special_function */                     
+        "DISP8",               /* name */                                 
+        true,                  /* partial_inplace */                      
+        0x000000ff,            /* src_mask */                             
+        0x000000ff,            /* dst_mask */                             
+        false),                /* pcrel_offset */
+  HOWTO (R_PCRWORD,            /* type */                                 
+        0,                     /* rightshift */                           
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */ 
+        16,                    /* bitsize */                   
+        true,                  /* pc_relative */                          
+        0,                     /* bitpos */                               
+        complain_overflow_signed, /* complain_on_overflow */
+        coff_go32_reloc,       /* special_function */                     
+        "DISP16",              /* name */                                 
+        true,                  /* partial_inplace */                      
+        0x0000ffff,            /* src_mask */                             
+        0x0000ffff,            /* dst_mask */                             
+        false),                /* pcrel_offset */
+  HOWTO (R_PCRLONG,            /* type */                                 
+        0,                     /* rightshift */                           
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */ 
+        32,                    /* bitsize */                   
+        true,                  /* pc_relative */                          
+        0,                     /* bitpos */                               
+        complain_overflow_signed, /* complain_on_overflow */
+        coff_go32_reloc,       /* special_function */                     
+        "DISP32",              /* name */                                 
+        true,                  /* partial_inplace */                      
+        0xffffffff,            /* src_mask */                             
+        0xffffffff,            /* dst_mask */                             
+        false)                 /* pcrel_offset */
+};
+
+/* Turn a howto into a reloc  nunmber */
+
+#define SELECT_RELOC(x,howto) { x.r_type = howto->type; }
+#define BADMAG(x) I386BADMAG(x)
+#define I386 1                 /* Customize coffcode.h */
+
+#define RTYPE2HOWTO(cache_ptr, dst) \
+           cache_ptr->howto = howto_table + (dst)->r_type;
+
+/* On SCO Unix 3.2.2 the native assembler generates two .data
+   sections.  We handle that by renaming the second one to .data2.  It
+   does no harm to do this for any 386 COFF target.  */
+#define TWO_DATA_SECS
+
+/* For 386 COFF a STYP_NOLOAD | STYP_BSS section is part of a shared
+   library.  On some other COFF targets STYP_BSS is normally
+   STYP_NOLOAD.  */
+#define BSS_NOLOAD_IS_SHARED_LIBRARY
+
+/* Compute the addend of a reloc.  If the reloc is to a common symbol,
+   the object file contains the value of the common symbol.  By the
+   time this is called, the linker may be using a different symbol
+   from a different object file with a different value.  Therefore, we
+   hack wildly to locate the original symbol from this file so that we
+   can make the correct adjustment.  This macro sets coffsym to the
+   symbol from the original file, and uses it to set the addend value
+   correctly.  If this is not a common symbol, the usual addend
+   calculation is done, except that an additional tweak is needed for
+   PC relative relocs.
+   FIXME: This macro refers to symbols and asect; these are from the
+   calling function, not the macro arguments.  */
+
+#define CALC_ADDEND(abfd, ptr, reloc, cache_ptr)               \
+  {                                                            \
+    coff_symbol_type *coffsym = (coff_symbol_type *) NULL;     \
+    if (ptr && bfd_asymbol_bfd (ptr) != abfd)                  \
+      coffsym = (obj_symbols (abfd)                            \
+                + (cache_ptr->sym_ptr_ptr - symbols));         \
+    else if (ptr)                                              \
+      coffsym = coff_symbol_from (abfd, ptr);                  \
+    if (coffsym != (coff_symbol_type *) NULL                   \
+       && coffsym->native->u.syment.n_scnum == 0)              \
+      cache_ptr->addend = - coffsym->native->u.syment.n_value; \
+    else if (ptr && bfd_asymbol_bfd (ptr) == abfd              \
+            && ptr->section != (asection *) NULL)              \
+      cache_ptr->addend = - (ptr->section->vma + ptr->value);  \
+    else                                                       \
+      cache_ptr->addend = 0;                                   \
+    if (ptr && howto_table[reloc.r_type].pc_relative)          \
+      cache_ptr->addend += asect->vma;                         \
+  }
+
+#include "coffcode.h"
+
+static const bfd_target *
+go32coff_object_p(a)
+     bfd *a;
+{
+  return coff_object_p(a);
+}
+
+static const bfd_target *
+go32coff_archive_p(a)
+     bfd *a;
+{
+  return 0;
+}
+
+const bfd_target
+#ifdef TARGET_SYM
+  TARGET_SYM =
+#else
+  go32coff_vec =
+#endif
+{
+#ifdef TARGET_NAME
+  TARGET_NAME,
+#else
+  "coff-go32",                 /* name */
+#endif
+  bfd_target_coff_flavour,
+  false,                       /* data byte order is little */
+  false,                       /* header byte order is little */
+
+  (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 */
+  '_',                         /* leading underscore */
+  '/',                         /* ar_pad_char */
+  15,                          /* ar_max_namelen */
+
+  2,                           /* minimum alignment power */
+  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 */
+
+/* Note that we allow an object file to be treated as a core file as well. */
+    {_bfd_dummy_target, go32coff_object_p, /* bfd_check_format */
+       bfd_generic_archive_p, go32coff_object_p},
+    {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,
+};
index 8c7af9b2103c11d3b5422e5ad233799481b40a18..14ac3d3483b7f2def58bc78dda9b769ee4354d3b 100644 (file)
@@ -41,7 +41,7 @@ static reloc_howto_type howto_table[] =
   HOWTO (R_JMP2, 0, 0, 8, false, 0, complain_overflow_bitfield, 0, "pcrecl/16", true, 0x000000ff, 0x000000ff, false),
 
 
-  HOWTO (R_JMPL1, 0, 1, 32, false, 0, complain_overflow_bitfield, 0, "24/pcrell", true, 0x0000ffff, 0x0000ffff, false),
+  HOWTO (R_JMPL1, 0, 2, 32, false, 0, complain_overflow_bitfield, 0, "24/pcrell", true, 0x00ffffff, 0x00ffffff, false),
   HOWTO (R_JMPL_B8, 0, 0, 8, false, 0, complain_overflow_bitfield, 0, "pc8/24", true, 0x000000ff, 0x000000ff, false),
 
   HOWTO (R_MOVLB1, 0, 1, 16, false, 0, complain_overflow_bitfield, 0, "24/8", true, 0x0000ffff, 0x0000ffff, false),
@@ -342,7 +342,7 @@ h8300_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
          + dst_address 
            + link_order->u.indirect.section->output_section->vma;
        int gap = (bfd_coff_reloc16_get_value (reloc, link_info, input_section)
-                  - dot) + 1;
+                  - dot) - 1;
        if (gap > 32767 || gap < -32768)
          {
            if (! ((*link_info->callbacks->reloc_overflow)
@@ -562,7 +562,7 @@ h8300_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
 
 
 
-bfd_target h8300coff_vec =
+const bfd_target h8300coff_vec =
 {
   "coff-h8300",                        /* name */
   bfd_target_coff_flavour,
@@ -599,6 +599,7 @@ bfd_target h8300coff_vec =
      BFD_JUMP_TABLE_RELOCS (coff),
      BFD_JUMP_TABLE_WRITE (coff),
      BFD_JUMP_TABLE_LINK (coff),
+     BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
   COFF_SWAP_TABLE,
 };
index bc80a222a1284a85a949e4d0d8c80694c2867678..aa0be2c1cbfd951847db727ab134ce8af431e0ec 100644 (file)
@@ -309,7 +309,7 @@ extra_case (in_abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr)
   bfd_coff_reloc16_get_relocated_section_contents
 #define coff_bfd_relax_section bfd_coff_reloc16_relax_section
 
-bfd_target h8500coff_vec =
+const bfd_target h8500coff_vec =
 {
   "coff-h8500",                        /* name */
   bfd_target_coff_flavour,
@@ -347,6 +347,7 @@ bfd_target h8500coff_vec =
      BFD_JUMP_TABLE_RELOCS (coff),
      BFD_JUMP_TABLE_WRITE (coff),
      BFD_JUMP_TABLE_LINK (coff),
+     BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
   COFF_SWAP_TABLE,
 };
index 768821e1a6890e7ca9dc40018676641f5a516436..97b729447226b9ebd51a8155cf5b6473ad814c36 100644 (file)
@@ -2359,7 +2359,7 @@ static const struct ecoff_backend_data mips_ecoff_backend_data =
 /* Relaxing sections is MIPS specific.  */
 #define _bfd_ecoff_bfd_relax_section mips_relax_section
 
-bfd_target ecoff_little_vec =
+const bfd_target ecoff_little_vec =
 {
   "ecoff-littlemips",          /* name */
   bfd_target_ecoff_flavour,
@@ -2403,7 +2403,7 @@ bfd_target ecoff_little_vec =
   (PTR) &mips_ecoff_backend_data
 };
 
-bfd_target ecoff_big_vec =
+const bfd_target ecoff_big_vec =
 {
   "ecoff-bigmips",             /* name */
   bfd_target_ecoff_flavour,
index 00b16025dfb8fb7aaa06e4d9348d1257b3e02ad3..1964eea27754adc03841aa9e6e755a9c47e459b7 100644 (file)
@@ -153,7 +153,7 @@ extra_case (in_abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr)
   bfd_coff_reloc16_get_relocated_section_contents
 #define coff_bfd_relax_section bfd_coff_reloc16_relax_section
 
-bfd_target shcoff_vec =
+const bfd_target shcoff_vec =
 {
   "coff-sh",                   /* name */
   bfd_target_coff_flavour,
@@ -191,6 +191,7 @@ bfd_getb64, bfd_getb_signed_64, bfd_putb64,
      BFD_JUMP_TABLE_RELOCS (coff),
      BFD_JUMP_TABLE_WRITE (coff),
      BFD_JUMP_TABLE_LINK (coff),
+     BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
     COFF_SWAP_TABLE,
 };
index 4681dd4cf9088779e590e7e542d927eee4951707..fc074a575b816451026e2a52e437b34dd9e1cb11 100644 (file)
@@ -235,7 +235,7 @@ extra_case (in_abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr)
   bfd_coff_reloc16_get_relocated_section_contents
 #define coff_bfd_relax_section bfd_coff_reloc16_relax_section
 
-bfd_target z8kcoff_vec =
+const bfd_target z8kcoff_vec =
 {
   "coff-z8k",                  /* name */
   bfd_target_coff_flavour,
@@ -273,6 +273,7 @@ bfd_target z8kcoff_vec =
      BFD_JUMP_TABLE_RELOCS (coff),
      BFD_JUMP_TABLE_WRITE (coff),
      BFD_JUMP_TABLE_LINK (coff),
+     BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
   COFF_SWAP_TABLE,
 };
index 3542ded5cefcc80bbec2bd0e20dc8ef359adb599..33a85cf2d534404189c7cdee2dc04a699d567935 100644 (file)
@@ -119,8 +119,7 @@ make_a_section_from_file (abfd, hdr, target_index)
 /* Read in a COFF object and make it into a BFD.  This is used by
    ECOFF as well.  */
 
-static
-bfd_target     *
+static const bfd_target *
 coff_real_object_p (abfd, nscns, internal_f, internal_a)
      bfd            *abfd;
      unsigned        nscns;
@@ -175,6 +174,9 @@ coff_real_object_p (abfd, nscns, internal_f, internal_a)
   if (!(internal_f->f_flags & F_LSYMS))
     abfd->flags |= HAS_LOCALS;
 
+  /* FIXME: How can we set D_PAGED correctly?  */
+  if ((internal_f->f_flags & F_EXEC) != 0)
+    abfd->flags |= D_PAGED;
 
   bfd_get_symcount(abfd) = internal_f->f_nsyms;
   if (internal_f->f_nsyms)
@@ -188,13 +190,13 @@ coff_real_object_p (abfd, nscns, internal_f, internal_a)
   return abfd->xvec;
  fail:
   bfd_release(abfd, tdata);
-  return (bfd_target *)NULL;
+  return (const bfd_target *)NULL;
 }
 
 /* Turn a COFF file into a BFD, but fail with bfd_error_wrong_format if it is
    not a COFF file.  This is also used by ECOFF.  */
 
-bfd_target *
+const bfd_target *
 coff_object_p (abfd)
      bfd            *abfd;
 {
index 43e2f3026cda152bcad4039b92cd90fd24b24365..a2ed76d0b52481ee7d37175080808a351147d42a 100644 (file)
@@ -3490,7 +3490,7 @@ _bfd_ecoff_write_armap (abfd, elength, map, orl_count, stridx)
 /* See whether this BFD is an archive.  If it is, read in the armap
    and the extended name table.  */
 
-bfd_target *
+const bfd_target *
 _bfd_ecoff_archive_p (abfd)
      bfd *abfd;
 {
@@ -3501,7 +3501,7 @@ _bfd_ecoff_archive_p (abfd)
     {
       if (bfd_get_error () != bfd_error_system_call)
        bfd_set_error (bfd_error_wrong_format);
-      return (bfd_target *) NULL;
+      return (const bfd_target *) NULL;
     }
 
   /* We are setting bfd_ardata(abfd) here, but since bfd_ardata
@@ -3513,7 +3513,7 @@ _bfd_ecoff_archive_p (abfd)
   if (bfd_ardata (abfd) == (struct artdata *) NULL)
     {
       bfd_set_error (bfd_error_no_memory);
-      return (bfd_target *) NULL;
+      return (const bfd_target *) NULL;
     }
 
   bfd_ardata (abfd)->first_file_filepos = SARMAG;
@@ -3528,7 +3528,7 @@ _bfd_ecoff_archive_p (abfd)
     {
       bfd_release (abfd, bfd_ardata (abfd));
       abfd->tdata.aout_ar_data = (struct artdata *) NULL;
-      return (bfd_target *) NULL;
+      return (const bfd_target *) NULL;
     }
   
   return abfd->xvec;
index 6192ad53a2d2bd4868776c8cfb6fcc340c022a3f..707b00740dc09114adc3d4894cae8ae5c6698577 100644 (file)
@@ -178,7 +178,7 @@ static CONST struct elf_backend_data elf32_bed =
 };
 
 #ifdef TARGET_BIG_SYM
-bfd_target TARGET_BIG_SYM =
+const bfd_target TARGET_BIG_SYM =
 {
   /* name: identify kind of target */
   TARGET_BIG_NAME,
@@ -266,7 +266,7 @@ bfd_target TARGET_BIG_SYM =
 #endif
 
 #ifdef TARGET_LITTLE_SYM
-bfd_target TARGET_LITTLE_SYM =
+const bfd_target TARGET_LITTLE_SYM =
 {
   /* name: identify kind of target */
   TARGET_LITTLE_NAME,
index dbab77d7a9f350e6380ba1fb86d787f0c8018937..0a87080997ee345aea88463c767228b96e4428a3 100644 (file)
@@ -181,7 +181,7 @@ static CONST struct elf_backend_data elf64_bed =
 };
 
 #ifdef TARGET_BIG_SYM
-bfd_target TARGET_BIG_SYM =
+const bfd_target TARGET_BIG_SYM =
 {
   /* name: identify kind of target */
   TARGET_BIG_NAME,
@@ -269,7 +269,7 @@ bfd_target TARGET_BIG_SYM =
 #endif
 
 #ifdef TARGET_LITTLE_SYM
-bfd_target TARGET_LITTLE_SYM =
+const bfd_target TARGET_LITTLE_SYM =
 {
   /* name: identify kind of target */
   TARGET_LITTLE_NAME,
index 54d4bbd405306c209e40d5feb7ce489548f65e51..c6fea5c97a70e0f7707fb51fd425311faf318864 100644 (file)
@@ -824,7 +824,7 @@ elf_file_p (x_ehdrp)
    any side effects in ABFD, or any data it points to (like tdata), if the
    file does not match the target vector.  */
 
-bfd_target *
+const bfd_target *
 elf_object_p (abfd)
      bfd *abfd;
 {
@@ -907,7 +907,7 @@ elf_object_p (abfd)
      BFD format expects.  */
   if (ebd->elf_machine_code != i_ehdrp->e_machine)
     {
-      bfd_target **target_ptr;
+      const bfd_target * const *target_ptr;
 
       if (ebd->elf_machine_code != EM_NONE)
        goto got_wrong_format_error;
@@ -3694,7 +3694,7 @@ elf_corefile_note (abfd, hdr)
 
  */
 
-bfd_target *
+const bfd_target *
 elf_core_file_p (abfd)
      bfd *abfd;
 {
@@ -3783,7 +3783,7 @@ elf_core_file_p (abfd)
      BFD format expects.  */
   if (ebd->elf_machine_code != i_ehdrp->e_machine)
     {
-      bfd_target **target_ptr;
+      const bfd_target * const *target_ptr;
 
       if (ebd->elf_machine_code != EM_NONE)
        goto wrong;
index 3db7b143931a9ceb404c5b808db84aefd2df2b29..7ed7c7e3b7e5ad5e0255f57a979d3f06c8993727 100644 (file)
@@ -88,7 +88,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 char *lynx_core_file_failing_command ();
 int lynx_core_file_failing_signal ();
 boolean lynx_core_file_matches_executable_p ();
-bfd_target *lynx_core_file_p ();
+const bfd_target *lynx_core_file_p ();
 
 #define        MY_core_file_failing_command lynx_core_file_failing_command
 #define        MY_core_file_failing_signal lynx_core_file_failing_signal
@@ -107,7 +107,7 @@ extern reloc_howto_type aout_32_std_howto_table[];
 /* Output standard relocation information to a file in target byte order. */
 
 void
-NAME (lynx, swap_std_reloc_out) (abfd, g, natptr)
+NAME(lynx,swap_std_reloc_out) (abfd, g, natptr)
      bfd *abfd;
      arelent *g;
      struct reloc_std_external *natptr;
@@ -203,7 +203,7 @@ NAME (lynx, swap_std_reloc_out) (abfd, g, natptr)
 /* Output extended relocation information to a file in target byte order. */
 
 void
-NAME (lynx, swap_ext_reloc_out) (abfd, g, natptr)
+NAME(lynx,swap_ext_reloc_out) (abfd, g, natptr)
      bfd *abfd;
      arelent *g;
      register struct reloc_ext_external *natptr;
@@ -321,7 +321,7 @@ NAME (lynx, swap_ext_reloc_out) (abfd, g, natptr)
   }                                                                    \
 
 void
-NAME (lynx, swap_ext_reloc_in) (abfd, bytes, cache_ptr, symbols)
+NAME(lynx,swap_ext_reloc_in) (abfd, bytes, cache_ptr, symbols)
      bfd *abfd;
      struct reloc_ext_external *bytes;
      arelent *cache_ptr;
@@ -344,7 +344,7 @@ NAME (lynx, swap_ext_reloc_in) (abfd, bytes, cache_ptr, symbols)
 }
 
 void
-NAME (lynx, swap_std_reloc_in) (abfd, bytes, cache_ptr, symbols)
+NAME(lynx,swap_std_reloc_in) (abfd, bytes, cache_ptr, symbols)
      bfd *abfd;
      struct reloc_std_external *bytes;
      arelent *cache_ptr;
@@ -448,7 +448,7 @@ doit:
 
       for (; counter < count; counter++, rptr++, cache_ptr++)
        {
-         NAME (lynx, swap_ext_reloc_in) (abfd, rptr, cache_ptr, symbols);
+         NAME(lynx,swap_ext_reloc_in) (abfd, rptr, cache_ptr, symbols);
        }
     }
   else
@@ -459,7 +459,7 @@ doit:
 
       for (; counter < count; counter++, rptr++, cache_ptr++)
        {
-         NAME (lynx, swap_std_reloc_in) (abfd, rptr, cache_ptr, symbols);
+         NAME(lynx,swap_std_reloc_in) (abfd, rptr, cache_ptr, symbols);
        }
 
     }
@@ -475,7 +475,7 @@ doit:
 /* Write out a relocation section into an object file.  */
 
 boolean
-NAME (lynx, squirt_out_relocs) (abfd, section)
+NAME(lynx,squirt_out_relocs) (abfd, section)
      bfd *abfd;
      asection *section;
 {
@@ -505,14 +505,14 @@ NAME (lynx, squirt_out_relocs) (abfd, section)
       for (natptr = native;
           count != 0;
           --count, natptr += each_size, ++generic)
-       NAME (lynx, swap_ext_reloc_out) (abfd, *generic, (struct reloc_ext_external *) natptr);
+       NAME(lynx,swap_ext_reloc_out) (abfd, *generic, (struct reloc_ext_external *) natptr);
     }
   else
     {
       for (natptr = native;
           count != 0;
           --count, natptr += each_size, ++generic)
-       NAME (lynx, swap_std_reloc_out) (abfd, *generic, (struct reloc_std_external *) natptr);
+       NAME(lynx,swap_std_reloc_out) (abfd, *generic, (struct reloc_std_external *) natptr);
     }
 
   if (bfd_write ((PTR) native, 1, natsize, abfd) != natsize)
index 424322fc68bc8a659086ba8635929e3c04f02619..9a29fc46b0404cc5a7c409ce5ab24ac2e8e60ba8 100644 (file)
@@ -801,7 +801,7 @@ Move from our internal lists to the canon table, and insert in
 symbol index order
 */
 
-extern bfd_target ieee_vec;
+extern const bfd_target ieee_vec;
 
 long
 ieee_get_symtab (abfd, location)
@@ -1052,7 +1052,7 @@ ieee_slurp_sections (abfd)
 *  archive stuff
 */
 
-bfd_target *
+const bfd_target *
 ieee_archive_p (abfd)
      bfd *abfd;
 {
@@ -1085,7 +1085,7 @@ ieee_archive_p (abfd)
   if (this_byte (&(ieee->h)) != Module_Beginning)
     {
       abfd->tdata.ieee_ar_data = save;
-      return (bfd_target *) NULL;
+      return (const bfd_target *) NULL;
     }
 
   next_byte (&(ieee->h));
@@ -1094,7 +1094,7 @@ ieee_archive_p (abfd)
     {
       bfd_release (abfd, ieee);
       abfd->tdata.ieee_ar_data = save;
-      return (bfd_target *) NULL;
+      return (const bfd_target *) NULL;
     }
   /* Throw away the filename */
   read_id (&(ieee->h));
@@ -1104,7 +1104,7 @@ ieee_archive_p (abfd)
   if (!obstack_begin (&ob, 128))
     {
       bfd_set_error (bfd_error_no_memory);
-      return (bfd_target *) NULL;
+      return (const bfd_target *) NULL;
     }
 
   ieee->element_count = 0;
@@ -1152,7 +1152,7 @@ ieee_archive_p (abfd)
   if (!ieee->elements)
     {
       bfd_set_error (bfd_error_no_memory);
-      return (bfd_target *) NULL;
+      return (const bfd_target *) NULL;
     }
 
   /* Now scan the area again, and replace BB offsets with file */
@@ -1194,7 +1194,7 @@ ieee_mkobject (abfd)
   return abfd->tdata.ieee_data ? true : false;
 }
 
-bfd_target *
+const bfd_target *
 ieee_object_p (abfd)
      bfd *abfd;
 {
@@ -1217,7 +1217,7 @@ ieee_object_p (abfd)
 
   ieee->h.input_p = buffer;
   if (this_byte_and_next (&(ieee->h)) != Module_Beginning)
-    goto fail;
+    goto got_wrong_format;
 
   ieee->read_symbols = false;
   ieee->read_data = false;
@@ -1231,7 +1231,7 @@ ieee_object_p (abfd)
 
   processor = ieee->mb.processor = read_id (&(ieee->h));
   if (strcmp (processor, "LIBRARY") == 0)
-    goto fail;
+    goto got_wrong_format;
   ieee->mb.module_name = read_id (&(ieee->h));
   if (abfd->filename == (CONST char *) NULL)
     {
@@ -1242,7 +1242,7 @@ ieee_object_p (abfd)
   {
     bfd_arch_info_type *arch = bfd_scan_arch (processor);
     if (arch == 0)
-      goto fail;
+      goto got_wrong_format;
     abfd->arch_info = arch;
   }
 
@@ -1306,10 +1306,12 @@ ieee_object_p (abfd)
 
   ieee_slurp_sections (abfd);
   return abfd->xvec;
+got_wrong_format:
+  bfd_set_error (bfd_error_wrong_format);
 fail:
   (void) bfd_release (abfd, ieee);
   abfd->tdata.ieee_data = save;
-  return (bfd_target *) NULL;
+  return (const bfd_target *) NULL;
 }
 
 void
@@ -3369,7 +3371,7 @@ ieee_bfd_debug_info_accumulate (abfd, section)
 #define ieee_bfd_final_link _bfd_generic_final_link
 
 /*SUPPRESS 460 */
-bfd_target ieee_vec =
+const bfd_target ieee_vec =
 {
   "ieee",                      /* name */
   bfd_target_ieee_flavour,
index 2838a5e228293dbe37d94d083ef6d5496109e3a1..cc6e4db5e30dc456c2843bb6eaccccbc163e85dd 100644 (file)
@@ -483,8 +483,8 @@ extern boolean _bfd_elf_link_hash_table_init
 extern boolean bfd_elf32_write_object_contents PARAMS ((bfd *));
 extern boolean bfd_elf64_write_object_contents PARAMS ((bfd *));
 
-extern bfd_target *bfd_elf32_object_p PARAMS ((bfd *));
-extern bfd_target *bfd_elf32_core_file_p PARAMS ((bfd *));
+extern const bfd_target *bfd_elf32_object_p PARAMS ((bfd *));
+extern const bfd_target *bfd_elf32_core_file_p PARAMS ((bfd *));
 extern char *bfd_elf32_core_file_failing_command PARAMS ((bfd *));
 extern int bfd_elf32_core_file_failing_signal PARAMS ((bfd *));
 extern boolean bfd_elf32_core_file_matches_executable_p PARAMS ((bfd *,
@@ -540,8 +540,8 @@ extern boolean bfd_elf32_add_dynamic_entry
 extern void bfd_elf32_no_info_to_howto PARAMS ((bfd *, arelent *,
                                                Elf32_Internal_Rela *));
 
-extern bfd_target *bfd_elf64_object_p PARAMS ((bfd *));
-extern bfd_target *bfd_elf64_core_file_p PARAMS ((bfd *));
+extern const bfd_target *bfd_elf64_object_p PARAMS ((bfd *));
+extern const bfd_target *bfd_elf64_core_file_p PARAMS ((bfd *));
 extern char *bfd_elf64_core_file_failing_command PARAMS ((bfd *));
 extern int bfd_elf64_core_file_failing_signal PARAMS ((bfd *));
 extern boolean bfd_elf64_core_file_matches_executable_p PARAMS ((bfd *,
index 0c7fce3fcfe64c06906bf78a4fcfbb8788ede5d7..34d2d29d06dac3065e9b26831d7f91c89a22dabb 100644 (file)
@@ -43,7 +43,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 char *lynx_core_file_failing_command();
 int lynx_core_file_failing_signal();
 boolean lynx_core_file_matches_executable_p();
-bfd_target *lynx_core_file_p();
+const bfd_target *lynx_core_file_p();
 
 #define        MY_core_file_failing_command lynx_core_file_failing_command
 #define        MY_core_file_failing_signal lynx_core_file_failing_signal
index 849c27e5da4815e6a81a3723a5d35037992ed4fa..55b0892f0428cf6d20ba317af6aae58afa427610 100644 (file)
@@ -388,7 +388,7 @@ static CONST struct aout_backend_data MY(backend_data) = {
   0                            /* finish_dynamic_link */
 };
 
-bfd_target aout_mips_little_vec =
+const bfd_target aout_mips_little_vec =
 {
   "a.out-mips-little",         /* name */
   bfd_target_aout_flavour,
@@ -428,7 +428,7 @@ bfd_target aout_mips_little_vec =
   (PTR) MY_backend_data,
 };
 
-bfd_target aout_mips_big_vec =
+const bfd_target aout_mips_big_vec =
 {
   "a.out-mips-big",            /* name */
   bfd_target_aout_flavour,
index 4658a132041a8ceb8e00c8243b81571b0d15d2bb..a53c67b691c50b0388fe7286630db12cc1790fff 100644 (file)
@@ -91,7 +91,7 @@ static int nlm_external_reloc_compare
 #define get_word       bfd_h_get_32
 #endif
 
-bfd_target *
+const bfd_target *
 nlm_object_p (abfd)
      bfd *abfd;
 {
@@ -214,6 +214,9 @@ nlm_object_p (abfd)
   if (arch != bfd_arch_unknown)
     bfd_default_set_arch_mach (abfd, arch, (unsigned long) 0);
 
+  abfd->flags |= EXEC_P;
+  bfd_get_start_address (abfd) = nlm_fixed_header (abfd)->codeStartOffset;
+
   return (abfd->xvec);
 
 got_wrong_format_error:
index e0dfd292a9a06ef87aba3ab466394e132b79ccb4..6d85443d67cc10cec77f66b92ce836ea6667a086 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end for oasys objects.
-   Copyright 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
+   Copyright 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
    Written by Steve Chamberlain of Cygnus Support, <sac@cygnus.com>.
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -230,7 +230,7 @@ oasys_get_symtab_upper_bound (abfd)
 /*
 */
 
-extern bfd_target oasys_vec;
+extern const bfd_target oasys_vec;
 
 long
 oasys_get_symtab (abfd, location)
@@ -256,7 +256,7 @@ oasys_get_symtab (abfd, location)
 *  archive stuff
 */
 
-static bfd_target *
+static const bfd_target *
 oasys_archive_p (abfd)
      bfd *abfd;
 {
@@ -293,7 +293,7 @@ oasys_archive_p (abfd)
       header.mod_count > 10000 ||
       header.sym_count > 100000 ||
       header.xref_count > 100000)
-    return (bfd_target *) NULL;
+    return (const bfd_target *) NULL;
 
   /*
     That all worked, let's buy the space for the header and read in
@@ -407,7 +407,7 @@ oasys_mkobject (abfd)
 }
 
 #define MAX_SECS 16
-static bfd_target *
+static const bfd_target *
 oasys_object_p (abfd)
      bfd *abfd;
 {
@@ -522,7 +522,7 @@ oasys_object_p (abfd)
 fail:
   (void) bfd_release (abfd, oasys);
   abfd->tdata.oasys_obj_data = save;
-  return (bfd_target *) NULL;
+  return (const bfd_target *) NULL;
 }
 
 
@@ -1497,7 +1497,7 @@ oasys_sizeof_headers (abfd, exec)
 #define oasys_bfd_final_link _bfd_generic_final_link
 
 /*SUPPRESS 460 */
-bfd_target oasys_vec =
+const bfd_target oasys_vec =
 {
   "oasys",                     /* name */
   bfd_target_oasys_flavour,
@@ -1545,6 +1545,7 @@ bfd_target oasys_vec =
   BFD_JUMP_TABLE_RELOCS (oasys),
   BFD_JUMP_TABLE_WRITE (oasys),
   BFD_JUMP_TABLE_LINK (oasys),
+  BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
   (PTR) 0
 };
index da36edfaacdb52473a608af2d3942eef23e295d1..8b5cffb56b5115359d6ce045bf26b1756a74f590 100644 (file)
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -144,11 +144,11 @@ struct som_misc_symbol_info
 /* Forward declarations */
 
 static boolean som_mkobject PARAMS ((bfd *));
-static bfd_target * som_object_setup PARAMS ((bfd *,
-                                             struct header *,
-                                             struct som_exec_auxhdr *));
+static const bfd_target * som_object_setup PARAMS ((bfd *,
+                                                   struct header *,
+                                                   struct som_exec_auxhdr *));
 static boolean setup_sections PARAMS ((bfd *, struct header *));
-static bfd_target * som_object_p PARAMS ((bfd *));
+static const bfd_target * som_object_p PARAMS ((bfd *));
 static boolean som_write_object_contents PARAMS ((bfd *));
 static boolean som_slurp_string_table PARAMS ((bfd *));
 static unsigned int som_slurp_symbol_table PARAMS ((bfd *));
@@ -1563,7 +1563,7 @@ som_bfd_reloc_type_lookup (abfd, code)
 /* Perform some initialization for an object.  Save results of this
    initialization in the BFD.  */
 
-static bfd_target *
+static const bfd_target *
 som_object_setup (abfd, file_hdrp, aux_hdrp)
      bfd *abfd;
      struct header *file_hdrp;
@@ -1861,7 +1861,7 @@ setup_sections (abfd, file_hdr)
 
 /* Read in a SOM object and make it into a BFD.  */
 
-static bfd_target *
+static const bfd_target *
 som_object_p (abfd)
      bfd *abfd;
 {
@@ -4263,7 +4263,7 @@ som_canonicalize_reloc (abfd, section, relptr, symbols)
   return section->reloc_count;
 }
 
-extern bfd_target som_vec;
+extern const bfd_target som_vec;
 
 /* A hook to set up object file dependent section information.  */
 
@@ -5535,7 +5535,7 @@ som_bfd_free_cached_info (abfd)
 #define som_bfd_link_add_symbols _bfd_generic_link_add_symbols
 #define som_bfd_final_link _bfd_generic_final_link
 
-bfd_target som_vec =
+const bfd_target som_vec =
 {
   "som",                       /* name */
   bfd_target_som_flavour,
index fb38c431497f9e2896b01411dfd92d3e9f172a67..a2be04ff50160f0cdc0b180f88dd3290cb64d474 100644 (file)
@@ -468,7 +468,7 @@ pass_over (abfd, func, symbolfunc, section)
 
 }
 
-static bfd_target *
+static const bfd_target *
 object_p (abfd)
      bfd *abfd;
 {
@@ -491,7 +491,7 @@ object_p (abfd)
   return abfd->xvec;
 }
 
-static bfd_target *
+static const bfd_target *
 srec_object_p (abfd)
      bfd *abfd;
 {
@@ -504,7 +504,7 @@ srec_object_p (abfd)
     return NULL;
 
   if (b[0] != 'S' || !ISHEX (b[1]) || !ISHEX (b[2]) || !ISHEX (b[3]))
-    return (bfd_target *) NULL;
+    return (const bfd_target *) NULL;
 
   /* We create one section called .text for all the contents,
      and allocate enough room for the entire file.  */
@@ -513,7 +513,7 @@ srec_object_p (abfd)
 }
 
 
-static bfd_target *
+static const bfd_target *
 symbolsrec_object_p (abfd)
      bfd *abfd;
 {
@@ -526,7 +526,7 @@ symbolsrec_object_p (abfd)
     return NULL;
 
   if (b[0] != '$' || b[1] != '$')
-    return (bfd_target *) NULL;
+    return (const bfd_target *) NULL;
 
   return object_p (abfd);
 }
@@ -764,19 +764,19 @@ srec_write_symbols (abfd)
   char buffer[MAXCHUNK];
   /* Dump out the symbols of a bfd */
   int i;
-  int len = bfd_get_symcount (abfd);
+  int count = bfd_get_symcount (abfd);
 
-  if (len)
+  if (count)
     {
       size_t len;
       asymbol **table = bfd_get_outsymbols (abfd);
       sprintf (buffer, "$$ %s\r\n", abfd->filename);
 
-      len = strlen (buffer) + 1;
+      len = strlen (buffer);
       if (bfd_write (buffer, len, 1, abfd) != len)
        return false;
 
-      for (i = 0; i < len; i++)
+      for (i = 0; i < count; i++)
        {
          asymbol *s = table[i];
 #if 0
@@ -818,7 +818,7 @@ srec_write_symbols (abfd)
            }
        }
       sprintf (buffer, "$$ \r\n");
-      len = strlen (buffer) + 1;
+      len = strlen (buffer);
       if (bfd_write (buffer, len, 1, abfd) != len)
        return false;
     }
@@ -962,7 +962,7 @@ srec_print_symbol (ignore_abfd, afile, symbol, how)
 #define srec_bfd_link_add_symbols _bfd_generic_link_add_symbols
 #define srec_bfd_final_link _bfd_generic_final_link
 
-bfd_target srec_vec =
+const bfd_target srec_vec =
 {
   "srec",                      /* name */
   bfd_target_srec_flavour,
@@ -987,8 +987,8 @@ bfd_target srec_vec =
   {
     _bfd_dummy_target,
     srec_object_p,             /* bfd_check_format */
-    (struct bfd_target * (*)()) bfd_nullvoidptr,
-    (struct bfd_target * (*)()) bfd_nullvoidptr,
+    _bfd_dummy_target,
+    _bfd_dummy_target,
   },
   {
     bfd_false,
@@ -1018,7 +1018,7 @@ bfd_target srec_vec =
 
 
 
-bfd_target symbolsrec_vec =
+const bfd_target symbolsrec_vec =
 {
   "symbolsrec",                        /* name */
   bfd_target_srec_flavour,
@@ -1043,8 +1043,8 @@ bfd_target symbolsrec_vec =
   {
     _bfd_dummy_target,
     symbolsrec_object_p,       /* bfd_check_format */
-    (struct bfd_target * (*)()) bfd_nullvoidptr,
-    (struct bfd_target * (*)()) bfd_nullvoidptr,
+    _bfd_dummy_target,
+    _bfd_dummy_target,
   },
   {
     bfd_false,
index 4d8e19db8922e8c33412ccc12f617f7d5375c90d..12ab48f81b70da096197948828c94fdc8db2767b 100644 (file)
@@ -586,7 +586,7 @@ tekhex_mkobject (abfd)
   Return true if the file looks like it's in TekHex format. Just look
   for a percent sign and some hex digits */
 
-static bfd_target *
+static const bfd_target *
 tekhex_object_p (abfd)
      bfd *abfd;
 {
@@ -600,7 +600,7 @@ tekhex_object_p (abfd)
     return NULL;
 
   if (b[0] != '%' || !ISHEX (b[1]) || !ISHEX (b[2]) || !ISHEX (b[3]))
-    return (bfd_target *) NULL;
+    return (const bfd_target *) NULL;
 
   tekhex_mkobject (abfd);
 
@@ -1015,7 +1015,7 @@ tekhex_print_symbol (ignore_abfd, filep, symbol, how)
 #define tekhex_bfd_link_add_symbols _bfd_generic_link_add_symbols
 #define tekhex_bfd_final_link _bfd_generic_final_link
 
-bfd_target tekhex_vec =
+const bfd_target tekhex_vec =
 {
   "tekhex",                    /* name */
   bfd_target_tekhex_flavour,
@@ -1040,8 +1040,8 @@ bfd_target tekhex_vec =
   {
     _bfd_dummy_target,
     tekhex_object_p,           /* bfd_check_format */
-    (struct bfd_target * (*)()) bfd_nullvoidptr,
-    (struct bfd_target * (*)()) bfd_nullvoidptr,
+    _bfd_dummy_target,
+    _bfd_dummy_target,
   },
   {
     bfd_false,