aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorDavid Edelsohn <dje.gcc@gmail.com>1996-04-02 21:28:33 +0000
committerDavid Edelsohn <dje.gcc@gmail.com>1996-04-02 21:28:33 +0000
commitd1f74cd2c3a5165946c0152eeedd5515a356a189 (patch)
tree832e5e409217bdec2a88b1bfca2270612bc8718f /bfd
parent19bfbcbecf49abb63d85b0244dc10770e3b4ac9a (diff)
downloadgdb-d1f74cd2c3a5165946c0152eeedd5515a356a189.zip
gdb-d1f74cd2c3a5165946c0152eeedd5515a356a189.tar.gz
gdb-d1f74cd2c3a5165946c0152eeedd5515a356a189.tar.bz2
* 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.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog13
-rw-r--r--bfd/aoutx.h3
-rw-r--r--bfd/bfd-in2.h13
-rw-r--r--bfd/libaout.h9
-rw-r--r--bfd/sunos.c28
5 files changed, 55 insertions, 11 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 9de2eec..460bfea 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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.
diff --git a/bfd/aoutx.h b/bfd/aoutx.h
index b8dd884..d7a7fd6 100644
--- a/bfd/aoutx.h
+++ b/bfd/aoutx.h
@@ -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:
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index cd0f8d7..8003d45 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -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 */
diff --git a/bfd/libaout.h b/bfd/libaout.h
index 6731d6d..6d39bec 100644
--- a/bfd/libaout.h
+++ b/bfd/libaout.h
@@ -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 */
diff --git a/bfd/sunos.c b/bfd/sunos.c
index d0b8797..75f3ce3 100644
--- a/bfd/sunos.c
+++ b/bfd/sunos.c
@@ -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;