* aoutf1.h (sunos_32_set_arch_mach): Handle M_SPARCLET.
authorDavid Edelsohn <dje.gcc@gmail.com>
Tue, 2 Apr 1996 21:28:33 +0000 (21:28 +0000)
committerDavid Edelsohn <dje.gcc@gmail.com>
Tue, 2 Apr 1996 21:28:33 +0000 (21:28 +0000)
(aout_32_sunos4_write_object_contents): Likewise.
* aoutx.h (NAME(aout,machine_type)): Handle
bfd_mach_sparc_{sparclet,sparclite}.
* archures.c (bfd_mach_sparc_{sparclet,sparclite}): Define.
(bfd_mach_sparc_v9_p): Update.
* cpu-sparc.c (arch_info_struct): Add entries for sparclet,sparclite.
* libaout.h (enum machine_type): Add M_SPARCLET.
* sunos.c (MACHTYPE_OK): Define.
* bfd-in2.h: Regenerated.

bfd/ChangeLog
bfd/aoutx.h
bfd/bfd-in2.h
bfd/libaout.h
bfd/sunos.c

index 9de2eec07e74cb4ec40bb02f58f0dc4508dfd531..460bfeaf46d8c3fe7bab5d62e07e74cc05ec5833 100644 (file)
@@ -1,3 +1,16 @@
+Tue Apr  2 13:11:53 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * aoutf1.h (sunos_32_set_arch_mach): Handle M_SPARCLET.
+       (aout_32_sunos4_write_object_contents): Likewise.
+       * aoutx.h (NAME(aout,machine_type)): Handle
+       bfd_mach_sparc_{sparclet,sparclite}.
+       * archures.c (bfd_mach_sparc_{sparclet,sparclite}): Define.
+       (bfd_mach_sparc_v9_p): Update.
+       * cpu-sparc.c (arch_info_struct): Add entries for sparclet,sparclite.
+       * libaout.h (enum machine_type): Add M_SPARCLET.
+       * sunos.c (MACHTYPE_OK): Define.
+       * bfd-in2.h: Regenerated.
+
 Tue Apr  2 00:33:18 1996  Ian Lance Taylor  <ian@cygnus.com>
 
        * elf-bfd.h (struct elf_link_hash_table): Add hgot field.
index b8dd884db4a210cfbf1c0289fdbe0ca2297b670c..d7a7fd67b00d7487e080d3a349ea94f5a7fb442f 100644 (file)
@@ -692,8 +692,11 @@ NAME(aout,machine_type) (arch, machine, unknown)
   case bfd_arch_sparc:
     if (machine == 0
        || machine == bfd_mach_sparc
+       || machine == bfd_mach_sparc_sparclite
        || machine == bfd_mach_sparc_v9)
       arch_flags = M_SPARC;
+    else if (machine == bfd_mach_sparc_sparclet)
+      arch_flags = M_SPARCLET;
     break;
 
   case bfd_arch_m68k:
index cd0f8d769d7e3291e41ec3909fc631c1a599ed03..8003d45afb43a9d07baf35b0b7bf6184543df02a 100644 (file)
@@ -1156,12 +1156,15 @@ enum bfd_architecture
   bfd_arch_sparc,      /* SPARC */
 #define bfd_mach_sparc                 1
  /* The difference between v8plus and v9 is that v9 is a true 64 bit env.  */
-#define bfd_mach_sparc_v8plus          2
-#define bfd_mach_sparc_v8plusa         3  /* with ultrasparc add'ns */
-#define bfd_mach_sparc_v9              4
-#define bfd_mach_sparc_v9a             5  /* with ultrasparc add'ns */
+#define bfd_mach_sparc_sparclet        2
+#define bfd_mach_sparc_sparclite       3
+#define bfd_mach_sparc_v8plus          4
+#define bfd_mach_sparc_v8plusa         5  /* with ultrasparc add'ns */
+#define bfd_mach_sparc_v9              6
+#define bfd_mach_sparc_v9a             7  /* with ultrasparc add'ns */
  /* Nonzero if MACH has the v9 instruction set.  */
