This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: bfd and include patches for morpho ms1 port


Hi Alan.  Hi folks.

> Please don't create new reloc types unnecessarily.  All of these could
> probably use existing BFD_RELOC defines.

I have addressed your concerns.  I have also removed references to
the GNU*INHERIT stuff.

Here is the next rev of the patch.  I've added a few more configury
and Makefile bits across the rest of binutils.  

In an effort to make the ChangeLog more readable, I have included the path 
to the different tools, but I will remove them before when I commit.

BTW, this is a cgen port.  The opcodes bit will follow; hopefully after
some generic cgen code is contributed.

How does this look?

	* binutils/Makefile.am (readelf.o): Depend on ms1.h.

	* binutils/Makefile.in: Regenerate.

	* binutils/readelf.c: Include ms1.h.

	* gas/configure.in: Add ms1 case.

	* gas/configure: Regenerate.

	* gas/configure.tgt: Add ms1 case.

	* ld/configure.tgt: Same.

	* ld/Makefile.am (ALL_EMULATIONS): Depend on eelf32ms1.o.
	(eelf32ms1.c): Add eelf32ms1.c rule.

	* ld/Makefile.in: Regenerate.

	* bfd/dis-asm.h: Externalize print_insn_ms1.

	* include/elf/common.h (EM_MS1): Define.

	* include/elf/ms1.h: New file.

	* bfd/Makefile.am (ALL_MACHINES): Add ms1 support.
	(ALL_MACHINES_CFILES): Same.
	(BFD32_BACKENDS): Same.
	(BFD32_BACKENDS_CFILES): Same.

	* bfd/Makefile.in: Regenerate.

	* bfd/archures.c (bfd_architecture): Add ms1 entries.
	Externalize bfd_ms1_arch.
	(bfd_archures_list): Add bfd_ms1_arch.

	* bfd/bfd-in2.h: Regenerate.

	* bfd/libbfd.h: Regenerate.

	* bfd/cpu-ms1.c: New file.

	* bfd/elf32-ms1.c: New file.

	* bfd/reloc.c: Add ms1 relocations.

	* bfd/targets.c: Define extern of bfd_elf32_ms1_vec.
	Add bfd_elf32_ms1_vec to _bfd_target_vector.

	* bfd/configure.in: Add bfd_elf32_ms1_vec case.

	* bfd/configure: Regenerate.

	* bfd/config.bfd: Add ms1-*-elf to table.

Index: bfd/Makefile.am
===================================================================
RCS file: /cvs/uberbaum/bfd/Makefile.am,v
retrieving revision 1.156
diff -c -p -r1.156 Makefile.am
*** bfd/Makefile.am	19 May 2005 23:49:42 -0000	1.156
--- bfd/Makefile.am	6 Jun 2005 20:03:52 -0000
*************** ALL_MACHINES = \
*** 88,93 ****
--- 88,94 ----
  	cpu-mcore.lo \
  	cpu-mips.lo \
  	cpu-mmix.lo \
+ 	cpu-ms1.lo \
  	cpu-msp430.lo \
  	cpu-or32.lo \
  	cpu-ns32k.lo \
*************** ALL_MACHINES_CFILES = \
*** 146,151 ****
--- 147,153 ----
  	cpu-mcore.c \
  	cpu-mips.c \
  	cpu-mmix.c \
+ 	cpu-ms1.c \
  	cpu-msp430.c \
  	cpu-or32.c \
  	cpu-ns32k.c \
*************** BFD32_BACKENDS = \
*** 251,256 ****
--- 253,259 ----
  	elf32-mcore.lo \
  	elfxx-mips.lo \
  	elf32-mips.lo \
+ 	elf32-ms1.lo \
  	elf32-msp430.lo \
  	elf32-openrisc.lo \
  	elf32-or32.lo \
*************** BFD32_BACKENDS_CFILES = \
*** 421,426 ****
--- 424,430 ----
  	elf32-mcore.c \
  	elfxx-mips.c \
  	elf32-mips.c \
+ 	elf32-ms1.c \
  	elf32-msp430.c \
  	elf32-openrisc.c \
  	elf32-or32.c \
*************** elf32-mips.lo: elf32-mips.c $(INCDIR)/fi
*** 1333,1338 ****
--- 1337,1346 ----
    $(INCDIR)/coff/symconst.h $(INCDIR)/coff/internal.h \
    $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/mips.h $(INCDIR)/coff/external.h \
    ecoffswap.h elf32-target.h
+ elf32-ms1.lo: elf32-ms1.c elf-bfd.h $(INCDIR)/elf/common.h \
+   $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
+   $(INCDIR)/elf/ms1.h $(INCDIR)/elf/reloc-macros.h \
+   elf32-target.h
  elf32-msp430.lo: elf32-msp430.c $(INCDIR)/filenames.h \
    $(INCDIR)/libiberty.h $(INCDIR)/hashtab.h elf-bfd.h \
    $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
Index: bfd/Makefile.in
===================================================================
RCS file: /cvs/uberbaum/bfd/Makefile.in,v
retrieving revision 1.172
diff -c -p -r1.172 Makefile.in
*** bfd/Makefile.in	19 May 2005 23:49:42 -0000	1.172
--- bfd/Makefile.in	6 Jun 2005 20:03:53 -0000
*************** ALL_MACHINES = \
*** 325,330 ****
--- 325,331 ----
  	cpu-mcore.lo \
  	cpu-mips.lo \
  	cpu-mmix.lo \
+ 	cpu-ms1.lo \
  	cpu-msp430.lo \
  	cpu-or32.lo \
  	cpu-ns32k.lo \
*************** ALL_MACHINES_CFILES = \
*** 383,388 ****
--- 384,390 ----
  	cpu-mcore.c \
  	cpu-mips.c \
  	cpu-mmix.c \
+ 	cpu-ms1.c \
  	cpu-msp430.c \
  	cpu-or32.c \
  	cpu-ns32k.c \
*************** BFD32_BACKENDS = \
*** 489,494 ****
--- 491,497 ----
  	elf32-mcore.lo \
  	elfxx-mips.lo \
  	elf32-mips.lo \
+ 	elf32-ms1.lo \
  	elf32-msp430.lo \
  	elf32-openrisc.lo \
  	elf32-or32.lo \
*************** BFD32_BACKENDS_CFILES = \
*** 659,664 ****
--- 662,668 ----
  	elf32-mcore.c \
  	elfxx-mips.c \
  	elf32-mips.c \
+ 	elf32-ms1.c \
  	elf32-msp430.c \
  	elf32-openrisc.c \
  	elf32-or32.c \
