fsf address update, but not in COPYING files
authorKen Raeburn <raeburn@cygnus>
Fri, 7 Jul 1995 22:49:42 +0000 (22:49 +0000)
committerKen Raeburn <raeburn@cygnus>
Fri, 7 Jul 1995 22:49:42 +0000 (22:49 +0000)
63 files changed:
bfd/Makefile.in
bfd/aout-encap.c
bfd/aout-rce.c
bfd/aoutx.h
bfd/cf-m68klynx.c
bfd/coff-a29k.c
bfd/coff-arm.c [new file with mode: 0644]
bfd/coff-i960.c
bfd/cofflink.c
bfd/core.c
bfd/cpu-a29k.c
bfd/cpu-rce.c
bfd/ecoff.c
bfd/elf32-i386.c
bfd/elf32-m68k.c
bfd/elf32-sparc.c
bfd/elflink.h
bfd/filemode.c
bfd/i386linux.c
bfd/libelf.h
bfd/linker.c
bfd/m68klynx.c
bfd/mpw-make.in
bfd/sunos.c
binutils/gmalloc.c
binutils/mpw-make.in
binutils/srconv.c
binutils/testsuite/binutils-all/hppa/objdump.exp
binutils/testsuite/binutils-all/nm.exp [new file with mode: 0644]
binutils/testsuite/binutils-all/objcopy.exp
binutils/testsuite/binutils-all/objdump.exp
binutils/testsuite/binutils-all/size.exp [new file with mode: 0644]
binutils/testsuite/config/default.exp
binutils/testsuite/lib/utils-lib.exp [new file with mode: 0644]
include/bfdlink.h
include/opcode/a29k.h
ld/Makefile.in
ld/config.h
ld/emultempl/armpe.em
ld/emultempl/elf32.em
ld/emultempl/i386pe.em
ld/emultempl/m88kbcs.em
ld/emultempl/sunos.em
ld/ld.h
ld/ldfile.c
ld/ldlang.c
ld/ldlang.h
ld/ldmain.c
ld/lexsup.c
ld/mpw-emipsidt.c
ld/mpw-esh.c
ld/mpw-make.in
ld/testsuite/config/default.exp
ld/testsuite/ld-bootstrap/bootstrap.exp [new file with mode: 0644]
ld/testsuite/ld-cdtest/cdtest.exp [new file with mode: 0644]
ld/testsuite/ld-empic/empic.exp
ld/testsuite/ld-shared/shared.exp
ld/testsuite/ld-versados/versados.exp
opcodes/a29k-dis.c
opcodes/alpha-opc.h
opcodes/arm-opc.h
opcodes/mpw-make.in
opcodes/rce-dis.c

index a1027b6..9e3b234 100644 (file)
@@ -16,7 +16,7 @@
 # 
 # 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.
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 VPATH = @srcdir@
 srcdir = @srcdir@
index f5e4fd7..eb74608 100644 (file)
@@ -15,7 +15,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* THIS MODULE IS NOT FINISHED.  IT PROBABLY DOESN'T EVEN COMPILE.  */
 
index 6fa3f52..f83e5f9 100644 (file)
@@ -15,7 +15,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define TARGET_IS_BIG_ENDIAN_P
 #define PAGE_SIZE 4096
index b3c660e..8c6ebb1 100644 (file)
@@ -16,7 +16,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /*
 SECTION
@@ -705,8 +705,10 @@ NAME(aout,machine_type) (arch, machine, unknown)
     case 0:
     case 2000:
     case 3000:          arch_flags = M_MIPS1; break;
-    case 4000:
+    case 4000: /* mips3 */
     case 4400:
+    case 8000: /* mips4 */
+      /* real mips2: */
     case 6000:          arch_flags = M_MIPS2; break;
     default:            arch_flags = M_UNKNOWN; break;
     }
