From ce6821a5959a40d6943d3e6be8e88d4a0569254c Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 25 Mar 1998 20:12:49 +0000 Subject: [PATCH] Wed Mar 25 13:59:24 1998 Andreas Schwab * archures.c (bfd_mach_m68*): Add definitions for various m68k variants. (bfd_default_scan): Remove m68k special cases. * bfd-in2.h: Rebuild. * mipsbsd.c (MY(write_object_contents)): Use bfd_mach_m680* instead of plain numbers. * sparclynx.c (NAME(lynx,set_arch_mach)): Likewise. * cpu-m68k.c (arch_info_struct): Likewise. Add entry for m68k:68000. (bfd_m68k_arch): Set mach field to zero to signal no explicit selection, change printable_name to just "m68k" and make that the default instead of m68k:68020. --- bfd/ChangeLog | 16 ++++ bfd/cpu-m68k.c | 40 +++++++++ bfd/mipsbsd.c | 31 ++++--- bfd/sparclynx.c | 251 +++++++++++++++++++++++++++----------------------------- 4 files changed, 194 insertions(+), 144 deletions(-) create mode 100644 bfd/cpu-m68k.c diff --git a/bfd/ChangeLog b/bfd/ChangeLog index c53e435..fdd9ae6 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,18 @@ Wed Mar 25 13:59:24 1998 Andreas Schwab + * archures.c (bfd_mach_m68*): Add definitions for various m68k + variants. + (bfd_default_scan): Remove m68k special cases. + * bfd-in2.h: Rebuild. + * mipsbsd.c (MY(write_object_contents)): Use bfd_mach_m680* + instead of plain numbers. + * sparclynx.c (NAME(lynx,set_arch_mach)): Likewise. + * cpu-m68k.c (arch_info_struct): Likewise. Add entry for + m68k:68000. + (bfd_m68k_arch): Set mach field to zero to signal no explicit + selection, change printable_name to just "m68k" and make that the + default instead of m68k:68020. + * aout-tic30.c (NAME): Define this to avoid multiple definitions from aoutx.h. (MY_get_section_contents): Define as aout_32_get_section_contents @@ -18,6 +31,9 @@ Wed Mar 25 10:41:35 1998 Richard Henderson Wed Mar 25 11:19:28 1998 Ian Lance Taylor + * libbfd-in.h (BFD_ALIGN): Cast this parameter to bfd_vma. + * libbfd.h: Rebuild. + * elf-m10300.c (elf32_mn10300_finish_hash_table_entry): Change byte_count to unsigned int. (mn10300_elf_relax_section): Initialize internal_relocs. Remove diff --git a/bfd/cpu-m68k.c b/bfd/cpu-m68k.c new file mode 100644 index 0000000..adf974a --- /dev/null +++ b/bfd/cpu-m68k.c @@ -0,0 +1,40 @@ +/* BFD library support routines for architectures. + Copyright (C) 1990, 91, 92, 93, 94, 95, 1997 Free Software Foundation, Inc. + Hacked by Steve Chamberlain of 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" + +#define N(name, print,d,next) \ +{ 32, 32, 8, bfd_arch_m68k, name, "m68k",print,2,d,bfd_default_compatible,bfd_default_scan, next, } + +static const bfd_arch_info_type arch_info_struct[] = +{ + N(bfd_mach_m68000,"m68k:68000",false, &arch_info_struct[1]), + N(bfd_mach_m68008,"m68k:68008",false, &arch_info_struct[2]), + N(bfd_mach_m68010,"m68k:68010",false, &arch_info_struct[3]), + N(bfd_mach_m68020,"m68k:68020",false, &arch_info_struct[4]), + N(bfd_mach_m68030,"m68k:68030",false, &arch_info_struct[5]), + N(bfd_mach_m68040,"m68k:68040",false, &arch_info_struct[6]), + N(bfd_mach_m68060,"m68k:68060",false, 0), +}; + +const bfd_arch_info_type bfd_m68k_arch = + N(0,"m68k",true, &arch_info_struct[0]); diff --git a/bfd/mipsbsd.c b/bfd/mipsbsd.c index 9c610b4..9c569c6 100644 --- a/bfd/mipsbsd.c +++ b/bfd/mipsbsd.c @@ -1,5 +1,5 @@ /* BFD backend for MIPS BSD (a.out) binaries. - Copyright (C) 1993, 1994 Free Software Foundation, Inc. + Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc. Written by Ralph Campbell. 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 BYTES_IN_WORD 4 /* #define ENTRY_CAN_BE_ZERO */ @@ -28,8 +28,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ ) #define N_DATADDR(x) (N_TXTADDR(x)+N_TXTSIZE(x)) #define TEXT_START_ADDR 4096 -#define PAGE_SIZE 4096 -#define SEGMENT_SIZE PAGE_SIZE +#define TARGET_PAGE_SIZE 4096 +#define SEGMENT_SIZE TARGET_PAGE_SIZE #define DEFAULT_ARCH bfd_arch_mips #define MACHTYPE_OK(mtype) ((mtype) == M_UNKNOWN \ || (mtype) == M_MIPS1 || (mtype) == M_MIPS2) @@ -127,11 +127,11 @@ MY(write_object_contents) (abfd) switch (bfd_get_arch(abfd)) { case bfd_arch_m68k: switch (bfd_get_mach(abfd)) { - case 68010: + case bfd_mach_m68010: N_SET_MACHTYPE(*execp, M_68010); break; default: - case 68020: + case bfd_mach_m68020: N_SET_MACHTYPE(*execp, M_68020); break; } @@ -295,7 +295,7 @@ static reloc_howto_type mips_howto_table_ext[] = { "LO16", false, 0, 0x0000ffff, false}, }; -static const reloc_howto_type * +static reloc_howto_type * MY(reloc_howto_type_lookup) (abfd, code) bfd *abfd; bfd_reloc_code_real_type code; @@ -376,8 +376,9 @@ MY(canonicalize_reloc)(abfd, section, relptr, symbols) static CONST struct aout_backend_data MY(backend_data) = { 0, /* zmagic contiguous */ 1, /* text incl header */ + 0, /* entry is text address */ 0, /* exec_hdr_flags */ - PAGE_SIZE, /* text vma */ + TARGET_PAGE_SIZE, /* text vma */ MY_set_sizes, 0, /* text size includes exec header */ 0, /* add_dynamic_symbols */ @@ -392,16 +393,15 @@ const bfd_target aout_mips_little_vec = { "a.out-mips-little", /* name */ bfd_target_aout_flavour, - false, /* target byte order (little) */ - false, /* target headers byte order (little) */ + BFD_ENDIAN_LITTLE, /* target byte order (little) */ + BFD_ENDIAN_LITTLE, /* target headers byte order (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 */ + (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA), MY_symbol_leading_char, ' ', /* ar_pad_char */ 15, /* ar_max_namelen */ - 1, /* minimum alignment */ 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 */ @@ -432,16 +432,15 @@ const bfd_target aout_mips_big_vec = { "a.out-mips-big", /* name */ bfd_target_aout_flavour, - true, /* target byte order (big) */ - true, /* target headers byte order (big) */ + BFD_ENDIAN_BIG, /* target byte order (big) */ + BFD_ENDIAN_BIG, /* target headers byte order (big) */ (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 */ + (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA), MY_symbol_leading_char, ' ', /* ar_pad_char */ 15, /* ar_max_namelen */ - 1, /* minimum alignment */ bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */ diff --git a/bfd/sparclynx.c b/bfd/sparclynx.c index 14d2d30..abedc5d 100644 --- a/bfd/sparclynx.c +++ b/bfd/sparclynx.c @@ -1,5 +1,5 @@ /* BFD support for Sparc binaries under LynxOS. - Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. + Copyright (C) 1990, 91, 92, 93, 94, 95, 1997 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -15,17 +15,15 @@ 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. */ - -#define ARCH 32 +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #if 0 #define BYTES_IN_WORD 4 #define N_SHARED_LIB(x) 0 #define TEXT_START_ADDR 0 -#define PAGE_SIZE 4096 -#define SEGMENT_SIZE PAGE_SIZE +#define TARGET_PAGE_SIZE 4096 +#define SEGMENT_SIZE TARGET_PAGE_SIZE #define DEFAULT_ARCH bfd_arch_sparc #endif @@ -38,7 +36,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "libbfd.h" #include "aout/sun4.h" -#include "libaout.h" /* BFD a.out internal data structures */ +#include "libaout.h" /* BFD a.out internal data structures */ #include "aout/aout64.h" #include "aout/stab_gnu.h" @@ -64,7 +62,7 @@ int in the target format. It changes the sizes of the structs which perform the memory/disk mapping of structures. The 64 bit backend may only be used if the host compiler supports 64 -ints (eg long long with gcc), by defining the name @code{HOST_64_BIT} in @code{bfd.h}. +ints (eg long long with gcc), by defining the name @code{BFD_HOST_64_BIT} in @code{bfd.h}. With this name defined, @emph{all} bfd operations are performed with 64bit arithmetic, not just those to a 64bit target. @@ -79,167 +77,164 @@ The name put into the target vector. /*SUPPRESS529*/ void -DEFUN(NAME(lynxos,set_arch_mach), (abfd, machtype), - bfd *abfd AND int machtype) +NAME(lynx,set_arch_mach) (abfd, machtype) + bfd *abfd; + int machtype; { /* Determine the architecture and machine type of the object file. */ enum bfd_architecture arch; long machine; - switch (machtype) { + switch (machtype) + { - case M_UNKNOWN: + case M_UNKNOWN: /* Some Sun3s make magic numbers without cpu types in them, so we'll default to the 68000. */ - arch = bfd_arch_m68k; - machine = 68000; - break; - - case M_68010: - case M_HP200: - arch = bfd_arch_m68k; - machine = 68010; - break; - - case M_68020: - case M_HP300: - arch = bfd_arch_m68k; - machine = 68020; - break; - - case M_SPARC: - arch = bfd_arch_sparc; - machine = 0; - break; - - case M_386: - case M_386_DYNIX: - arch = bfd_arch_i386; - machine = 0; - break; - - case M_29K: - arch = bfd_arch_a29k; - machine = 0; - break; - - case M_HPUX: - arch = bfd_arch_m68k; - machine = 0; - break; - - default: - arch = bfd_arch_obscure; - machine = 0; - break; - } - bfd_set_arch_mach(abfd, arch, machine); + arch = bfd_arch_m68k; + machine = bfd_mach_m68000; + break; + + case M_68010: + case M_HP200: + arch = bfd_arch_m68k; + machine = bfd_mach_m68010; + break; + + case M_68020: + case M_HP300: + arch = bfd_arch_m68k; + machine = bfd_mach_m68020; + break; + + case M_SPARC: + arch = bfd_arch_sparc; + machine = 0; + break; + + case M_386: + case M_386_DYNIX: + arch = bfd_arch_i386; + machine = 0; + break; + + case M_29K: + arch = bfd_arch_a29k; + machine = 0; + break; + + case M_HPUX: + arch = bfd_arch_m68k; + machine = 0; + break; + + default: + arch = bfd_arch_obscure; + machine = 0; + break; + } + bfd_set_arch_mach (abfd, arch, machine); } #define SET_ARCH_MACH(ABFD, EXEC) \ - NAME(lynxos,set_arch_mach)(ABFD, N_MACHTYPE (EXEC)); \ + NAME(lynx,set_arch_mach)(ABFD, N_MACHTYPE (EXEC)); \ choose_reloc_size(ABFD); /* Determine the size of a relocation entry, based on the architecture */ static void -DEFUN(choose_reloc_size,(abfd), -bfd *abfd) +choose_reloc_size (abfd) + bfd *abfd; { - switch (bfd_get_arch(abfd)) { - case bfd_arch_sparc: - case bfd_arch_a29k: - obj_reloc_entry_size (abfd) = RELOC_EXT_SIZE; - break; - default: - obj_reloc_entry_size (abfd) = RELOC_STD_SIZE; - break; - } + switch (bfd_get_arch (abfd)) + { + case bfd_arch_sparc: + case bfd_arch_a29k: + obj_reloc_entry_size (abfd) = RELOC_EXT_SIZE; + break; + default: + obj_reloc_entry_size (abfd) = RELOC_STD_SIZE; + break; + } } -/* Write an object file in Lynxos format. +/* Write an object file in LynxOS format. Section contents have already been written. We write the file header, symbols, and relocation. */ static boolean -DEFUN(NAME(aout,sparclynx_write_object_contents), - (abfd), - bfd *abfd) +NAME(aout,sparclynx_write_object_contents) (abfd) + bfd *abfd; { struct external_exec exec_bytes; struct internal_exec *execp = exec_hdr (abfd); - + /* Magic number, maestro, please! */ - switch (bfd_get_arch(abfd)) { - case bfd_arch_m68k: - switch (bfd_get_mach(abfd)) { - case 68010: - N_SET_MACHTYPE(*execp, M_68010); + switch (bfd_get_arch (abfd)) + { + case bfd_arch_m68k: + switch (bfd_get_mach (abfd)) + { + case bfd_mach_m68010: + N_SET_MACHTYPE (*execp, M_68010); + break; + default: + case bfd_mach_m68020: + N_SET_MACHTYPE (*execp, M_68020); + break; + } break; - default: - case 68020: - N_SET_MACHTYPE(*execp, M_68020); + case bfd_arch_sparc: + N_SET_MACHTYPE (*execp, M_SPARC); + break; + case bfd_arch_i386: + N_SET_MACHTYPE (*execp, M_386); break; + case bfd_arch_a29k: + N_SET_MACHTYPE (*execp, M_29K); + break; + default: + N_SET_MACHTYPE (*execp, M_UNKNOWN); } - break; - case bfd_arch_sparc: - N_SET_MACHTYPE(*execp, M_SPARC); - break; - case bfd_arch_i386: - N_SET_MACHTYPE(*execp, M_386); - break; - case bfd_arch_a29k: - N_SET_MACHTYPE(*execp, M_29K); - break; - default: - N_SET_MACHTYPE(*execp, M_UNKNOWN); - } - - choose_reloc_size(abfd); -#if 0 - /* Some tools want this to be 0, some tools want this to be one. - Today, it seems that 0 is the most important setting (PR1927) */ - N_SET_FLAGS (*execp, 0x0); -#else - - /* Fri Jun 11 14:23:31 PDT 1993 - FIXME - Today's optimal setting is 1. This is a pain, since it - reopens 1927. This should be readdressed by creating a new - target for each each supported, giving perhaps sun3/m68k - and sun4/sparc a.out formats. - */ - N_SET_FLAGS (*execp, 1); -#endif - - WRITE_HEADERS(abfd, execp); + choose_reloc_size (abfd); + + N_SET_FLAGS (*execp, aout_backend_info (abfd)->exec_hdr_flags); + + WRITE_HEADERS (abfd, execp); return true; } #define MY_set_sizes sparclynx_set_sizes static boolean -DEFUN (sparclynx_set_sizes, (abfd), - bfd *abfd) +sparclynx_set_sizes (abfd) + bfd *abfd; { switch (bfd_get_arch (abfd)) { default: return false; case bfd_arch_sparc: - adata(abfd).page_size = 0x2000; - adata(abfd).segment_size = 0x2000; - adata(abfd).exec_bytes_size = EXEC_BYTES_SIZE; + adata (abfd).page_size = 0x2000; + adata (abfd).segment_size = 0x2000; + adata (abfd).exec_bytes_size = EXEC_BYTES_SIZE; return true; case bfd_arch_m68k: - adata(abfd).page_size = 0x2000; - adata(abfd).segment_size = 0x20000; - adata(abfd).exec_bytes_size = EXEC_BYTES_SIZE; + adata (abfd).page_size = 0x2000; + adata (abfd).segment_size = 0x20000; + adata (abfd).exec_bytes_size = EXEC_BYTES_SIZE; return true; } } -static CONST struct aout_backend_data sparclynx_aout_backend = { - 0, 1, 0, sparclynx_set_sizes, 0, +static CONST struct aout_backend_data sparclynx_aout_backend = +{ + 0, 1, 0, 1, 0, sparclynx_set_sizes, 0, + 0, /* add_dynamic_symbols */ + 0, /* add_one_symbol */ + 0, /* link_dynamic_object */ + 0, /* write_dynamic_symbol */ + 0, /* check_dynamic_reloc */ + 0 /* finish_dynamic_link */ }; @@ -253,18 +248,18 @@ static CONST struct aout_backend_data sparclynx_aout_backend = { #define TARGET_IS_BIG_ENDIAN_P -#ifdef HOST_LYNX +#ifdef LYNX_CORE -char *lynx_core_file_failing_command(); -int lynx_core_file_failing_signal(); -boolean lynx_core_file_matches_executable_p(); -bfd_target *lynx_core_file_p(); +char *lynx_core_file_failing_command (); +int lynx_core_file_failing_signal (); +boolean lynx_core_file_matches_executable_p (); +const bfd_target *lynx_core_file_p (); #define MY_core_file_failing_command lynx_core_file_failing_command #define MY_core_file_failing_signal lynx_core_file_failing_signal #define MY_core_file_matches_executable_p lynx_core_file_matches_executable_p #define MY_core_file_p lynx_core_file_p -#endif /* HOST_LYNX */ +#endif /* LYNX_CORE */ #include "aout-target.h" -- 2.7.4