*************** elf32-mips.lo: elf32-mips.c $(INCDIR)/fi
*** 1900,1905 ****
--- 1904,1913 ----
    $(INCDIR)/coff/symconst.h $(INCDIR)/coff/internal.h \
    $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/mips.h $(INCDIR)/coff/external.h \
    ecoffswap.h elf32-target.h
+ elf32-ms1.lo: elf32-ms1.c elf-bfd.h $(INCDIR)/elf/common.h \
+   $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
+   $(INCDIR)/elf/ms1.h $(INCDIR)/elf/reloc-macros.h \
+   elf32-target.h
  elf32-msp430.lo: elf32-msp430.c $(INCDIR)/filenames.h \
    $(INCDIR)/libiberty.h $(INCDIR)/hashtab.h elf-bfd.h \
    $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
Index: bfd/archures.c
===================================================================
RCS file: /cvs/uberbaum/bfd/archures.c,v
retrieving revision 1.104
diff -c -p -r1.104 archures.c
*** bfd/archures.c	4 May 2005 15:53:00 -0000	1.104
--- bfd/archures.c	6 Jun 2005 20:03:54 -0000
*************** DESCRIPTION
*** 316,321 ****
--- 316,324 ----
  . bfd_arch_iq2000,     {* Vitesse IQ2000.  *}
  .#define bfd_mach_iq2000        1
  .#define bfd_mach_iq10          2
+ .  bfd_arch_ms1,
+ .#define bfd_mach_ms1           1
+ .#define bfd_mach_mrisc2        2
  .  bfd_arch_pj,
  .  bfd_arch_avr,       {* Atmel AVR microcontrollers.  *}
  .#define bfd_mach_avr1		1
*************** extern const bfd_arch_info_type bfd_w65_
*** 453,458 ****
--- 456,462 ----
  extern const bfd_arch_info_type bfd_xstormy16_arch;
  extern const bfd_arch_info_type bfd_xtensa_arch;
  extern const bfd_arch_info_type bfd_z8k_arch;
+ extern const bfd_arch_info_type bfd_ms1_arch;
  
  static const bfd_arch_info_type * const bfd_archures_list[] =
    {
*************** static const bfd_arch_info_type * const 
*** 493,498 ****
--- 497,503 ----
      &bfd_mmix_arch,
      &bfd_mn10200_arch,
      &bfd_mn10300_arch,
+     &bfd_ms1_arch,
      &bfd_msp430_arch,
      &bfd_ns32k_arch,
      &bfd_openrisc_arch,
Index: bfd/bfd-in2.h
===================================================================
RCS file: /cvs/uberbaum/bfd/bfd-in2.h,v
retrieving revision 1.341
diff -c -p -r1.341 bfd-in2.h
*** bfd/bfd-in2.h	18 May 2005 05:40:05 -0000	1.341
--- bfd/bfd-in2.h	6 Jun 2005 20:03:56 -0000
*************** enum bfd_architecture
*** 1851,1856 ****
--- 1851,1859 ----
   bfd_arch_iq2000,     /* Vitesse IQ2000.  */
  #define bfd_mach_iq2000        1
  #define bfd_mach_iq10          2
+   bfd_arch_ms1,
+ #define bfd_mach_ms1           1
+ #define bfd_mach_mrisc2        2
    bfd_arch_pj,
    bfd_arch_avr,       /* Atmel AVR microcontrollers.  */
  #define bfd_mach_avr1          1
Index: bfd/config.bfd
===================================================================
RCS file: /cvs/uberbaum/bfd/config.bfd,v
retrieving revision 1.185
diff -c -p -r1.185 config.bfd
*** bfd/config.bfd	5 May 2005 14:37:03 -0000	1.185
--- bfd/config.bfd	6 Jun 2005 20:03:56 -0000
*************** case "${targ}" in
*** 920,925 ****
--- 920,929 ----
      targ_underscore=yes
      ;;
  
+   ms1-*-elf)
+     targ_defvec=bfd_elf32_ms1_vec
+     ;;
+ 
    msp430-*-*)
      targ_defvec=bfd_elf32_msp430_vec
      ;;
Index: bfd/configure
===================================================================
RCS file: /cvs/uberbaum/bfd/configure,v
retrieving revision 1.211
diff -c -p -r1.211 configure
*** bfd/configure	10 May 2005 01:27:51 -0000	1.211
--- bfd/configure	6 Jun 2005 20:04:02 -0000
*************** do
*** 12850,12855 ****
--- 12850,12856 ----
      bfd_elf32_mcore_little_vec)	tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
      bfd_elf32_mn10200_vec)	tb="$tb elf-m10200.lo elf32.lo $elf" ;;
      bfd_elf32_mn10300_vec)	tb="$tb elf-m10300.lo elf32.lo $elf" ;;
+     bfd_elf32_ms1_vec)          tb="$tb elf32-ms1.lo elf32.lo $elf" ;;
      bfd_elf32_msp430_vec)	tb="$tb elf32-msp430.lo elf32.lo $elf" ;;
      bfd_elf32_nbigmips_vec)	tb="$tb elfn32-mips.lo elfxx-mips.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
      bfd_elf32_nlittlemips_vec)	tb="$tb elfn32-mips.lo elfxx-mips.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
Index: bfd/configure.in
===================================================================
RCS file: /cvs/uberbaum/bfd/configure.in,v
retrieving revision 1.183
diff -c -p -r1.183 configure.in
*** bfd/configure.in	10 May 2005 01:27:53 -0000	1.183
--- bfd/configure.in	6 Jun 2005 20:04:02 -0000
*************** do
*** 622,627 ****
--- 622,628 ----
      bfd_elf32_mcore_little_vec)	tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
      bfd_elf32_mn10200_vec)	tb="$tb elf-m10200.lo elf32.lo $elf" ;;
      bfd_elf32_mn10300_vec)	tb="$tb elf-m10300.lo elf32.lo $elf" ;;
+     bfd_elf32_ms1_vec)          tb="$tb elf32-ms1.lo elf32.lo $elf" ;;
      bfd_elf32_msp430_vec)	tb="$tb elf32-msp430.lo elf32.lo $elf" ;;
      bfd_elf32_nbigmips_vec)	tb="$tb elfn32-mips.lo elfxx-mips.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
      bfd_elf32_nlittlemips_vec)	tb="$tb elfn32-mips.lo elfxx-mips.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