@@ -1542,37 +1544,43 @@ translate_to_native_sym_flags (abfd, cache_ptr, sym_pointer)
      struct external_nlist *sym_pointer;
 {
   bfd_vma value = cache_ptr->value;
+  asection *sec;
+  bfd_vma off;
 
   /* Mask out any existing type bits in case copying from one section
      to another.  */
   sym_pointer->e_type[0] &= ~N_TYPE;
 
-  if (bfd_is_abs_section (bfd_get_section (cache_ptr)))
-    sym_pointer->e_type[0] |= N_ABS;
-  else if (bfd_get_section (cache_ptr) == obj_textsec (abfd)
-          || (bfd_get_section (cache_ptr)->output_section
-              == obj_textsec (abfd)))
-    sym_pointer->e_type[0] |= N_TEXT;
-  else if (bfd_get_section (cache_ptr) == obj_datasec (abfd)
-          || (bfd_get_section (cache_ptr)->output_section
-              == obj_datasec (abfd)))
-    sym_pointer->e_type[0] |= N_DATA;
-  else if (bfd_get_section (cache_ptr) == obj_bsssec (abfd)
-          || (bfd_get_section (cache_ptr)->output_section
-              == obj_bsssec (abfd)))
-    sym_pointer->e_type[0] |= N_BSS;
-  else if (bfd_get_section (cache_ptr) == NULL)
+  sec = bfd_get_section (cache_ptr);
+  off = 0;
+
+  if (sec == NULL)
     {
-      /* Protect the bfd_is_com_section call.  This case occurs, e.g.,
-        for the *DEBUG* section of a COFF file.  */
+      /* This case occurs, e.g., for the *DEBUG* section of a COFF
+        file.  */
       bfd_set_error (bfd_error_nonrepresentable_section);
       return false;
     }
-  else if (bfd_is_und_section (bfd_get_section (cache_ptr)))
+
+  if (sec->output_section != NULL)
+    {
+      off = sec->output_offset;
+      sec = sec->output_section;
+    }
+
+  if (bfd_is_abs_section (sec))
+    sym_pointer->e_type[0] |= N_ABS;
+  else if (sec == obj_textsec (abfd))
+    sym_pointer->e_type[0] |= N_TEXT;
+  else if (sec == obj_datasec (abfd))
+    sym_pointer->e_type[0] |= N_DATA;
+  else if (sec == obj_bsssec (abfd))
+    sym_pointer->e_type[0] |= N_BSS;
+  else if (bfd_is_und_section (sec))
     sym_pointer->e_type[0] = N_UNDF | N_EXT;
-  else if (bfd_is_ind_section (bfd_get_section (cache_ptr)))
+  else if (bfd_is_ind_section (sec))
     sym_pointer->e_type[0] = N_INDR;
-  else if (bfd_is_com_section (bfd_get_section (cache_ptr)))
+  else if (bfd_is_com_section (sec))
     sym_pointer->e_type[0] = N_UNDF | N_EXT;
   else
     {
@@ -1581,11 +1589,7 @@ translate_to_native_sym_flags (abfd, cache_ptr, sym_pointer)
     }
 
   /* Turn the symbol from section relative to absolute again */
-  if (cache_ptr->section->output_section != NULL)
-    value += (cache_ptr->section->output_section->vma
-             + cache_ptr->section->output_offset);
-  else
-    value += cache_ptr->section->vma;
+  value += sec->vma + off;
 
   if ((cache_ptr->flags & BSF_WARNING) != 0)
     sym_pointer->e_type[0] = N_WARNING;
@@ -4465,6 +4469,10 @@ aout_link_input_section_std (finfo, input_bfd, input_section, relocs,
                           + input_section->output_offset
                           - input_section->vma);
 
+#ifdef MY_relocatable_reloc
+         MY_relocatable_reloc (howto, output_bfd, rel, relocation, r_addr);
+#endif
+
          if (relocation == 0)
            r = bfd_reloc_ok;
          else
index bb12e22..94a6fb0 100644 (file)
@@ -16,7 +16,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define TARGET_SYM     m68klynx_coff_vec
 #define TARGET_NAME    "coff-m68k-lynx"
index fdcb430..cac98ad 100644 (file)
@@ -16,7 +16,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define A29K 1
 
diff --git a/bfd/coff-arm.c b/bfd/coff-arm.c
new file mode 100644 (file)
index 0000000..8fa712d
--- /dev/null
@@ -0,0 +1,570 @@
+/* BFD back-end for Intel arm COFF files.
+   Copyright 1990, 1991, 1992, 1993, 1994, 1995 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.  */
+
+#include "bfd.h"
+#include "sysdep.h"
+#include "libbfd.h"
+#include "obstack.h"
+
+#include "coff/arm.h"
+
+#include "coff/internal.h"
+
+#ifdef COFF_WITH_PE
+#include "coff/pe.h"
+#endif
+
+#include "libcoff.h"
+
+static bfd_reloc_status_type
+aoutarm_fix_pcrel_26_done PARAMS ((bfd *, arelent *, asymbol *, PTR,
+                                 asection *, bfd *, char **));
+
+static bfd_reloc_status_type
+aoutarm_fix_pcrel_26 PARAMS ((bfd *, arelent *, asymbol *, PTR,
+                            asection *, bfd *, char **));
+
+
+static bfd_reloc_status_type coff_arm_reloc 
+  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
+
+static bfd_reloc_status_type
+coff_arm_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)
+    {
+      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 aoutarm_std_reloc_howto[] = 
+{
+  /* type              rs size bsz  pcrel bitpos ovrf                     sf name     part_inpl readmask  setmask    pcdone */
+  HOWTO(0,                     /* type */
+       0,                      /* rs */
+       0,                      /* size */
+       8,                      /* bsz */
+       false,                  /* pcrel */
+       0,                      /* bitpos */
+       complain_overflow_bitfield, /* ovf */
+       coff_arm_reloc,         /* sf */
+       "8",                    /*name */
+        true,                  /* partial */
+       0x000000ff,             /*read mask */
+       0x000000ff,             /* setmask */
+       PCRELOFFSET             /* pcdone */),
+  HOWTO(1,  
+       0, 
+       1, 
+       16, 
+       false,
+       0,
+       complain_overflow_bitfield,
+       coff_arm_reloc,
+       "16", 
+       true,
+       0x0000ffff,
+       0x0000ffff, 
+       PCRELOFFSET),
+  HOWTO( 2, 
+       0,
+       2, 
+       32,
+       false,
+       0,
+       complain_overflow_bitfield,
+       coff_arm_reloc,
+       "32",
+        true,
+       0xffffffff,
+       0xffffffff,
+       PCRELOFFSET),
+  HOWTO( 3,
+       2,
+       3, 
+       26,
+       true,
+       0,
+       complain_overflow_signed,
+       aoutarm_fix_pcrel_26 ,
+       "ARM26",
+       true, 
+       0x00ffffff,
+       0x00ffffff, 
+       PCRELOFFSET),
+  HOWTO( 4,        
+       0,
+       0,
+       8, 
+       true,
+       0,
+       complain_overflow_signed, 
+       coff_arm_reloc,
+       "DISP8",  
+       true,
+       0x000000ff,
+       0x000000ff,
+       true),
+  HOWTO( 5, 
+       0,
+       1,
+       16,
+       true,
+       0,
+       complain_overflow_signed, 
+       coff_arm_reloc,
+       "DISP16",
+       true,
+       0x0000ffff,
+       0x0000ffff,
+       true),
+  HOWTO( 6,
+       0,
+       2,
+       32,
+       true,
+       0,
+       complain_overflow_signed, 
+       coff_arm_reloc,
+       "DISP32",
+       true,
+       0xffffffff,
+       0xffffffff,
+       true),
+  HOWTO( 7,  
+       2, 
+       3,   
+       26,
+       false,
+       0,
+       complain_overflow_signed,
+       aoutarm_fix_pcrel_26_done, 
+       "ARM26D",
+       true,
+       0x00ffffff,
+       0x00ffffff, 
+       false),
+  {-1},
+  HOWTO( 9,
+       0,
+       -1,
+       16,
+       false,
+       0, 
+       complain_overflow_bitfield,
+       coff_arm_reloc,
+       "NEG16",
+        true, 
+       0x0000ffff,
+       0x0000ffff, 
+       false),
+  HOWTO( 10, 
+       0, 
+       -2,
+       32,
+       false,
+       0,
+       complain_overflow_bitfield,
+       coff_arm_reloc,
+       "NEG32",
+        true,
+       0xffffffff,
+       0xffffffff,
+       false)
+};
+
+
+
+#define RTYPE2HOWTO(cache_ptr, dst) \
+           (cache_ptr)->howto = aoutarm_std_reloc_howto + (dst)->r_type;
+
+static bfd_reloc_status_type
+aoutarm_fix_pcrel_26_done (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;
+{
+  /* This is dead simple at present.  */
+  return bfd_reloc_ok;
+}
+
+static bfd_reloc_status_type
+aoutarm_fix_pcrel_26 (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;
+{
+  bfd_vma relocation;
+  bfd_size_type addr = reloc_entry->address;
+  long target = bfd_get_32 (abfd, (bfd_byte *) data + addr);
+  bfd_reloc_status_type flag = bfd_reloc_ok;
+  
+  /* If this is an undefined symbol, return error */
+  if (symbol->section == &bfd_und_section
+      && (symbol->flags & BSF_WEAK) == 0)
+    return output_bfd ? bfd_reloc_continue : bfd_reloc_undefined;
+
+  /* If the sections are different, and we are doing a partial relocation,
+     just ignore it for now.  */
+  if (symbol->section->name != input_section->name
+      && output_bfd != (bfd *)NULL)
+    return bfd_reloc_continue;
+
+  relocation = (target & 0x00ffffff) << 2;
+  relocation = (relocation ^ 0x02000000) - 0x02000000; /* Sign extend */
+  relocation += symbol->value;
+  relocation += symbol->section->output_section->vma;
+  relocation += symbol->section->output_offset;
+  relocation += reloc_entry->addend;
+  relocation -= input_section->output_section->vma;
+  relocation -= input_section->output_offset;
+  relocation -= addr;
+  if (relocation & 3)
+    return bfd_reloc_overflow;
+
+  /* Check for overflow */
+  if (relocation & 0x02000000)
+    {
+      if ((relocation & ~0x03ffffff) != ~0x03ffffff)
+       flag = bfd_reloc_overflow;
+    }
+  else if (relocation & ~0x03ffffff)
+    flag = bfd_reloc_overflow;
+
+  target &= ~0x00ffffff;
+  target |= (relocation >> 2) & 0x00ffffff;
+  bfd_put_32 (abfd, target, (bfd_byte *) data + addr);
+
+  /* Now the ARM magic... Change the reloc type so that it is marked as done.
+     Strictly this is only necessary if we are doing a partial relocation.  */
+  reloc_entry->howto = &aoutarm_std_reloc_howto[7];
+  
+  return flag;
+}
+
+static CONST struct reloc_howto_struct *
+arm_reloc_type_lookup(abfd,code)
+      bfd *abfd;
+      bfd_reloc_code_real_type code;
+{
+#define ASTD(i,j)       case i: return &aoutarm_std_reloc_howto[j]
+  if (code == BFD_RELOC_CTOR)
+    switch (bfd_get_arch_info (abfd)->bits_per_address)
+      {
+      case 32:
+        code = BFD_RELOC_32;
+        break;
+      default: return (CONST struct reloc_howto_struct *) 0;
+      }
+
+  switch (code)
+    {
+      ASTD (BFD_RELOC_16, 1);
+      ASTD (BFD_RELOC_32, 2);
+      ASTD (BFD_RELOC_ARM_PCREL_BRANCH, 3);
+      ASTD (BFD_RELOC_8_PCREL, 4);
+      ASTD (BFD_RELOC_16_PCREL, 5);
+      ASTD (BFD_RELOC_32_PCREL, 6);
+    default: return (CONST struct reloc_howto_struct *) 0;
+    }
+}
+
+
+#define coff_bfd_reloc_type_lookup arm_reloc_type_lookup
+
+static reloc_howto_type *coff_arm_rtype_to_howto
+  PARAMS ((bfd *, asection *, struct internal_reloc *,
+          struct coff_link_hash_entry *, struct internal_syment *,
+
+          bfd_vma *));
+
+#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (2)
+/* The page size is a guess based on ELF.  */
+#define COFF_PAGE_SIZE 0x1000
+
+/* For some reason when using arm 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
+aacoff_arm_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 arm
+        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)
+    {
+      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;
+}
+
+
+
+
+
+/* Turn a howto into a reloc  nunmber */
+
+#define SELECT_RELOC(x,howto) { x.r_type = howto->type; }
+#define BADMAG(x) ARMBADMAG(x)
+#define ARM 1                  /* Customize coffcode.h */
+
+
+/* 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 arm COFF target.  */
+#define TWO_DATA_SECS
+
+/* For arm 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
+
+
+/* We use the special COFF backend linker.  */
+#define coff_relocate_section _bfd_coff_generic_relocate_section
+
+
+
+#include "coffcode.h"
+
+static const bfd_target *
+i3coff_object_p(a)
+     bfd *a;
+{
+  return coff_object_p(a);
+}
+
+const bfd_target
+#ifdef TARGET_SYM
+  TARGET_SYM =
+#else
+  armcoff_vec =
+#endif
+{
+#ifdef TARGET_NAME
+  TARGET_NAME,
+#else
+  "coff-arm",                  /* 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 | D_PAGED),
+
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
+#ifdef TARGET_UNDERSCORE
+  TARGET_UNDERSCORE,           /* leading underscore */
+#else
+  0,                           /* leading underscore */
+#endif
+  '/',                         /* 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, i3coff_object_p, /* bfd_check_format */
+       bfd_generic_archive_p, i3coff_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 cfbe5fd..fcc8754 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end for Intel 960 COFF files.
-   Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
+   Copyright (C) 1990, 91, 92, 93, 94, 1995 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -16,7 +16,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define I960 1
 #define BADMAG(x) I960BADMAG(x)
@@ -34,6 +34,12 @@ static bfd_reloc_status_type optcall_callback
 static bfd_reloc_status_type coff_i960_relocate
   PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
 
+#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (3)
+
+/* The i960 does not support an MMU, so COFF_PAGE_SIZE can be
+   arbitrarily small.  */
+#define COFF_PAGE_SIZE 1
+
 #define COFF_LONG_FILENAMES
 
 #define CALLS   0x66003800     /* Template for 'calls' instruction     */
@@ -42,12 +48,12 @@ static bfd_reloc_status_type coff_i960_relocate
 
 static bfd_reloc_status_type 
 optcall_callback (abfd, reloc_entry, symbol_in, data,
-                 ignore_input_section, ignore_bfd, error_message)
+                 input_section, ignore_bfd, error_message)
      bfd *abfd;
      arelent *reloc_entry;
      asymbol *symbol_in;
      PTR data;
-     asection *ignore_input_section;
+     asection *input_section;
      bfd *ignore_bfd;
      char **error_message;
 {
@@ -57,6 +63,13 @@ optcall_callback (abfd, reloc_entry, symbol_in, data,
   bfd_reloc_status_type result;
   coff_symbol_type *cs = coffsymbol(symbol_in);
 
+  /* Don't do anything with symbols which aren't tied up yet,
+     except move the reloc. */
+  if (bfd_is_und_section (cs->symbol.section)) {
+    reloc_entry->address += input_section->output_offset;
+    return bfd_reloc_ok;
+  }
+    
   /* So the target symbol has to be of coff type, and the symbol 
      has to have the correct native information within it */
   if ((bfd_asymbol_flavour(&cs->symbol) != bfd_target_coff_flavour)
@@ -126,8 +139,7 @@ coff_i960_relocate (abfd, reloc_entry, symbol, data, input_section,
      bfd *output_bfd;
      char **error_message;
 {
-  const char *sec_name;
-  asymbol **syms, **sym_end;
+  asection *osec;
 
   if (output_bfd == NULL)
     {
@@ -141,25 +153,42 @@ coff_i960_relocate (abfd, reloc_entry, symbol, data, input_section,
       return bfd_reloc_continue;
     }
 
+  if (bfd_is_com_section (bfd_get_section (symbol)))
+    {
+      /* I don't really know what the right action is for a common
+         symbol.  */
+      return bfd_reloc_continue;
+    }
+
   /* Convert the reloc to use the section symbol.  FIXME: This method
-     is ridiculous.  */
-  sec_name = bfd_get_section_name (output_bfd,
-                                  bfd_get_section (symbol)->output_section);
-  syms = bfd_get_outsymbols (output_bfd);
-  sym_end = syms + bfd_get_symcount (output_bfd);
-  for (; syms < sym_end; syms++)
+     is ridiculous.  Fortunately, we don't use the used_by_bfd field
+     in COFF.  */
+  osec = bfd_get_section (symbol)->output_section;
+  if (osec->used_by_bfd != NULL)
+    reloc_entry->sym_ptr_ptr = (asymbol **) osec->used_by_bfd;
+  else
     {
-      if (bfd_asymbol_name (*syms) != NULL
-         && strcmp (bfd_asymbol_name (*syms), sec_name) == 0
-         && (*syms)->value == 0)
+      const char *sec_name;
+      asymbol **syms, **sym_end;
+
+      sec_name = bfd_get_section_name (output_bfd, osec);
+      syms = bfd_get_outsymbols (output_bfd);
+      sym_end = syms + bfd_get_symcount (output_bfd);
+      for (; syms < sym_end; syms++)
        {
-         reloc_entry->sym_ptr_ptr = syms;
-         break;
+         if (bfd_asymbol_name (*syms) != NULL
+             && (*syms)->value == 0
+             && strcmp (!(*syms)->section->output_section->name, sec_name))
+           {
+             osec->used_by_bfd = (PTR) syms;
+             reloc_entry->sym_ptr_ptr = syms;
+             break;
+           }
        }
-    }
 
-  if (syms >= sym_end)
-    abort ();
+      if (syms >= sym_end)
+       abort ();
+    }
 
   /* Let bfd_perform_relocation do its thing, which will include
      stuffing the symbol addend into the object file.  */
@@ -177,7 +206,7 @@ static reloc_howto_type howto_optcall =
   HOWTO (R_OPTCALL, 0,2,24,true,0, complain_overflow_signed,
         optcall_callback, "optcall", true, 0x00ffffff, 0x00ffffff, 0);
 
-static const reloc_howto_type *
+static reloc_howto_type *
 coff_i960_reloc_type_lookup (abfd, code)
      bfd *abfd;
      bfd_reloc_code_real_type code;
@@ -207,7 +236,7 @@ coff_i960_reloc_type_lookup (abfd, code)
      case 27: howto_ptr = &howto_optcall; break;       \
      default: howto_ptr = 0; break;                    \
      }                                                 \
-   cache_ptr->howto = howto_ptr;                       \
+   (cache_ptr)->howto = howto_ptr;                     \
  }
 
 #include "coffcode.h"
index 4913b51..efc8305 100644 (file)
@@ -16,7 +16,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* This file contains the COFF backend linker code.  */
 
index 5d88a49..212f519 100644 (file)
@@ -16,7 +16,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /*
 SECTION
index fa7f478..3601551 100644 (file)
@@ -16,7 +16,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "bfd.h"
 #include "sysdep.h"
index 12b752a..e597e87 100644 (file)
@@ -15,7 +15,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "bfd.h"
 #include "sysdep.h"
index b85bf41..a5ad16b 100644 (file)
@@ -17,7 +17,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "bfd.h"
 #include "sysdep.h"
index ef1b42e..a362262 100644 (file)
@@ -15,7 +15,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "bfd.h"
 #include "sysdep.h"
index dae2dd2..2916c46 100644 (file)
@@ -15,7 +15,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "bfd.h"
 #include "sysdep.h"
index b0962cf..a3dca6a 100644 (file)
@@ -15,7 +15,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "bfd.h"
 #include "sysdep.h"
index 554e14c..9ba2bed 100644 (file)
@@ -15,7 +15,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 /* ELF linker code.  */
 
 static boolean elf_link_add_object_symbols
index d53cef1..fd790b3 100644 (file)
@@ -13,7 +13,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include <sys/types.h>
 #include <sys/stat.h>
index e5162c4..a40b5c5 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end for linux flavored i386 a.out binaries.
-   Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
+   Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
 
 This file is part of BFD, the Binary File Descriptor library.
 
@@ -15,7 +15,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define        PAGE_SIZE       4096
 #define ZMAGIC_DISK_BLOCK_SIZE 1024
index f48bbdb..463619c 100644 (file)
@@ -16,7 +16,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #ifndef _LIBELF_H_
 #define _LIBELF_H_ 1
index 4ce41e9..5aae545 100644 (file)
@@ -16,7 +16,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "bfd.h"
 #include "sysdep.h"
index d8d696f..15309c2 100644 (file)
@@ -15,7 +15,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define BYTES_IN_WORD 4
 #define N_SHARED_LIB(x) 0
index a0d2b7f..a9c6780 100644 (file)
@@ -16,7 +16,7 @@
 # 
 # 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.
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 DebugOptions =
 # -d DEBUG_BFD_SEND
index 427beb4..807f5b1 100644 (file)
@@ -16,7 +16,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define TARGETNAME "a.out-sunos-big"
 #define MY(OP) CAT(sunos_big_,OP)
@@ -486,7 +486,8 @@ sunos_canonicalize_dynamic_reloc (abfd, storage, syms)
          p = (struct reloc_ext_external *) info->dynrel;
          pend = p + info->dynrel_count;
          for (; p < pend; p++, to++)
-           NAME(aout,swap_ext_reloc_in) (abfd, p, to, syms);
+           NAME(aout,swap_ext_reloc_in) (abfd, p, to, syms,
+                                         info->dynsym_count);
        }
       else
        {
@@ -496,7 +497,8 @@ sunos_canonicalize_dynamic_reloc (abfd, storage, syms)
          p = (struct reloc_std_external *) info->dynrel;
          pend = p + info->dynrel_count;
          for (; p < pend; p++, to++)
-           NAME(aout,swap_std_reloc_in) (abfd, p, to, syms);
+           NAME(aout,swap_std_reloc_in) (abfd, p, to, syms,
+                                         info->dynsym_count);
        }
     }
 
@@ -876,7 +878,7 @@ sunos_add_one_symbol (info, abfd, name, flags, section, value, string,
                && h->root.root.u.def.section->owner != NULL
                && (h->root.root.u.def.section->owner->flags & DYNAMIC) != 0)
               || (h->root.root.type == bfd_link_hash_common
-                  && ((h->root.root.u.c.section->owner->flags & DYNAMIC)
+                  && ((h->root.root.u.c.p->section->owner->flags & DYNAMIC)
                       != 0)))
        {
          /* The existing definition is from a dynamic object.  We
index 0468551..c259a5f 100644 (file)
@@ -17,7 +17,7 @@
 
    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.
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
    The author may be reached (Email) at the address mike@ai.mit.edu,
    or (US mail) as Mike Haertel c/o Free Software Foundation. */
@@ -40,7 +40,7 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with the GNU C Library; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* ANSI and traditional C compatibility macros
 
@@ -238,7 +238,7 @@ extern PTR EXFUN(memset, (PTR, int, size_t));
 
    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.
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
    The author may be reached (Email) at the address mike@@ai.mit.edu,
    or (US mail) as Mike Haertel c/o Free Software Foundation. */
@@ -401,7 +401,7 @@ extern struct mstats EXFUN(mstats, (NOARGS));
 
    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.
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
    The author may be reached (Email) at the address mike@ai.mit.edu,
    or (US mail) as Mike Haertel c/o Free Software Foundation. */
@@ -600,7 +600,7 @@ DEFUN(free, (ptr), PTR ptr)
 
    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.
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
    The author may be reached (Email) at the address mike@ai.mit.edu,
    or (US mail) as Mike Haertel c/o Free Software Foundation. */
@@ -900,7 +900,7 @@ DEFUN(malloc, (size), size_t size)
 
    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.
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
    The author may be reached (Email) at the address mike@ai.mit.edu,
    or (US mail) as Mike Haertel c/o Free Software Foundation. */
@@ -1039,7 +1039,7 @@ DEFUN(realloc, (ptr, size), PTR ptr AND size_t size)
 
    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.
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
    The author may be reached (Email) at the address mike@ai.mit.edu,
    or (US mail) as Mike Haertel c/o Free Software Foundation. */
@@ -1083,7 +1083,7 @@ DEFUN(__default_morecore, (size), ptrdiff_t size)
 
    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.
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
    The author may be reached (Email) at the address mike@ai.mit.edu,
    or (US mail) as Mike Haertel c/o Free Software Foundation. */
index c47084b..d31d1c4 100644 (file)
@@ -29,7 +29,7 @@ o = :
 # 
 # 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.
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 # srcdir = :
 
index 9066f11..365d018 100644 (file)
@@ -15,7 +15,7 @@
 
    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.  */
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* Written by Steve Chamberlain (sac@cygnus.com)
 
index d4c5a06..bc119af 100644 (file)
@@ -12,7 +12,7 @@
 # 
 # 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.  */
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 # Please email any bugs, comments, and/or additions to this file to:
 # bug-dejagnu@prep.ai.mit.edu
@@ -20,7 +20,7 @@
 # This file was written by Rob Savoye <rob@cygnus.com>
 # and rewritten by Ian Lance Taylor <ian@cygnus.com>
 
-if [istarget hppa*-*-*] then {
+if ![istarget hppa*-*-*] then {
   return
 }
 
@@ -39,7 +39,12 @@ if {![binutils_assemble $AS $srcdir$subdir/addendbug.s tmpdir/addendbug.o]} then
 
 set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -r tmpdir/addendbug.o"]
 
-set want "00000000 R_DP_RELATIVE\[     \]+is_idchar\\+0xffffffe0.*"
+if [istarget hppa*-*-*elf*] then {
+  set want "00000000 R_PARISC_DPREL21L\[       \]+is_idchar\\+0xffffffe0.*"
+} else {
+  set want "00000000 R_DP_RELATIVE\[   \]+is_idchar\\+0xffffffe0.*"
+}
+
 
 if [regexp $want $got] then {
     pass "addendbug test"
diff --git a/binutils/testsuite/binutils-all/nm.exp b/binutils/testsuite/binutils-all/nm.exp
new file mode 100644 (file)
index 0000000..2abc9df
--- /dev/null
@@ -0,0 +1,101 @@
+#   Copyright (C) 1993, 1994 Free Software Foundation, Inc.
+
+# 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.  */
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-dejagnu@prep.ai.mit.edu
+
+# This file was written by Rob Savoye <rob@cygnus.com>
+# and rewritten by Ian Lance Taylor <ian@cygnus.com>
+
+if {[which $NM] == 0} then {
+    perror "$NM does not exist"
+    return
+}
+
+send_user "Version [binutil_version $NM]"
+
+
+if {![binutils_assemble $AS $srcdir$subdir/bintest.s tmpdir/bintest.o]} then {
+    return
+}
+
+# Test nm with no arguments.
+
+# This test does not work correctly on ECOFF targets, because ECOFF
+# stores most symbols twice, which messes up the nm output.
+setup_xfail "alpha*-*-osf*" "alpha*-*-netware*"
+setup_xfail "mips*-*-ultrix*" "mips*-*-ecoff*" "mips*-*-irix4*"
+setup_xfail "mips*-*-riscos*" "mips*-*-sysv3*"
+
+set got [binutils_run $NM "$NMFLAGS tmpdir/bintest.o"]
+
+if [info exists vars] then { unset vars }
+while {[regexp "(\[a-zA-Z\]) (\[a-z\]*_symbol)(.*)" $got all type symbol rest]} {
+    set vars($symbol) $type
+    set got $rest
+}
+
+if {![info exists vars(text_symbol)] \
+     || $vars(text_symbol) != "t" \
+     || ![info exists vars(data_symbol)] \
+     || $vars(data_symbol) != "d" \
+     || ![info exists vars(common_symbol)] \
+     || $vars(common_symbol) != "C" \
+     || ![info exists vars(external_symbol)] \
+     || $vars(external_symbol) != "U"} then {
+    fail "nm (no arguments)"
+} else {
+    pass "nm (no arguments)"
+}
+
+# Test nm -g
+
+set got [binutils_run $NM "$NMFLAGS -g tmpdir/bintest.o"]
+
+if [info exists vars] then { unset vars }
+while {[regexp "(\[a-z\]*_symbol)(.*)" $got all symbol rest]} {
+    set vars($symbol) 1
+    set got $rest
+}
+
+if {[info exists vars(text_symbol)] \
+     || [info exists vars(data_symbol)] \
+     || ![info exists vars(common_symbol)] \
+     || ![info exists vars(external_symbol)]} then {
+    fail "nm -g"
+} else {
+    pass "nm -g"
+}
+
+# Test nm -P
+
+# This test does not work correctly on ECOFF targets, because ECOFF
+# stores most symbols twice, which messes up the nm output.
+setup_xfail "alpha*-*-osf*" "alpha*-*-netware*"
+setup_xfail "mips*-*-ultrix*" "mips*-*-ecoff*" "mips*-*-irix4*"
+setup_xfail "mips*-*-riscos*" "mips*-*-sysv3*"
+
+set got [binutils_run $NM "$NMFLAGS -P tmpdir/bintest.o"]
+
+set want "common_symbol C \[0\]*4.*data_symbol d \[0-9a-fA-F\]*.*external_symbol U.*text_symbol t \[0-9a-fA-F\]*"
+
+if [regexp $want $got] then {
+    pass "nm -P"
+} else {
+    fail "nm -P"
+}
+
+# There are certainly other tests that could be run.
index 039b24b..9a32672 100644 (file)
@@ -12,7 +12,7 @@
 # 
 # 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.  */
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 # Please email any bugs, comments, and/or additions to this file to:
 # bug-dejagnu@prep.ai.mit.edu
index acf5360..c039dad 100644 (file)
@@ -12,7 +12,7 @@
 # 
 # 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.  */
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 # Please email any bugs, comments, and/or additions to this file to:
 # bug-dejagnu@prep.ai.mit.edu
@@ -32,6 +32,9 @@ send_user "Version [binutil_version $OBJDUMP]"
 set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -i"]
 
 set cpus_expected "(a29k|alliant|alpha|arm|convex|h8|hppa|i386|i860|i960|m68k|m88k|mips|ns32k|powerpc|pyramid|romp|rs6000|sh|sparc|tahoe|vax|we32k|z8k)"
+# start-sanitize-arc
+set cpus_expected "(a29k|alliant|alpha|arc|arm|convex|h8|hppa|i386|i860|i960|m68k|m88k|mips|ns32k|powerpc|pyramid|romp|rs6000|sh|sparc|tahoe|vax|we32k|z8k)"
+# end-sanitize-arc
 
 set want "BFD header file version.*srec.*header .* endian, data .* endian.*$cpus_expected"
 
@@ -43,6 +46,7 @@ if [regexp $want $got] then {
 
 # The remaining tests require a test file.
 
+
 if {![binutils_assemble $AS $srcdir$subdir/bintest.s tmpdir/bintest.o]} then {
     return
 }
@@ -63,15 +67,16 @@ if ![regexp $want $got] then {
 
 set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -h tmpdir/bintest.o"]
 
-set want "tmpdir/bintest.o:\[  \]*file format.*SECTION\[       ]*\[0-9\]+\[    \]*\\\[\[^\]\]*(text|TEXT)\[^\]\]*\\\]\[        :\]*size\[      \]*(\[0-9a-fA-F\]+)\[   \]*.*SECTION\[  \]*\[0-9\]+\[   \]*\\\[\[^\]\]*(data|DATA)\[^\]\]*\\\]\[        :\]*size\[      \]*(\[0-9a-fA-F\]+)\[   \]*"
+set want "tmpdir/bintest.o:\[  \]*file format.*SECTION\[       ]*\[0-9\]+\[    \]*\\\[\[^\]\]*(text|TEXT|CODE)\[^\]\]*\\\]\[   :\]*size\[      \]*(\[0-9a-fA-F\]+)\[   \]*.*SECTION\[  \]*\[0-9\]+\[   \]*\\\[\[^\]\]*(data|DATA)\[^\]\]*\\\]\[        :\]*size\[      \]*(\[0-9a-fA-F\]+)\[   \]*"
 
 if ![regexp $want $got all text_name text_size data_name data_size] then {
     fail "objdump -h"
 } else {
     verbose "text size is $text_size"
     verbose "data size is $data_size"
-    if {$text_size < 8 || $data_size < 4} then {
-       fail "objdump -h (sizes too small)"
+    if {[expr "0x$text_size"] < 8 || [expr "0x$data_size"] < 4} then {
+       send_log "sizes too small\n"
+       fail "objdump -h"
     } else {
        pass "objdump -h"
     }
@@ -100,7 +105,7 @@ if {![info exists vars(text_symbol)] \
 
 set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -r tmpdir/bintest.o"]
 
-set want "tmpdir/bintest.o:\[  \]*file format.*RELOCATION RECORDS FOR \\\[\[^\]\]*(text|TEXT)\[^\]\]*\\\].*external_symbol"
+set want "tmpdir/bintest.o:\[  \]*file format.*RELOCATION RECORDS FOR \\\[\[^\]\]*(text|TEXT|CODE)\[^\]\]*\\\].*external_symbol"
 
 if [regexp $want $got] then {
     pass "objdump -r"
@@ -112,7 +117,7 @@ if [regexp $want $got] then {
 
 set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -s tmpdir/bintest.o"]
 
-set want "tmpdir/bintest.o:\[  \]*file format.*Contents.*(text|TEXT)\[^0-9\]*\[        \]*\[0-9a-fA-F\]*\[     \]*(00000001|01000000).*Contents.*(data|DATA)\[^0-9\]*\[        \]*\[0-9a-fA-F\]*\[     \]*(00000002|02000000)"
+set want "tmpdir/bintest.o:\[  \]*file format.*Contents.*(text|TEXT|CODE)\[^0-9\]*\[   \]*\[0-9a-fA-F\]*\[     \]*(00000001|01000000).*Contents.*(data|DATA)\[^0-9\]*\[        \]*\[0-9a-fA-F\]*\[     \]*(00000002|02000000)"
 
 if [regexp $want $got] then {
     pass "objdump -s"
diff --git a/binutils/testsuite/binutils-all/size.exp b/binutils/testsuite/binutils-all/size.exp
new file mode 100644 (file)
index 0000000..1a07dd9
--- /dev/null
@@ -0,0 +1,70 @@
+#   Copyright (C) 1993, 1994 Free Software Foundation, Inc.
+
+# 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.  */
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-dejagnu@prep.ai.mit.edu
+
+# This file was written by Rob Savoye <rob@cygnus.com>
+# and rewritten by Ian Lance Taylor <ian@cygnus.com>
+
+if {[which $SIZE] == 0} then {
+    perror "$SIZE does not exist"
+    return
+}
+
+send_user "Version [binutil_version $SIZE]"
+
+
+if {![binutils_assemble $AS $srcdir$subdir/bintest.s tmpdir/bintest.o]} then {
+    return
+}
+
+set dec "\[0-9\]+"
+set hex "\[0-9a-fA-F\]+"
+
+# Test size with no arguments
+
+set got [binutils_run $SIZE "$SIZEFLAGS tmpdir/bintest.o"]
+
+set want "($dec)\[     \]+($dec)\[     \]+($dec)\[     \]+($dec)\[     \]+($hex)\[     \]+tmpdir/bintest.o"
+
+if ![regexp $want $got all text data bss dtot hextot] then {
+    fail "size (no arguments)"
+} else {
+    if {$text < 8 || $data < 4} then {
+       fail "size (no arguments)"
+    } else {
+       pass "size (no arguments)"
+    }
+}
+
+# Test size -A
+
+set got [binutils_run $SIZE "$SIZEFLAGS -A tmpdir/bintest.o"]
+
+set want "tmpdir/bintest.o.*(text|TEXT)\[^\n\r\]*\[    \]($dec)\[      \]+$dec.*(data|DATA)\[^\n\r\]*\[        \]($dec)\[      \]+$dec"
+
+if ![regexp $want $got all textname textsize dataname datasize] then {
+    fail "size -A"
+} else {
+    verbose "text size: $textsize"
+    verbose "data size: $datasize"
+    if {$textsize < 8 || $datasize < 4} then {
+       fail "size -A"
+    } else {
+       pass "size -A"
+    }
+}
index 4f4d7b3..6de8538 100644 (file)
@@ -1,4 +1,4 @@
-#   Copyright (C) 1988, 1990, 1991, 1992 Free Software Foundation, Inc.
+#   Copyright (C) 1993, 1994 Free Software Foundation, Inc.
 
 # 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
@@ -12,7 +12,7 @@
 # 
 # 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.  */
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 # Please email any bugs, comments, and/or additions to this file to:
 # bug-dejagnu@prep.ai.mit.edu
 # This file was written by Rob Savoye. (rob@cygnus.com)
 
 load_lib util-defs.exp
+load_lib utils-lib.exp
+
+if ![info exists AS] then {
+    set AS [findfile $base_dir/../gas/as.new $base_dir/../gas/as.new [transform as]]
+}
+if ![info exists ASFLAGS] then {
+    set ASFLAGS ""
+}
 
-global NM
 if ![info exists NM] then {
-    set NM [findfile $base_dir/../nm]
+    set NM [findfile $base_dir/nm.new $base_dir/nm.new [transform nm]]
 }
-global NMFLAGS
 if ![info exists NMFLAGS] then {
     set NMFLAGS ""
 }
-global SIZE
+
 if ![info exists SIZE] then {
-    set SIZE [findfile $base_dir/../size]
+    set SIZE [findfile $base_dir/size]
 }
-global SIZEFLAGS
 if ![info exists SIZEFLAGS] then {
     set SIZEFLAGS ""
 }
-global OBJDUMP
+
 if ![info exists OBJDUMP] then {
-    set OBJDUMP [findfile $base_dir/../objdump]
+    set OBJDUMP [findfile $base_dir/objdump]
 }
-global OBJDUMPFLAGS
 if ![info exists OBJDUMPFLAGS] then {
     set OBJDUMPFLAGS ""
 }
 
+if ![info exists OBJCOPY] then {
+    set OBJCOPY [findfile $base_dir/objcopy]
+}
+if ![info exists OBJCOPYFLAGS] then {
+    set OBJCOPYFLAGS ""
+}
+
+if ![file isdirectory tmpdir] {catch "exec mkdir tmpdir" status}
+
+#
+# binutils_run
+#      run a program, returning the output
+#      sets binutils_run_failed if the program does not exist
+#
+proc binutils_run { prog progargs } {
+    default_binutils_run $prog $progargs
+}
+
+#
+# binutils_assemble
+#      assemble a file
+#
+proc binutils_assemble { as source object } {
+    default_binutils_assemble $as $source $object
+}
+
 #
 # add some basic error trapping. These mostly catch programming error's
 # within the tests themselves
@@ -54,6 +84,3 @@ expect_before {
     buffer_full                   { perror "internal buffer is full." }
     "can't open '*'" { perror "Can't open test file." }
 }
-
-
-
diff --git a/binutils/testsuite/lib/utils-lib.exp b/binutils/testsuite/lib/utils-lib.exp
new file mode 100644 (file)
index 0000000..2eb6821
--- /dev/null
@@ -0,0 +1,116 @@
+#   Copyright (C) 1993, 1994 Free Software Foundation, Inc.
+
+# 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.  */
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-dejagnu@prep.ai.mit.edu
+
+# This file was written by Rob Savoye <rob@cygnus.com>
+# and extended by Ian Lance Taylor <ian@cygnus.com>
+
+proc binutil_version { prog } {
+    if {[which $prog] == 0} then {
+       perror "$prog can't be run, file not found."
+       return ""
+    }
+    catch "exec $prog --version" tmp
+    # Should find a way to discard constant parts, keep whatever's
+    # left, so the version string could be almost anything at all...
+    regexp "version (cygnus-|)\[-0-9.a-zA-Z-\]+" $tmp version
+    if ![info exists version] then {
+        return "[which $prog] (no version number)\n"
+    }
+    set tmp $version
+    return "[which $prog] $version\n"
+}
+
+#
+# default_binutils_run
+#      run a program, returning the output
+#      sets binutils_run_failed if the program does not exist
+#
+proc default_binutils_run { prog progargs } {
+    global binutils_run_failed
+
+    set binutils_run_failed 0
+
+    if {[which $prog] == 0} then {
+       perror "$prog does not exist"
+       set binutils_run_failed 1
+       return ""
+    }
+
+    send_log "$prog $progargs\n"
+    verbose "$prog $progargs"
+
+    # This used to be
+    # catch "exec $prog $progargs" exec_output
+    # but that would evaluate $progargs twice, which would fail if
+    # any arguments started with `$'.  This is a dismal hack to avoid
+    # this problem.  I tried using
+    # catch { exec $prog $progargs } exec_output
+    # but that failed because $progargs was not split into words by
+    # exec.  I don't know if this operation can be done correctly.  No
+    # matter how hard I try, I can not convince myself that TCL is a
+    # language.
+    regsub -all "\\$" $progargs "\\$" progq
+    catch "exec $prog $progq" exec_output
+    if {![string match "" $exec_output]} then {
+       send_log "$exec_output\n"
+       verbose "$exec_output"
+    }
+    return $exec_output
+}
+
+#
+# default_binutils_assemble
+#      assemble a file
+#
+proc default_binutils_assemble { as source object } {
+    global ASFLAGS
+    global srcdir
+
+    if {[which $as] == 0} then {
+       perror "$as does not exist"
+       return 0
+    }
+
+    if ![info exists ASFLAGS] { set ASFLAGS "" }
+
+    # The HPPA assembler syntax is a little different than most, to make
+    # the test source file assemble we need to run it through sed.
+    #
+    # This is a hack in that it won't scale well if other targets need
+    # similar transformations to assemble.  We'll generalize the hack
+    # if/when other targets need similar handling.
+    if [istarget "hppa*-*-*" ] then {
+       send_log "sed -f $srcdir/config/hppa.sed < $source | $as $ASFLAGS -o $object\n"
+       verbose "sed -f $srcdir/config/hppa.sed < $source | $as $ASFLAGS -o $object"
+       catch "exec sed -f $srcdir/config/hppa.sed < $source | $as $ASFLAGS -o $object" exec_output
+    } else {
+       send_log "$as $ASFLAGS -o $object $source\n"
+       verbose "$as $ASFLAGS -o $object $source"
+       catch "exec $as $ASFLAGS -o $object $source" exec_output
+    }
+
+    if [string match "" $exec_output] then {
+       return 1
+    } else {
+       send_log "$exec_output\n"
+       verbose "$exec_output"
+       perror "$source: assembly failed"
+       return 0
+    }
+}
index 193e828..4bcce0b 100644 (file)
@@ -16,7 +16,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #ifndef BFDLINK_H
 #define BFDLINK_H
index 0204fa2..002e127 100644 (file)
@@ -15,7 +15,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 struct a29k_opcode {
   /* Name of the instruction.  */
index 17fbf51..a3cb97d 100644 (file)
@@ -15,7 +15,7 @@
 # 
 # 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.
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 
 srcdir = .
@@ -196,7 +196,7 @@ LIBIBERTY = ../libiberty/libiberty.a
 
 ALL_EMULATIONS = ea29k.o ealpha.o earmaoutl.o earmoutb.o \
        ecoff_sparc.o eebmon29k.o \
-       eelf32_sparc.o eelf32bmip.o eelf32lmip.o eelf32ppc.o eelf32ppcle.o \
+       eelf32_sparc.o eelf32bmip.o eelf32lmip.o eelf32ppc.o eelf32lppc.o \
        eelf64_sparc.o eelf_i386.o egld960.o ego32.o eh8300.o \
        eh8300h.o eh8500.o eh8500b.o eh8500c.o eh8500m.o eh8500s.o \
        ehp300bsd.o ehp3hpux.o ehppaelf.o ei386aout.o ei386bsd.o \
@@ -319,6 +319,12 @@ ei386go32.c: $(srcdir)/emulparams/i386go32.sh \
 ei386mach.c: $(srcdir)/emulparams/i386mach.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} i386mach
+ei386moss.c: $(srcdir)/emulparams/i386moss.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+       ${GENSCRIPTS} i386moss
+ei386msdos.c: $(srcdir)/emulparams/i386msdos.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/i386msdos.sc ${GEN_DEPENDS}
+       ${GENSCRIPTS} i386msdos
 eebmon29k.c: $(srcdir)/emulparams/ebmon29k.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/ebmon29k.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} ebmon29k
@@ -427,9 +433,9 @@ esparclynx.c: $(srcdir)/emulparams/sparclynx.sh \
 eelf32ppc.c: $(srcdir)/emulparams/elf32ppc.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} elf32ppc
-eelf32ppcle.c: $(srcdir)/emulparams/elf32ppcle.sh \
+eelf32lppc.c: $(srcdir)/emulparams/elf32lppc.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
-       ${GENSCRIPTS} elf32ppcle
+       ${GENSCRIPTS} elf32lppc
 eriscix.c: $(srcdir)/emulparams/riscix.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} riscix
index 4ca37dc..ae16e88 100644 (file)
@@ -16,7 +16,7 @@
 
    You should have received a copy of the GNU General Public License
    along with GLD; see the file COPYING.  If not, write to
-   the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+   the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* Look in this environment name for the linker to pretend to be */
 #define EMULATION_ENVIRON "LDEMULATION"
index bd9dfaa..4e29a0b 100644 (file)
@@ -31,7 +31,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define TARGET_IS_armpe
 
@@ -227,4 +227,4 @@ struct ld_emulation_xfer_struct ld_armpe_emulation =
   "armpe",
   "pei-arm"
 };
-EOF
\ No newline at end of file
+EOF
index bc84a8f..b3cb74d 100644 (file)
@@ -22,7 +22,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define TARGET_IS_${EMULATION_NAME}
 
index 9095ca5..4b18cbd 100644 (file)
@@ -31,7 +31,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define TARGET_IS_i386pe
 
index 1d1f05a..9f04936 100644 (file)
@@ -21,7 +21,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define TARGET_IS_${EMULATION_NAME}
 
index d81279b..e18b2fc 100644 (file)
@@ -22,7 +22,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define TARGET_IS_${EMULATION_NAME}
 
@@ -100,6 +100,7 @@ gld${EMULATION_NAME}_find_so (inp)
   char *alc;
   int max_maj, max_min;
   char *found;
+  boolean found_static;
   struct stat st;
 
   if (! inp->search_dirs_flag
@@ -115,6 +116,7 @@ gld${EMULATION_NAME}_find_so (inp)
     len = strlen (filename);
   else
     {
+      force_maj = atoi (dot + 1);
       len = dot - filename;
       alc = (char *) alloca (len + 1);
       strncpy (alc, filename, len);
@@ -123,6 +125,7 @@ gld${EMULATION_NAME}_find_so (inp)
     }
 
   found = NULL;
+  found_static = false;
   max_maj = max_min = 0;
   for (search = search_head; search != NULL; search = search->next)
     {
@@ -138,8 +141,17 @@ gld${EMULATION_NAME}_find_so (inp)
          int found_maj, found_min;
 
          if (strncmp (entry->d_name, "lib", 3) != 0
-             || strncmp (entry->d_name + 3, inp->filename, len) != 0
-             || strncmp (entry->d_name + 3 + len, ".so", 3) != 0)
+             || strncmp (entry->d_name + 3, inp->filename, len) != 0)
+           continue;
+
+         if (dot == NULL
+             && strncmp (entry->d_name + 3 + len, ".a", 2) == 0)
+           {
+             found_static = true;
+             continue;
+           }
+
+         if (strncmp (entry->d_name + 3 + len, ".so", 3) != 0)
            continue;
 
          /* We've found a .so file.  Work out the major and minor
@@ -176,7 +188,7 @@ gld${EMULATION_NAME}_find_so (inp)
 
       closedir (dir);
 
-      if (found != NULL)
+      if (found != NULL || found_static)
        break;
     }
 
@@ -359,7 +371,7 @@ gld${EMULATION_NAME}_before_allocation ()
       if (sdyn != NULL)
        h->u.def.section = sdyn;
       else
-       h->u.def.section = &bfd_abs_section;
+       h->u.def.section = bfd_abs_section_ptr;
     }
 }
 
@@ -555,6 +567,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
   syslib_default,
   hll_default,
   after_parse_default,
+  after_open_default,
   after_allocation_default,
   set_output_arch_default,
   ldemul_default_target,
@@ -562,7 +575,8 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
   gld${EMULATION_NAME}_get_script,
   "${EMULATION_NAME}",
   "${OUTPUT_FORMAT}",
-  0, /* finish */
-  gld${EMULATION_NAME}_create_output_section_statements
+  NULL, /* finish */
+  gld${EMULATION_NAME}_create_output_section_statements,
+  NULL /* open_dynamic_library */
 };
 EOF
diff --git a/ld/ld.h b/ld/ld.h
index d23633e..048734c 100644 (file)
--- a/ld/ld.h
+++ b/ld/ld.h
@@ -16,7 +16,7 @@
 
    You should have received a copy of the GNU General Public License
    along with GLD; see the file COPYING.  If not, write to
-   the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+   the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #ifndef LD_H
 #define LD_H
@@ -58,6 +58,17 @@ typedef struct
 
   /* Runtime library search path from the -rpath argument.  */
   char *rpath;
+
+  /* Big or little endian as set on command line.  */
+  enum { ENDIAN_UNSET = 0, ENDIAN_BIG, ENDIAN_LITTLE } endian;
+
+  /* If true, export all symbols in the dynamic symbol table of an ELF
+     executable.  */
+  boolean export_dynamic;
+
+  /* If true, build MIPS embedded PIC relocation tables in the output
+     file.  */
+  boolean embedded_relocs;
 } args_type;
 
 extern args_type command_line;
@@ -92,6 +103,9 @@ typedef struct
   FILE *map_file;
 
   boolean stats;
+
+  int split_by_reloc;
+  boolean split_by_file;
 } ld_config_type;
 
 extern ld_config_type config;
index f084d36..5fd83ee 100644 (file)
@@ -14,7 +14,7 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with GLD; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /*
  ldfile.c
@@ -33,29 +33,27 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "ldmain.h"
 #include "ldgram.h"
 #include "ldlex.h"
+#include "ldemul.h"
 
 #include <ctype.h>
 
-char *ldfile_input_filename;
+const char *ldfile_input_filename;
+boolean ldfile_assumed_script = false;
 const char *ldfile_output_machine_name = "";
 unsigned long ldfile_output_machine;
 enum bfd_architecture ldfile_output_architecture;
 search_dirs_type *search_head;
 
-/* start-sanitize-mpw */
 #ifndef MPW
-/* end-sanitize-mpw */
 #ifdef VMS
 char *slash = "";
 #else
 char *slash = "/";
 #endif
-/* start-sanitize-mpw */
 #else /* MPW */
 /* The MPW path char is a colon. */
 char *slash = ":";
 #endif /* MPW */
-/* end-sanitize-mpw */
 
 /* LOCAL */
 
@@ -70,11 +68,9 @@ typedef struct search_arch
 static search_arch_type *search_arch_head;
 static search_arch_type **search_arch_tail_ptr = &search_arch_head;
  
-static bfd *cached_bfd_openr PARAMS ((const char *attempt,
-                                     lang_input_statement_type *entry));
-static bfd *open_a PARAMS ((char *arch, lang_input_statement_type *entry,
-                           char *lib, char *suffix));
-static FILE *try_open PARAMS ((char *name, char *exten));
+static boolean try_open_bfd PARAMS ((const char *attempt,
+                                    lang_input_statement_type *entry));
+static FILE *try_open PARAMS ((const char *name, const char *exten));
 
 void
 ldfile_add_library_path (name, cmdline)
@@ -91,85 +87,93 @@ ldfile_add_library_path (name, cmdline)
   search_tail_ptr = &new->next;
 }
 
+/* Try to open a BFD for a lang_input_statement.  */
 
-static bfd *
-cached_bfd_openr(attempt,entry)
+static boolean
+try_open_bfd (attempt, entry)
      const char *attempt;
-     lang_input_statement_type  *entry;
+     lang_input_statement_type *entry;
 {
-  entry->the_bfd = bfd_openr(attempt, entry->target);
-  if (trace_file_tries == true ) {
+  entry->the_bfd = bfd_openr (attempt, entry->target);
+
+  if (trace_file_tries)
     info_msg ("attempt to open %s %s\n", attempt,
-               (entry->the_bfd == (bfd *)NULL) ? "failed" : "succeeded" );
-  }
-  return entry->the_bfd;
+             entry->the_bfd == NULL ? "failed" : "succeeded");
+
+  if (entry->the_bfd != NULL)
+    return true;
+  else
+    return false;
 }
 
-static bfd *
-open_a(arch, entry, lib, suffix)
-     char *arch;
+/* Search for and open the file specified by ENTRY.  If it is an
+   archive, use ARCH, LIB and SUFFIX to modify the file name.  */
+
+boolean
+ldfile_open_file_search (arch, entry, lib, suffix)
+     const char *arch;
      lang_input_statement_type *entry;
-     char *lib;
-     char *suffix;
+     const char *lib;
+     const char *suffix;
 {
-  bfd*desc;
-  search_dirs_type *search ;
+  search_dirs_type *search;
 
   /* If this is not an archive, try to open it in the current
      directory first.  */
   if (! entry->is_archive)
     {
-      desc = cached_bfd_openr (entry->filename, entry);
-      if (desc != NULL)
-       return desc;
+      if (try_open_bfd (entry->filename, entry))
+       return true;
     }
 
   for (search = search_head;
        search != (search_dirs_type *)NULL;
        search = search->next) 
     {
-      char buffer[1000];
       char *string;
-      if (entry->is_archive == true) {
-       sprintf(buffer,
-               "%s%s%s%s%s%s",
-               search->name,
-               slash,
-               lib,
-               entry->filename, arch, suffix);
-      }
-      else {
-       if (entry->filename[0] == '/' || entry->filename[0] == '.') {
-         strcpy(buffer, entry->filename);
-       } else {
-         sprintf(buffer,"%s%s%s",search->name, slash, entry->filename);
-       } 
-      }
-      string = buystring(buffer);      
-      desc = cached_bfd_openr (string, entry);
-      if (desc)
+
+      string = (char *) xmalloc (strlen (search->name)
+                                + strlen (slash)
+                                + strlen (lib)
+                                + strlen (entry->filename)
+                                + strlen (arch)
+                                + strlen (suffix)
+                                + 1);
+
+      if (entry->is_archive)
+       sprintf (string, "%s%s%s%s%s%s", search->name, slash,
+                lib, entry->filename, arch, suffix);
+      else if (entry->filename[0] == '/' || entry->filename[0] == '.')
+       strcpy (string, entry->filename);
+      else
+       sprintf (string, "%s%s%s", search->name, slash, entry->filename);
+
+      if (try_open_bfd (string, entry))
        {
          entry->filename = string;
-         entry->the_bfd =  desc;
-         return desc;
+         return true;
        }
-      free(string);
+
+      free (string);
     }
-  return (bfd *)NULL;
+
+  return false;
 }
 
-/* Open the input file specified by 'entry', and return a descriptor.
-   The open file is remembered; if the same file is opened twice in a row,
-   a new open is not actually done.  */
+/* Open the input file specified by ENTRY.  */
 
 void
 ldfile_open_file (entry)
      lang_input_statement_type *entry;
 {
-  ASSERT (entry->the_bfd == NULL);
+  if (entry->the_bfd != NULL)
+    return;
 
   if (! entry->search_dirs_flag)
-    entry->the_bfd = cached_bfd_openr (entry->filename, entry);
+    {
+      if (try_open_bfd (entry->filename, entry))
+       return;
+    }
   else
     {
       search_arch_type *arch;
@@ -181,55 +185,58 @@ ldfile_open_file (entry)
        {
          if (config.dynamic_link)
            {
-             /* FIXME: Perhaps we will sometimes want something other
-                than .so.  */
-             if (open_a (arch->name, entry, "lib", ".so") != (bfd *) NULL)
+             if (ldemul_open_dynamic_archive (arch->name, entry))
                return;
            }
-         if (open_a (arch->name, entry, "lib", ".a") != (bfd *) NULL)
+         if (ldfile_open_file_search (arch->name, entry, "lib", ".a"))
            return;
 #ifdef VMS
-         if (open_a (arch->name, entry, ":lib", ".a") != (bfd *) NULL)
+         if (ldfile_open_file_search (arch->name, entry, ":lib", ".a"))
            return;
 #endif
        }
     }
 
-  if (entry->the_bfd == NULL)
-    einfo("%F%P: cannot open %s: %E\n", entry->local_sym_name);
+  einfo("%F%P: cannot open %s: %E\n", entry->local_sym_name);
 }
 
 /* Try to open NAME; if that fails, try NAME with EXTEN appended to it.  */
 
 static FILE *
-try_open(name, exten)
-     char *name;
-     char *exten;
+try_open (name, exten)
+     const char *name;
+     const char *exten;
 {
   FILE *result;
   char buff[1000];
 
-  result = fopen(name, "r");
-  if (trace_file_tries == true) {
-    if (result == (FILE *)NULL) {
-      info_msg ("cannot find ");
+  result = fopen (name, "r");
+  if (trace_file_tries)
+    {
+      if (result == NULL)
+       info_msg ("cannot find script file ");
+      else
+       info_msg ("opened script file ");
+      info_msg ("%s\n",name);
     }
-    info_msg ("%s\n",name);
-  }
-  if (result != (FILE *)NULL) {
+
+  if (result != NULL)
     return result;
-  }
 
-  if (*exten) {
-    sprintf(buff, "%s%s", name, exten);
-    result = fopen(buff, "r");
-    if (trace_file_tries == true) {
-      if (result == (FILE *)NULL) {
-       info_msg ("cannot find ");
-      }
-      info_msg ("%s\n", buff);
+  if (*exten)
+    {
+      sprintf (buff, "%s%s", name, exten);
+      result = fopen (buff, "r");
+      if (trace_file_tries)
+       {
+         if (result == NULL)
+           info_msg ("cannot find script file ");
+         else
+           info_msg ("opened script file ");
+         info_msg ("%s\n", buff);
+       }
     }
-  }
+
   return result;
 }
 
@@ -237,9 +244,9 @@ try_open(name, exten)
    specified with -L, without and with EXTEND apppended.  */
 
 FILE *
-ldfile_find_command_file(name, extend)
-char *name;
-char *extend;
+ldfile_find_command_file (name, extend)
+     const char *name;
+     const char *extend;
 {
   search_dirs_type *search;
   FILE *result;
@@ -261,8 +268,8 @@ char *extend;
 }
 
 void
-ldfile_open_command_file(name)
-char *name;
+ldfile_open_command_file (name)
+     const char *name;
 {
   FILE *ldlex_input_stack;
   ldlex_input_stack = ldfile_find_command_file(name, "");
@@ -274,6 +281,7 @@ char *name;
   lex_push_file(ldlex_input_stack, name);
   
   ldfile_input_filename = name;
+  lineno = 1;
   had_script = true;
 }
 
index 3c9350d..352f0f1 100644 (file)
@@ -15,7 +15,7 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with GLD; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "bfd.h"
 #include "sysdep.h"
@@ -1872,6 +1872,7 @@ lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
        }
        dot += size;
        output_section_statement->bfd_section->_raw_size += size;
+       output_section_statement->bfd_section->flags |= SEC_HAS_CONTENTS;
      }
       break;
 
@@ -2781,7 +2782,7 @@ lang_add_entry (name, cmdline)
       entry_symbol = name;
       from_cmdline = cmdline;
     }
-#ifdef 0 /* WINDOWS_NT */
+#if 0 
   /* don't do this yet.  It seems to work (the executables run), but the 
      image created is very different from what I was getting before indicating
      that something else is being pulled in.  When everything else is working,
index a4e3ca7..5e05017 100644 (file)
@@ -1,5 +1,5 @@
 /* ldlang.h - linker command language support
-   Copyright 1991, 1992, 1993 Free Software Foundation, Inc.
+   Copyright 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
    
    This file is part of GLD, the Gnu Linker.
    
@@ -15,7 +15,7 @@
    
    You should have received a copy of the GNU General Public License
    along with GLD; see the file COPYING.  If not, write to
-   the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+   the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #ifndef LDLANG_H
 #define LDLANG_H
@@ -68,7 +68,8 @@ typedef struct lang_statement_header_struct
       lang_target_statement_enum,
       lang_output_statement_enum,
       lang_padding_statement_enum,
-      
+      lang_group_statement_enum,
+
       lang_afile_asection_pair_statement_enum,
       lang_constructors_statement_enum
     } type;
@@ -159,7 +160,7 @@ typedef struct
   bfd_reloc_code_real_type reloc;
 
   /* Reloc howto structure.  */
-  const reloc_howto_type *howto;
+  reloc_howto_type *howto;
 
   /* Section to generate reloc against.  Exactly one of section and
      name must be NULL.  */
@@ -270,6 +271,17 @@ typedef struct
   fill_type fill;
 } lang_padding_statement_type;
 
+/* A group statement collects a set of libraries together.  The
+   libraries are searched multiple times, until no new undefined
+   symbols are found.  The effect is to search a group of libraries as
+   though they were a single library.  */
+
+typedef struct
+{
+  lang_statement_header_type header;
+  lang_statement_list_type children;
+} lang_group_statement_type;
+
 typedef union lang_statement_union 
 {
   lang_statement_header_type header;
@@ -289,6 +301,7 @@ typedef union lang_statement_union
   lang_object_symbols_statement_type object_symbols_statement;
   lang_fill_statement_type fill_statement;
   lang_padding_statement_type padding_statement;
+  lang_group_statement_type group_statement;
 } lang_statement_union_type;
 
 extern lang_output_section_statement_type *abs_output_section;
@@ -331,8 +344,15 @@ extern void lang_abs_symbol_at_beginning_of PARAMS ((const char *,
 extern void lang_statement_append PARAMS ((struct statement_list *,
                                           union lang_statement_union *,
                                           union lang_statement_union **));
+extern void lang_for_each_input_file
+  PARAMS ((void (*dothis) (lang_input_statement_type *)));
 extern void lang_for_each_file
   PARAMS ((void (*dothis) (lang_input_statement_type *)));
+extern bfd_vma lang_do_assignments
+  PARAMS ((lang_statement_union_type * s,
+          lang_output_section_statement_type *output_section_statement,
+          fill_type fill,
+          bfd_vma dot));
 
 #define LANG_FOR_EACH_INPUT_STATEMENT(statement)               \
   extern lang_statement_list_type file_chain;                  \
@@ -352,11 +372,12 @@ extern void lang_add_keepsyms_file PARAMS ((const char *filename));
 extern lang_output_section_statement_type *
   lang_output_section_statement_lookup PARAMS ((const char * const name));
 extern void ldlang_add_undef PARAMS ((const char *const name));
-extern void lang_add_output_format PARAMS ((const char *, int from_script));
+extern void lang_add_output_format PARAMS ((const char *, const char *,
+                                           const char *, int from_script));
 extern void lang_list_init PARAMS ((lang_statement_list_type*));
 extern void lang_add_data PARAMS ((int type, union etree_union *));
 extern void lang_add_reloc
-  PARAMS ((bfd_reloc_code_real_type reloc, const reloc_howto_type *howto,
+  PARAMS ((bfd_reloc_code_real_type reloc, reloc_howto_type *howto,
           asection *section, const char *name, union etree_union *addend));
 extern void lang_for_each_statement
   PARAMS ((void (*func) (lang_statement_union_type *)));
@@ -366,5 +387,11 @@ extern bfd_vma lang_size_sections
           lang_output_section_statement_type *output_section_statement,
           lang_statement_union_type **prev, fill_type fill,
           bfd_vma dot, boolean relax));
+extern void lang_enter_group PARAMS ((void));
+extern void lang_leave_group PARAMS ((void));
+extern void wild_doit
+  PARAMS ((lang_statement_list_type *ptr, asection *section,
+          lang_output_section_statement_type *output,
+          lang_input_statement_type *file));
 
 #endif
index dd7c6ae..a0f5eb5 100644 (file)
@@ -16,7 +16,7 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with GLD; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 
 #include "bfd.h"
index f361eae..6557f05 100644 (file)
@@ -15,7 +15,7 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with GLD; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "bfd.h"
 #include "sysdep.h"
index 2a791bf..498f688 100644 (file)
@@ -18,7 +18,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define TARGET_IS_mipsidt
 
index 6aef853..dac5c79 100644 (file)
@@ -18,7 +18,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define TARGET_IS_sh
 
index 0e1361c..cb325e3 100644 (file)
@@ -29,7 +29,7 @@ o = :
 # 
 # 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.
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 
 # srcdir = :
index 4558ebc..24c04b8 100644 (file)
@@ -13,7 +13,7 @@
 # 
 # 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.  */
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #
 # Written by Jeffrey Wheat (cassidy@cygnus.com)
 #
@@ -30,6 +30,10 @@ if ![info exists nm] then {
     set nm [findfile $base_dir/../binutils/nm.new $base_dir/../binutils/nm.new [transform nm]]
 }
 
+if ![info exists objdump] then {
+    set objdump [findfile $base_dir/../binutils/objdump]
+}
+
 if ![file isdirectory tmpdir] {catch "exec mkdir tmpdir" status}
 
 # load the utility procedures
diff --git a/ld/testsuite/ld-bootstrap/bootstrap.exp b/ld/testsuite/ld-bootstrap/bootstrap.exp
new file mode 100644 (file)
index 0000000..c149744
--- /dev/null
@@ -0,0 +1,81 @@
+# Expect script for LD Bootstrap Tests
+#   Copyright (C) 1993,1994,1995 Free Software Foundation
+#
+# This file 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.  */
+#
+# Written by Jeffrey Wheat (cassidy@cygnus.com)
+# Rewritten by Ian Lance Taylor (ian@cygnus.com)
+#
+
+# Make sure that ld can bootstrap itself.
+
+# This test can only be run if ld generates native executables.
+if ![isnative] {
+    return
+}
+
+# Bootstrap ld.  First link the object files together using -r, in
+# order to test -r.  Then link the result into an executable, ld1, to
+# really test -r.  Use ld1 to link a fresh ld, ld2.  Use ld2 to link a
+# new ld, ld3.  ld2 and ld3 should be identical.
+
+foreach flags {"" "--static" "--traditional-format" "--no-keep-memory"} {
+    if {"$flags" != ""} { 
+       set testname "bootstrap with $flags"
+    } else {
+       set testname "bootstrap"
+    }
+
+    # This test can only be run if we have the ld build directory,
+    # since we need the object files.
+    if {$ld != "$objdir/ld.new"} {
+       untested $testname
+       continue
+    }
+
+    if ![ld_relocate $ld tmpdir/ld-partial.o "$flags $OFILES"] {
+       fail $testname
+       continue
+    }
+
+    if ![ld_link $ld tmpdir/ld1 "$flags tmpdir/ld-partial.o $BFDLIB $LIBIBERTY"] {
+       fail $testname
+       continue
+    }
+
+    if ![ld_link tmpdir/ld1 tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY"] {
+       fail $testname
+       continue
+    }
+
+    if ![ld_link tmpdir/ld2 tmpdir/ld3 "$flags $OFILES $BFDLIB $LIBIBERTY"] {
+       fail $testname
+       continue
+    }
+
+    send_log "cmp tmpdir/ld2 tmpdir/ld3\n"
+    verbose "cmp tmpdir/ld2 tmpdir/ld3"
+    catch "exec cmp tmpdir/ld2 tmpdir/ld3" exec_output
+    set exec_output [prune_system_crud $host_triplet $exec_output]
+
+    if [string match "" $exec_output] then {
+       pass $testname
+    } else {
+       send_log "$exec_output\n"
+       verbose "$exec_output" 1
+
+       fail $testname
+    }
+}
diff --git a/ld/testsuite/ld-cdtest/cdtest.exp b/ld/testsuite/ld-cdtest/cdtest.exp
new file mode 100644 (file)
index 0000000..68be616
--- /dev/null
@@ -0,0 +1,94 @@
+# Expect script for LD cdtest Tests
+#   Copyright (C) 1993,1994,1995 Free Software Foundation
+#
+# This file 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.  */
+#
+# Written by Jeffrey Wheat (cassidy@cygnus.com)
+# Rewritten by Ian Lance Taylor (ian@cygnus.com)
+#
+
+# Make sure that constructors are handled correctly.
+
+set test1 "cdtest"
+set test2 "cdtest with -Ur"
+
+# This test requires running the executable generated by ld.
+if ![isnative] {
+    return
+}
+
+if { ![ld_compile "$CXX $CXXFLAGS -fgnu-linker" $srcdir$subdir/cdtest-foo.cc tmpdir/cdtest-foo.o]
+     || ![ld_compile "$CXX $CXXFLAGS -fgnu-linker" $srcdir$subdir/cdtest-bar.cc tmpdir/cdtest-bar.o]
+     || ![ld_compile "$CXX $CXXFLAGS -fgnu-linker" $srcdir$subdir/cdtest-main.cc tmpdir/cdtest-main.o] } {
+    unresolved $test1
+    unresolved $test2
+    return
+}
+
+if ![ld_link $ld tmpdir/cdtest {tmpdir/cdtest-foo.o tmpdir/cdtest-bar.o tmpdir/cdtest-main.o}] {
+    fail $test1
+} else {
+    send_log "tmpdir/cdtest >tmpdir/cdtest.out\n"
+    verbose "tmpdir/cdtest >tmpdir/cdtest.out"
+    catch "exec tmpdir/cdtest >tmpdir/cdtest.out" exec_output
+    if ![string match "" $exec_output] then {
+       send_log "$exec_output\n"
+       verbose "$exec_output" 1
+       fail $test1
+    } else {
+       send_log "diff tmpdir/cdtest.out $srcdir$subdir/cdtest.dat\n"
+       verbose "diff tmpdir/cdtest.out $srcdir$subdir/cdtest.dat"
+       catch "exec diff tmpdir/cdtest.out $srcdir$subdir/cdtest.dat" exec_output
+       set exec_output [prune_system_crud $host_triplet $exec_output]
+
+       if [string match "" $exec_output] then {
+           pass $test1
+       } else {
+           send_log "$exec_output\n"
+           verbose "$exec_output" 1
+           fail $test1
+       }
+    }
+}
+
+if ![ld_relocate $ld tmpdir/cdtest.o {-Ur tmpdir/cdtest-foo.o tmpdir/cdtest-bar.o tmpdir/cdtest-main.o}] {
+    fail $test2
+} else {
+    if ![ld_link $ld tmpdir/cdtest tmpdir/cdtest.o] {
+       fail $test2
+    } else {
+       send_log "tmpdir/cdtest >tmpdir/cdtest.out\n"
+       verbose "tmpdir/cdtest >tmpdir/cdtest.out"
+       catch "exec tmpdir/cdtest >tmpdir/cdtest.out" exec_output
+       if ![string match "" $exec_output] then {
+           send_log "$exec_output\n"
+           verbose "$exec_output" 1
+           fail $test2
+       } else {
+           send_log "diff tmpdir/cdtest.out $srcdir$subdir/cdtest.dat\n"
+           verbose "diff tmpdir/cdtest.out $srcdir$subdir/cdtest.dat"
+           catch "exec diff tmpdir/cdtest.out $srcdir$subdir/cdtest.dat" exec_output
+           set exec_output [prune_system_crud $host_triplet $exec_output]
+
+           if [string match "" $exec_output] then {
+               pass $test2
+           } else {
+               send_log "$exec_output\n"
+               verbose "$exec_output" 1
+               fail $test2
+           }
+       }
+    }
+}
index 9cc1b07..8d91182 100644 (file)
@@ -13,7 +13,7 @@
 # 
 # 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.  */
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #
 # Written by Ian Lance Taylor (ian@cygnus.com)
 #
index d836a2a..18bdaf9 100644 (file)
@@ -1,5 +1,5 @@
 # Expect script for ld-shared tests
-#   Copyright (C) 1994 Free Software Foundation
+#   Copyright (C) 1994,1995 Free Software Foundation
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -13,7 +13,7 @@
 # 
 # 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.  */
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #
 # Written by Ian Lance Taylor (ian@cygnus.com)
 #
@@ -41,57 +41,55 @@ if { ![istarget i386-*-sysv4*] \
     return
 }
 
-# Compile the main program.
-if ![ld_compile "$CC $CFLAGS" $srcdir$subdir/main.c tmpdir/main.o] {
-    return
-}
+# The test procedure.
+proc shared_test { progname testname main sh1 sh2 } {
+    global ld
+    global srcdir
+    global subdir
+    global exec_output
+    global host_triplet
 
-# The shared library is composed of two files.  First compile them
-# without using -fpic.  That should work on an ELF system, although it
-# will be less efficient because the dynamic linker will need to do
-# more relocation work.  However, note that not using -fpic will cause
-# some of the tests to return different results.
-if ![ld_compile "$CC $CFLAGS" $srcdir$subdir/sh1.c tmpdir/sh1.o] {
-    return
-}
-if ![ld_compile "$CC $CFLAGS" $srcdir$subdir/sh2.c tmpdir/sh2.o] {
-    return
-}
+    # Build the shared library.
+    if {![ld_simple_link $ld tmpdir/$progname.so "-shared tmpdir/$sh1 tmpdir/$sh2"]} {
+        fail "$testname"
+       return
+    }
 
-# Build the shared library.
-if ![ld_simple_link $ld tmpdir/shnonpic.so {-shared tmpdir/sh1.o tmpdir/sh2.o}] {
-    fail "shared (non PIC)"
-} else {
-    # Link against the shared library.  Use -rpath so that the dynamic
-    # linker can locate the shared library at runtime.
-    if ![ld_link $ld tmpdir/shnonpic {-rpath tmpdir tmpdir/main.o tmpdir/shnonpic.so}] {
-       fail "shared (non PIC)"
-    } else {
-       # Run the resulting program
-       send_log "tmpdir/shnonpic >tmpdir/shnonpic.out\n"
-       verbose "tmpdir/shnonpic >tmpdir/shnonpic.out"
-       catch "exec tmpdir/shnonpic >tmpdir/shnonpic.out" exec_output
-       if ![string match "" $exec_output] then {
-           send_log "$exec_output\n"
-           verbose "$exec_output"
-           fail "shared (non PIC)"
-       } else {
-           send_log "diff tmpdir/shnonpic.out $srcdir$subdir/shared.dat\n"
-           verbose "diff tmpdir/shnonpic.out $srcdir$subdir/shared.dat"
-           catch "exec diff tmpdir/shnonpic.out $srcdir$subdir/shared.dat" exec_output
-           if [string match "" $exec_output] then {
-               pass "shared (non PIC)"
-           } else {
-               send_log "$exec_output\n"
-               verbose "$exec_output"
-               fail "shared (non PIC)"
-           }
-       }
+    # Link against the shared library.  Use -rpath so that the
+    # dynamic linker can locate the shared library at runtime.
+    if ![ld_link $ld tmpdir/$progname "-rpath tmpdir tmpdir/$main tmpdir/$progname.so"] {
+       fail "$testname"
+       return
+    }
+
+    # Run the resulting program
+    send_log "tmpdir/$progname >tmpdir/$progname.out\n"
+    verbose "tmpdir/$progname >tmpdir/$progname.out"
+    catch "exec tmpdir/$progname >tmpdir/$progname.out" exec_output
+    if ![string match "" $exec_output] then {
+       send_log "$exec_output\n"
+       verbose "$exec_output"
+       fail "$testname"
+       return
+    }
+
+    send_log "diff tmpdir/$progname.out $srcdir$subdir/shared.dat\n"
+    verbose "diff tmpdir/$progname.out $srcdir$subdir/shared.dat"
+    catch "exec diff tmpdir/$progname.out $srcdir$subdir/shared.dat" exec_output
+    set exec_output [prune_system_crud $host_triplet $exec_output]
+
+    if {![string match "" $exec_output]} then {
+       send_log "$exec_output\n"
+       verbose "$exec_output"
+       fail "$testname"
+        return
     }
+
+    pass "$testname"
 }
 
-# Now compile the code using -fpic.  Unfortunately, the gcc argument
-# is -fpic and the cc argument is -KPIC.  We have to try both.
+# Unfortunately, the gcc argument is -fpic and the cc argument is
+# -KPIC.  We have to try both.
 
 set picflag "-fpic"
 send_log "$CC $picflag\n"
@@ -106,41 +104,48 @@ if { [string match "*illegal option*" $exec_output] \
 }
 verbose "Using $picflag to compile PIC code"
 
-if ![ld_compile "$CC $CFLAGS $picflag" $srcdir$subdir/sh1.c tmpdir/sh1.o] {
-    return
-}
-if ![ld_compile "$CC $CFLAGS $picflag" $srcdir$subdir/sh2.c tmpdir/sh2.o] {
-    return
+# Compile the main program.
+if ![ld_compile "$CC $CFLAGS" $srcdir$subdir/main.c tmpdir/mainnp.o] {
+    unresolved "shared (non PIC)"
+    unresolved "shared"
+} else {
+    # The shared library is composed of two files.  First compile them
+    # without using -fpic.  That should work on an ELF system,
+    # although it will be less efficient because the dynamic linker
+    # will need to do more relocation work.  However, note that not
+    # using -fpic will cause some of the tests to return different
+    # results.
+    if { ![ld_compile "$CC $CFLAGS" $srcdir$subdir/sh1.c tmpdir/sh1np.o]
+        || ![ld_compile "$CC $CFLAGS" $srcdir$subdir/sh2.c tmpdir/sh2np.o] } {
+       unresolved "shared (non PIC)"
+    } else {
+       shared_test shnp "shared (non PIC)" mainnp.o sh1np.o  sh2np.o
+    }
+
+    # Now compile the code using -fpic.
+
+    if { ![ld_compile "$CC $CFLAGS $picflag" $srcdir$subdir/sh1.c tmpdir/sh1p.o] 
+        || ![ld_compile "$CC $CFLAGS $picflag" $srcdir$subdir/sh2.c tmpdir/sh2p.o] } {
+       unresolved "shared"
+    } else {
+       shared_test shp "shared" mainnp.o sh1p.o sh2p.o
+    }
 }
 
-# Build the shared library.
-if ![ld_simple_link $ld tmpdir/shpic.so {-shared tmpdir/sh1.o tmpdir/sh2.o}] {
-    fail "shared"
+# Now do the same tests again, but this time compile main.c PIC.
+if ![ld_compile "$CC $CFLAGS $picflag" $srcdir$subdir/main.c tmpdir/mainp.o] {
+    unresolved "shared (PIC main, non PIC so)"
+    unresolved "shared (PIC main)"
 } else {
-    # Link against the shared library.  Use -rpath so that the dynamic
-    # linker can locate the shared library at runtime.
-    if ![ld_link $ld tmpdir/shpic {-rpath tmpdir tmpdir/main.o tmpdir/shpic.so}] {
-       fail "shared"
+    if { [file exists tmpdir/sh1np.o ] && [ file exists tmpdir/sh2np.o ] } {
+       shared_test shmpnp "shared (PIC main, non PIC so)" mainp.o sh1np.o sh2np.o
+    } else {
+       unresolved "shared (PIC main, non PIC so)"
+    }
+
+    if { [file exists tmpdir/sh1p.o ] && [ file exists tmpdir/sh2p.o ] } {
+       shared_test shmpp "shared (PIC main)" mainp.o sh1p.o sh2p.o
     } else {
-       # Run the resulting program
-       send_log "tmpdir/shpic >tmpdir/shpic.out\n"
-       verbose "tmpdir/shpic >tmpdir/shpic.out"
-       catch "exec tmpdir/shpic >tmpdir/shpic.out" exec_output
-       if ![string match "" $exec_output] then {
-           send_log "$exec_output\n"
-           verbose "$exec_output"
-           fail "shared"
-       } else {
-           send_log "diff tmpdir/shpic.out $srcdir$subdir/shared.dat\n"
-           verbose "diff tmpdir/shpic.out $srcdir$subdir/shared.dat"
-           catch "exec diff tmpdir/shpic.out $srcdir$subdir/shared.dat" exec_output
-           if [string match "" $exec_output] then {
-               pass "shared"
-           } else {
-               send_log "$exec_output\n"
-               verbose "$exec_output"
-               fail "shared"
-           }
-       }
+       unresolved "shared (PIC main)"
     }
 }
index 4b33c0a..46a465f 100644 (file)
@@ -13,7 +13,7 @@
 # 
 # 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.  */
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #
 # Written by Steve Chamberlain (sac@cygnus.com)
 #
index cfd2c07..74697c7 100644 (file)
@@ -16,7 +16,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "dis-asm.h"
 #include "opcode/a29k.h"
index b928d22..473bcf4 100644 (file)
@@ -14,7 +14,7 @@
 
    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.  */
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* Contributed by sac@cygnus.com.  */
 
index 9326a03..33f5daa 100644 (file)
@@ -14,7 +14,7 @@
 
    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.  */
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 
 struct arm_opcode {
index 05eabca..c01c87e 100644 (file)
@@ -14,7 +14,7 @@
 # 
 # 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.
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 s = "{srcdir}"
 o = :
index 36d38e2..0967829 100644 (file)
@@ -13,7 +13,7 @@ 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include <stdio.h>
 #define STATIC_TABLE