-#define bfd_mach_sparc_v9_p(mach) ((mach) != bfd_mach_sparc)
+#define bfd_mach_sparc_v9_p(mach) \
+  ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9a)
   bfd_arch_mips,       /* MIPS Rxxxx */
   bfd_arch_i386,       /* Intel 386 */
   bfd_arch_we32k,      /* AT&T WE32xxx */
index 6731d6d27cca28e5bd60029ca1ded34335c217e4..6d39bec029e074e8f7cce7a6a56018a817873aa7 100644 (file)
@@ -192,14 +192,14 @@ struct internal_exec
 };
 
 /* Magic number is written 
-< MSB        >
+< MSB          >
 3130292827262524232221201918171615141312111009080706050403020100
-< FLAGS      >< MACHINE TYPE ><  MAGIC NUMBER                 >
+< FLAGS        >< MACHINE TYPE ><  MAGIC NUMBER                >
 */
 /* Magic number for NetBSD is
-<MSB         >
+<MSB           >
 3130292827262524232221201918171615141312111009080706050403020100
-< FLAGS    ><                  ><  MAGIC NUMBER                >
+< FLAGS    >< MACHINE TYPE     ><  MAGIC NUMBER                >
 */
 
 enum machine_type {
@@ -221,6 +221,7 @@ enum machine_type {
   M_68K4K_NETBSD = 136,        /* NetBSD/m68k4k binary */
   M_532_NETBSD = 137,  /* NetBSD/ns32k binary */
   M_SPARC_NETBSD = 138,        /* NetBSD/sparc binary */
+  M_SPARCLET = 142,    /* SPARClet */
   M_MIPS1 = 151,        /* MIPS R2000/R3000 binary */
   M_MIPS2 = 152,        /* MIPS R4000/R6000 binary */
 /* start-sanitize-rce */
index d0b87970bed1714a91b0d00af0ffbe1ff6ccc8d0..75f3ce3f63f98f01679eb876e4c79a93581b46d3 100644 (file)
@@ -78,6 +78,14 @@ static boolean sunos_finish_dynamic_link
 #define MY_check_dynamic_reloc sunos_check_dynamic_reloc
 #define MY_finish_dynamic_link sunos_finish_dynamic_link
 
+/* ??? Where should this go?  */
+#define MACHTYPE_OK(mtype) \
+  (((mtype) == M_SPARC && bfd_lookup_arch (bfd_arch_sparc, 0) != NULL) \
+   || ((mtype) == M_SPARCLET \
+       && bfd_lookup_arch (bfd_arch_sparc, bfd_mach_sparc_sparclet) != NULL) \
+   || (((mtype) == M_UNKNOWN || (mtype) == M_68010 || (mtype) == M_68020) \
+       && bfd_lookup_arch (bfd_arch_m68k, 0) != NULL))
+
 /* Include the usual a.out support.  */
 #include "aoutf1.h"
 
@@ -1028,8 +1036,13 @@ sunos_add_one_symbol (info, abfd, name, flags, section, value, string,
        return false;
     }
 
-  h = sunos_link_hash_lookup (sunos_hash_table (info), name, true, copy,
-                             false);
+  if ((flags & (BSF_INDIRECT | BSF_WARNING | BSF_CONSTRUCTOR)) != 0
+      || ! bfd_is_und_section (section))
+    h = sunos_link_hash_lookup (sunos_hash_table (info), name, true, copy,
+                               false);
+  else
+    h = ((struct sunos_link_hash_entry *)
+        bfd_wrapped_link_hash_lookup (abfd, info, name, true, copy, false));
   if (h == NULL)
     return false;
 
@@ -1796,6 +1809,17 @@ sunos_scan_ext_relocs (info, abfd, sec, relocs, rel_size)
              || (h->flags & SUNOS_DEF_REGULAR) != 0))
        continue;
 
+      if (r_type == RELOC_JMP_TBL
+         && ! info->shared
+         && (h->flags & SUNOS_DEF_DYNAMIC) == 0
+         && (h->flags & SUNOS_DEF_REGULAR) == 0)
+       {
+         /* This symbol is apparently undefined.  Don't do anything
+             here; just let the relocation routine report an undefined
+             symbol.  */
+         continue;
+       }
+
       if (strcmp (h->root.root.root.string, "__GLOBAL_OFFSET_TABLE_") == 0)
        continue;