Index: bfd/cpu-ms1.c
===================================================================
RCS file: bfd/cpu-ms1.c
diff -N bfd/cpu-ms1.c
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- bfd/cpu-ms1.c	6 Jun 2005 20:04:02 -0000
***************
*** 0 ****
--- 1,57 ----
+ /* BFD support for the Morpho Technologies MS1 processor.
+    Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ 
+    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"
+ 
+ const bfd_arch_info_type arch_info_struct[] =
+ {
+ {
+   32,				/* Bits per word - not really true.  */
+   32,				/* Bits per address.  */
+   8,				/* Bits per byte.  */
+   bfd_arch_ms1,			/* Architecture.  */
+   bfd_mach_mrisc2,		/* Machine.  */
+   "ms1",			/* Architecture name.  */
+   "ms1-003",			/* Printable name.  */
+   1,				/* Section align power.  */
+   FALSE,		        /* The default ?  */
+   bfd_default_compatible,	/* Architecture comparison fn.  */
+   bfd_default_scan,		/* String to architecture convert fn.  */
+   NULL				/* Next in list.  */
+ }
+ };
+ 
+ const bfd_arch_info_type bfd_ms1_arch =
+ {
+   32,				/* Bits per word - not really true.  */
+   32,				/* Bits per address.  */
+   8,				/* Bits per byte.  */
+   bfd_arch_ms1,			/* Architecture.  */
+   bfd_mach_ms1,			/* Machine.  */
+   "ms1",			/* Architecture name.  */
+   "ms1",			/* Printable name.  */
+   1,				/* Section align power.  */
+   TRUE,		        	/* The default ?  */
+   bfd_default_compatible,	/* Architecture comparison fn.  */
+   bfd_default_scan,		/* String to architecture convert fn.  */
+   &arch_info_struct[0]		/* Next in list.  */
+ };
+ 
Index: bfd/elf32-ms1.c
===================================================================
RCS file: bfd/elf32-ms1.c
diff -N bfd/elf32-ms1.c
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- bfd/elf32-ms1.c	6 Jun 2005 20:04:02 -0000
***************
*** 0 ****
--- 1,633 ----
+ /* Morpho Technologies MS1 specific support for 32-bit ELF
+    Copyright 2001, 2002, 2003, 2004, 2005
+    Free Software Foundation, Inc.
+ 
+    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 "elf-bfd.h"
+ #include "elf/ms1.h"
+ 
+ /* Prototypes.  */
+ static reloc_howto_type * ms1_reloc_type_lookup 
+   (bfd *, bfd_reloc_code_real_type);
+ 
+ static void ms1_info_to_howto_rela
+   (bfd *, arelent *, Elf_Internal_Rela *);
+ 
+ static bfd_reloc_status_type ms1_elf_relocate_hi16
+   (bfd *, Elf_Internal_Rela *, bfd_byte *, bfd_vma);
+ 
+ static bfd_reloc_status_type ms1_final_link_relocate
+   (reloc_howto_type *, bfd *, asection *, bfd_byte *, 
+    Elf_Internal_Rela *, bfd_vma);
+ 
+ static bfd_boolean ms1_elf_relocate_section
+   (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, 
+    Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
+ 
+ /* Relocation tables.  */
+ static reloc_howto_type ms1_elf_howto_table [] =
+ {
+   /* This reloc does nothing.  */
+   HOWTO (R_MS1_NONE,           /* type */
+           0,                      /* rightshift */ 
+           2,                      /* size (0 = byte, 1 = short, 2 = long) */ 
+           32,                     /* bitsize */
+           FALSE,                  /* pc_relative */ 
+           0,                      /* bitpos */ 
+           complain_overflow_dont, /* complain_on_overflow */ 
+           bfd_elf_generic_reloc,  /* special_function */ 
+           "R_MS1_NONE",          /* name */ 
+           FALSE,                  /* partial_inplace */ 
+           0 ,                     /* src_mask */ 
+           0,                      /* dst_mask */ 
+           FALSE),                 /* pcrel_offset */
+ 
+   /* A 16 bit absolute relocation.  */
+   HOWTO (R_MS1_16,             /* type */
+           0,                      /* rightshift */ 
+           2,                      /* size (0 = byte, 1 = short, 2 = long) */ 
+           16,                     /* bitsize */
+           FALSE,                  /* pc_relative */ 
+           0,                      /* bitpos */ 
+           complain_overflow_dont, /* complain_on_overflow */ 
+           bfd_elf_generic_reloc,  /* special_function */ 
+           "R_MS1_16",            /* name */ 
+           FALSE,                  /* partial_inplace */ 
+           0 ,                     /* src_mask */ 
+           0xffff,                 /* dst_mask */ 
+           FALSE),                 /* pcrel_offset */
+ 
+   /* A 32 bit absolute relocation.  */
+   HOWTO (R_MS1_32,             /* type */
+           0,                      /* rightshift */ 
+           2,                      /* size (0 = byte, 1 = short, 2 = long) */ 
+           32,                     /* bitsize */
+           FALSE,                  /* pc_relative */ 
+           0,                      /* bitpos */ 
+           complain_overflow_dont, /* complain_on_overflow */ 
+           bfd_elf_generic_reloc,  /* special_function */ 
+           "R_MS1_32",            /* name */ 
+           FALSE,                  /* partial_inplace */ 
+           0 ,                     /* src_mask */ 
+           0xffffffff,             /* dst_mask */ 
+           FALSE),                 /* pcrel_offset */
+ 
+   /* A 32 bit pc-relative relocation.  */
+   HOWTO (R_MS1_32_PCREL,       /* type */
+           0,                      /* rightshift */ 
+           2,                      /* size (0 = byte, 1 = short, 2 = long) */ 
+           32,                     /* bitsize */
+           TRUE,                   /* pc_relative */ 
+           0,                      /* bitpos */ 
+           complain_overflow_dont, /* complain_on_overflow */ 
+           bfd_elf_generic_reloc,  /* special_function */ 
+           "R_MS1_32_PCREL",    /* name */ 
+           FALSE,                  /* partial_inplace */ 
+           0 ,                     /* src_mask */ 
+           0xffffffff,             /* dst_mask */ 
+           TRUE),                  /* pcrel_offset */
+ 
+   /* A 16 bit pc-relative relocation.  */
+   HOWTO (R_MS1_PC16,           /* type */
+           0,                      /* rightshift */ 
+           2,                      /* size (0 = byte, 1 = short, 2 = long) */ 
+           16,                     /* bitsize */
+           TRUE,                   /* pc_relative */ 
+           0,                      /* bitpos */ 
+           complain_overflow_signed, /* complain_on_overflow */ 
+           bfd_elf_generic_reloc,  /* special_function */ 
+           "R_MS1_PC16",          /* name */ 
+           FALSE,                  /* partial_inplace */ 
+           0,                      /* src_mask */ 
+           0xffff,                 /* dst_mask */ 
+           TRUE),                  /* pcrel_offset */
+ 
+   /* high 16 bits of symbol value.  */
+   HOWTO (R_MS1_HI16,          /* type */
+          0,                     /* rightshift */
+          2,                     /* size (0 = byte, 1 = short, 2 = long) */
+          16,                    /* bitsize */
+          FALSE,                 /* pc_relative */
+          0,                     /* bitpos */
+          complain_overflow_dont, /* complain_on_overflow */
+          bfd_elf_generic_reloc, /* special_function */
+          "R_MS1_HI16",        /* name */
+          FALSE,                  /* partial_inplace */
+          0xffff0000,            /* src_mask */
+          0xffff0000,            /* dst_mask */
+          FALSE),                /* pcrel_offset */
+ 
+   /* Low 16 bits of symbol value.  */
+   HOWTO (R_MS1_LO16,          /* type */
+          0,                     /* rightshift */
+          2,                     /* size (0 = byte, 1 = short, 2 = long) */
+          16,                    /* bitsize */
+          FALSE,                 /* pc_relative */
+          0,                     /* bitpos */
+          complain_overflow_dont, /* complain_on_overflow */
+          bfd_elf_generic_reloc, /* special_function */
+          "R_MS1_LO16",        /* name */
+          FALSE,                  /* partial_inplace */
+          0xffff,                /* src_mask */
+          0xffff,                /* dst_mask */
+          FALSE),                /* pcrel_offset */
+ };
+ 
+ /* Map BFD reloc types to MS1 ELF reloc types.  */
+ 
+ static reloc_howto_type *
+ ms1_reloc_type_lookup
+     (bfd *                    abfd ATTRIBUTE_UNUSED,
+      bfd_reloc_code_real_type code)
+ {
+   /* Note that the ms1_elf_howto_table is indxed by the R_
+      constants.  Thus, the order that the howto records appear in the
+      table *must* match the order of the relocation types defined in
+      include/elf/ms1.h.  */
+ 
+   switch (code)
+     {
+     case BFD_RELOC_NONE:
+       return &ms1_elf_howto_table[ (int) R_MS1_NONE];
+     case BFD_RELOC_16:
+       return &ms1_elf_howto_table[ (int) R_MS1_16];
+     case BFD_RELOC_32:
+       return &ms1_elf_howto_table[ (int) R_MS1_32];
+     case BFD_RELOC_32_PCREL:
+       return &ms1_elf_howto_table[ (int) R_MS1_32_PCREL];
+     case BFD_RELOC_16_PCREL:
+       return &ms1_elf_howto_table[ (int) R_MS1_PC16];
+     case BFD_RELOC_HI16:
+       return &ms1_elf_howto_table[ (int) R_MS1_HI16];
+     case BFD_RELOC_LO16:
+       return &ms1_elf_howto_table[ (int) R_MS1_LO16];
+ 
+     default:
+       /* Pacify gcc -Wall.  */
+       return NULL;
+     }
+   return NULL;
+ }
+ 
+ bfd_reloc_status_type
+ ms1_elf_relocate_hi16
+     (bfd *               input_bfd,
+      Elf_Internal_Rela * relhi,
+      bfd_byte *          contents,
+      bfd_vma             value)
+ {
+   bfd_vma insn;
+ 
+   insn = bfd_get_32 (input_bfd, contents + relhi->r_offset);
+ 
+   value += relhi->r_addend;
+   value >>= 16;
+   insn = ((insn & ~0xFFFF) | value);
+ 
+   bfd_put_32 (input_bfd, insn, contents + relhi->r_offset);
+   return bfd_reloc_ok;
+ }
+ 
+ /* XXX: The following code is the result of a cut&paste.  This unfortunate
+    practice is very widespread in the various target back-end files.  */
+ 
+ /* Set the howto pointer for a MS1 ELF reloc.  */
+ 
+ static void
+ ms1_info_to_howto_rela
+     (bfd *               abfd ATTRIBUTE_UNUSED,
+      arelent *           cache_ptr,
+      Elf_Internal_Rela * dst)
+ {
+   unsigned int r_type;
+ 
+   r_type = ELF32_R_TYPE (dst->r_info);
+   cache_ptr->howto = & ms1_elf_howto_table [r_type];
+ }
+ 
+ /* Perform a single relocation.  By default we use the standard BFD
+    routines.  */
+ 
+ static bfd_reloc_status_type
+ ms1_final_link_relocate
+     (reloc_howto_type *  howto,
+      bfd *               input_bfd,
+      asection *          input_section,
+      bfd_byte *          contents,
+      Elf_Internal_Rela * rel,
+      bfd_vma             relocation)
+ {
+   return _bfd_final_link_relocate (howto, input_bfd, input_section,
+ 				   contents, rel->r_offset,
+ 				   relocation, rel->r_addend);
+ }
+ 
+ /* Relocate a MS1 ELF section.
+    There is some attempt to make this function usable for many architectures,
+    both USE_REL and USE_RELA ['twould be nice if such a critter existed],
+    if only to serve as a learning tool.
+ 
+    The RELOCATE_SECTION function is called by the new ELF backend linker
+    to handle the relocations for a section.
+ 
+    The relocs are always passed as Rela structures; if the section
+    actually uses Rel structures, the r_addend field will always be
+    zero.
+ 
+    This function is responsible for adjusting the section contents as
+    necessary, and (if using Rela relocs and generating a relocatable
+    output file) adjusting the reloc addend as necessary.
+ 
+    This function does not have to worry about setting the reloc
+    address or the reloc symbol index.
+ 
+    LOCAL_SYMS is a pointer to the swapped in local symbols.
+ 
+    LOCAL_SECTIONS is an array giving the section in the input file
+    corresponding to the st_shndx field of each local symbol.
+ 
+    The global hash table entry for the global symbols can be found
+    via elf_sym_hashes (input_bfd).
+ 
+    When generating relocatable output, this function must handle
+    STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
+    going to be the section symbol corresponding to the output
+    section, which means that the addend must be adjusted
+    accordingly.  */
+ 
+ static bfd_boolean
+ ms1_elf_relocate_section
+     (bfd *                   output_bfd ATTRIBUTE_UNUSED,
+      struct bfd_link_info *  info,
+      bfd *                   input_bfd,
+      asection *              input_section,
+      bfd_byte *              contents,
+      Elf_Internal_Rela *     relocs,
+      Elf_Internal_Sym *      local_syms,
+      asection **             local_sections)
+ {
+   Elf_Internal_Shdr *           symtab_hdr;
+   struct elf_link_hash_entry ** sym_hashes;
+   Elf_Internal_Rela *           rel;
+   Elf_Internal_Rela *           relend;
+ 
+   symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
+   sym_hashes = elf_sym_hashes (input_bfd);
+   relend     = relocs + input_section->reloc_count;
+ 
+   for (rel = relocs; rel < relend; rel ++)
+     {
+       reloc_howto_type *           howto;
+       unsigned long                r_symndx;
+       Elf_Internal_Sym *           sym;
+       asection *                   sec;
+       struct elf_link_hash_entry * h;
+       bfd_vma                      relocation;
+       bfd_reloc_status_type        r;
+       const char *                 name = NULL;
+       int                          r_type;
+       
+       r_type = ELF32_R_TYPE (rel->r_info);
+ 
+       r_symndx = ELF32_R_SYM (rel->r_info);
+ 
+       /* This is a final link.  */
+       howto  = ms1_elf_howto_table + ELF32_R_TYPE (rel->r_info);
+       h      = NULL;
+       sym    = NULL;
+       sec    = NULL;
+       
+       if (r_symndx < symtab_hdr->sh_info)
+ 	{
+ 	  sym = local_syms + r_symndx;
+ 	  sec = local_sections [r_symndx];
+ 	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ 	  
+ 	  name = bfd_elf_string_from_elf_section
+ 	    (input_bfd, symtab_hdr->sh_link, sym->st_name);
+ 	  name = (name == NULL) ? bfd_section_name (input_bfd, sec) : name;
+ 	}
+       else
+ 	{
+ 	  bfd_boolean unresolved_reloc;
+ 	  bfd_boolean warned;
+ 
+ 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
+ 				   r_symndx, symtab_hdr, sym_hashes,
+ 				   h, sec, relocation,
+ 				   unresolved_reloc, warned);
+ 
+ 	  name = h->root.root.string;
+ 	}
+ 
+ 
+       /* Finally, the sole MS1-specific part.  */
+       switch (r_type)
+         {
+         case R_MS1_HI16:
+           r = ms1_elf_relocate_hi16 (input_bfd, rel, contents, relocation);
+           break;
+ 	default:
+           r = ms1_final_link_relocate (howto, input_bfd, input_section,
+ 		        		  contents, rel, relocation);
+           break;
+         }
+ 
+ 
+       if (r != bfd_reloc_ok)
+ 	{
+ 	  const char * msg = (const char *) NULL;
+ 
+ 	  switch (r)
+ 	    {
+ 	    case bfd_reloc_overflow:
+ 	      r = info->callbacks->reloc_overflow
+ 		(info, (h ? &h->root : NULL), name, howto->name, (bfd_vma) 0,
+ 		 input_bfd, input_section, rel->r_offset);
+ 	      break;
+ 	      
+ 	    case bfd_reloc_undefined:
+ 	      r = info->callbacks->undefined_symbol
+ 		(info, name, input_bfd, input_section, rel->r_offset, TRUE);
+ 	      break;
+ 	      
+ 	    case bfd_reloc_outofrange:
+ 	      msg = _("internal error: out of range error");
+ 	      break;
+ 
+ 	    case bfd_reloc_dangerous:
+ 	      msg = _("internal error: dangerous relocation");
+ 	      break;
+ 
+ 	    default:
+ 	      msg = _("internal error: unknown error");
+ 	      break;
+ 	    }
+ 
+ 	  if (msg)
+ 	    r = info->callbacks->warning
+ 	      (info, msg, name, input_bfd, input_section, rel->r_offset);
+ 
+ 	  if (! r)
+ 	    return FALSE;
+ 	}
+     }
+ 
+   return TRUE;
+ }
+ 
+ /* Return the section that should be marked against GC for a given
+    relocation.  */
+ 
+ static asection *
+ ms1_elf_gc_mark_hook
+     (asection *                   sec,
+      struct bfd_link_info *       info ATTRIBUTE_UNUSED,
+      Elf_Internal_Rela *          rel ATTRIBUTE_UNUSED,
+      struct elf_link_hash_entry * h,
+      Elf_Internal_Sym *           sym)
+ {
+   if (h != NULL)
+     {
+       switch (h->root.type)
+ 	{
+ 	case bfd_link_hash_defined:
+ 	case bfd_link_hash_defweak:
+ 	  return h->root.u.def.section;
+ 
+ 	case bfd_link_hash_common:
+ 	  return h->root.u.c.p->section;
+ 
+ 	default:
+ 	  break;
+ 	}
+     }
+   else
+     {
+       if (!(elf_bad_symtab (sec->owner)
+ 	    && ELF_ST_BIND (sym->st_info) != STB_LOCAL)
+ 	  && ! ((sym->st_shndx <= 0 || sym->st_shndx >= SHN_LORESERVE)
+ 		&& sym->st_shndx != SHN_COMMON))
+ 	return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+     }
+ 
+   return NULL;
+ }
+ 
+ /* Update the got entry reference counts for the section being
+    removed.  */
+ 
+ static bfd_boolean
+ ms1_elf_gc_sweep_hook
+     (bfd *                     abfd ATTRIBUTE_UNUSED,
+      struct bfd_link_info *    info ATTRIBUTE_UNUSED,
+      asection *                sec ATTRIBUTE_UNUSED,
+      const Elf_Internal_Rela * relocs ATTRIBUTE_UNUSED)
+ {
+   return TRUE;
+ }
+ 
+ /* Look through the relocs for a section during the first phase.
+    Since we don't do .gots or .plts, we just need to consider the
+    virtual table relocs for gc.  */
+  
+ static bfd_boolean
+ ms1_elf_check_relocs
+     (bfd *                     abfd,
+      struct bfd_link_info *    info,
+      asection *                sec,
+      const Elf_Internal_Rela * relocs)
+ {
+   Elf_Internal_Shdr *           symtab_hdr;
+   struct elf_link_hash_entry ** sym_hashes;
+   struct elf_link_hash_entry ** sym_hashes_end;
+   const Elf_Internal_Rela *     rel;
+   const Elf_Internal_Rela *     rel_end;
+   
+   if (info->relocatable)
+     return TRUE;
+   
+   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+   sym_hashes = elf_sym_hashes (abfd);
+   sym_hashes_end = sym_hashes + symtab_hdr->sh_size / sizeof (Elf32_External_Sym);
+   if (!elf_bad_symtab (abfd))
+     sym_hashes_end -= symtab_hdr->sh_info;
+   
+   rel_end = relocs + sec->reloc_count;
+   for (rel = relocs; rel < rel_end; rel++)
+     {
+       struct elf_link_hash_entry *h;
+       unsigned long r_symndx;
+       
+       r_symndx = ELF32_R_SYM (rel->r_info);
+       if (r_symndx < symtab_hdr->sh_info)
+         h = NULL;
+       else
+         h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+     }
+ 
+   return TRUE;
+ }
+ 
+ /* Return the MACH for an e_flags value.  */
+ 
+ static int
+ elf32_ms1_machine (bfd *abfd)
+ {
+   switch (elf_elfheader (abfd)->e_flags & EF_MS1_CPU_MASK)
+     {
+     case EF_MS1_CPU_MRISC:	return bfd_mach_ms1;
+     case EF_MS1_CPU_MRISC2:  return bfd_mach_mrisc2;
+     }
+ 
+   return bfd_mach_ms1;
+ }
+ 
+ static bfd_boolean
+ ms1_elf_object_p (bfd * abfd)
+ {
+   bfd_default_set_arch_mach (abfd, bfd_arch_ms1, elf32_ms1_machine (abfd));
+ 
+   return TRUE;
+ }
+ 
+ /* Function to set the ELF flag bits.  */
+ 
+ static bfd_boolean
+ ms1_elf_set_private_flags (bfd *    abfd,
+ 			   flagword flags)
+ {
+   elf_elfheader (abfd)->e_flags = flags;
+   elf_flags_init (abfd) = TRUE;
+   return TRUE;
+ }
+ 
+ static bfd_boolean
+ ms1_elf_copy_private_bfd_data (bfd * ibfd, bfd * obfd)
+ {
+   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
+       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
+     return TRUE;
+   
+   BFD_ASSERT (!elf_flags_init (obfd)
+ 	      || elf_elfheader (obfd)->e_flags == elf_elfheader (ibfd)->e_flags);
+ 
+   elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
+   elf_flags_init (obfd) = TRUE;
+   return TRUE;
+ }
+ 
+ /* Merge backend specific data from an object file to the output
+    object file when linking.  */
+ 
+ static bfd_boolean
+ ms1_elf_merge_private_bfd_data (bfd * ibfd, bfd * obfd)
+ {
+   flagword     old_flags, new_flags;
+   bfd_boolean  error = FALSE;
+   static bfd * last_ibfd = 0;
+ 
+   /* Check if we have the same endianess.  */
+   if (_bfd_generic_verify_endian_match (ibfd, obfd) == FALSE)
+     return FALSE;
+ 
+   /* If they're not both ms1, then merging is meaningless, so just
+      don't do it.  */
+   if (strcmp (ibfd->arch_info->arch_name, "ms1") != 0)
+     return TRUE;
+   if (strcmp (obfd->arch_info->arch_name, "ms1") != 0)
+     return TRUE;
+ 
+   new_flags = elf_elfheader (ibfd)->e_flags;
+   old_flags = elf_elfheader (obfd)->e_flags;
+ 
+ #ifdef DEBUG
+   _bfd_error_handler ("%B: old_flags = 0x%.8lx, new_flags = 0x%.8lx, init = %s",
+ 		      ibfd, old_flags, new_flags, elf_flags_init (obfd) ? "yes" : "no");
+ #endif
+ 
+   elf_flags_init (obfd) = TRUE;
+ 
+   if ((new_flags & EF_MS1_CPU_MASK) == EF_MS1_CPU_MRISC2)
+     {
+       elf_elfheader (obfd)->e_flags = new_flags;
+       last_ibfd = ibfd;
+       obfd->arch_info = ibfd->arch_info;
+     }
+ 
+   return !error;
+ }
+ 
+ static bfd_boolean
+ ms1_elf_print_private_bfd_data (bfd * abfd, void * ptr)
+ {
+   FILE *   file = (FILE *) ptr;
+   flagword flags;
+ 
+   BFD_ASSERT (abfd != NULL && ptr != NULL);
+   
+   /* Print normal ELF private data.  */
+   _bfd_elf_print_private_bfd_data (abfd, ptr);
+ 
+   flags = elf_elfheader (abfd)->e_flags;
+   fprintf (file, _("private flags = 0x%lx:"), (long)flags);
+ 
+   switch (flags & EF_MS1_CPU_MASK)
+     {
+     default:
+     case EF_MS1_CPU_MRISC:	fprintf (file, " ms1-16-002");	break;
+     case EF_MS1_CPU_MRISC2:  fprintf (file, " ms1-16-003");	break;
+     }
+ 
+   fputc ('\n', file);
+ 
+   return TRUE;
+ }
+ 
+ 
+ #define TARGET_BIG_SYM	 bfd_elf32_ms1_vec
+ #define TARGET_BIG_NAME  "elf32-ms1"
+ 
+ #define ELF_ARCH	 bfd_arch_ms1
+ #define ELF_MACHINE_CODE EM_MS1
+ #define ELF_MAXPAGESIZE  1 /* No pages on the MS1.  */
+ 
+ #define elf_info_to_howto_rel			NULL
+ #define elf_info_to_howto			ms1_info_to_howto_rela
+ 
+ #define elf_backend_relocate_section		ms1_elf_relocate_section
+ 
+ #define bfd_elf32_bfd_reloc_type_lookup	        ms1_reloc_type_lookup
+ 
+ #define elf_backend_gc_mark_hook		ms1_elf_gc_mark_hook
+ #define elf_backend_gc_sweep_hook		ms1_elf_gc_sweep_hook
+ #define elf_backend_check_relocs                ms1_elf_check_relocs
+ #define elf_backend_object_p		        ms1_elf_object_p
+ #define elf_backend_rela_normal			1
+ 
+ #define elf_backend_can_gc_sections		1
+ 
+ #define bfd_elf32_bfd_set_private_flags		ms1_elf_set_private_flags
+ #define bfd_elf32_bfd_copy_private_bfd_data	ms1_elf_copy_private_bfd_data
+ #define bfd_elf32_bfd_merge_private_bfd_data	ms1_elf_merge_private_bfd_data
+ #define bfd_elf32_bfd_print_private_bfd_data	ms1_elf_print_private_bfd_data
+ 
+ #include "elf32-target.h"
Index: bfd/targets.c
===================================================================
RCS file: /cvs/uberbaum/bfd/targets.c,v
retrieving revision 1.127
diff -c -p -r1.127 targets.c
*** bfd/targets.c	5 May 2005 14:37:15 -0000	1.127
--- bfd/targets.c	6 Jun 2005 20:04:05 -0000
*************** extern const bfd_target sco5_core_vec;
*** 783,788 ****
--- 783,789 ----
  extern const bfd_target trad_core_vec;
  
  extern const bfd_target bfd_elf32_am33lin_vec;
