From d1f74cd2c3a5165946c0152eeedd5515a356a189 Mon Sep 17 00:00:00 2001 From: David Edelsohn Date: Tue, 2 Apr 1996 21:28:33 +0000 Subject: [PATCH] * 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. --- bfd/ChangeLog | 13 +++++++++++++ bfd/aoutx.h | 3 +++ bfd/bfd-in2.h | 13 ++++++++----- bfd/libaout.h | 9 +++++---- bfd/sunos.c | 28 ++++++++++++++++++++++++++-- 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 + + * 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 * 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 - + 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; -- 2.7.4