+ extern const bfd_target bfd_elf32_ms1_vec;
  static const bfd_target * const _bfd_target_vector[] = {
  
  #ifdef SELECT_VECS
*************** static const bfd_target * const _bfd_tar
*** 1113,1118 ****
--- 1114,1120 ----
  	&we32kcoff_vec,
  	&z8kcoff_vec,
  	&bfd_elf32_am33lin_vec,
+ 	&bfd_elf32_ms1_vec,
  #endif /* not SELECT_VECS */
  
  /* Always support S-records, for convenience.  */
Index: binutils/Makefile.am
===================================================================
RCS file: /cvs/uberbaum/binutils/Makefile.am,v
retrieving revision 1.58
diff -c -p -r1.58 Makefile.am
*** binutils/Makefile.am	19 May 2005 23:49:45 -0000	1.58
--- binutils/Makefile.am	6 Jun 2005 20:04:06 -0000
*************** readelf.o: readelf.c ../bfd/bfd.h $(INCD
*** 495,500 ****
--- 495,501 ----
    $(INCDIR)/elf/m32r.h $(INCDIR)/elf/m68k.h $(INCDIR)/elf/m68hc11.h \
    $(INCDIR)/elf/mcore.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/mmix.h \
    $(INCDIR)/elf/mn10200.h $(INCDIR)/elf/mn10300.h $(INCDIR)/elf/msp430.h \
+   $(INCDIR)/elf/ms1.h \
    $(INCDIR)/elf/or32.h $(INCDIR)/elf/pj.h $(INCDIR)/elf/ppc.h \
    $(INCDIR)/elf/ppc64.h $(INCDIR)/elf/s390.h $(INCDIR)/elf/sh.h \
    $(INCDIR)/elf/sparc.h $(INCDIR)/elf/v850.h $(INCDIR)/elf/vax.h \
Index: binutils/Makefile.in
===================================================================
RCS file: /cvs/uberbaum/binutils/Makefile.in,v
retrieving revision 1.66
diff -c -p -r1.66 Makefile.in
*** binutils/Makefile.in	19 May 2005 23:49:45 -0000	1.66
--- binutils/Makefile.in	6 Jun 2005 20:04:07 -0000
*************** readelf.o: readelf.c ../bfd/bfd.h $(INCD
*** 1239,1244 ****
--- 1239,1245 ----
    $(INCDIR)/elf/m32r.h $(INCDIR)/elf/m68k.h $(INCDIR)/elf/m68hc11.h \
    $(INCDIR)/elf/mcore.h $(INCDIR)/elf/mips.h $(INCDIR)/elf/mmix.h \
    $(INCDIR)/elf/mn10200.h $(INCDIR)/elf/mn10300.h $(INCDIR)/elf/msp430.h \
+   $(INCDIR)/elf/ms1.h \
    $(INCDIR)/elf/or32.h $(INCDIR)/elf/pj.h $(INCDIR)/elf/ppc.h \
    $(INCDIR)/elf/ppc64.h $(INCDIR)/elf/s390.h $(INCDIR)/elf/sh.h \
    $(INCDIR)/elf/sparc.h $(INCDIR)/elf/v850.h $(INCDIR)/elf/vax.h \
Index: binutils/readelf.c
===================================================================
RCS file: /cvs/uberbaum/binutils/readelf.c,v
retrieving revision 1.295
diff -c -p -r1.295 readelf.c
*** binutils/readelf.c	18 May 2005 22:42:08 -0000	1.295
--- binutils/readelf.c	6 Jun 2005 20:04:11 -0000
***************
*** 94,99 ****
--- 94,100 ----
  #include "elf/mmix.h"
  #include "elf/mn10200.h"
  #include "elf/mn10300.h"
+ #include "elf/ms1.h"
  #include "elf/msp430.h"
  #include "elf/or32.h"
  #include "elf/pj.h"
Index: gas/configure
===================================================================
RCS file: /cvs/uberbaum/gas/configure,v
retrieving revision 1.197
diff -c -p -r1.197 configure
*** gas/configure	14 Apr 2005 16:55:49 -0000	1.197
--- gas/configure	6 Jun 2005 20:04:19 -0000
*************** _ACEOF
*** 4688,4693 ****
--- 4688,4697 ----
  	fi
  	;;
  
+       ms1)
+         using_cgen=yes
+ 	;;
+ 
        i386 | s390 | sparc)
  	if test $this_target = $target ; then
  
Index: gas/configure.in
===================================================================
RCS file: /cvs/uberbaum/gas/configure.in,v
retrieving revision 1.178
diff -c -p -r1.178 configure.in
*** gas/configure.in	14 Apr 2005 16:55:49 -0000	1.178
--- gas/configure.in	6 Jun 2005 20:04:19 -0000
*************** changequote([,])dnl
*** 317,322 ****
--- 317,326 ----
  	fi
  	;;
  
+       ms1)
+         using_cgen=yes
+ 	;;
+ 
        i386 | s390 | sparc)
  	if test $this_target = $target ; then
  	  AC_DEFINE_UNQUOTED(DEFAULT_ARCH, "${arch}", [Default architecture.])
Index: gas/configure.tgt
===================================================================
RCS file: /cvs/uberbaum/gas/configure.tgt,v
retrieving revision 1.10
diff -c -p -r1.10 configure.tgt
*** gas/configure.tgt	29 Apr 2005 18:43:04 -0000	1.10
--- gas/configure.tgt	6 Jun 2005 20:04:19 -0000
*************** case ${cpu} in
*** 50,55 ****
--- 50,56 ----
    m683??)		cpu_type=m68k ;;
    m5200)		cpu_type=m68k ;;
    m8*)			cpu_type=m88k ;;
+   ms1)                  cpu_type=ms1 endian=big ;;
    maxq)			cpu_type=maxq ;;
    mips*el)		cpu_type=mips endian=little ;;
    mips*)		cpu_type=mips endian=big ;;
Index: include/dis-asm.h
===================================================================
RCS file: /cvs/uberbaum/include/dis-asm.h,v
retrieving revision 1.51
diff -c -p -r1.51 dis-asm.h
*** include/dis-asm.h	10 May 2005 10:21:08 -0000	1.51
--- include/dis-asm.h	6 Jun 2005 20:04:31 -0000
*************** extern int print_insn_mcore		(bfd_vma, d
*** 237,242 ****
--- 237,243 ----
  extern int print_insn_mmix		(bfd_vma, disassemble_info *);
  extern int print_insn_mn10200		(bfd_vma, disassemble_info *);
  extern int print_insn_mn10300		(bfd_vma, disassemble_info *);
+ extern int print_insn_ms1               (bfd_vma, disassemble_info *);
  extern int print_insn_msp430		(bfd_vma, disassemble_info *);
  extern int print_insn_ns32k		(bfd_vma, disassemble_info *);
  extern int print_insn_crx               (bfd_vma, disassemble_info *);
Index: include/elf/common.h
===================================================================
RCS file: /cvs/uberbaum/include/elf/common.h,v
retrieving revision 1.70
diff -c -p -r1.70 common.h
*** include/elf/common.h	10 May 2005 10:21:10 -0000	1.70
--- include/elf/common.h	6 Jun 2005 20:04:33 -0000
***************
*** 257,262 ****
--- 257,264 ----
  /* Ubicom IP2xxx; no ABI */
  #define EM_IP2K_OLD		0x8217
  
+ #define EM_MS1                  0x2530  /* Morpho MS1; no ABI */
+ 
  /* MSP430 magic number
        Written in the absense everything.  */
  #define EM_MSP430_OLD		0x1059
Index: include/elf/ms1.h
===================================================================
RCS file: include/elf/ms1.h
diff -N include/elf/ms1.h
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- include/elf/ms1.h	6 Jun 2005 20:04:33 -0000
***************
*** 0 ****
--- 1,45 ----
+ /* MS1  ELF support for BFD.
+    Copyright (C) 2000, 2005 Free Software Foundation, Inc.
+ 
+ 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.  */
+ 
+ #ifndef _ELF_MS1_H
+ #define _ELF_MS1_H
+ 
+ #include "elf/reloc-macros.h"
+ 
+ /* Relocations.  */
+ START_RELOC_NUMBERS (elf_ms1_reloc_type)
+   RELOC_NUMBER (R_MS1_NONE, 0)
+   RELOC_NUMBER (R_MS1_16, 1)
+   RELOC_NUMBER (R_MS1_32, 2)
+   RELOC_NUMBER (R_MS1_32_PCREL, 3)
+   RELOC_NUMBER (R_MS1_PC16, 4)
+   RELOC_NUMBER (R_MS1_HI16, 5)
+   RELOC_NUMBER (R_MS1_LO16, 6)
+ END_RELOC_NUMBERS(R_MS1_max)
+ 
+ #define EF_MS1_CPU_MRISC	0x00000001	/* default */
+ #define EF_MS1_CPU_MRISC2	0x00000002	/* MRISC2 */
+ #define EF_MS1_CPU_MASK		0x00000003	/* specific cpu bits */
+ #define EF_MS1_ALL_FLAGS	(EF_MS1_CPU_MASK)
+ 
+ /* The location of the memory mapped hardware stack.  */
+ #define MS1_STACK_VALUE 0x0f000000
+ #define MS1_STACK_SIZE  0x20
+ 
+ #endif /* _ELF_MS1_H */
Index: ld/Makefile.am
===================================================================
RCS file: /cvs/uberbaum/ld/Makefile.am,v
retrieving revision 1.177
diff -c -p -r1.177 Makefile.am
*** ld/Makefile.am	19 May 2005 23:49:51 -0000	1.177
--- ld/Makefile.am	6 Jun 2005 20:04:35 -0000
*************** ALL_EMULATIONS = \
*** 179,184 ****
--- 179,185 ----
  	eelf32lppcsim.o \
  	eelf32mcore.o \
  	eelf32mipswindiss.o \
+ 	eelf32ms1.o \
  	eelf32openrisc.o \
  	eelf32ppc.o \
  	eelf32ppc_fbsd.o \
*************** eelf32frvfd.c: $(srcdir)/emulparams/elf3
*** 1532,1537 ****
--- 1533,1541 ----
    $(srcdir)/emulparams/elf32frv.sh \
    $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
  	${GENSCRIPTS} elf32frvfd "$(tdir_frv)"
+ eelf32ms1.c: $(srcdir)/emulparams/elf32ms1.sh \
+   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+         ${GENSCRIPTS} elf32ms1 "$(tdir_ms1)"
  
  # We need this for automake to use YLWRAP.
  EXTRA_ld_new_SOURCES = deffilep.y
Index: ld/Makefile.in
===================================================================
RCS file: /cvs/uberbaum/ld/Makefile.in,v
retrieving revision 1.191
diff -c -p -r1.191 Makefile.in
*** ld/Makefile.in	19 May 2005 23:49:52 -0000	1.191
--- ld/Makefile.in	6 Jun 2005 20:04:36 -0000
*************** ALL_EMULATIONS = \
*** 402,407 ****
--- 402,408 ----
  	eelf32lppcsim.o \
  	eelf32mcore.o \
  	eelf32mipswindiss.o \
+ 	eelf32ms1.o \
  	eelf32openrisc.o \
  	eelf32ppc.o \
  	eelf32ppc_fbsd.o \
*************** eelf32frvfd.c: $(srcdir)/emulparams/elf3
*** 2336,2341 ****
--- 2337,2345 ----
    $(srcdir)/emulparams/elf32frv.sh \
    $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
  	${GENSCRIPTS} elf32frvfd "$(tdir_frv)"
+ eelf32ms1.c: $(srcdir)/emulparams/elf32ms1.sh \
+   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+         ${GENSCRIPTS} elf32ms1 "$(tdir_ms1)"
  
  # The generated emulation files mostly have the same dependencies.
  $(EMULATION_OFILES): ../bfd/bfd.h sysdep.h config.h $(INCDIR)/bfdlink.h \
Index: ld/configure.tgt
===================================================================
RCS file: /cvs/uberbaum/ld/configure.tgt,v
retrieving revision 1.169
diff -c -p -r1.169 configure.tgt
*** ld/configure.tgt	5 May 2005 14:37:25 -0000	1.169
--- ld/configure.tgt	6 Jun 2005 20:04:36 -0000
*************** d30v-*-*ext*)		targ_emul=d30v_e; targ_ex
*** 41,46 ****
--- 41,47 ----
  d30v-*-*onchip*)	targ_emul=d30v_o; targ_extra_emuls="d30velf d30v_e" ;;
  d30v-*-*)		targ_emul=d30velf; targ_extra_emuls="d30v_e d30v_o" ;;
  dlx-*-elf*)		targ_emul=elf32_dlx ;;
+ ms1-*elf)               targ_emul=elf32ms1 ;;
  sparc64-*-aout*)	targ_emul=sparcaout ;;
  sparc64-*-elf*)		targ_emul=elf64_sparc ;;
  sparc-sun-sunos4*) 	targ_emul=sun4 ;;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]