Add support for msp430.
authorNick Clifton <nickc@redhat.com>
Mon, 30 Dec 2002 19:25:13 +0000 (19:25 +0000)
committerNick Clifton <nickc@redhat.com>
Mon, 30 Dec 2002 19:25:13 +0000 (19:25 +0000)
92 files changed:
bfd/ChangeLog
bfd/Makefile.am
bfd/Makefile.in
bfd/archures.c
bfd/bfd-in2.h
bfd/config.bfd
bfd/configure
bfd/configure.in
bfd/cpu-msp430.c [new file with mode: 0644]
bfd/elf32-msp430.c [new file with mode: 0644]
bfd/libbfd.h
bfd/reloc.c
bfd/targets.c
binutils/ChangeLog
binutils/Makefile.am
binutils/Makefile.in
binutils/readelf.c
gas/ChangeLog
gas/Makefile.am
gas/Makefile.in
gas/config/tc-alpha.c
gas/config/tc-msp430.c [new file with mode: 0644]
gas/config/tc-msp430.h [new file with mode: 0644]
gas/configure
gas/configure.in
gas/doc/Makefile.am
gas/doc/Makefile.in
gas/doc/all.texi
gas/doc/as.texinfo
gas/doc/c-msp430.texi [new file with mode: 0644]
gas/testsuite/ChangeLog
include/ChangeLog
include/dis-asm.h
include/elf/ChangeLog
include/elf/common.h
include/elf/msp430.h [new file with mode: 0644]
include/opcode/ChangeLog
include/opcode/msp430.h [new file with mode: 0644]
ld/ChangeLog
ld/Makefile.am
ld/Makefile.in
ld/configure
ld/configure.tgt
ld/emulparams/msp430x110.sh [new file with mode: 0644]
ld/emulparams/msp430x1101.sh [new file with mode: 0644]
ld/emulparams/msp430x1111.sh [new file with mode: 0644]
ld/emulparams/msp430x112.sh [new file with mode: 0644]
ld/emulparams/msp430x1121.sh [new file with mode: 0644]
ld/emulparams/msp430x122.sh [new file with mode: 0644]
ld/emulparams/msp430x1222.sh [new file with mode: 0644]
ld/emulparams/msp430x123.sh [new file with mode: 0644]
ld/emulparams/msp430x1232.sh [new file with mode: 0644]
ld/emulparams/msp430x133.sh [new file with mode: 0644]
ld/emulparams/msp430x1331.sh [new file with mode: 0644]
ld/emulparams/msp430x135.sh [new file with mode: 0644]
ld/emulparams/msp430x1351.sh [new file with mode: 0644]
ld/emulparams/msp430x147.sh [new file with mode: 0644]
ld/emulparams/msp430x148.sh [new file with mode: 0644]
ld/emulparams/msp430x149.sh [new file with mode: 0644]
ld/emulparams/msp430x155.sh [new file with mode: 0644]
ld/emulparams/msp430x156.sh [new file with mode: 0644]
ld/emulparams/msp430x157.sh [new file with mode: 0644]
ld/emulparams/msp430x167.sh [new file with mode: 0644]
ld/emulparams/msp430x168.sh [new file with mode: 0644]
ld/emulparams/msp430x169.sh [new file with mode: 0644]
ld/emulparams/msp430x311.sh [new file with mode: 0644]
ld/emulparams/msp430x312.sh [new file with mode: 0644]
ld/emulparams/msp430x313.sh [new file with mode: 0644]
ld/emulparams/msp430x314.sh [new file with mode: 0644]
ld/emulparams/msp430x315.sh [new file with mode: 0644]
ld/emulparams/msp430x323.sh [new file with mode: 0644]
ld/emulparams/msp430x325.sh [new file with mode: 0644]
ld/emulparams/msp430x336.sh [new file with mode: 0644]
ld/emulparams/msp430x337.sh [new file with mode: 0644]
ld/emulparams/msp430x412.sh [new file with mode: 0644]
ld/emulparams/msp430x413.sh [new file with mode: 0644]
ld/emulparams/msp430x435.sh [new file with mode: 0644]
ld/emulparams/msp430x436.sh [new file with mode: 0644]
ld/emulparams/msp430x437.sh [new file with mode: 0644]
ld/emulparams/msp430x447.sh [new file with mode: 0644]
ld/emulparams/msp430x448.sh [new file with mode: 0644]
ld/emulparams/msp430x449.sh [new file with mode: 0644]
ld/gen-doc.texi
ld/ld.texinfo
ld/scripttempl/elf32msp430.sc [new file with mode: 0644]
ld/scripttempl/elf32msp430_3.sc [new file with mode: 0644]
opcodes/ChangeLog
opcodes/Makefile.in
opcodes/configure
opcodes/configure.in
opcodes/disassemble.c
opcodes/msp430-dis.c [new file with mode: 0644]

index 1d0a15c..b2a283a 100644 (file)
@@ -1,3 +1,18 @@
+2002-12-30    Dmitry Diky <diwil@mail.ru>
+
+       * Makefile.am: Add msp430 target.
+       * configure.in: Likewise.
+       * Makefile.in: Regenerate.
+       * configure: Regenerate.
+       * archures.c: Add msp430 architecture vector.
+       * config.bfd: Likewise.
+       * reloc.c: Add msp430 relocs.
+       * targets.c: Add msp320 target.
+       * cpu-msp430.c: New file: msp430 cpu detection.
+       * elf32-msp430.c: New file: msp430 reloc processing.
+       * bfd-in2.h: Regenerate.
+       * libbfd.h: Regenerate.
+
 2002-12-28  Jakub Jelinek  <jakub@redhat.com>
 
        * elf.c (elf_sort_sections): Don't reorder .tbss.
index 73739fd..70de9e5 100644 (file)
@@ -80,6 +80,7 @@ ALL_MACHINES = \
        cpu-mcore.lo \
        cpu-mips.lo \
        cpu-mmix.lo \
+       cpu-msp430.c \
        cpu-or32.lo \
        cpu-ns32k.lo \
        cpu-openrisc.lo \
@@ -132,6 +133,7 @@ ALL_MACHINES_CFILES = \
        cpu-mcore.c \
        cpu-mips.c \
        cpu-mmix.c \
+       cpu-msp430.c \
        cpu-or32.c \
        cpu-ns32k.c \
        cpu-openrisc.c \
@@ -231,6 +233,7 @@ BFD32_BACKENDS = \
        elf32-mcore.lo \
        elfxx-mips.lo \
        elf32-mips.lo \
+       elf32-msp430.c \
        elf32-openrisc.lo \
        elf32-or32.lo \
        elf32-pj.lo \
@@ -388,6 +391,7 @@ BFD32_BACKENDS_CFILES = \
        elf32-mcore.c \
        elfxx-mips.c \
        elf32-mips.c \
+       elf32-msp430.c \
        elf32-openrisc.c \
        elf32-or32.c \
        elf32-pj.c \
@@ -927,6 +931,7 @@ cpu-m10300.lo: cpu-m10300.c $(INCDIR)/filenames.h
 cpu-mcore.lo: cpu-mcore.c $(INCDIR)/filenames.h
 cpu-mips.lo: cpu-mips.c $(INCDIR)/filenames.h
 cpu-mmix.lo: cpu-mmix.c $(INCDIR)/filenames.h
+cpu-msp430.lo: cpu-msp430.c $(INCDIR)/filenames.h
 cpu-or32.lo: cpu-or32.c $(INCDIR)/filenames.h
 cpu-ns32k.lo: cpu-ns32k.c $(INCDIR)/filenames.h ns32k.h
 cpu-openrisc.lo: cpu-openrisc.c $(INCDIR)/filenames.h
@@ -1212,6 +1217,10 @@ elf32-mips.lo: elf32-mips.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
   $(INCDIR)/elf/reloc-macros.h $(INCDIR)/coff/sym.h $(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-msp430.lo: elf32-msp430.c $(INCDIR)/filenames.h elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(INCDIR)/elf/msp430.h $(INCDIR)/elf/reloc-macros.h \
+  elf32-target.h
 elf32-openrisc.lo: elf32-openrisc.c $(INCDIR)/filenames.h \
   elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
   $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/openrisc.h \
index 2bd807c..efcbd81 100644 (file)
@@ -205,6 +205,7 @@ ALL_MACHINES = \
        cpu-mcore.lo \
        cpu-mips.lo \
        cpu-mmix.lo \
+       cpu-msp430.c \
        cpu-or32.lo \
        cpu-ns32k.lo \
        cpu-openrisc.lo \
@@ -258,6 +259,7 @@ ALL_MACHINES_CFILES = \
        cpu-mcore.c \
        cpu-mips.c \
        cpu-mmix.c \
+       cpu-msp430.c \
        cpu-or32.c \
        cpu-ns32k.c \
        cpu-openrisc.c \
@@ -358,6 +360,7 @@ BFD32_BACKENDS = \
        elf32-mcore.lo \
        elfxx-mips.lo \
        elf32-mips.lo \
+       elf32-msp430.c \
        elf32-openrisc.lo \
        elf32-or32.lo \
        elf32-pj.lo \
@@ -516,6 +519,7 @@ BFD32_BACKENDS_CFILES = \
        elf32-mcore.c \
        elfxx-mips.c \
        elf32-mips.c \
+       elf32-msp430.c \
        elf32-openrisc.c \
        elf32-or32.c \
        elf32-pj.c \
@@ -1460,6 +1464,7 @@ cpu-m10300.lo: cpu-m10300.c $(INCDIR)/filenames.h
 cpu-mcore.lo: cpu-mcore.c $(INCDIR)/filenames.h
 cpu-mips.lo: cpu-mips.c $(INCDIR)/filenames.h
 cpu-mmix.lo: cpu-mmix.c $(INCDIR)/filenames.h
+cpu-msp430.lo: cpu-msp430.c $(INCDIR)/filenames.h
 cpu-or32.lo: cpu-or32.c $(INCDIR)/filenames.h
 cpu-ns32k.lo: cpu-ns32k.c $(INCDIR)/filenames.h ns32k.h
 cpu-openrisc.lo: cpu-openrisc.c $(INCDIR)/filenames.h
@@ -1745,6 +1750,10 @@ elf32-mips.lo: elf32-mips.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
   $(INCDIR)/elf/reloc-macros.h $(INCDIR)/coff/sym.h $(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-msp430.lo: elf32-msp430.c $(INCDIR)/filenames.h elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(INCDIR)/elf/msp430.h $(INCDIR)/elf/reloc-macros.h \
+  elf32-target.h
 elf32-openrisc.lo: elf32-openrisc.c $(INCDIR)/filenames.h \
   elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
   $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/openrisc.h \
index b73766f..2ad7267 100644 (file)
@@ -286,6 +286,20 @@ DESCRIPTION
 .  bfd_arch_mmix,      {* Donald Knuth's educational processor.  *}
 .  bfd_arch_xstormy16,
 .#define bfd_mach_xstormy16    1
+.  bfd_arch_msp430,    {* Texas Instruments MSP430 architecture.  *}
+.#define bfd_mach_msp110         110
+.#define bfd_mach_msp11          11
+.#define bfd_mach_msp12          12
+.#define bfd_mach_msp13          13
+.#define bfd_mach_msp14          14
+.#define bfd_mach_msp41          41
+.#define bfd_mach_msp31          31
+.#define bfd_mach_msp32          32
+.#define bfd_mach_msp33          33
+.#define bfd_mach_msp43          43
+.#define bfd_mach_msp44          44
+.#define bfd_mach_msp15          15
+.#define bfd_mach_msp16          16  
 .  bfd_arch_last
 .  };
 */
@@ -355,6 +369,7 @@ extern const bfd_arch_info_type bfd_mips_arch;
 extern const bfd_arch_info_type bfd_mmix_arch;
 extern const bfd_arch_info_type bfd_mn10200_arch;
 extern const bfd_arch_info_type bfd_mn10300_arch;
+extern const bfd_arch_info_type bfd_msp430_arch;
 extern const bfd_arch_info_type bfd_ns32k_arch;
 extern const bfd_arch_info_type bfd_openrisc_arch;
 extern const bfd_arch_info_type bfd_or32_arch;
@@ -412,6 +427,7 @@ static const bfd_arch_info_type * const bfd_archures_list[] =
     &bfd_mmix_arch,
     &bfd_mn10200_arch,
     &bfd_mn10300_arch,
+    &bfd_msp430_arch,
     &bfd_ns32k_arch,
     &bfd_openrisc_arch,
     &bfd_or32_arch,
index 362cc8f..c727679 100644 (file)
@@ -1713,6 +1713,20 @@ enum bfd_architecture
   bfd_arch_mmix,      /* Donald Knuth's educational processor.  */
   bfd_arch_xstormy16,
 #define bfd_mach_xstormy16     1
+  bfd_arch_msp430,    /* Texas Instruments MSP430 architecture.  */
+#define bfd_mach_msp110         110
+#define bfd_mach_msp11          11
+#define bfd_mach_msp12          12
+#define bfd_mach_msp13          13
+#define bfd_mach_msp14          14
+#define bfd_mach_msp41          41
+#define bfd_mach_msp31          31
+#define bfd_mach_msp32          32
+#define bfd_mach_msp33          33
+#define bfd_mach_msp43          43
+#define bfd_mach_msp44          44
+#define bfd_mach_msp15          15
+#define bfd_mach_msp16          16  
   bfd_arch_last
   };
 
@@ -3246,6 +3260,13 @@ to follow the 16K memory bank of 68HC12 (seen as mapped in the window).  */
   BFD_RELOC_VAX_GLOB_DAT,
   BFD_RELOC_VAX_JMP_SLOT,
   BFD_RELOC_VAX_RELATIVE,
+
+/* msp430 specific relocation codes  */
+  BFD_RELOC_MSP430_10_PCREL,
+  BFD_RELOC_MSP430_16_PCREL,
+  BFD_RELOC_MSP430_16,
+  BFD_RELOC_MSP430_16_PCREL_BYTE,
+  BFD_RELOC_MSP430_16_BYTE,
   BFD_RELOC_UNUSED };
 typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
 reloc_howto_type *
index 9270d7e..4379b6f 100644 (file)
@@ -807,6 +807,10 @@ case "${targ}" in
     targ_defvec=bfd_elf32_mn10300_vec
     ;;
 
+  msp430-*-*)
+    targ_defvec=bfd_elf32_msp430_vec
+    ;;
+
   ns32k-pc532-mach* | ns32k-pc532-ux*)
     targ_defvec=pc532machaout_vec
     targ_underscore=yes
index 74fe037..6d68944 100755 (executable)
@@ -6108,6 +6108,7 @@ do
     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_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 ;;
     bfd_elf32_ntradbigmips_vec)        tb="$tb elfn32-mips.lo elfxx-mips.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
@@ -6358,10 +6359,10 @@ case ${host64}-${target64}-${want64} in
     if test -n "$GCC" ; then
        bad_64bit_gcc=no;
        echo $ac_n "checking for gcc version with buggy 64-bit support""... $ac_c" 1>&6
-echo "configure:6362: checking for gcc version with buggy 64-bit support" >&5
+echo "configure:6363: checking for gcc version with buggy 64-bit support" >&5
        # Add more tests for gcc versions with non-working 64-bit support here.
        cat > conftest.$ac_ext <<EOF
-#line 6365 "configure"
+#line 6366 "configure"
 #include "confdefs.h"
 :__GNUC__:__GNUC_MINOR__:__i386__:
 EOF
@@ -6407,17 +6408,17 @@ for ac_hdr in stdlib.h unistd.h sys/stat.h sys/types.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6411: checking for $ac_hdr" >&5
+echo "configure:6412: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6416 "configure"
+#line 6417 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6421: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6422: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6446,12 +6447,12 @@ done
 for ac_func in getpagesize
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6450: checking for $ac_func" >&5
+echo "configure:6451: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6455 "configure"
+#line 6456 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -6474,7 +6475,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:6478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -6499,7 +6500,7 @@ fi
 done
 
 echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:6503: checking for working mmap" >&5
+echo "configure:6504: checking for working mmap" >&5
 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6507,7 +6508,7 @@ else
   ac_cv_func_mmap_fixed_mapped=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 6511 "configure"
+#line 6512 "configure"
 #include "confdefs.h"
 
 /* Thanks to Mike Haertel and Jim Avera for this test.
@@ -6660,7 +6661,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:6664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6665: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_mmap_fixed_mapped=yes
 else
@@ -6685,12 +6686,12 @@ fi
 for ac_func in madvise mprotect
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6689: checking for $ac_func" >&5
+echo "configure:6690: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6694 "configure"
+#line 6695 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -6713,7 +6714,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:6717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6718: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
index aa34e7d..e641e73 100644 (file)
@@ -604,6 +604,7 @@ do
     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_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 ;;
     bfd_elf32_ntradbigmips_vec)        tb="$tb elfn32-mips.lo elfxx-mips.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
diff --git a/bfd/cpu-msp430.c b/bfd/cpu-msp430.c
new file mode 100644 (file)
index 0000000..c7d283b
--- /dev/null
@@ -0,0 +1,107 @@
+/* BFD library support routines for the MSP architecture.
+   Copyright (C) 2002 Free Software Foundation, Inc.
+   Contributed by Dmitry Diky <diwil@mail.ru>
+
+   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"
+
+static const bfd_arch_info_type *compatible
+  PARAMS ((const bfd_arch_info_type *, const bfd_arch_info_type *));
+
+#define N(addr_bits, machine, print, default, next)            \
+{                                                              \
+  16,                          /* 16 bits in a word.  */       \
+  addr_bits,                   /* Bits in an address.  */      \
+  8,                           /* 8 bits in a byte.  */        \
+  bfd_arch_msp430,                                             \
+  machine,                     /* Machine number.  */          \
+  "msp430",                    /* Architecture name.   */      \
+  print,                       /* Printable name.  */          \
+  1,                           /* Section align power.  */     \
+  default,                     /* The default machine.  */     \
+  compatible,                                                  \
+  bfd_default_scan,                                            \
+  next                                                         \
+}
+
+static const bfd_arch_info_type arch_info_struct[] =
+{
+  /* msp430x11x.  */
+  N (16, bfd_mach_msp11, "msp:11", FALSE, & arch_info_struct[1]),
+
+  /* msp430x12x.  */
+  N (16, bfd_mach_msp12, "msp:12", FALSE, & arch_info_struct[2]),
+
+  /* msp430x13x.  */
+  N (16, bfd_mach_msp13, "msp:13", FALSE, & arch_info_struct[3]),
+
+  /* msp430x14x.  */
+  N (16, bfd_mach_msp14, "msp:14", FALSE, & arch_info_struct[4]),
+
+  /* msp430x31x.  */
+  N (16, bfd_mach_msp31, "msp:31", FALSE, & arch_info_struct[5]), 
+
+  /* msp430x32x.  */
+  N (16, bfd_mach_msp32, "msp:32", FALSE, & arch_info_struct[6]), 
+
+  /* msp430x33x.  */
+  N (16, bfd_mach_msp33, "msp:33", FALSE, & arch_info_struct[7]),
+  
+  /* msp430x41x.  */
+  N (16, bfd_mach_msp41, "msp:41", FALSE, & arch_info_struct[8]),
+
+  /* msp430x43x.  */
+  N (16, bfd_mach_msp43, "msp:43", FALSE, & arch_info_struct[9]),
+
+  /* msp430x44x.  */
+  N (16, bfd_mach_msp43, "msp:44", FALSE, & arch_info_struct[10]),
+  
+  /* msp430x15x.  */
+  N (16, bfd_mach_msp15, "msp:15", FALSE, & arch_info_struct[11]),
+  
+  /* msp430x16x.  */
+  N (16, bfd_mach_msp16, "msp:16", FALSE, & arch_info_struct[12]),
+
+  /* msp430x11x1.  */
+  N (16, bfd_mach_msp110, "msp:110", FALSE, NULL)
+
+};
+
+const bfd_arch_info_type bfd_msp430_arch =
+  N (16, bfd_mach_msp14, "msp:14", TRUE, & arch_info_struct[0]);
+
+/* This routine is provided two arch_infos and works out which MSP
+   machine which would be compatible with both and returns a pointer
+   to its info structure.  */
+
+static const bfd_arch_info_type *
+compatible (a,b)
+     const bfd_arch_info_type * a;
+     const bfd_arch_info_type * b;
+{
+  /* If a & b are for different architectures we can do nothing.  */
+  if (a->arch != b->arch)
+    return NULL;
+
+  if (a->mach <= b->mach)
+    return b;
+
+  return a;
+}
diff --git a/bfd/elf32-msp430.c b/bfd/elf32-msp430.c
new file mode 100644 (file)
index 0000000..694a30f
--- /dev/null
@@ -0,0 +1,720 @@
+/*  MSP430-specific support for 32-bit ELF
+    Copyright (C) 2002 Free Software Foundation, Inc.
+    Contributed by Dmitry Diky <diwil@mail.ru>
+
+    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 "libiberty.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+#include "elf/msp430.h"
+
+static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup
+  PARAMS ((bfd *, bfd_reloc_code_real_type));
+
+static void msp430_info_to_howto_rela
+  PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
+
+static asection *elf32_msp430_gc_mark_hook
+  PARAMS ((asection *, struct bfd_link_info *, Elf_Internal_Rela *,
+          struct elf_link_hash_entry *, Elf_Internal_Sym *));
+
+static bfd_boolean elf32_msp430_gc_sweep_hook
+  PARAMS ((bfd *, struct bfd_link_info *, asection *,
+          const Elf_Internal_Rela *));
+
+static bfd_boolean elf32_msp430_check_relocs
+  PARAMS ((bfd *, struct bfd_link_info *, asection *,
+          const Elf_Internal_Rela *));
+
+static bfd_reloc_status_type msp430_final_link_relocate
+  PARAMS ((reloc_howto_type *, bfd *, asection *, bfd_byte *,
+          Elf_Internal_Rela *, bfd_vma));
+
+static bfd_boolean elf32_msp430_relocate_section
+  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
+          Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
+
+static void bfd_elf_msp430_final_write_processing
+  PARAMS ((bfd *, bfd_boolean));
+
+static bfd_boolean elf32_msp430_object_p
+  PARAMS ((bfd *));
+
+static void elf32_msp430_post_process_headers
+  PARAMS ((bfd *, struct bfd_link_info *));
+
+/* Use RELA instead of REL.  */
+#undef USE_REL
+
+static reloc_howto_type elf_msp430_howto_table[] =
+{
+  HOWTO (R_MSP430_NONE,                /* type */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        32,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_bitfield,    /* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_MSP430_NONE",       /* name */
+        FALSE,                 /* partial_inplace */
+        0,                     /* src_mask */
+        0,                     /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
+  HOWTO (R_MSP430_32,          /* type */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        32,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_bitfield,    /* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_MSP430_32",         /* name */
+        FALSE,                 /* partial_inplace */
+        0xffffffff,            /* src_mask */
+        0xffffffff,            /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
+  /* A 13 bit PC relative relocation.  */
+  HOWTO (R_MSP430_10_PCREL,    /* type */
+        1,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        10,                    /* bitsize */
+        TRUE,                  /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_bitfield,    /* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_MSP430_13_PCREL",   /* name */
+        FALSE,                 /* partial_inplace */
+        0xfff,                 /* src_mask */
+        0xfff,                 /* dst_mask */
+        TRUE),                 /* pcrel_offset */
+
+  /* A 16 bit absolute relocation.  */
+  HOWTO (R_MSP430_16,          /* type */
+        0,                     /* rightshift */
+        1,                     /* 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_MSP430_16",         /* name */
+        FALSE,                 /* partial_inplace */
+        0xffff,                /* src_mask */
+        0xffff,                /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
+  /* A 16 bit absolute relocation for command address.  */
+  HOWTO (R_MSP430_16_PCREL,    /* type */
+        1,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        TRUE,                  /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_dont,/* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_MSP430_16_PCREL",   /* name */
+        FALSE,                 /* partial_inplace */
+        0xffff,                /* src_mask */
+        0xffff,                /* dst_mask */
+        TRUE),                 /* pcrel_offset */
+
+  /* A 16 bit absolute relocation, byte operations.  */
+  HOWTO (R_MSP430_16_BYTE,     /* type */
+        0,                     /* rightshift */
+        1,                     /* 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_MSP430_16_BYTE",    /* name */
+        FALSE,                 /* partial_inplace */
+        0xffff,                /* src_mask */
+        0xffff,                /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
+  /* A 16 bit absolute relocation for command address.  */
+  HOWTO (R_MSP430_16_PCREL_BYTE,/* type */
+        1,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        TRUE,                  /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_dont,/* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_MSP430_16_PCREL_BYTE",      /* name */
+        FALSE,                 /* partial_inplace */
+        0xffff,                /* src_mask */
+        0xffff,                /* dst_mask */
+        TRUE)                  /* pcrel_offset */
+};
+
+/* Map BFD reloc types to MSP430 ELF reloc types.  */
+
+struct msp430_reloc_map
+{
+  bfd_reloc_code_real_type bfd_reloc_val;
+  unsigned int elf_reloc_val;
+};
+
+static const struct msp430_reloc_map msp430_reloc_map[] =
+  {
+    {BFD_RELOC_NONE, R_MSP430_NONE},
+    {BFD_RELOC_32, R_MSP430_32},
+    {BFD_RELOC_MSP430_10_PCREL, R_MSP430_10_PCREL},
+    {BFD_RELOC_16, R_MSP430_16_BYTE},
+    {BFD_RELOC_MSP430_16_PCREL, R_MSP430_16_PCREL},
+    {BFD_RELOC_MSP430_16, R_MSP430_16},
+    {BFD_RELOC_MSP430_16_PCREL_BYTE, R_MSP430_16_PCREL_BYTE},
+    {BFD_RELOC_MSP430_16_BYTE, R_MSP430_16_BYTE}
+  };
+
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_type_lookup (abfd, code)
+     bfd *abfd ATTRIBUTE_UNUSED;
+     bfd_reloc_code_real_type code;
+{
+  unsigned int i;
+
+  for (i = 0; i < ARRAY_SIZE (msp430_reloc_map); i++)
+    if (msp430_reloc_map[i].bfd_reloc_val == code)
+      return &elf_msp430_howto_table[msp430_reloc_map[i].elf_reloc_val];
+
+  return NULL;
+}
+
+/* Set the howto pointer for an MSP430 ELF reloc.  */
+
+static void
+msp430_info_to_howto_rela (abfd, cache_ptr, dst)
+     bfd *abfd ATTRIBUTE_UNUSED;
+     arelent *cache_ptr;
+     Elf_Internal_Rela *dst;
+{
+  unsigned int r_type;
+
+  r_type = ELF32_R_TYPE (dst->r_info);
+  BFD_ASSERT (r_type < (unsigned int) R_MSP430_max);
+  cache_ptr->howto = &elf_msp430_howto_table[r_type];
+}
+
+static asection *
+elf32_msp430_gc_mark_hook (sec, info, rel, h, sym)
+     asection *sec;
+     struct bfd_link_info *info ATTRIBUTE_UNUSED;
+     Elf_Internal_Rela *rel;
+     struct elf_link_hash_entry *h;
+     Elf_Internal_Sym *sym;
+{
+  if (h != NULL)
+    {
+      switch (ELF32_R_TYPE (rel->r_info))
+       {
+       default:
+         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
+    return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+
+  return NULL;
+}
+
+static bfd_boolean
+elf32_msp430_gc_sweep_hook (abfd, info, sec, relocs)
+     bfd *abfd ATTRIBUTE_UNUSED;
+     struct bfd_link_info *info ATTRIBUTE_UNUSED;
+     asection *sec ATTRIBUTE_UNUSED;
+     const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED;
+{
+  /* We don't use got and plt entries for msp430.  */
+  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
+elf32_msp430_check_relocs (abfd, info, sec, 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, **sym_hashes_end;
+  const Elf_Internal_Rela *rel;
+  const Elf_Internal_Rela *rel_end;
+
+  if (info->relocateable)
+    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;
+}
+
+/* Perform a single relocation.  By default we use the standard BFD
+   routines, but a few relocs, we have to do them ourselves.  */
+
+static bfd_reloc_status_type
+msp430_final_link_relocate (howto, input_bfd, input_section,
+                           contents, rel, relocation)
+     reloc_howto_type *howto;
+     bfd *input_bfd;
+     asection *input_section;
+     bfd_byte *contents;
+     Elf_Internal_Rela *rel;
+     bfd_vma relocation;
+{
+  bfd_reloc_status_type r = bfd_reloc_ok;
+  bfd_vma x;
+  bfd_signed_vma srel;
+
+  switch (howto->type)
+    {
+    case R_MSP430_10_PCREL:
+      contents += rel->r_offset;
+      srel = (bfd_signed_vma) relocation;
+      srel += rel->r_addend;
+      srel -= rel->r_offset;
+      srel -= 2;               /* Branch instructions add 2 to the PC...  */
+      srel -= (input_section->output_section->vma +
+              input_section->output_offset);
+
+      if (srel & 1)
+       return bfd_reloc_outofrange;
+
+      /* MSP430 addresses commands as words.  */
+      srel >>= 1;
+
+      /* Check for an overflow.  */
+      if (srel < -512 || srel > 511)
+       return bfd_reloc_overflow;
+
+      x = bfd_get_16 (input_bfd, contents);
+      x = (x & 0xfc00) | (srel & 0x3ff);
+      bfd_put_16 (input_bfd, x, contents);
+      break;
+
+    case R_MSP430_16_PCREL:
+      contents += rel->r_offset;
+      srel = (bfd_signed_vma) relocation;
+      srel += rel->r_addend;
+      srel -= rel->r_offset;
+      /* Only branch instructions add 2 to the PC...  */
+      srel -= (input_section->output_section->vma +
+              input_section->output_offset);
+
+      if (srel & 1)
+       return bfd_reloc_outofrange;
+
+      bfd_put_16 (input_bfd, srel & 0xffff, contents);
+      break;
+
+    case R_MSP430_16_PCREL_BYTE:
+      contents += rel->r_offset;
+      srel = (bfd_signed_vma) relocation;
+      srel += rel->r_addend;
+      srel -= rel->r_offset;
+      /* Only branch instructions add 2 to the PC...  */
+      srel -= (input_section->output_section->vma +
+              input_section->output_offset);
+
+      bfd_put_16 (input_bfd, srel & 0xffff, contents);
+      break;
+
+    case R_MSP430_16_BYTE:
+      contents += rel->r_offset;
+      srel = (bfd_signed_vma) relocation;
+      srel += rel->r_addend;
+      bfd_put_16 (input_bfd, srel & 0xffff, contents);
+      break;
+
+    case R_MSP430_16:
+      contents += rel->r_offset;
+      srel = (bfd_signed_vma) relocation;
+      srel += rel->r_addend;
+
+      if (srel & 1)
+       return bfd_reloc_notsupported;
+
+      bfd_put_16 (input_bfd, srel & 0xffff, contents);
+      break;
+
+    default:
+      r = _bfd_final_link_relocate (howto, input_bfd, input_section,
+                                   contents, rel->r_offset,
+                                   relocation, rel->r_addend);
+    }
+
+  return r;
+}
+
+/* Relocate an MSP430 ELF section.  */
+
+static bfd_boolean
+elf32_msp430_relocate_section (output_bfd, info, input_bfd, input_section,
+                              contents, relocs, local_syms, local_sections)
+     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;
+
+      /* This is a final link.  */
+
+      r_type = ELF32_R_TYPE (rel->r_info);
+      r_symndx = ELF32_R_SYM (rel->r_info);
+      howto = elf_msp430_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
+       {
+         h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+
+         while (h->root.type == bfd_link_hash_indirect
+                || h->root.type == bfd_link_hash_warning)
+           h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         name = h->root.root.string;
+
+         if (h->root.type == bfd_link_hash_defined
+             || h->root.type == bfd_link_hash_defweak)
+           {
+             sec = h->root.u.def.section;
+             relocation = (h->root.u.def.value
+                           + sec->output_section->vma + sec->output_offset);
+           }
+         else if (h->root.type == bfd_link_hash_undefweak)
+           {
+             relocation = 0;
+           }
+         else
+           {
+             if (!((*info->callbacks->undefined_symbol)
+                   (info, h->root.root.string, input_bfd,
+                    input_section, rel->r_offset, TRUE)))
+               return FALSE;
+             relocation = 0;
+           }
+       }
+
+      r = msp430_final_link_relocate (howto, input_bfd, input_section,
+                                     contents, rel, relocation);
+
+      if (r != bfd_reloc_ok)
+       {
+         const char *msg = (const char *) NULL;
+
+         switch (r)
+           {
+           case bfd_reloc_overflow:
+             r = info->callbacks->reloc_overflow
+                 (info, 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_notsupported:
+             msg = _("internal error: unsupported relocation 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;
+}
+
+/* The final processing done just before writing out a MSP430 ELF object
+   file.  This gets the MSP430 architecture right based on the machine
+   number.  */
+
+static void
+bfd_elf_msp430_final_write_processing (abfd, linker)
+     bfd *abfd;
+     bfd_boolean linker ATTRIBUTE_UNUSED;
+{
+  unsigned long val;
+
+  switch (bfd_get_mach (abfd))
+    {
+    default:
+    case bfd_mach_msp12:
+      val = E_MSP430_MACH_MSP430x12;
+      break;
+
+    case bfd_mach_msp110:
+      val = E_MSP430_MACH_MSP430x11x1;
+      break;
+
+    case bfd_mach_msp11:
+      val = E_MSP430_MACH_MSP430x11;
+      break;
+
+    case bfd_mach_msp13:
+      val = E_MSP430_MACH_MSP430x13;
+      break;
+
+    case bfd_mach_msp14:
+      val = E_MSP430_MACH_MSP430x14;
+      break;
+
+    case bfd_mach_msp41:
+      val = E_MSP430_MACH_MSP430x41;
+      break;
+
+    case bfd_mach_msp43:
+      val = E_MSP430_MACH_MSP430x43;
+      break;
+
+    case bfd_mach_msp44:
+      val = E_MSP430_MACH_MSP430x44;
+      break;
+
+    case bfd_mach_msp31:
+      val = E_MSP430_MACH_MSP430x31;
+      break;
+
+    case bfd_mach_msp32:
+      val = E_MSP430_MACH_MSP430x32;
+      break;
+
+    case bfd_mach_msp33:
+      val = E_MSP430_MACH_MSP430x33;
+      break;
+
+    case bfd_mach_msp15:
+      val = E_MSP430_MACH_MSP430x15;
+      break;
+
+    case bfd_mach_msp16:
+      val = E_MSP430_MACH_MSP430x16;
+      break;
+    }
+
+  elf_elfheader (abfd)->e_machine = EM_MSP430;
+  elf_elfheader (abfd)->e_flags &= ~EF_MSP430_MACH;
+  elf_elfheader (abfd)->e_flags |= val;
+}
+
+/* Set the right machine number.  */
+
+static bfd_boolean
+elf32_msp430_object_p (abfd)
+     bfd *abfd;
+{
+  int e_set = bfd_mach_msp14;
+
+  if (elf_elfheader (abfd)->e_machine == EM_MSP430
+      || elf_elfheader (abfd)->e_machine == EM_MSP430_OLD)
+    {
+      int e_mach = elf_elfheader (abfd)->e_flags & EF_MSP430_MACH;
+
+      switch (e_mach)
+       {
+       default:
+       case E_MSP430_MACH_MSP430x12:
+         e_set = bfd_mach_msp12;
+         break;
+
+       case E_MSP430_MACH_MSP430x11:
+         e_set = bfd_mach_msp11;
+         break;
+
+       case E_MSP430_MACH_MSP430x11x1:
+         e_set = bfd_mach_msp110;
+         break;
+
+       case E_MSP430_MACH_MSP430x13:
+         e_set = bfd_mach_msp13;
+         break;
+
+       case E_MSP430_MACH_MSP430x14:
+         e_set = bfd_mach_msp14;
+         break;
+
+       case E_MSP430_MACH_MSP430x41:
+         e_set = bfd_mach_msp41;
+         break;
+
+       case E_MSP430_MACH_MSP430x31:
+         e_set = bfd_mach_msp31;
+         break;
+
+       case E_MSP430_MACH_MSP430x32:
+         e_set = bfd_mach_msp32;
+         break;
+
+       case E_MSP430_MACH_MSP430x33:
+         e_set = bfd_mach_msp33;
+         break;
+
+       case E_MSP430_MACH_MSP430x43:
+         e_set = bfd_mach_msp43;
+         break;
+
+       case E_MSP430_MACH_MSP430x44:
+         e_set = bfd_mach_msp44;
+         break;
+
+       case E_MSP430_MACH_MSP430x15:
+         e_set = bfd_mach_msp15;
+         break;
+
+       case E_MSP430_MACH_MSP430x16:
+         e_set = bfd_mach_msp16;
+         break;
+       }
+    }
+
+  return bfd_default_set_arch_mach (abfd, bfd_arch_msp430, e_set);
+}
+
+static void
+elf32_msp430_post_process_headers (abfd, link_info)
+     bfd *abfd;
+     struct bfd_link_info *link_info ATTRIBUTE_UNUSED;
+{
+  Elf_Internal_Ehdr *i_ehdrp;  /* ELF file header, internal form.  */
+
+  i_ehdrp = elf_elfheader (abfd);
+
+#ifndef ELFOSABI_STANDALONE
+#define ELFOSABI_STANDALONE    255
+#endif
+
+  i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_STANDALONE;
+}
+
+
+#define ELF_ARCH               bfd_arch_msp430
+#define ELF_MACHINE_CODE       EM_MSP430
+#define ELF_MACHINE_ALT1       EM_MSP430_OLD
+#define ELF_MAXPAGESIZE                1
+
+#define TARGET_LITTLE_SYM       bfd_elf32_msp430_vec
+#define TARGET_LITTLE_NAME     "elf32-msp430"
+
+#define elf_info_to_howto                   msp430_info_to_howto_rela
+#define elf_info_to_howto_rel               NULL
+#define elf_backend_relocate_section         elf32_msp430_relocate_section
+#define elf_backend_gc_mark_hook             elf32_msp430_gc_mark_hook
+#define elf_backend_gc_sweep_hook            elf32_msp430_gc_sweep_hook
+#define elf_backend_check_relocs             elf32_msp430_check_relocs
+#define elf_backend_can_gc_sections          1
+#define elf_backend_final_write_processing   bfd_elf_msp430_final_write_processing
+#define elf_backend_object_p                elf32_msp430_object_p
+#define elf_backend_post_process_headers     elf32_msp430_post_process_headers
+
+#include "elf32-target.h"
index 8f3cf58..3a3a8a0 100644 (file)
@@ -1373,6 +1373,11 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_VAX_GLOB_DAT",
   "BFD_RELOC_VAX_JMP_SLOT",
   "BFD_RELOC_VAX_RELATIVE",
+  "BFD_RELOC_MSP430_10_PCREL",
+  "BFD_RELOC_MSP430_16_PCREL",
+  "BFD_RELOC_MSP430_16",
+  "BFD_RELOC_MSP430_16_PCREL_BYTE",
+  "BFD_RELOC_MSP430_16_BYTE",
  "@@overflow: BFD_RELOC_UNUSED@@",
 };
 #endif
index 23224f3..ebf59aa 100644 (file)
@@ -3613,6 +3613,19 @@ ENUMX
   BFD_RELOC_VAX_RELATIVE
 ENUMDOC
   Relocations used by VAX ELF.
+  
+ENUM
+  BFD_RELOC_MSP430_10_PCREL
+ENUMX
+  BFD_RELOC_MSP430_16_PCREL
+ENUMX
+  BFD_RELOC_MSP430_16
+ENUMX
+  BFD_RELOC_MSP430_16_PCREL_BYTE
+ENUMX
+  BFD_RELOC_MSP430_16_BYTE
+ENUMDOC
+  msp430 specific relocation codes
 
 ENDSENUM
   BFD_RELOC_UNUSED
index 998327d..bebd6a0 100644 (file)
@@ -547,6 +547,7 @@ extern const bfd_target bfd_elf32_mcore_big_vec;
 extern const bfd_target bfd_elf32_mcore_little_vec;
 extern const bfd_target bfd_elf32_mn10200_vec;
 extern const bfd_target bfd_elf32_mn10300_vec;
+extern const bfd_target bfd_elf32_msp430_vec;
 extern const bfd_target bfd_elf32_nbigmips_vec;
 extern const bfd_target bfd_elf32_nlittlemips_vec;
 extern const bfd_target bfd_elf32_ntradbigmips_vec;
@@ -833,6 +834,7 @@ static const bfd_target * const _bfd_target_vector[] = {
        &bfd_elf32_mcore_little_vec,
        &bfd_elf32_mn10200_vec,
        &bfd_elf32_mn10300_vec,
+       &bfd_elf32_msp430_vec,
 #ifdef BFD64
        &bfd_elf32_nbigmips_vec,
        &bfd_elf32_nlittlemips_vec,
index f06f1f1..c5dbf95 100644 (file)
@@ -1,3 +1,9 @@
+2002-12-30    Dmitry Diky <diwil@mail.ru>
+
+       * Makefile.am: Add msp430 target.
+       * Makefile.in: Regenerate.
+       * readelf.c: Add support for msp430 target.
+
 2002-12-27  Chris Demetriou  <cgd@broadcom.com>
 
        * doc/binutils.texi (objdump): Document MIPS -M options.
index cca1e18..41348fd 100644 (file)
@@ -470,12 +470,12 @@ readelf.o: readelf.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/elf/i960.h $(INCDIR)/elf/ia64.h $(INCDIR)/elf/ip2k.h \
   $(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/or32.h \
-  $(INCDIR)/elf/pj.h $(INCDIR)/elf/ppc.h $(INCDIR)/elf/s390.h \
-  $(INCDIR)/elf/sh.h $(INCDIR)/elf/sparc.h $(INCDIR)/elf/v850.h \
-  $(INCDIR)/elf/vax.h $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/xstormy16.h \
-  bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
-  unwind-ia64.h
+  $(INCDIR)/elf/mn10200.h $(INCDIR)/elf/mn10300.h $(INCDIR)/elf/msp430.h \
+  $(INCDIR)/elf/or32.h $(INCDIR)/elf/pj.h $(INCDIR)/elf/ppc.h \
+  $(INCDIR)/elf/s390.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/sparc.h \
+  $(INCDIR)/elf/v850.h $(INCDIR)/elf/vax.h $(INCDIR)/elf/x86-64.h \
+  $(INCDIR)/elf/xstormy16.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
+  $(INCDIR)/fopen-same.h unwind-ia64.h
 rename.o: rename.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
   $(INCDIR)/fopen-same.h
index 954f0f9..252afbe 100644 (file)
@@ -1198,12 +1198,12 @@ readelf.o: readelf.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/elf/i960.h $(INCDIR)/elf/ia64.h $(INCDIR)/elf/ip2k.h \
   $(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/or32.h \
-  $(INCDIR)/elf/pj.h $(INCDIR)/elf/ppc.h $(INCDIR)/elf/s390.h \
-  $(INCDIR)/elf/sh.h $(INCDIR)/elf/sparc.h $(INCDIR)/elf/v850.h \
-  $(INCDIR)/elf/vax.h $(INCDIR)/elf/x86-64.h $(INCDIR)/elf/xstormy16.h \
-  bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
-  unwind-ia64.h
+  $(INCDIR)/elf/mn10200.h $(INCDIR)/elf/mn10300.h $(INCDIR)/elf/msp430.h \
+  $(INCDIR)/elf/or32.h $(INCDIR)/elf/pj.h $(INCDIR)/elf/ppc.h \
+  $(INCDIR)/elf/s390.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/sparc.h \
+  $(INCDIR)/elf/v850.h $(INCDIR)/elf/vax.h $(INCDIR)/elf/x86-64.h \
+  $(INCDIR)/elf/xstormy16.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
+  $(INCDIR)/fopen-same.h unwind-ia64.h
 rename.o: rename.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/symcat.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
   $(INCDIR)/fopen-same.h
index c3a39da..d5ddb4b 100644 (file)
@@ -75,6 +75,7 @@
 #include "elf/mmix.h"
 #include "elf/mn10200.h"
 #include "elf/mn10300.h"
+#include "elf/msp430.h"
 #include "elf/or32.h"
 #include "elf/pj.h"
 #include "elf/ppc.h"
@@ -756,6 +757,8 @@ guess_is_rela (e_machine)
     case EM_S390:
     case EM_S390_OLD:
     case EM_MMIX:
+    case EM_MSP430:
+    case EM_MSP430_OLD:
     case EM_XSTORMY16:
     case EM_VAX:
     case EM_IP2K:
@@ -1154,6 +1157,11 @@ dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela)
          rtype = elf_mmix_reloc_type (type);
          break;
 
+       case EM_MSP430:
+       case EM_MSP430_OLD:
+         rtype = elf_msp430_reloc_type (type);
+         break;
+
        case EM_PPC:
        case EM_PPC64:
          rtype = elf_ppc_reloc_type (type);
index 927d2fe..b24dcfe 100644 (file)
@@ -1,3 +1,18 @@
+2002-12-30    Dmitry Diky <diwil@mail.ru>
+
+       * configure.in: Add msp430 target.
+       * configure: Regenerate.
+       * Makefile.am: Add msp430 target.
+       * Makefile.in: Regenerate.
+       * config/tc-msp430.c: New file: msp430 assembler.
+       * config/tc-msp430.h: New file: target macros for msp430.
+       * doc/Makefile.am: Add msp430 target.
+       * doc/Makefile.in: Regenerate.
+       * doc/as.texinfo: Include msp430 documenation.
+       * doc/all.texi: Enable msp430 documentation.
+       * doc/c-msp430.texi: New file: document msp430 specific features
+       of the assembler.
+
 2002-12-25  Alexandre Oliva  <aoliva@redhat.com>
 
        * dwarf2dbg.c (DWARF2_ADDR_SIZE): New macro.
index 7ef0218..6156608 100644 (file)
@@ -66,6 +66,7 @@ CPU_TYPES = \
        mmix \
        mn10200 \
        mn10300 \
+       msp430 \
        ns32k \
        openrisc \
        or32 \
@@ -258,6 +259,7 @@ TARGET_CPU_CFILES = \
        config/tc-mmix.c \
        config/tc-mn10200.c \
        config/tc-mn10300.c \
+       config/tc-msp430.c \
        config/tc-ns32k.c \
        config/tc-openrisc.c \
        config/tc-or32.c \
@@ -308,6 +310,7 @@ TARGET_CPU_HFILES = \
        config/tc-mmix.h \
        config/tc-mn10200.h \
        config/tc-mn10300.h \
+       config/tc-msp430.h \
        config/tc-ns32k.h \
        config/tc-openrisc.h \
        config/tc-or32.h \
@@ -1298,6 +1301,13 @@ DEPTC_mn10300_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
   $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10300.h \
   $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
   $(INCDIR)/opcode/mn10300.h dwarf2dbg.h
+DEPTC_msp430_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-msp430.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+  subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/msp430.h
+DEPTC_msp430_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h subsegs.h \
+  $(INCDIR)/obstack.h $(INCDIR)/opcode/msp430.h  
 DEPTC_ns32k_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
   $(srcdir)/config/tc-ns32k.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
   $(INCDIR)/opcode/ns32k.h $(INCDIR)/obstack.h
@@ -1802,6 +1812,13 @@ DEPOBJ_mn10300_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
   $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10300.h \
   $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
   struc-symbol.h $(INCDIR)/aout/aout64.h
+DEPOBJ_msp430_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-msp430.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+  $(INCDIR)/obstack.h subsegs.h
+DEPOBJ_msp430_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h subsegs.h \
+  $(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
 DEPOBJ_ns32k_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
   $(srcdir)/config/tc-ns32k.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
   $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
@@ -2190,6 +2207,11 @@ DEP_mn10300_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-mn10300.h \
 DEP_mn10300_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
   $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
   $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10300.h
+DEP_msp430_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-msp430.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+DEP_msp430_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h
 DEP_ns32k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-ns32k.h \
   $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
 DEP_ns32k_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-ns32k.h \
index 99ca3c4..0e6853e 100644 (file)
@@ -177,6 +177,7 @@ CPU_TYPES = \
        mmix \
        mn10200 \
        mn10300 \
+       msp430 \
        ns32k \
        openrisc \
        or32 \
@@ -375,6 +376,7 @@ TARGET_CPU_CFILES = \
        config/tc-mmix.c \
        config/tc-mn10200.c \
        config/tc-mn10300.c \
+       config/tc-msp430.c \
        config/tc-ns32k.c \
        config/tc-openrisc.c \
        config/tc-or32.c \
@@ -426,6 +428,7 @@ TARGET_CPU_HFILES = \
        config/tc-mmix.h \
        config/tc-mn10200.h \
        config/tc-mn10300.h \
+       config/tc-msp430.h \
        config/tc-ns32k.h \
        config/tc-openrisc.h \
        config/tc-or32.h \
@@ -1068,6 +1071,15 @@ DEPTC_mn10300_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
   $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
   $(INCDIR)/opcode/mn10300.h dwarf2dbg.h
 
+DEPTC_msp430_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-msp430.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+  subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/msp430.h
+
+DEPTC_msp430_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h subsegs.h \
+  $(INCDIR)/obstack.h $(INCDIR)/opcode/msp430.h  
+
 DEPTC_ns32k_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
   $(srcdir)/config/tc-ns32k.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
   $(INCDIR)/opcode/ns32k.h $(INCDIR)/obstack.h
@@ -1685,6 +1697,15 @@ DEPOBJ_mn10300_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
   $(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
   struc-symbol.h $(INCDIR)/aout/aout64.h
 
+DEPOBJ_msp430_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-msp430.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+  $(INCDIR)/obstack.h subsegs.h
+
+DEPOBJ_msp430_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h subsegs.h \
+  $(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
+
 DEPOBJ_ns32k_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
   $(srcdir)/config/tc-ns32k.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
   $(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
@@ -2184,6 +2205,13 @@ DEP_mn10300_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
   $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
   $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-mn10300.h
 
+DEP_msp430_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-msp430.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+
+DEP_msp430_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(srcdir)/config/tc-msp430.h
+
 DEP_ns32k_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-ns32k.h \
   $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
 
index e546dcf..abbc96b 100644 (file)
@@ -1519,6 +1519,7 @@ alpha_fix_adjustable (f)
         we're preventing this in the other assemblers.  Follow for now.  */
       return 0;
 
+#ifdef OBJ_ELF
     case BFD_RELOC_ALPHA_BRSGP:
       /* If we have a BRSGP reloc to a local symbol, adjust it to BRADDR and
          let it get resolved at assembly time.  */
@@ -1551,6 +1552,7 @@ alpha_fix_adjustable (f)
        f->fx_offset += offset;
        return 1;
       }
+#endif
 
     default:
       return 1;
diff --git a/gas/config/tc-msp430.c b/gas/config/tc-msp430.c
new file mode 100644 (file)
index 0000000..a07f13f
--- /dev/null
@@ -0,0 +1,1552 @@
+/* tc-msp430.c -- Assembler code for the Texas Instruments MSP430
+
+  Copyright (C) 2002 Free Software Foundation, Inc.
+  Contributed by Dmitry Diky <diwil@mail.ru>
+
+  This file is part of GAS, the GNU Assembler.
+
+  GAS 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, or (at your option)
+  any later version.
+
+  GAS 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 GAS; see the file COPYING.  If not, write to
+  the Free Software Foundation, 59 Temple Place - Suite 330,
+  Boston, MA 02111-1307, USA.  */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+
+#define PUSH_1X_WORKAROUND
+#include "as.h"
+#include "subsegs.h"
+#include "opcode/msp430.h"
+#include "safe-ctype.h"
+
+const char comment_chars[] = ";";
+const char line_comment_chars[] = "#";
+const char line_separator_chars[] = "";
+const char EXP_CHARS[] = "eE";
+const char FLT_CHARS[] = "dD";
+
+/* Handle  long expressions.  */
+extern LITTLENUM_TYPE generic_bignum[];
+
+static struct hash_control *msp430_hash;
+
+static unsigned int msp430_operands
+  PARAMS ((struct msp430_opcode_s *, char *));
+static int msp430_srcoperand
+  PARAMS ((struct msp430_operand_s *, char *, int, int *));
+static int msp430_dstoperand
+  PARAMS ((struct msp430_operand_s *, char *, int));
+static char *parse_exp
+  PARAMS ((char *, expressionS *));
+static inline char *skip_space
+  PARAMS ((char *));
+static int check_reg
+  PARAMS ((char *));
+static void msp430_set_arch
+  PARAMS ((int));
+static void show_mcu_list
+  PARAMS ((FILE *));
+static void del_spaces
+  PARAMS ((char *));
+
+#define MAX_OP_LEN     64
+
+struct mcu_type_s
+{
+  char *name;
+  int isa;
+  int mach;
+};
+
+#define MSP430_ISA_11   11
+#define MSP430_ISA_12   12
+#define MSP430_ISA_13   13
+#define MSP430_ISA_14   14
+#define MSP430_ISA_41   41
+#define MSP430_ISA_31   31
+#define MSP430_ISA_32   32
+#define MSP430_ISA_33   33
+#define MSP430_ISA_110 110
+#define MSP430_ISA_43   43
+#define MSP430_ISA_44   44
+#define MSP430_ISA_15   15
+#define MSP430_ISA_16   16
+
+#define CHECK_RELOC_MSP430             ((imm_op || byte_op)?BFD_RELOC_MSP430_16_BYTE:BFD_RELOC_MSP430_16)
+#define CHECK_RELOC_MSP430_PCREL       ((imm_op || byte_op)?BFD_RELOC_MSP430_16_PCREL_BYTE:BFD_RELOC_MSP430_16_PCREL)
+
+static struct mcu_type_s mcu_types[] =
+{
+  {"msp1",       MSP430_ISA_11, bfd_mach_msp11},
+  {"msp2",       MSP430_ISA_14, bfd_mach_msp14},
+  {"msp430x110", MSP430_ISA_11, bfd_mach_msp11},
+  {"msp430x112", MSP430_ISA_11, bfd_mach_msp11},
+  {"msp430x122", MSP430_ISA_12, bfd_mach_msp12},
+  {"msp430x122", MSP430_ISA_12, bfd_mach_msp12},
+  {"msp430x1222",MSP430_ISA_12, bfd_mach_msp12},
+  {"msp430x123", MSP430_ISA_12, bfd_mach_msp12},
+  {"msp430x1232",MSP430_ISA_12, bfd_mach_msp12},
+  {"msp430x133", MSP430_ISA_13, bfd_mach_msp13},
+  {"msp430x135", MSP430_ISA_13, bfd_mach_msp13},
+  {"msp430x147", MSP430_ISA_14, bfd_mach_msp14},
+  {"msp430x148", MSP430_ISA_14, bfd_mach_msp14},
+  {"msp430x149", MSP430_ISA_14, bfd_mach_msp14},
+  {"msp430x412", MSP430_ISA_41, bfd_mach_msp41},
+  {"msp430x413", MSP430_ISA_41, bfd_mach_msp41},
+  {"msp430x311", MSP430_ISA_31, bfd_mach_msp31},
+  {"msp430x312", MSP430_ISA_31, bfd_mach_msp31},
+  {"msp430x313", MSP430_ISA_31, bfd_mach_msp31},
+  {"msp430x314", MSP430_ISA_31, bfd_mach_msp31},
+  {"msp430x315", MSP430_ISA_31, bfd_mach_msp31},
+  {"msp430x323", MSP430_ISA_32, bfd_mach_msp32},
+  {"msp430x325", MSP430_ISA_32, bfd_mach_msp32},
+  {"msp430x336", MSP430_ISA_33, bfd_mach_msp33},
+  {"msp430x337", MSP430_ISA_33, bfd_mach_msp33},
+  {"msp430x1101",MSP430_ISA_110, bfd_mach_msp110},
+  {"msp430x1111",MSP430_ISA_110, bfd_mach_msp110},
+  {"msp430x1121",MSP430_ISA_110, bfd_mach_msp110},
+  {"msp430x1331",MSP430_ISA_13, bfd_mach_msp13},
+  {"msp430x1351",MSP430_ISA_13, bfd_mach_msp13},
+  {"msp430x435", MSP430_ISA_43, bfd_mach_msp43},
+  {"msp430x436", MSP430_ISA_43, bfd_mach_msp43},
+  {"msp430x447", MSP430_ISA_44, bfd_mach_msp44},
+  {"msp430x448", MSP430_ISA_44, bfd_mach_msp44},
+  {"msp430x449", MSP430_ISA_44, bfd_mach_msp44},
+  {"msp430x167", MSP430_ISA_16, bfd_mach_msp16},
+  {"msp430x168", MSP430_ISA_16, bfd_mach_msp16},
+  {"msp430x169", MSP430_ISA_16, bfd_mach_msp16},
+  {"msp430x155", MSP430_ISA_15, bfd_mach_msp15},
+  {"msp430x156", MSP430_ISA_15, bfd_mach_msp15},
+  {"msp430x157", MSP430_ISA_15, bfd_mach_msp15},
+
+  {NULL, 0, 0}
+};
+
+
+static struct mcu_type_s default_mcu =
+    { "msp430x11", MSP430_ISA_11, bfd_mach_msp11 };
+
+static struct mcu_type_s *msp430_mcu = &default_mcu;
+
+const pseudo_typeS md_pseudo_table[] =
+{
+  {"arch", msp430_set_arch, 0},
+  {NULL, NULL, 0}
+};
+
+#define OPTION_MMCU 'm'
+
+const char *md_shortopts = "m:";
+
+struct option md_longopts[] =
+{
+  {"mmcu", required_argument, NULL, OPTION_MMCU},
+  {NULL, no_argument, NULL, 0}
+};
+
+size_t md_longopts_size = sizeof (md_longopts);
+
+static void
+show_mcu_list (stream)
+     FILE *stream;
+{
+  int i;
+
+  fprintf (stream, _("Known MCU names:\n"));
+
+  for (i = 0; mcu_types[i].name; i++)
+    fprintf (stream, _("\t %s\n"), mcu_types[i].name);
+
+  fprintf (stream, "\n");
+}
+
+void
+md_show_usage (stream)
+     FILE *stream;
+{
+  fprintf (stream,
+          _("MSP430 options:\n"
+            "  -mmcu=[msp430-name] select microcontroller type\n"
+            "                  msp430x1101 msp430x1111 msp430x1121\n"
+            "                  msp430x1331 msp430x1351\n"
+            "                  msp430x1222 msp430x1232\n"
+            "                  msp430x311 msp430x312 msp430x313 msp430x314 msp430x315\n"
+            "                  msp430x323 msp430x325\n"
+            "                  msp430x336 msp430x337\n"
+            "                  msp430x412 msp430x413\n"
+            "                  msp430x110 msp430x112\n"
+            "                  msp430x122 msp430x123\n"
+            "                  msp430x133 msp430x135\n"
+            "                  msp430x147 msp430x148 msp430x149\n"
+            "                  msp430x167 msp430x168 msp430x169\n"
+            "                  msp430x155 msp430x156 msp430x157\n"
+            "                  msp430x447 msp430x448 msp430x449\n"
+            "                  msp430x435 msp430x436\n"));
+
+  show_mcu_list (stream);
+}
+
+static char *
+extract_word (char *from, char *to, int limit)
+{
+  char *op_start;
+  char *op_end;
+  int size = 0;
+
+  /* Drop leading whitespace.  */
+  from = skip_space (from);
+  *to = 0;
+
+  /* Find the op code end.  */
+  for (op_start = op_end = from; *op_end != 0 && is_part_of_name (*op_end);)
+    {
+      to[size++] = *op_end++;
+      if (size + 1 >= limit)
+       break;
+    }
+
+  to[size] = 0;
+  return op_end;
+}
+
+static void
+msp430_set_arch (dummy)
+     int dummy ATTRIBUTE_UNUSED;
+{
+  char *str = (char *) alloca (32);    /* 32 for good measure.  */
+
+  input_line_pointer = extract_word (input_line_pointer, str, 32);
+
+  md_parse_option (OPTION_MMCU, str);
+  bfd_set_arch_mach (stdoutput, TARGET_ARCH, msp430_mcu->mach);
+}
+
+int
+md_parse_option (c, arg)
+     int c;
+     char *arg;
+{
+  int i;
+
+  switch (c)
+    {
+    case OPTION_MMCU:
+      for (i = 0; mcu_types[i].name; ++i)
+       if (strcmp (mcu_types[i].name, arg) == 0)
+         break;
+
+      if (!mcu_types[i].name)
+       {
+         show_mcu_list (stderr);
+         as_fatal (_("unknown MCU: %s\n"), arg);
+       }
+
+      if (msp430_mcu == &default_mcu || msp430_mcu->mach == mcu_types[i].mach)
+       msp430_mcu = &mcu_types[i];
+      else
+       as_fatal (_("redefinition of mcu type %s' to %s'"),
+                 msp430_mcu->name, mcu_types[i].name);
+      return 1;
+    }
+
+  return 0;
+}
+
+symbolS *
+md_undefined_symbol (name)
+     char *name ATTRIBUTE_UNUSED;
+{
+  return 0;
+}
+
+static inline char *
+skip_space (s)
+     char *s;
+{
+  while (ISSPACE (*s))
+    ++s;
+  return s;
+}
+
+/* Delete spaces from s: X ( r 1  2)  => X(r12).  */
+
+static void
+del_spaces (s)
+     char *s;
+{
+  while (*s)
+    {
+      if (ISSPACE (*s))
+       {
+         char *m = s + 1;
+
+         while (ISSPACE (*m) && *m)
+           m++;
+         memmove (s, m, strlen (m) + 1);
+       }
+      else
+       s++;
+    }
+}
+
+/* Extract one word from FROM and copy it to TO. Delimeters are ",;\n"  */
+
+static char *
+extract_operand (char *from, char *to, int limit)
+{
+  int size = 0;
+
+  /* Drop leading whitespace.  */
+  from = skip_space (from);
+
+  while (size < limit && *from)
+    {
+      *(to + size) = *from;
+      if (*from == ',' || *from == ';' || *from == '\n')
+       break;
+      from++;
+      size++;
+    }
+
+  *(to + size) = 0;
+  del_spaces (to);
+
+  from++;
+
+  return from;
+}
+
+static char *
+extract_cmd (char *from, char *to, int limit)
+{
+  int size = 0;
+
+  while (*from && ! ISSPACE (*from) && *from != '.' && limit > size)
+    {
+      *(to + size) = *from;
+      from++;
+      size++;
+    }
+
+  *(to + size) = 0;
+
+  return from;
+}
+
+/* Turn a string in input_line_pointer into a floating point constant
+   of type TYPE, and store the appropriate bytes in *LITP.  The number
+   of LITTLENUMS emitted is stored in *SIZEP.  An error message is
+   returned, or NULL on OK.  */
+
+char *
+md_atof (type, litP, sizeP)
+     int type;
+     char *litP;
+     int *sizeP;
+{
+  int prec;
+  LITTLENUM_TYPE words[4];
+  LITTLENUM_TYPE *wordP;
+  char *t;
+
+  switch (type)
+    {
+    case 'f':
+      prec = 2;
+      break;
+    case 'd':
+      prec = 4;
+      break;
+    default:
+      *sizeP = 0;
+      return _("bad call to md_atof");
+    }
+
+  t = atof_ieee (input_line_pointer, type, words);
+  if (t)
+    input_line_pointer = t;
+
+  *sizeP = prec * sizeof (LITTLENUM_TYPE);
+
+  /* This loop outputs the LITTLENUMs in REVERSE order.  */
+  for (wordP = words + prec - 1; prec--;)
+    {
+      md_number_to_chars (litP, (valueT) (*wordP--), sizeof (LITTLENUM_TYPE));
+      litP += sizeof (LITTLENUM_TYPE);
+    }
+
+  return NULL;
+}
+
+void
+md_convert_frag (abfd, sec, fragP)
+     bfd *abfd ATTRIBUTE_UNUSED;
+     asection *sec ATTRIBUTE_UNUSED;
+     fragS *fragP ATTRIBUTE_UNUSED;
+{
+  abort ();
+}
+
+void
+md_begin ()
+{
+  struct msp430_opcode_s *opcode;
+  msp430_hash = hash_new ();
+
+  for (opcode = msp430_opcodes; opcode->name; opcode++)
+    hash_insert (msp430_hash, opcode->name, (char *) opcode);
+
+  bfd_set_arch_mach (stdoutput, TARGET_ARCH, msp430_mcu->mach);
+}
+
+void
+md_assemble (str)
+     char *str;
+{
+  struct msp430_opcode_s *opcode;
+  char cmd[32];
+  unsigned int i = 0;
+
+  str = skip_space (str);      /* Skip leading spaces.  */
+  str = extract_cmd (str, cmd, sizeof (cmd));
+
+  while (cmd[i] && i < sizeof (cmd))
+    {
+      char a = tolower (cmd[i]);
+      cmd[i] = a;
+      i++;
+    }
+
+  if (!cmd[0])
+    {
+      as_bad (_("can't find opcode "));
+      return;
+    }
+
+  opcode = (struct msp430_opcode_s *) hash_find (msp430_hash, cmd);
+
+  if (opcode == NULL)
+    {
+      as_bad (_("unknown opcode `%s'"), cmd);
+      return;
+    }
+
+  {
+    char *__t = input_line_pointer;
+    msp430_operands (opcode, str);
+    input_line_pointer = __t;
+  }
+}
+
+/* Parse instruction operands.
+   Return binary opcode.  */
+
+static unsigned int
+msp430_operands (opcode, line)
+     struct msp430_opcode_s *opcode;
+     char *line;
+{
+  int bin = opcode->bin_opcode;        /* opcode mask.  */
+  int __is;
+  char l1[MAX_OP_LEN], l2[MAX_OP_LEN];
+  char *frag;
+  int where;
+  struct msp430_operand_s op1, op2;
+  int res = 0;
+  static short ZEROS = 0;
+  int byte_op, imm_op;
+
+  /* opcode is the one from opcodes table
+     line contains something like
+     [.w] @r2+, 5(R1)
+     or
+     .b @r2+, 5(R1).  */
+
+  /* Check if byte or word operation.  */
+  if (*line == '.' && tolower (*(line + 1)) == 'b')
+    {
+      bin |= BYTE_OPERATION;
+      byte_op = 1;
+    }
+  else
+    byte_op = 0;
+
+  /* skip .[bwBW].  */
+  while (! ISSPACE (*line) && *line)
+    line++;
+
+  if (opcode->insn_opnumb && (!*line || *line == '\n'))
+    {
+      as_bad (_("instruction %s requires %d operand(s)"),
+             opcode->name, opcode->insn_opnumb);
+      return 0;
+    }
+
+  memset (l1, 0, sizeof (l1));
+  memset (l2, 0, sizeof (l2));
+  memset (&op1, 0, sizeof (op1));
+  memset (&op2, 0, sizeof (op2));
+
+  imm_op = 0;
+
+  switch (opcode->fmt)
+    {
+    case 0:                    /* Emulated.  */
+      switch (opcode->insn_opnumb)
+       {
+       case 0:
+         /* Set/clear bits instructions.  */
+         __is = 2;
+         frag = frag_more (__is);
+         bfd_putl16 ((bfd_vma) bin, frag);
+         break;
+       case 1:
+         /* Something which works with destination operand.  */
+         line = extract_operand (line, l1, sizeof (l1));
+         res = msp430_dstoperand (&op1, l1, opcode->bin_opcode);
+         if (res)
+           break;
+
+         bin |= (op1.reg | (op1.am << 7));
+         __is = 1 + op1.ol;
+         frag = frag_more (2 * __is);
+         where = frag - frag_now->fr_literal;
+         bfd_putl16 ((bfd_vma) bin, frag);
+
+         if (op1.mode == OP_EXP)
+           {
+             where += 2;
+             bfd_putl16 ((bfd_vma) ZEROS, frag + 2);
+
+             if (op1.reg)
+               fix_new_exp (frag_now, where, 2,
+                            &(op1.exp), FALSE, CHECK_RELOC_MSP430);
+             else
+               fix_new_exp (frag_now, where, 2,
+                            &(op1.exp), TRUE, CHECK_RELOC_MSP430_PCREL);
+           }
+         break;
+
+       case 2:
+         {
+           char l2[16];
+
+           /* Shift instruction.  */
+           line = extract_operand (line, l1, sizeof (l1));
+           strncpy (l2, l1, 16);
+           res = msp430_srcoperand (&op1, l1, opcode->bin_opcode, &imm_op);
+           res += msp430_dstoperand (&op2, l2, opcode->bin_opcode);
+
+           if (res)
+             break;    /* An error occured.  All warnings were done before.  */
+
+           bin |= (op2.reg | (op1.reg << 8) | (op1.am << 4) | (op2.am << 7));
+
+           __is = 1 + op1.ol + op2.ol; /* insn size in words.  */
+           frag = frag_more (2 * __is);
+           where = frag - frag_now->fr_literal;
+           bfd_putl16 ((bfd_vma) bin, frag);
+
+           if (op1.mode == OP_EXP)
+             {
+               where += 2;     /* Advance 'where' as we do not know _where_.  */
+               bfd_putl16 ((bfd_vma) ZEROS, frag + 2);
+
+               if (op1.reg || (op1.reg == 0 && op1.am == 3))   /* Not PC relative.  */
+                 fix_new_exp (frag_now, where, 2,
+                              &(op1.exp), FALSE, CHECK_RELOC_MSP430);
+               else
+                 fix_new_exp (frag_now, where, 2,
+                              &(op1.exp), TRUE, CHECK_RELOC_MSP430_PCREL);
+             }
+
+           if (op2.mode == OP_EXP)
+             {
+               imm_op = 0;
+               bfd_putl16 ((bfd_vma) ZEROS, frag + 2 + ((__is == 3) ? 2 : 0));
+
+               if (op2.reg)    /* Not PC relative.  */
+                 fix_new_exp (frag_now, where + 2, 2,
+                              &(op2.exp), FALSE, CHECK_RELOC_MSP430);
+               else
+                 fix_new_exp (frag_now, where + 2, 2,
+                              &(op2.exp), TRUE, CHECK_RELOC_MSP430_PCREL);
+             }
+           break;
+         }
+       case 3:
+         /* Branch instruction => mov dst, r0.  */
+         line = extract_operand (line, l1, sizeof (l1));
+
+         res = msp430_srcoperand (&op1, l1, opcode->bin_opcode, &imm_op);
+         if (res)
+           break;
+
+         byte_op = 0;
+         imm_op = 0;
+
+         bin |= ((op1.reg << 8) | (op1.am << 4));
+         __is = 1 + op1.ol;
+         frag = frag_more (2 * __is);
+         where = frag - frag_now->fr_literal;
+         bfd_putl16 ((bfd_vma) bin, frag);
+
+         if (op1.mode == OP_EXP)
+           {
+             where += 2;
+             bfd_putl16 ((bfd_vma) ZEROS, frag + 2);
+
+             if (op1.reg || (op1.reg == 0 && op1.am == 3))
+               fix_new_exp (frag_now, where, 2,
+                            &(op1.exp), FALSE, CHECK_RELOC_MSP430);
+             else
+               fix_new_exp (frag_now, where, 2,
+                            &(op1.exp), TRUE, CHECK_RELOC_MSP430_PCREL);
+           }
+         break;
+       }
+      break;
+
+    case 1:                    /* Format 1, double operand.  */
+      line = extract_operand (line, l1, sizeof (l1));
+      line = extract_operand (line, l2, sizeof (l2));
+      res = msp430_srcoperand (&op1, l1, opcode->bin_opcode, &imm_op);
+      res += msp430_dstoperand (&op2, l2, opcode->bin_opcode);
+
+      if (res)
+       break;                  /* Error occured.  All warnings were done before.  */
+
+      bin |= (op2.reg | (op1.reg << 8) | (op1.am << 4) | (op2.am << 7));
+
+      __is = 1 + op1.ol + op2.ol;      /* insn size in words.  */
+      frag = frag_more (2 * __is);
+      where = frag - frag_now->fr_literal;
+      bfd_putl16 ((bfd_vma) bin, frag);
+
+      if (op1.mode == OP_EXP)
+       {
+         where += 2;           /* Advance where as we do not know _where_.  */
+         bfd_putl16 ((bfd_vma) ZEROS, frag + 2);
+
+         if (op1.reg || (op1.reg == 0 && op1.am == 3)) /* Not PC relative.  */
+           fix_new_exp (frag_now, where, 2,
+                        &(op1.exp), FALSE, CHECK_RELOC_MSP430);
+         else
+           fix_new_exp (frag_now, where, 2,
+                        &(op1.exp), TRUE, CHECK_RELOC_MSP430_PCREL);
+       }
+
+      if (op2.mode == OP_EXP)
+       {
+         imm_op = 0;
+         bfd_putl16 ((bfd_vma) ZEROS, frag + 2 + ((__is == 3) ? 2 : 0));
+
+         if (op2.reg)          /* Not PC relative.  */
+           fix_new_exp (frag_now, where + 2, 2,
+                        &(op2.exp), FALSE, CHECK_RELOC_MSP430);
+         else
+           fix_new_exp (frag_now, where + 2, 2,
+                        &(op2.exp), TRUE, CHECK_RELOC_MSP430_PCREL);
+       }
+      break;
+
+    case 2:                    /* Single-operand mostly instr.  */
+      if (opcode->insn_opnumb == 0)    
+       {
+         /* reti instruction.  */        
+         frag = frag_more (2);
+         bfd_putl16 ((bfd_vma) bin, frag);
+         break;
+       }
+
+      line = extract_operand (line, l1, sizeof (l1));
+      res = msp430_srcoperand (&op1, l1, opcode->bin_opcode, &imm_op);
+      if (res)
+       break;          /* Error in operand.  */
+
+      bin |= op1.reg | (op1.am << 4);
+      __is = 1 + op1.ol;
+      frag = frag_more (2 * __is);
+      where = frag - frag_now->fr_literal;
+      bfd_putl16 ((bfd_vma) bin, frag);
+
+      if (op1.mode == OP_EXP)
+       {
+         bfd_putl16 ((bfd_vma) ZEROS, frag + 2);
+
+         if (op1.reg || (op1.reg == 0 && op1.am == 3)) /* Not PC relative.  */
+           fix_new_exp (frag_now, where + 2, 2,
+                        &(op1.exp), FALSE, CHECK_RELOC_MSP430);
+         else
+           fix_new_exp (frag_now, where + 2, 2,
+                        &(op1.exp), TRUE, CHECK_RELOC_MSP430_PCREL);
+       }
+      break;
+
+    case 3:                    /* Conditional jumps instructions.  */
+      line = extract_operand (line, l1, sizeof (l1));
+      /* l1 is a label.  */
+      if (l1[0])
+       {
+         char *m = l1;
+         expressionS exp;
+
+         if (*m == '$')
+           m++;
+
+         parse_exp (m, &exp);
+         frag = frag_more (2); /* Instr size is 1 word.  */
+
+         /* In order to handle something like:
+
+            and #0x8000, r5
+            tst r5
+            jz   4     ;       skip next 4 bytes
+            inv r5
+            inc r5
+            nop        ;       will jump here if r5 positive or zero
+
+            jCOND      -n      ;assumes jump n bytes backward:
+
+            mov r5,r6
+            jmp -2
+
+            is equial to:
+            lab:
+            mov r5,r6
+            jmp lab
+
+            jCOND      $n      ; jump from PC in either direction.  */
+
+         if (exp.X_op == O_constant)
+           {
+             int x = exp.X_add_number;
+
+             if (x & 1)
+               {
+                 as_warn (_("Even number required. Rounded to %d"), x + 1);
+                 x++;
+               }
+
+             if ((*l1 == '$' && x > 0) || x < 0)
+               x -= 2;
+
+             x >>= 1;
+
+             if (x > 512 || x < -511)
+               {
+                 as_bad (_("Wrong displacement  %d"), x << 1);
+                 break;
+               }
+
+             bin |= x & 0x3ff;
+             bfd_putl16 ((bfd_vma) bin, frag);
+           }
+         else if (exp.X_op == O_symbol && *l1 != '$')
+           {
+             where = frag - frag_now->fr_literal;
+             fix_new_exp (frag_now, where, 2,
+                          &exp, TRUE, BFD_RELOC_MSP430_10_PCREL);
+
+             bfd_putl16 ((bfd_vma) bin, frag);
+           }
+         else if (*l1 == '$')
+           {
+             as_bad (_("instruction requires label sans '$'"));
+             break;
+           }
+         else
+           {
+             as_bad (_
+                     ("instruction requires label or value in range -511:512"));
+             break;
+           }
+       }
+      else
+       {
+         as_bad (_("instruction requires label"));
+         break;
+       }
+      break;
+
+    default:
+      as_bad (_("Ilegal instruction or not implmented opcode."));
+    }
+
+  input_line_pointer = line;
+  return 0;
+}
+
+static int
+msp430_dstoperand (op, l, bin)
+     struct msp430_operand_s *op;
+     char *l;
+     int bin;
+{
+  int dummy;
+  int ret = msp430_srcoperand (op, l, bin, &dummy);
+  if (ret)
+    return ret;
+
+  if (op->am == 2)
+    {
+      char *__tl = "0";
+
+      op->mode = OP_EXP;
+      op->am = 1;
+      op->ol = 1;
+      parse_exp (__tl, &(op->exp));
+      if (op->exp.X_op != O_constant || op->exp.X_add_number != 0)
+       {
+         as_bad (_("Internal bug. Try to use 0(r%d) instead of @r%d"),
+                 op->reg, op->reg);
+         return 1;
+       }
+      return 0;
+    }
+
+  if (op->am > 1)
+    {
+      as_bad (_
+             ("this addressing mode is not applicable for destination operand"));
+      return 1;
+    }
+  return 0;
+}
+
+
+static int
+check_reg (t)
+     char *t;
+{
+  /* If this is a reg numb, str 't' must be a number from 0 - 15.  */
+
+  if (strlen (t) > 2 && *(t + 2) != '+')
+    return 1;
+
+  while (*t)
+    {
+      if ((*t < '0' || *t > '9') && *t != '+')
+       break;
+      t++;
+    }
+
+  if (*t)
+    return 1;
+
+  return 0;
+}
+
+
+static int
+msp430_srcoperand (op, l, bin, imm_op)
+     struct msp430_operand_s *op;
+     char *l;
+     int bin;
+     int *imm_op;
+{
+  char *__tl = l;
+
+  /* Check if an immediate #VALUE.  The hash sign should be only at the beginning!  */
+  if (*l == '#')
+    {
+      char *h = l;
+      int vshift = -1;
+      int rval = 0;
+
+      /* Check if there is:
+         llo(x) - least significant 16 bits, x &= 0xffff
+         lhi(x) - x = (x >> 16) & 0xffff,
+         hlo(x) - x = (x >> 32) & 0xffff,
+         hhi(x) - x = (x >> 48) & 0xffff
+         The value _MUST_ be constant expression: #hlo(1231231231).  */
+
+      *imm_op = 1;
+
+      if (strncasecmp (h, "#llo(", 5) == 0)
+       {
+         vshift = 0;
+         rval = 3;
+       }
+      else if (strncasecmp (h, "#lhi(", 5) == 0)
+       {
+         vshift = 1;
+         rval = 3;
+       }
+      else if (strncasecmp (h, "#hlo(", 5) == 0)
+       {
+         vshift = 2;
+         rval = 3;
+       }
+      else if (strncasecmp (h, "#hhi(", 5) == 0)
+       {
+         vshift = 3;
+         rval = 3;
+       }
+      else if (strncasecmp (h, "#lo(", 4) == 0)
+       {
+         vshift = 0;
+         rval = 2;
+       }
+      else if (strncasecmp (h, "#hi(", 4) == 0)
+       {
+         vshift = 1;
+         rval = 2;
+       }
+
+      op->reg = 0;             /* Reg PC.  */
+      op->am = 3;
+      op->ol = 1;              /* Immediate  will follow an instruction.  */
+      __tl = h + 1 + rval;
+      op->mode = OP_EXP;
+      parse_exp (__tl, &(op->exp));
+      if (op->exp.X_op == O_constant)
+       {
+         int x = op->exp.X_add_number;
+
+         if (vshift == 0)
+           {
+             x = x & 0xffff;
+             op->exp.X_add_number = x;
+           }
+         else if (vshift == 1)
+           {
+             x = (x >> 16) & 0xffff;
+             op->exp.X_add_number = x;
+           }
+         else if (vshift > 1)
+           {
+             if (x < 0)
+               op->exp.X_add_number = -1;
+             else
+               op->exp.X_add_number = 0;       /* Nothing left.  */
+             x = op->exp.X_add_number;
+           }
+
+         if (op->exp.X_add_number > 65535 || op->exp.X_add_number < -32768)
+           {
+             as_bad (_("value %ld out of range. Use #lo() or #hi()"), x);
+             return 1;
+           }
+
+         /* Now check constants.  */
+         /* Substitude register mode with a constant generator if applicable.  */
+
+         x = (short) x;        /* Extend sign.  */
+
+         if (x == 0)
+           {
+             op->reg = 3;
+             op->am = 0;
+             op->ol = 0;
+             op->mode = OP_REG;
+           }
+         else if (x == 1)
+           {
+             op->reg = 3;
+             op->am = 1;
+             op->ol = 0;
+             op->mode = OP_REG;
+           }
+         else if (x == 2)
+           {
+             op->reg = 3;
+             op->am = 2;
+             op->ol = 0;
+             op->mode = OP_REG;
+           }
+         else if (x == -1)
+           {
+             op->reg = 3;
+             op->am = 3;
+             op->ol = 0;
+             op->mode = OP_REG;
+           }
+         else if (x == 4)
+           {
+#ifdef PUSH_1X_WORKAROUND
+             if (bin == 0x1200
+                 && (msp430_mcu->isa == MSP430_ISA_11
+                     || msp430_mcu->isa == MSP430_ISA_12
+                     || msp430_mcu->isa == MSP430_ISA_13
+                     || msp430_mcu->isa == MSP430_ISA_14))
+               {
+                 /* Remove warning as confusing.
+                    as_warn(_("Hardware push bug workaround")); */
+               }
+             else
+#endif
+               {
+                 op->reg = 2;
+                 op->am = 2;
+                 op->ol = 0;
+                 op->mode = OP_REG;
+               }
+           }
+         else if (x == 8)
+           {
+#ifdef PUSH_1X_WORKAROUND
+             if (bin == 0x1200
+                 && (msp430_mcu->isa == MSP430_ISA_11
+                     || msp430_mcu->isa == MSP430_ISA_12
+                     || msp430_mcu->isa == MSP430_ISA_13
+                     || msp430_mcu->isa == MSP430_ISA_14))
+               {
+                 /* Remove warning as confusing.
+                    as_warn(_("Hardware push bug workaround")); */
+               }
+             else
+#endif
+               {
+                 op->reg = 2;
+                 op->am = 3;
+                 op->ol = 0;
+                 op->mode = OP_REG;
+               }
+           }
+       }
+      else if (op->exp.X_op == O_symbol)
+       {
+         op->mode = OP_EXP;
+       }
+      else if (op->exp.X_op == O_big)
+       {
+         short x;
+         if (vshift != -1)
+           {
+             op->exp.X_op = O_constant;
+             op->exp.X_add_number = 0xffff & generic_bignum[vshift];
+             x = op->exp.X_add_number;
+           }
+         else
+           {
+             as_bad (_
+                     ("unknown expression in operand %s. use #llo() #lhi() #hlo() #hhi() "),
+                     l);
+             return 1;
+           }
+
+         if (x == 0)
+           {
+             op->reg = 3;
+             op->am = 0;
+             op->ol = 0;
+             op->mode = OP_REG;
+           }
+         else if (x == 1)
+           {
+             op->reg = 3;
+             op->am = 1;
+             op->ol = 0;
+             op->mode = OP_REG;
+           }
+         else if (x == 2)
+           {
+             op->reg = 3;
+             op->am = 2;
+             op->ol = 0;
+             op->mode = OP_REG;
+           }
+         else if (x == -1)
+           {
+             op->reg = 3;
+             op->am = 3;
+             op->ol = 0;
+             op->mode = OP_REG;
+           }
+         else if (x == 4)
+           {
+             op->reg = 2;
+             op->am = 2;
+             op->ol = 0;
+             op->mode = OP_REG;
+           }
+         else if (x == 8)
+           {
+             op->reg = 2;
+             op->am = 3;
+             op->ol = 0;
+             op->mode = OP_REG;
+           }
+       }
+      else
+       {
+         as_bad (_("unknown operand %s"), l);
+       }
+      return 0;
+    }
+
+  /* Check if absolute &VALUE (assume that we can construct something like ((a&b)<<7 + 25).  */
+  if (*l == '&')
+    {
+      char *h = l;
+
+      op->reg = 2;             /* reg 2 in absolute addr mode.  */
+      op->am = 1;              /* mode As == 01 bin.  */
+      op->ol = 1;              /* Immediate value followed by instruction.  */
+      __tl = h + 1;
+      parse_exp (__tl, &(op->exp));
+      op->mode = OP_EXP;
+      if (op->exp.X_op == O_constant)
+       {
+         int x = op->exp.X_add_number;
+         if (x > 65535 || x < -32768)
+           {
+             as_bad (_("value out of range: %d"), x);
+             return 1;
+           }
+       }
+      else if (op->exp.X_op == O_symbol)
+       {
+       }
+      else
+       {
+         as_bad (_("unknown expression in operand %s"), l);
+         return 1;
+       }
+      return 0;
+    }
+
+  /* Check if inderect register mode @Rn / postincrement @Rn+.  */
+  if (*l == '@')
+    {
+      char *t = l;
+      char *m = strchr (l, '+');
+
+      if (t != l)
+       {
+         as_bad (_("unknown addressing mode %s"), l);
+         return 1;
+       }
+
+      t++;
+      if (*t != 'r' && *t != 'R')
+       {
+         as_bad (_("unknown addressing mode %s"), l);
+         return 1;
+       }
+
+      t++;     /* Points to the reg value.  */
+
+      if (check_reg (t))
+       {
+         as_bad (_("Bad register name r%s"), t);
+         return 1;
+       }
+
+      op->mode = OP_REG;
+      op->am = m ? 3 : 2;
+      op->ol = 0;
+      if (m)
+       *m = 0;                 /* strip '+' */
+      op->reg = atoi (t);
+      if (op->reg < 0 || op->reg > 15)
+       {
+         as_bad (_("MSP430 does not have %d registers"), op->reg);
+         return 1;
+       }
+
+      return 0;
+    }
+
+  /* Check if register indexed X(Rn).  */
+  do
+    {
+      char *h = strrchr (l, '(');
+      char *m = strrchr (l, ')');
+      char *t;
+
+      *imm_op = 1;
+
+      if (!h)
+       break;
+      if (!m)
+       {
+         as_bad (_("')' required"));
+         return 1;
+       }
+
+      t = h;
+      op->am = 1;
+      op->ol = 1;
+      /* Extract a register.  */
+      t++;     /* Advance pointer.  */
+
+      if (*t != 'r' && *t != 'R')
+       {
+         as_bad (_
+                 ("unknown operator %s. Did you mean X(Rn) or #[hl][hl][oi](CONST) ?"),
+                 l);
+         return 1;
+       }
+      t++;
+
+      op->reg = *t - '0';
+      if (op->reg > 9 || op->reg < 0)
+       {
+         as_bad (_("unknown operator (r%s substituded as a register name"),
+                 t);
+         return 1;
+       }
+      t++;
+      if (*t != ')')
+       {
+         op->reg = op->reg * 10;
+         op->reg += *t - '0';
+
+         if (op->reg > 15)
+           {
+             as_bad (_("unknown operator %s"), l);
+             return 1;
+           }
+         if (op->reg == 2)
+           {
+             as_bad (_("r2 should not be used in indexed addressing mode"));
+             return 1;
+           }
+
+         if (*(t + 1) != ')')
+           {
+             as_bad (_("unknown operator %s"), l);
+             return 1;
+           }
+       }
+
+      /* Extract constant.  */
+      __tl = l;
+      *h = 0;
+      op->mode = OP_EXP;
+      parse_exp (__tl, &(op->exp));
+      if (op->exp.X_op == O_constant)
+       {
+         int x = op->exp.X_add_number;
+
+         if (x > 65535 || x < -32768)
+           {
+             as_bad (_("value out of range: %d"), x);
+             return 1;
+           }
+
+         if (x == 0)
+           {
+             op->mode = OP_REG;
+             op->am = 2;
+             op->ol = 0;
+             return 0;
+           }
+       }
+      else if (op->exp.X_op == O_symbol)
+       {
+       }
+      else
+       {
+         as_bad (_("unknown expression in operand %s"), l);
+         return 1;
+       }
+
+      return 0;
+    }
+  while (0);
+
+  /* Register mode 'mov r1,r2'.  */
+  do
+    {
+      char *t = l;
+
+      /* Operand should be a register.  */
+      if (*t == 'r' || *t == 'R')
+       {
+         int x = atoi (t + 1);
+
+         if (check_reg (t + 1))
+           break;
+
+         if (x < 0 || x > 15)
+           break;              /* Symbolic mode.  */
+
+         op->mode = OP_REG;
+         op->am = 0;
+         op->ol = 0;
+         op->reg = x;
+         return 0;
+       }
+    }
+  while (0);
+
+  /* Symbolic mode 'mov a, b' == 'mov x(pc), y(pc)'.  */
+  do
+    {
+      char *t = l;
+
+      __tl = l;
+
+      while (*t)
+       {
+         /* alpha/number    underline     dot for labels.  */
+         if (! ISALNUM (*t) && *t != '_' && *t != '.')
+           {
+             as_bad (_("unknown operand %s"), l);
+             return 1;
+           }
+         t++;
+       }
+
+      op->mode = OP_EXP;
+      op->reg = 0;             /* PC relative... be careful.  */
+      op->am = 1;
+      op->ol = 1;
+      __tl = l;
+      parse_exp (__tl, &(op->exp));
+      return 0;
+    }
+  while (0);
+
+  /* Unreachable.  */
+  as_bad (_("unknown addressing mode for operand %s"), l);
+  return 1;
+}
+
+
+/* GAS will call this function for each section at the end of the assembly,
+   to permit the CPU backend to adjust the alignment of a section.  */
+
+valueT
+md_section_align (seg, addr)
+     asection *seg;
+     valueT addr;
+{
+  int align = bfd_get_section_alignment (stdoutput, seg);
+
+  return ((addr + (1 << align) - 1) & (-1 << align));
+}
+
+/* If you define this macro, it should return the offset between the
+   address of a PC relative fixup and the position from which the PC
+   relative adjustment should be made.  On many processors, the base
+   of a PC relative instruction is the next instruction, so this
+   macro would return the length of an instruction.  */
+
+long
+md_pcrel_from_section (fixp, sec)
+     fixS *fixp;
+     segT sec;
+{
+  if (fixp->fx_addsy != (symbolS *) NULL
+      && (!S_IS_DEFINED (fixp->fx_addsy)
+         || (S_GET_SEGMENT (fixp->fx_addsy) != sec)))
+    return 0;
+
+  return fixp->fx_frag->fr_address + fixp->fx_where;
+}
+
+/* GAS will call this for each fixup.  It should store the correct
+   value in the object file.  */
+
+void
+md_apply_fix3 (fixp, valuep, seg)
+     fixS *fixp;
+     valueT *valuep;
+     segT seg;
+{
+  unsigned char *where;
+  unsigned long insn;
+  long value;
+
+  if (fixp->fx_addsy == (symbolS *) NULL)
+    {
+      value = *valuep;
+      fixp->fx_done = 1;
+    }
+  else if (fixp->fx_pcrel)
+    {
+      segT s = S_GET_SEGMENT (fixp->fx_addsy);
+
+      if (fixp->fx_addsy && (s == seg || s == absolute_section))
+       {
+         value = S_GET_VALUE (fixp->fx_addsy) + *valuep;
+         fixp->fx_done = 1;
+       }
+      else
+       value = *valuep;
+    }
+  else
+    {
+      value = fixp->fx_offset;
+
+      if (fixp->fx_subsy != (symbolS *) NULL)
+       {
+         if (S_GET_SEGMENT (fixp->fx_subsy) == absolute_section)
+           {
+             value -= S_GET_VALUE (fixp->fx_subsy);
+             fixp->fx_done = 1;
+           }
+         else
+           {
+             /* We don't actually support subtracting a symbol.  */
+             as_bad_where (fixp->fx_file, fixp->fx_line,
+                           _("expression too complex"));
+           }
+       }
+    }
+
+  switch (fixp->fx_r_type)
+    {
+    default:
+      fixp->fx_no_overflow = 1;
+      break;
+    case BFD_RELOC_MSP430_10_PCREL:
+      break;
+    }
+
+  if (fixp->fx_done)
+    {
+      /* Fetch the instruction, insert the fully resolved operand
+         value, and stuff the instruction back again.  */
+
+      where = fixp->fx_frag->fr_literal + fixp->fx_where;
+
+      insn = bfd_getl16 (where);
+
+      switch (fixp->fx_r_type)
+       {
+       case BFD_RELOC_MSP430_10_PCREL:
+         if (value & 1)
+           as_bad_where (fixp->fx_file, fixp->fx_line,
+                         _("odd address operand: %ld"), value);
+
+         /* Jumps are in words.  */
+         value >>= 1;
+         --value;              /* Correct PC.  */
+
+         if (value < -512 || value > 511)
+           as_bad_where (fixp->fx_file, fixp->fx_line,
+                         _("operand out of range: %ld"), value);
+
+         value &= 0x3ff;       /* get rid of extended sign */
+         bfd_putl16 ((bfd_vma) (value | insn), where);
+         break;
+
+       case BFD_RELOC_MSP430_16_PCREL:
+         if (value & 1)
+           as_bad_where (fixp->fx_file, fixp->fx_line,
+                         _("odd address operand: %ld"), value);
+
+         /* Nothing to be corrected here.  */
+         if (value < -32768 || value > 65536)
+           as_bad_where (fixp->fx_file, fixp->fx_line,
+                         _("operand out of range: %ld"), value);
+
+         value &= 0xffff;      /* Get rid of extended sign.  */
+         bfd_putl16 ((bfd_vma) value, where);
+         break;
+
+       case BFD_RELOC_MSP430_16_PCREL_BYTE:
+         /* Nothing to be corrected here.  */
+         if (value < -32768 || value > 65536)
+           as_bad_where (fixp->fx_file, fixp->fx_line,
+                         _("operand out of range: %ld"), value);
+
+         value &= 0xffff;      /* Get rid of extended sign.  */
+         bfd_putl16 ((bfd_vma) value, where);
+         break;
+
+       case BFD_RELOC_32:
+         bfd_putl16 ((bfd_vma) value, where);
+         break;
+
+       case BFD_RELOC_MSP430_16:
+       case BFD_RELOC_16:
+       case BFD_RELOC_MSP430_16_BYTE:
+         value &= 0xffff;
+         bfd_putl16 ((bfd_vma) value, where);
+         break;
+
+       default:
+         as_fatal (_("line %d: unknown relocation type: 0x%x"),
+                   fixp->fx_line, fixp->fx_r_type);
+         break;
+       }
+    }
+  else
+    {
+      fixp->fx_addnumber = value;
+    }
+  return;
+}
+
+/* A `BFD_ASSEMBLER' GAS will call this to generate a reloc.  GAS
+   will pass the resulting reloc to `bfd_install_relocation'.  This
+   currently works poorly, as `bfd_install_relocation' often does the
+   wrong thing, and instances of `tc_gen_reloc' have been written to
+   work around the problems, which in turns makes it difficult to fix
+   `bfd_install_relocation'.  */
+
+/* If while processing a fixup, a reloc really needs to be created
+   then it is done here.  */
+
+arelent *
+tc_gen_reloc (seg, fixp)
+     asection *seg ATTRIBUTE_UNUSED;
+     fixS *fixp;
+{
+  arelent *reloc;
+
+  reloc = (arelent *) xmalloc (sizeof (arelent));
+
+  reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
+  *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
+
+  reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
+  reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type);
+  if (reloc->howto == (reloc_howto_type *) NULL)
+    {
+      as_bad_where (fixp->fx_file, fixp->fx_line,
+                   _("reloc %d not supported by object file format"),
+                   (int) fixp->fx_r_type);
+      return NULL;
+    }
+
+  if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
+      || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
+    reloc->address = fixp->fx_offset;
+
+  reloc->addend = fixp->fx_offset;
+
+  return reloc;
+}
+
+/* Parse ordinary expression.  */
+
+static char *
+parse_exp (s, op)
+     char *s;
+     expressionS *op;
+{
+  input_line_pointer = s;
+  expression (op);
+  if (op->X_op == O_absent)
+    as_bad (_("missing operand"));
+  return input_line_pointer;
+}
+
+
+int
+md_estimate_size_before_relax (fragp, seg)
+     fragS *fragp ATTRIBUTE_UNUSED;
+     asection *seg ATTRIBUTE_UNUSED;
+{
+  abort ();
+  return 0;
+}
diff --git a/gas/config/tc-msp430.h b/gas/config/tc-msp430.h
new file mode 100644 (file)
index 0000000..e540124
--- /dev/null
@@ -0,0 +1,114 @@
+/* This file is tc-msp430.h
+   Copyright (C) 2002 Free Software Foundation, Inc.
+
+   Contributed by Dmitry Diky <diwil@mail.ru>
+
+   This file is part of GAS, the GNU Assembler.
+
+   GAS 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, or (at your option)
+   any later version.
+
+   GAS 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 GAS; see the file COPYING.  If not, write to the Free
+   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
+#ifndef BFD_ASSEMBLER
+ #error MSP430 support requires BFD_ASSEMBLER
+#endif
+
+#define TC_MSP430
+/*   By convention, you should define this macro in the `.h' file.  For
+     example, `tc-m68k.h' defines `TC_M68K'.  You might have to use this
+     if it is necessary to add CPU specific code to the object format
+     file.  */
+
+#define TARGET_FORMAT "elf32-msp430"
+/*   This macro is the BFD target name to use when creating the output
+     file.  This will normally depend upon the `OBJ_FMT' macro.  */
+
+#define TARGET_ARCH bfd_arch_msp430
+/*   This macro is the BFD architecture to pass to `bfd_set_arch_mach'.  */
+
+#define TARGET_MACH 0
+/*   This macro is the BFD machine number to pass to
+     `bfd_set_arch_mach'.  If it is not defined, GAS will use 0.  */
+
+#define TARGET_BYTES_BIG_ENDIAN 0
+/*   You should define this macro to be non-zero if the target is big
+     endian, and zero if the target is little endian.  */
+
+#define ONLY_STANDARD_ESCAPES
+/*   If you define this macro, GAS will warn about the use of
+     nonstandard escape sequences in a string.  */
+
+#define md_operand(x)
+/*   GAS will call this function for any expression that can not be
+     recognized.  When the function is called, `input_line_pointer'
+     will point to the start of the expression.  */
+
+#define md_number_to_chars number_to_chars_littleendian
+/*   This should just call either `number_to_chars_bigendian' or
+     `number_to_chars_littleendian', whichever is appropriate.  On
+     targets like the MIPS which support options to change the
+     endianness, which function to call is a runtime decision.  On
+     other targets, `md_number_to_chars' can be a simple macro.  */
+
+#define WORKING_DOT_WORD
+/*
+`md_short_jump_size'
+`md_long_jump_size'
+`md_create_short_jump'
+`md_create_long_jump'
+     If `WORKING_DOT_WORD' is defined, GAS will not do broken word
+     processing (*note Broken words::.).  Otherwise, you should set
+     `md_short_jump_size' to the size of a short jump (a jump that is
+     just long enough to jump around a long jmp) and
+     `md_long_jump_size' to the size of a long jump (a jump that can go
+     anywhere in the function), You should define
+     `md_create_short_jump' to create a short jump around a long jump,
+     and define `md_create_long_jump' to create a long jump.  */
+
+#define MD_APPLY_FIX3
+
+#define TC_HANDLES_FX_DONE
+
+#undef RELOC_EXPANSION_POSSIBLE
+/*   If you define this macro, it means that `tc_gen_reloc' may return
+     multiple relocation entries for a single fixup.  In this case, the
+     return value of `tc_gen_reloc' is a pointer to a null terminated
+     array.  */
+
+#define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from_section(FIXP, SEC)
+/*   If you define this macro, it should return the offset between the
+     address of a PC relative fixup and the position from which the PC
+     relative adjustment should be made.  On many processors, the base
+     of a PC relative instruction is the next instruction, so this
+     macro would return the length of an instruction.  */
+
+extern long md_pcrel_from_section PARAMS ((struct fix *, segT));
+
+#define LISTING_WORD_SIZE 2
+/*   The number of bytes to put into a word in a listing.  This affects
+     the way the bytes are clumped together in the listing.  For
+     example, a value of 2 might print `1234 5678' where a value of 1
+     would print `12 34 56 78'.  The default value is 4.  */
+
+#define LEX_DOLLAR 0
+/* MSP430 port does not use `$' as a logical line separator */
+
+#define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR) (P2VAR) = 0
+/*   An `.lcomm' directive with no explicit alignment parameter will
+     use this macro to set P2VAR to the alignment that a request for
+     SIZE bytes will have.  The alignment is expressed as a power of
+     two.  If no alignment should take place, the macro definition
+     should do nothing.  Some targets define a `.bss' directive that is
+     also affected by this macro.  The default definition will set
+     P2VAR to the truncated power of two of sizes up to eight bytes.  */
index a3cbf4c..85ce557 100755 (executable)
@@ -1647,7 +1647,7 @@ else
   if { (eval echo configure:1648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
-      *.$ac_ext | *.c | *.o | *.obj) ;;
+      *.c | *.o | *.obj) ;;
       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
       esac
     done
@@ -2527,6 +2527,7 @@ EOF
       mmix-*-*)                                fmt=elf ;;
       mn10200-*-*)                     fmt=elf ;;
       mn10300-*-*)                     fmt=elf ;;
+      msp430-*-*)                      fmt=elf ;;
       openrisc-*-*)                    fmt=elf ;;
       or32-*-rtems*)                   fmt=coff ;;
       or32-*-coff)                     fmt=coff ;;
@@ -3173,7 +3174,7 @@ EOF
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3177: checking for $ac_word" >&5
+echo "configure:3178: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3203,7 +3204,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3207: checking for $ac_word" >&5
+echo "configure:3208: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3254,7 +3255,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3258: checking for $ac_word" >&5
+echo "configure:3259: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3286,7 +3287,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:3290: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:3291: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -3297,12 +3298,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 3301 "configure"
+#line 3302 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:3306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -3328,12 +3329,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:3332: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:3333: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:3337: checking whether we are using GNU C" >&5
+echo "configure:3338: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3342,7 +3343,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:3346: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:3347: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -3361,7 +3362,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:3365: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:3366: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3398,7 +3399,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3402: checking for $ac_word" >&5
+echo "configure:3403: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3429,7 +3430,7 @@ done
 test -n "$YACC" || YACC="yacc"
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:3433: checking how to run the C preprocessor" >&5
+echo "configure:3434: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -3444,13 +3445,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 3448 "configure"
+#line 3449 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3454: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3455: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -3461,13 +3462,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 3465 "configure"
+#line 3466 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3471: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3472: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -3478,13 +3479,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 3482 "configure"
+#line 3483 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3488: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3489: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -3514,7 +3515,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3518: checking for $ac_word" >&5
+echo "configure:3519: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3547,7 +3548,7 @@ test -n "$LEX" || LEX="$missing_dir/missing flex"
 # Extract the first word of "flex", so it can be a program name with args.
 set dummy flex; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3551: checking for $ac_word" >&5
+echo "configure:3552: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3581,7 +3582,7 @@ then
   *) ac_lib=l ;;
   esac
   echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
-echo "configure:3585: checking for yywrap in -l$ac_lib" >&5
+echo "configure:3586: checking for yywrap in -l$ac_lib" >&5
 ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3589,7 +3590,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$ac_lib  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3593 "configure"
+#line 3594 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3600,7 +3601,7 @@ int main() {
 yywrap()
 ; return 0; }
 EOF
-if { (eval echo configure:3604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3623,7 +3624,7 @@ fi
 fi
 
 echo $ac_n "checking lex output file root""... $ac_c" 1>&6
-echo "configure:3627: checking lex output file root" >&5
+echo "configure:3628: checking lex output file root" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_lex_root'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3644,7 +3645,7 @@ echo "$ac_t""$ac_cv_prog_lex_root" 1>&6
 LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
 
 echo $ac_n "checking whether yytext is a pointer""... $ac_c" 1>&6
-echo "configure:3648: checking whether yytext is a pointer" >&5
+echo "configure:3649: checking whether yytext is a pointer" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_lex_yytext_pointer'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3656,14 +3657,14 @@ echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c
 ac_save_LIBS="$LIBS"
 LIBS="$LIBS $LEXLIB"
 cat > conftest.$ac_ext <<EOF
-#line 3660 "configure"
+#line 3661 "configure"
 #include "confdefs.h"
 `cat $LEX_OUTPUT_ROOT.c`
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:3667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3668: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_prog_lex_yytext_pointer=yes
 else
@@ -3689,7 +3690,7 @@ ALL_LINGUAS="fr tr es"
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3693: checking for $ac_word" >&5
+echo "configure:3694: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3717,12 +3718,12 @@ else
 fi
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:3721: checking for ANSI C header files" >&5
+echo "configure:3722: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3726 "configure"
+#line 3727 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -3730,7 +3731,7 @@ else
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3734: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3735: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3747,7 +3748,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 3751 "configure"
+#line 3752 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -3765,7 +3766,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 3769 "configure"
+#line 3770 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -3786,7 +3787,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 3790 "configure"
+#line 3791 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -3797,7 +3798,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:3801: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3802: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -3821,12 +3822,12 @@ EOF
 fi
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:3825: checking for working const" >&5
+echo "configure:3826: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3830 "configure"
+#line 3831 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -3875,7 +3876,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:3879: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -3896,21 +3897,21 @@ EOF
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:3900: checking for inline" >&5
+echo "configure:3901: checking for inline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 3907 "configure"
+#line 3908 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:3914: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -3936,12 +3937,12 @@ EOF
 esac
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:3940: checking for off_t" >&5
+echo "configure:3941: checking for off_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3945 "configure"
+#line 3946 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3969,12 +3970,12 @@ EOF
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:3973: checking for size_t" >&5
+echo "configure:3974: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3978 "configure"
+#line 3979 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -4004,19 +4005,19 @@ fi
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:4008: checking for working alloca.h" >&5
+echo "configure:4009: checking for working alloca.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4013 "configure"
+#line 4014 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:4020: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -4037,12 +4038,12 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:4041: checking for alloca" >&5
+echo "configure:4042: checking for alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4046 "configure"
+#line 4047 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -4070,7 +4071,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:4074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -4102,12 +4103,12 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:4106: checking whether alloca needs Cray hooks" >&5
+echo "configure:4107: checking whether alloca needs Cray hooks" >&5
 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4111 "configure"
+#line 4112 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -4132,12 +4133,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4136: checking for $ac_func" >&5
+echo "configure:4137: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4141 "configure"
+#line 4142 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4160,7 +4161,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4164: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4165: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -4187,7 +4188,7 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:4191: checking stack direction for C alloca" >&5
+echo "configure:4192: checking stack direction for C alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4195,7 +4196,7 @@ else
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 4199 "configure"
+#line 4200 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -4214,7 +4215,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:4218: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4219: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_stack_direction=1
 else
@@ -4235,21 +4236,21 @@ EOF
 
 fi
 
-for ac_hdr in unistd.h
+for ac_hdr in stdlib.h unistd.h sys/stat.h sys/types.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4243: checking for $ac_hdr" >&5
+echo "configure:4244: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4248 "configure"
+#line 4249 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4253: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4254: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4278,12 +4279,12 @@ done
 for ac_func in getpagesize
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4282: checking for $ac_func" >&5
+echo "configure:4283: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4287 "configure"
+#line 4288 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4306,7 +4307,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4311: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -4331,7 +4332,7 @@ fi
 done
 
 echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:4335: checking for working mmap" >&5
+echo "configure:4336: checking for working mmap" >&5
 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4339,7 +4340,7 @@ else
   ac_cv_func_mmap_fixed_mapped=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 4343 "configure"
+#line 4344 "configure"
 #include "confdefs.h"
 
 /* Thanks to Mike Haertel and Jim Avera for this test.
@@ -4367,11 +4368,24 @@ else
 #include <fcntl.h>
 #include <sys/mman.h>
 
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#if HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
 /* This mess was copied from the GNU getpagesize.h.  */
 #ifndef HAVE_GETPAGESIZE
-# ifdef HAVE_UNISTD_H
-#  include <unistd.h>
-# endif
 
 /* Assume that all systems that can run configure have sys/param.h.  */
 # ifndef HAVE_SYS_PARAM_H
@@ -4479,7 +4493,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:4483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4497: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_mmap_fixed_mapped=yes
 else
@@ -4507,17 +4521,17 @@ unistd.h values.h sys/param.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4511: checking for $ac_hdr" >&5
+echo "configure:4525: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4516 "configure"
+#line 4530 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4521: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4535: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4547,12 +4561,12 @@ done
 __argz_count __argz_stringify __argz_next
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4551: checking for $ac_func" >&5
+echo "configure:4565: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4556 "configure"
+#line 4570 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4575,7 +4589,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -4604,12 +4618,12 @@ done
      for ac_func in stpcpy
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4608: checking for $ac_func" >&5
+echo "configure:4622: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4613 "configure"
+#line 4627 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4632,7 +4646,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -4666,19 +4680,19 @@ EOF
 
    if test $ac_cv_header_locale_h = yes; then
     echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:4670: checking for LC_MESSAGES" >&5
+echo "configure:4684: checking for LC_MESSAGES" >&5
 if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4675 "configure"
+#line 4689 "configure"
 #include "confdefs.h"
 #include <locale.h>
 int main() {
 return LC_MESSAGES
 ; return 0; }
 EOF
-if { (eval echo configure:4682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_val_LC_MESSAGES=yes
 else
@@ -4699,7 +4713,7 @@ EOF
     fi
   fi
    echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:4703: checking whether NLS is requested" >&5
+echo "configure:4717: checking whether NLS is requested" >&5
         # Check whether --enable-nls or --disable-nls was given.
 if test "${enable_nls+set}" = set; then
   enableval="$enable_nls"
@@ -4719,7 +4733,7 @@ fi
 EOF
 
       echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:4723: checking whether included gettext is requested" >&5
+echo "configure:4737: checking whether included gettext is requested" >&5
       # Check whether --with-included-gettext or --without-included-gettext was given.
 if test "${with_included_gettext+set}" = set; then
   withval="$with_included_gettext"
@@ -4738,17 +4752,17 @@ fi
 
        ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:4742: checking for libintl.h" >&5
+echo "configure:4756: checking for libintl.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4747 "configure"
+#line 4761 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4752: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4766: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4765,19 +4779,19 @@ fi
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6
-echo "configure:4769: checking for gettext in libc" >&5
+echo "configure:4783: checking for gettext in libc" >&5
 if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4774 "configure"
+#line 4788 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 int main() {
 return (int) gettext ("")
 ; return 0; }
 EOF
-if { (eval echo configure:4781: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4795: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gt_cv_func_gettext_libc=yes
 else
@@ -4793,7 +4807,7 @@ echo "$ac_t""$gt_cv_func_gettext_libc" 1>&6
 
           if test "$gt_cv_func_gettext_libc" != "yes"; then
             echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
-echo "configure:4797: checking for bindtextdomain in -lintl" >&5
+echo "configure:4811: checking for bindtextdomain in -lintl" >&5
 ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4801,7 +4815,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4805 "configure"
+#line 4819 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4812,7 +4826,7 @@ int main() {
 bindtextdomain()
 ; return 0; }
 EOF
-if { (eval echo configure:4816: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4828,19 +4842,19 @@ fi
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6
-echo "configure:4832: checking for gettext in libintl" >&5
+echo "configure:4846: checking for gettext in libintl" >&5
 if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4837 "configure"
+#line 4851 "configure"
 #include "confdefs.h"
 
 int main() {
 return (int) gettext ("")
 ; return 0; }
 EOF
-if { (eval echo configure:4844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4858: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gt_cv_func_gettext_libintl=yes
 else
@@ -4868,7 +4882,7 @@ EOF
              # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4872: checking for $ac_word" >&5
+echo "configure:4886: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4902,12 +4916,12 @@ fi
                for ac_func in dcgettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4906: checking for $ac_func" >&5
+echo "configure:4920: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4911 "configure"
+#line 4925 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4930,7 +4944,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -4957,7 +4971,7 @@ done
                # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4961: checking for $ac_word" >&5
+echo "configure:4975: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4993,7 +5007,7 @@ fi
                # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4997: checking for $ac_word" >&5
+echo "configure:5011: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5025,7 +5039,7 @@ else
 fi
 
                cat > conftest.$ac_ext <<EOF
-#line 5029 "configure"
+#line 5043 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -5033,7 +5047,7 @@ extern int _nl_msg_cat_cntr;
                               return _nl_msg_cat_cntr
 ; return 0; }
 EOF
-if { (eval echo configure:5037: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5051: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   CATOBJEXT=.gmo
                   DATADIRNAME=share
@@ -5065,7 +5079,7 @@ fi
         # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5069: checking for $ac_word" >&5
+echo "configure:5083: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5099,7 +5113,7 @@ fi
         # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5103: checking for $ac_word" >&5
+echo "configure:5117: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5135,7 +5149,7 @@ fi
         # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5139: checking for $ac_word" >&5
+echo "configure:5153: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5225,7 +5239,7 @@ fi
        LINGUAS=
      else
        echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:5229: checking for catalogs to be installed" >&5
+echo "configure:5243: checking for catalogs to be installed" >&5
        NEW_LINGUAS=
        for lang in ${LINGUAS=$ALL_LINGUAS}; do
          case "$ALL_LINGUAS" in
@@ -5253,17 +5267,17 @@ echo "configure:5229: checking for catalogs to be installed" >&5
       if test "$CATOBJEXT" = ".cat"; then
         ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6
-echo "configure:5257: checking for linux/version.h" >&5
+echo "configure:5271: checking for linux/version.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5262 "configure"
+#line 5276 "configure"
 #include "confdefs.h"
 #include <linux/version.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5267: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5281: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5326,7 +5340,7 @@ fi
   
 
 echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:5330: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:5344: checking whether to enable maintainer-specific portions of Makefiles" >&5
     # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
 if test "${enable_maintainer_mode+set}" = set; then
   enableval="$enable_maintainer_mode"
@@ -5351,7 +5365,7 @@ fi
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:5355: checking for executable suffix" >&5
+echo "configure:5369: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5361,10 +5375,10 @@ else
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:5365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:5379: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
-      *.$ac_ext | *.c | *.o | *.obj) ;;
+      *.c | *.o | *.obj) ;;
       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
       esac
     done
@@ -5386,17 +5400,17 @@ for ac_hdr in string.h stdlib.h memory.h strings.h unistd.h stdarg.h varargs.h e
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5390: checking for $ac_hdr" >&5
+echo "configure:5404: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5395 "configure"
+#line 5409 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5400: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5414: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5426,7 +5440,7 @@ done
 # Put this here so that autoconf's "cross-compiling" message doesn't confuse
 # people who are not cross-compiling but are compiling cross-assemblers.
 echo $ac_n "checking whether compiling a cross-assembler""... $ac_c" 1>&6
-echo "configure:5430: checking whether compiling a cross-assembler" >&5
+echo "configure:5444: checking whether compiling a cross-assembler" >&5
 if test "${host}" = "${target}"; then
   cross_gas=no
 else
@@ -5441,19 +5455,19 @@ echo "$ac_t""$cross_gas" 1>&6
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:5445: checking for working alloca.h" >&5
+echo "configure:5459: checking for working alloca.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5450 "configure"
+#line 5464 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:5457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -5474,12 +5488,12 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:5478: checking for alloca" >&5
+echo "configure:5492: checking for alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5483 "configure"
+#line 5497 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -5507,7 +5521,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:5511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5525: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -5539,12 +5553,12 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:5543: checking whether alloca needs Cray hooks" >&5
+echo "configure:5557: checking whether alloca needs Cray hooks" >&5
 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5548 "configure"
+#line 5562 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -5569,12 +5583,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5573: checking for $ac_func" >&5
+echo "configure:5587: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5578 "configure"
+#line 5592 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -5597,7 +5611,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5601: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5615: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -5624,7 +5638,7 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:5628: checking stack direction for C alloca" >&5
+echo "configure:5642: checking stack direction for C alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5632,7 +5646,7 @@ else
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 5636 "configure"
+#line 5650 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -5651,7 +5665,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:5655: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5669: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_stack_direction=1
 else
@@ -5673,21 +5687,21 @@ EOF
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:5677: checking for inline" >&5
+echo "configure:5691: checking for inline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 5684 "configure"
+#line 5698 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:5691: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5705: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -5717,12 +5731,12 @@ esac
 for ac_func in unlink remove
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5721: checking for $ac_func" >&5
+echo "configure:5735: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5726 "configure"
+#line 5740 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -5745,7 +5759,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5749: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -5774,12 +5788,12 @@ done
 for ac_func in sbrk
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5778: checking for $ac_func" >&5
+echo "configure:5792: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5783 "configure"
+#line 5797 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -5802,7 +5816,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -5837,7 +5851,7 @@ case $host in
   ;;
 *-ncr-sysv4.3*)
   echo $ac_n "checking for _mwvalidcheckl in -lmw""... $ac_c" 1>&6
-echo "configure:5841: checking for _mwvalidcheckl in -lmw" >&5
+echo "configure:5855: checking for _mwvalidcheckl in -lmw" >&5
 ac_lib_var=`echo mw'_'_mwvalidcheckl | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5845,7 +5859,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lmw  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5849 "configure"
+#line 5863 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5856,7 +5870,7 @@ int main() {
 _mwvalidcheckl()
 ; return 0; }
 EOF
-if { (eval echo configure:5860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5877,7 +5891,7 @@ else
 fi
 
   echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:5881: checking for main in -lm" >&5
+echo "configure:5895: checking for main in -lm" >&5
 ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5885,14 +5899,14 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5889 "configure"
+#line 5903 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:5896: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5910: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5915,7 +5929,7 @@ fi
   ;;
 *)
   echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:5919: checking for main in -lm" >&5
+echo "configure:5933: checking for main in -lm" >&5
 ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5923,14 +5937,14 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5927 "configure"
+#line 5941 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:5934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5961,12 +5975,12 @@ esac
 # enough, but on some of those systems, the assert macro relies on requoting
 # working properly!
 echo $ac_n "checking for working assert macro""... $ac_c" 1>&6
-echo "configure:5965: checking for working assert macro" >&5
+echo "configure:5979: checking for working assert macro" >&5
 if eval "test \"`echo '$''{'gas_cv_assert_ok'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5970 "configure"
+#line 5984 "configure"
 #include "confdefs.h"
 #include <assert.h>
 #include <stdio.h>
@@ -5982,7 +5996,7 @@ assert (a == b
 
 ; return 0; }
 EOF
-if { (eval echo configure:5986: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6000: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gas_cv_assert_ok=yes
 else
@@ -6023,12 +6037,12 @@ gas_test_headers="
 "
 
 echo $ac_n "checking whether declaration is required for strstr""... $ac_c" 1>&6
-echo "configure:6027: checking whether declaration is required for strstr" >&5
+echo "configure:6041: checking whether declaration is required for strstr" >&5
 if eval "test \"`echo '$''{'gas_cv_decl_needed_strstr'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6032 "configure"
+#line 6046 "configure"
 #include "confdefs.h"
 $gas_test_headers
 int main() {
@@ -6039,7 +6053,7 @@ x = (f) strstr;
 
 ; return 0; }
 EOF
-if { (eval echo configure:6043: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6057: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gas_cv_decl_needed_strstr=no
 else
@@ -6060,12 +6074,12 @@ fi
 
 
 echo $ac_n "checking whether declaration is required for malloc""... $ac_c" 1>&6
-echo "configure:6064: checking whether declaration is required for malloc" >&5
+echo "configure:6078: checking whether declaration is required for malloc" >&5
 if eval "test \"`echo '$''{'gas_cv_decl_needed_malloc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6069 "configure"
+#line 6083 "configure"
 #include "confdefs.h"
 $gas_test_headers
 int main() {
@@ -6076,7 +6090,7 @@ x = (f) malloc;
 
 ; return 0; }
 EOF
-if { (eval echo configure:6080: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6094: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gas_cv_decl_needed_malloc=no
 else
@@ -6097,12 +6111,12 @@ fi
 
 
 echo $ac_n "checking whether declaration is required for free""... $ac_c" 1>&6
-echo "configure:6101: checking whether declaration is required for free" >&5
+echo "configure:6115: checking whether declaration is required for free" >&5
 if eval "test \"`echo '$''{'gas_cv_decl_needed_free'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6106 "configure"
+#line 6120 "configure"
 #include "confdefs.h"
 $gas_test_headers
 int main() {
@@ -6113,7 +6127,7 @@ x = (f) free;
 
 ; return 0; }
 EOF
-if { (eval echo configure:6117: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gas_cv_decl_needed_free=no
 else
@@ -6134,12 +6148,12 @@ fi
 
 
 echo $ac_n "checking whether declaration is required for sbrk""... $ac_c" 1>&6
-echo "configure:6138: checking whether declaration is required for sbrk" >&5
+echo "configure:6152: checking whether declaration is required for sbrk" >&5
 if eval "test \"`echo '$''{'gas_cv_decl_needed_sbrk'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6143 "configure"
+#line 6157 "configure"
 #include "confdefs.h"
 $gas_test_headers
 int main() {
@@ -6150,7 +6164,7 @@ x = (f) sbrk;
 
 ; return 0; }
 EOF
-if { (eval echo configure:6154: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6168: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gas_cv_decl_needed_sbrk=no
 else
@@ -6171,12 +6185,12 @@ fi
 
 
 echo $ac_n "checking whether declaration is required for environ""... $ac_c" 1>&6
-echo "configure:6175: checking whether declaration is required for environ" >&5
+echo "configure:6189: checking whether declaration is required for environ" >&5
 if eval "test \"`echo '$''{'gas_cv_decl_needed_environ'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6180 "configure"
+#line 6194 "configure"
 #include "confdefs.h"
 $gas_test_headers
 int main() {
@@ -6187,7 +6201,7 @@ x = (f) environ;
 
 ; return 0; }
 EOF
-if { (eval echo configure:6191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gas_cv_decl_needed_environ=no
 else
@@ -6211,12 +6225,12 @@ fi
 # for it?
 
 echo $ac_n "checking whether declaration is required for errno""... $ac_c" 1>&6
-echo "configure:6215: checking whether declaration is required for errno" >&5
+echo "configure:6229: checking whether declaration is required for errno" >&5
 if eval "test \"`echo '$''{'gas_cv_decl_needed_errno'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6220 "configure"
+#line 6234 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_ERRNO_H
@@ -6231,7 +6245,7 @@ x = (f) errno;
 
 ; return 0; }
 EOF
-if { (eval echo configure:6235: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6249: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gas_cv_decl_needed_errno=no
 else
index 232d1d0..ebffca6 100644 (file)
@@ -373,6 +373,7 @@ changequote([,])dnl
       mmix-*-*)                                fmt=elf ;;
       mn10200-*-*)                     fmt=elf ;;
       mn10300-*-*)                     fmt=elf ;;
+      msp430-*-*)                      fmt=elf ;;
       openrisc-*-*)                    fmt=elf ;;
       or32-*-rtems*)                   fmt=coff ;;
       or32-*-coff)                     fmt=coff ;;
index 63aa179..2ff312f 100644 (file)
@@ -44,6 +44,7 @@ CPU_DOCS = \
        c-m88k.texi \
        c-mips.texi \
        c-mmix.texi \
+       c-msp430.texi \
        c-ns32k.texi \
        c-pdp11.texi \
        c-pj.texi \
index 7a9fcab..55eb4b1 100644 (file)
@@ -156,6 +156,7 @@ CPU_DOCS = \
        c-m88k.texi \
        c-mips.texi \
        c-mmix.texi \
+       c-msp430.texi \
        c-ns32k.texi \
        c-pdp11.texi \
        c-pj.texi \
index 50117d6..b9754de 100644 (file)
@@ -48,6 +48,7 @@
 @set MCORE
 @set MIPS
 @set MMIX
+@set MSP430
 @set PDP11
 @set PJ
 @set PPC
index 6716199..e654c24 100644 (file)
@@ -5758,6 +5758,9 @@ subject, see the hardware manufacturer's manual.
 @ifset MMIX
 * MMIX-Dependent::              MMIX Dependent Features
 @end ifset
+@ifset MSP430
+* MSP430-Dependent::           MSP430 Dependent Features
+@end ifset
 @ifset SH
 * SH-Dependent::                Hitachi SH Dependent Features
 * SH64-Dependent::              Hitachi SH64 Dependent Features
@@ -5906,6 +5909,10 @@ family.
 @include c-mmix.texi
 @end ifset
 
+@ifset MSP430
+@include c-msp430.texi
+@end ifset
+
 @ifset NS32K
 @include c-ns32k.texi
 @end ifset
diff --git a/gas/doc/c-msp430.texi b/gas/doc/c-msp430.texi
new file mode 100644 (file)
index 0000000..0050359
--- /dev/null
@@ -0,0 +1,164 @@
+@c Copyright 2002 Free Software Foundation, Inc.
+@c This is part of the GAS manual.
+@c For copying conditions, see the file as.texinfo.
+@ifset GENERIC
+@page
+@node MSP430-Dependent
+@chapter MSP 430 Dependent Features
+@end ifset
+@ifclear GENERIC
+@node Machine Dependencies
+@chapter MSP 430 Dependent Features
+@end ifclear
+
+@cindex MSP 430 support
+@cindex 430 support
+@menu
+* MSP430 Options::              Options
+* MSP430 Syntax::               Syntax
+* MSP430 Floating Point::       Floating Point
+* MSP430 Directives::           MSP 430 Machine Directives
+* MSP430 Opcodes::              Opcodes
+@end menu
+
+@node MSP430 Options
+@section Options
+@cindex MSP 430 options (none)
+@cindex options for MSP430 (none)
+@code{@value{AS}} has only -m flag which selects the mpu arch. Currently has 
+no effect.
+
+@node MSP430 Syntax
+@section Syntax
+@menu
+* MSP430-Macros::              Macros
+* MSP430-Chars::                Special Characters
+* MSP430-Regs::                 Register Names
+* MSP430-Ext::                 Assembler Extensions
+@end menu
+
+@node MSP430-Macros
+@subsection Macros
+
+@cindex Macros, MSP 430
+@cindex MSP 430 macros
+The macro syntax used on the MSP 430 is like that described in the MSP
+430 Family Assembler Specification.  Normal @code{@value{AS}}
+macros should still work.
+
+Additional built-in macros are:
+
+@table @code
+
+@item llo(exp) 
+Extracts least significant word from 32-bit expression 'exp'.
+
+@item lhi(exp)
+Extracts most significant word from 32-bit expression 'exp'.
+
+@item hlo(exp)
+Extracts 3rd word from 64-bit expression 'exp'.
+
+@item  hhi(exp) 
+Extracts 4rd word from 64-bit expression 'exp'.
+
+@end table
+
+They normally being used as an immediate source operand.
+@smallexample
+    mov        #llo(1), r10    ;       == mov  #1, r10 
+    mov        #lhi(1), r10    ;       == mov  #0, r10
+@end smallexample
+       
+@node MSP430-Chars
+@subsection Special Characters
+
+@cindex line comment character, MSP 430
+@cindex MSP 430 line comment character
+@samp{;} is the line comment character.
+
+@cindex identifiers, MSP 430
+@cindex MSP 430 identifiers
+The character @samp{$} in jump instructions indicates current location and 
+implemented only for TI syntax compatibility.
+
+@node MSP430-Regs
+@subsection Register Names
+
+@cindex MSP 430 register names
+@cindex register names, MSP 430
+General-purpose registers are represented by predefined symbols of the
+form @samp{r@var{N}} (for global registers), where @var{N} represents
+a number between @code{0} and @code{15}.  The leading
+letters may be in either upper or lower case; for example, @samp{r13}
+and @samp{R7} are both valid register names.
+
+@cindex special purpose registers, MSP 430
+Register names @samp{PC}, @samp{SP} and @samp{SR} cannot be used as register names
+and will be treated as variables. Use @samp{r0}, @samp{r1}, and @samp{r2} instead.
+
+
+@node MSP430-Ext
+@subsection Assembler Extensions
+@cindex MSP430 Assembler Extensions
+
+@table @code
+
+@item @@rN
+As destination operand being treated as @samp{0(rn)}
+
+@item 0(rN)
+As source operand being treated as @samp{@@rn}
+
+@item jCOND +N
+Skips next N bytes followed by jump instruction and equivalent to
+@samp{jCOND $+N+2}
+
+@end table
+
+
+@node MSP430 Floating Point
+@section Floating Point
+
+@cindex floating point, MSP 430 (@sc{ieee})
+@cindex MSP 430 floating point (@sc{ieee})
+The MSP 430 family uses @sc{ieee} 32-bit floating-point numbers.
+
+@node MSP430 Directives
+@section MSP 430 Machine Directives
+
+@cindex machine directives, MSP 430
+@cindex MSP 430 machine directives
+@table @code
+@cindex @code{file} directive, MSP 430
+@item .file
+This directive is ignored; it is accepted for compatibility with other
+MSP 430 assemblers.
+
+@quotation
+@emph{Warning:} in other versions of the @sc{gnu} assembler, @code{.file} is
+used for the directive called @code{.app-file} in the MSP 430 support.
+@end quotation
+
+@cindex @code{line} directive, MSP 430
+@item .line
+This directive is ignored; it is accepted for compatibility with other
+MSP 430 assemblers.
+
+@cindex @code{sect} directive, MSP 430
+@item .arch
+Currently this directive is ignored; it is accepted for compatibility with other
+MSP 430 assemblers.
+
+@end table
+
+@node MSP430 Opcodes
+@section Opcodes
+
+@cindex MSP 430 opcodes
+@cindex opcodes for MSP 430
+@code{@value{AS}} implements all the standard MSP 430 opcodes.  No
+additional pseudo-instructions are needed on this family.
+
+For information on the 430 machine instruction set, see @cite{MSP430
+User's Manual, document slau049b}, Texas Instrument, Inc.
index 77d94c5..b4c687c 100644 (file)
@@ -1,3 +1,10 @@
+2002-12-24    Dmitry Diky <diwil@mail.ru>
+
+       * gas/msp430: New directory.
+       * gas/msp430/msp430.exp: Test msp430 assembler.
+       * gas/msp430/opcode.s: Test source file.
+       * gas/msp430/opcode.s: Expected disassembly.
+
 2002-12-27  Chris Demetriou  <cgd@broadcom.com>
 
        * gas/mips/mips.exp: Define the notion of an "architecture data
index 60b5424..5cde936 100644 (file)
@@ -1,3 +1,7 @@
+2002-12-24    Dmitry Diky <diwil@mail.ru>
+
+       * dis-asm.h: Add msp430 disassembler prototype.
+
 2002-12-27  Chris Demetriou  <cgd@broadcom.com>
 
        * dis-asm.h (print_mips_disassembler_options): Prototype.
index 04a7f5d..2e1b196 100644 (file)
@@ -217,6 +217,7 @@ extern int print_insn_mcore         PARAMS ((bfd_vma, disassemble_info*));
 extern int print_insn_mmix             PARAMS ((bfd_vma, disassemble_info*));
 extern int print_insn_mn10200          PARAMS ((bfd_vma, disassemble_info*));
 extern int print_insn_mn10300          PARAMS ((bfd_vma, disassemble_info*));
+extern int print_insn_msp430           PARAMS ((bfd_vma, disassemble_info*));
 extern int print_insn_ns32k            PARAMS ((bfd_vma, disassemble_info*));
 extern int print_insn_openrisc         PARAMS ((bfd_vma, disassemble_info*));
 extern int print_insn_big_or32          PARAMS ((bfd_vma, disassemble_info*));
index de95f20..87e8a3b 100644 (file)
@@ -1,3 +1,8 @@
+2002-12-24    Dmitry Diky <diwil@mail.ru>
+
+       * common.h: Define msp430 machine numbers.
+       * msp430.h: New file.  Define msp430 relocs.
+
 2002-12-20  DJ Delorie  <dj@redhat.com>
 
        * xstormy16.h: Add XSTORMY16_12.
index 0cef267..629c614 100644 (file)
@@ -251,6 +251,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 /* Ubicom IP2xxx; no ABI */
 #define EM_IP2K_OLD            0x8217  
 
+/* MSP430 magic number
+      Written in the absense everything.  */
+#define EM_MSP430_OLD          0x1059
+
+/* TI msp430 micro controller.  */
+#define EM_MSP430                      0x430
+
 /* See the above comment before you add a new EM_* value here.  */
 
 /* Values for e_version.  */
diff --git a/include/elf/msp430.h b/include/elf/msp430.h
new file mode 100644 (file)
index 0000000..cb3f241
--- /dev/null
@@ -0,0 +1,55 @@
+/* MSP430 ELF support for BFD.
+   Copyright (C) 2002 Free Software Foundation, Inc.
+   Contributed by Dmitry Diky <diwil@mail.ru>
+
+   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_MSP430_H
+#define _ELF_MSP430_H
+
+#include "elf/reloc-macros.h"
+
+/* Processor specific flags for the ELF header e_flags field.  */
+#define EF_MSP430_MACH                 0xff
+
+#define E_MSP430_MACH_MSP430x11x1  110
+#define E_MSP430_MACH_MSP430x11  11
+#define E_MSP430_MACH_MSP430x12  12
+#define E_MSP430_MACH_MSP430x13  13
+#define E_MSP430_MACH_MSP430x14  14
+#define E_MSP430_MACH_MSP430x31  31
+#define E_MSP430_MACH_MSP430x32  32
+#define E_MSP430_MACH_MSP430x33  33
+#define E_MSP430_MACH_MSP430x41  41
+#define E_MSP430_MACH_MSP430x43  43
+#define E_MSP430_MACH_MSP430x44  44
+#define E_MSP430_MACH_MSP430x15  15
+#define E_MSP430_MACH_MSP430x16  16
+
+/* Relocations.  */
+START_RELOC_NUMBERS (elf_msp430_reloc_type)
+     RELOC_NUMBER (R_MSP430_NONE,              0)
+     RELOC_NUMBER (R_MSP430_32,                        1)
+     RELOC_NUMBER (R_MSP430_10_PCREL,          2)
+     RELOC_NUMBER (R_MSP430_16,                3)
+     RELOC_NUMBER (R_MSP430_16_PCREL,          4)
+     RELOC_NUMBER (R_MSP430_16_BYTE,           5)
+     RELOC_NUMBER (R_MSP430_16_PCREL_BYTE,     6)
+
+END_RELOC_NUMBERS (R_MSP430_max)
+
+#endif /* _ELF_MSP430_H */
index a0d7b5b..10fbb98 100644 (file)
@@ -1,3 +1,7 @@
+2002-12-24    Dmitry Diky <diwil@mail.ru>
+
+       * msp430.h: New file.  Defines msp430 opcodes.
+
 2002-12-30 D.Venkatasubramanian <dvenkat@noida.hcltech.com>
 
        * h8300.h: Added some more pseudo opcodes for system call
diff --git a/include/opcode/msp430.h b/include/opcode/msp430.h
new file mode 100644 (file)
index 0000000..1970225
--- /dev/null
@@ -0,0 +1,111 @@
+/* Opcode table for the TI MSP430 microcontrollers
+
+   Copyright 2002 Free Software Foundation, Inc.
+   Contributed by Dmitry Diky <diwil@mail.ru>
+   
+   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, 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 __MSP430_H_
+#define __MSP430_H_
+
+struct msp430_operand_s
+{
+  int ol;      /* Operand length words.  */
+  int am;      /* Addr mode.  */
+  int reg;     /* Register.  */
+  int mode;    /* Pperand mode.  */
+#define OP_REG         0
+#define OP_EXP         1
+#ifndef DASM_SECTION
+  expressionS  exp;
+#endif
+};
+
+#define BYTE_OPERATION  (1 << 6)  /* Byte operation flag for all instructions.  */
+
+struct  msp430_opcode_s
+{
+  char *name;
+  int fmt;
+  int insn_opnumb;
+  int bin_opcode;
+  int bin_mask;
+};
+
+#define MSP_INSN(name, size, numb, bin, mask) { #name, size, numb, bin, mask }
+
+static struct msp430_opcode_s msp430_opcodes[] = 
+{
+  MSP_INSN (and,   1, 2, 0xf000, 0xf000),
+  MSP_INSN (inv,   0, 1, 0xe330, 0xfff0),
+  MSP_INSN (xor,   1, 2, 0xe000, 0xf000),
+  MSP_INSN (setz,  0, 0, 0xd322, 0xffff),
+  MSP_INSN (setc,  0, 0, 0xd312, 0xffff),
+  MSP_INSN (eint,  0, 0, 0xd232, 0xffff),
+  MSP_INSN (setn,  0, 0, 0xd222, 0xffff),
+  MSP_INSN (bis,   1, 2, 0xd000, 0xf000),
+  MSP_INSN (clrz,  0, 0, 0xc322, 0xffff),
+  MSP_INSN (clrc,  0, 0, 0xc312, 0xffff),
+  MSP_INSN (dint,  0, 0, 0xc232, 0xffff),
+  MSP_INSN (clrn,  0, 0, 0xc222, 0xffff),
+  MSP_INSN (bic,   1, 2, 0xc000, 0xf000),
+  MSP_INSN (bit,   1, 2, 0xb000, 0xf000),
+  MSP_INSN (dadc,  0, 1, 0xa300, 0xff30),
+  MSP_INSN (dadd,  1, 2, 0xa000, 0xf000),
+  MSP_INSN (tst,   0, 1, 0x9300, 0xff30),
+  MSP_INSN (cmp,   1, 2, 0x9000, 0xf000),
+  MSP_INSN (decd,  0, 1, 0x8320, 0xff30),
+  MSP_INSN (dec,   0, 1, 0x8310, 0xff30),
+  MSP_INSN (sub,   1, 2, 0x8000, 0xf000),
+  MSP_INSN (sbc,   0, 1, 0x7300, 0xff30),
+  MSP_INSN (subc,  1, 2, 0x7000, 0xf000),
+  MSP_INSN (adc,   0, 1, 0x6300, 0xff30),
+  MSP_INSN (rlc,   0, 2, 0x6000, 0xf000),
+  MSP_INSN (addc,  1, 2, 0x6000, 0xf000),
+  MSP_INSN (incd,  0, 1, 0x5320, 0xff30),
+  MSP_INSN (inc,   0, 1, 0x5310, 0xff30),
+  MSP_INSN (rla,   0, 2, 0x5000, 0xf000),
+  MSP_INSN (add,   1, 2, 0x5000, 0xf000),
+  MSP_INSN (nop,   0, 0, 0x4303, 0xffff),
+  MSP_INSN (clr,   0, 1, 0x4300, 0xff30),
+  MSP_INSN (ret,   0, 0, 0x4130, 0xff30),
+  MSP_INSN (pop,   0, 1, 0x4130, 0xff30),
+  MSP_INSN (br,    0, 3, 0x4000, 0xf000),
+  MSP_INSN (mov,   1, 2, 0x4000, 0xf000),
+  MSP_INSN (jmp,   3, 1, 0x3c00, 0xfc00),
+  MSP_INSN (jl,    3, 1, 0x3800, 0xfc00),
+  MSP_INSN (jge,   3, 1, 0x3400, 0xfc00),
+  MSP_INSN (jn,    3, 1, 0x3000, 0xfc00),
+  MSP_INSN (jc,    3, 1, 0x2c00, 0xfc00),
+  MSP_INSN (jhs,   3, 1, 0x2c00, 0xfc00),
+  MSP_INSN (jnc,   3, 1, 0x2800, 0xfc00),
+  MSP_INSN (jlo,   3, 1, 0x2800, 0xfc00),
+  MSP_INSN (jz,    3, 1, 0x2400, 0xfc00),
+  MSP_INSN (jeq,   3, 1, 0x2400, 0xfc00),
+  MSP_INSN (jnz,   3, 1, 0x2000, 0xfc00),
+  MSP_INSN (jne,   3, 1, 0x2000, 0xfc00),
+  MSP_INSN (reti,  2, 0, 0x1300, 0xffc0),
+  MSP_INSN (call,  2, 1, 0x1280, 0xffc0),
+  MSP_INSN (push,  2, 1, 0x1200, 0xff80),
+  MSP_INSN (sxt,   2, 1, 0x1180, 0xffc0),
+  MSP_INSN (rra,   2, 1, 0x1100, 0xff80),
+  MSP_INSN (swpb,  2, 1, 0x1080, 0xffc0),
+  MSP_INSN (rrc,   2, 1, 0x1000, 0xff80),
+
+  /* End of instruction set.  */
+  { NULL, 0, 0, 0, 0 }
+};
+
+#endif
index 2bfdd1c..f9b3d7e 100644 (file)
@@ -1,3 +1,15 @@
+2002-12-24    Dmitry Diky <diwil@mail.ru>
+
+       * Makefile.am: Add msp430 target.
+       * configure.tgt: Likewise.
+       * Makefile.in: Regenerate.
+       * emulparams/msp430x???.sh: New files.  Linker script parameters
+       for various msp430 configurations.
+       * gen-doc.texi: Enable msp430 documenation.
+       * ld.texinfo: Document msp430 sections.
+       * scripttempl/elf32msp430.sc: New file. Linker script for msp430.
+       * scripttempl/elf32msp430_3.sc: New file.  Linker script for msp430.
+
 2002-12-30  Ralf Habacker  <Ralf.Habacker@freenet.de>
             Charles Wilson  <cwilson@ece.gatech.edu>
 
index 210f16a..15bb1a2 100644 (file)
@@ -245,6 +245,44 @@ ALL_EMULATIONS = \
        emipslit.o \
        emipslnews.o \
        emipspe.o \
+       emsp430x1101.o \
+       emsp430x1111.o \
+       emsp430x1121.o \
+       emsp430x1331.o \
+       emsp430x1351.o \
+       emsp430x149.o \
+       emsp430x148.o \
+       emsp430x147.o \
+       emsp430x135.o \
+       emsp430x133.o \
+       emsp430x110.o \
+       emsp430x112.o \
+       emsp430x122.o \
+       emsp430x1222.o \
+       emsp430x123.o \
+       emsp430x1232.o \
+       emsp430x412.o \
+       emsp430x413.o \
+       emsp430x311.o \
+       emsp430x312.o \
+       emsp430x313.o \
+       emsp430x314.o \
+       emsp430x315.o \
+       emsp430x323.o \
+       emsp430x325.o \
+       emsp430x336.o \
+       emsp430x337.o \
+       emsp430x435.o \
+       emsp430x436.o \
+       emsp430x447.o \
+       emsp430x448.o \
+       emsp430x449.o \
+       emsp430x169.o \
+       emsp430x168.o \
+       emsp430x167.o \
+       emsp430x155.o \
+       emsp430x156.o \
+       emsp430x157.o \
        enews.o \
        ens32knbsd.o \
        eor32.o \
@@ -939,6 +977,162 @@ emn10300.c: $(srcdir)/emulparams/mn10300.sh \
 emn10200.c: $(srcdir)/emulparams/mn10200.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} mn10200 "$(tdir_mn10200)"
+emsp430x1101.c: $(srcdir)/emulparams/msp430x1101.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x1101 "$(tdir_msp430x1101)"
+emsp430x1111.c: $(srcdir)/emulparams/msp430x1111.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x1111 "$(tdir_msp430x1111)"
+emsp430x1121.c: $(srcdir)/emulparams/msp430x1121.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x1121 "$(tdir_msp430x1121)"
+emsp430x1331.c: $(srcdir)/emulparams/msp430x1331.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x1331 "$(tdir_msp430x1331)"
+emsp430x1351.c: $(srcdir)/emulparams/msp430x1351.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x1351 "$(tdir_msp430x1351)"
+emsp430x149.c: $(srcdir)/emulparams/msp430x149.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x149 "$(tdir_msp430x149)"
+emsp430x148.c: $(srcdir)/emulparams/msp430x148.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x148 "$(tdir_msp430x148)"
+emsp430x449.c: $(srcdir)/emulparams/msp430x449.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x449 "$(tdir_msp430x449)"
+emsp430x448.c: $(srcdir)/emulparams/msp430x448.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x448 "$(tdir_msp430x448)"
+emsp430x447.c: $(srcdir)/emulparams/msp430x447.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x447 "$(tdir_msp430x447)"
+emsp430x412.c: $(srcdir)/emulparams/msp430x412.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x412 "$(tdir_msp430x412)"
+emsp430x413.c: $(srcdir)/emulparams/msp430x413.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x413 "$(tdir_msp430x413)"
+emsp430x147.c: $(srcdir)/emulparams/msp430x147.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x147 "$(tdir_msp430x147)"
+emsp430x135.c: $(srcdir)/emulparams/msp430x135.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x135 "$(tdir_msp430x135)"
+emsp430x133.c: $(srcdir)/emulparams/msp430x133.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x133 "$(tdir_msp430x133)"
+emsp430x110.c: $(srcdir)/emulparams/msp430x110.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x110 "$(tdir_msp430x110)"
+emsp430x112.c: $(srcdir)/emulparams/msp430x112.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x112 "$(tdir_msp430x112)"
+emsp430x122.c: $(srcdir)/emulparams/msp430x122.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x122 "$(tdir_msp430x122)"
+emsp430x1222.c: $(srcdir)/emulparams/msp430x1222.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x1222 "$(tdir_msp430x1222)"
+emsp430x123.c: $(srcdir)/emulparams/msp430x123.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x123 "$(tdir_msp430x123)"
+emsp430x1232.c: $(srcdir)/emulparams/msp430x1232.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x1232 "$(tdir_msp430x1232)"
+emsp430x311.c: $(srcdir)/emulparams/msp430x311.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x311 "$(tdir_msp430x311)"
+emsp430x312.c: $(srcdir)/emulparams/msp430x312.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x312 "$(tdir_msp430x312)"
+emsp430x313.c: $(srcdir)/emulparams/msp430x313.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x313 "$(tdir_msp430x313)"
+emsp430x314.c: $(srcdir)/emulparams/msp430x314.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x314 "$(tdir_msp430x314)"
+emsp430x315.c: $(srcdir)/emulparams/msp430x315.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x315 "$(tdir_msp430x315)"
+emsp430x323.c: $(srcdir)/emulparams/msp430x323.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x323 "$(tdir_msp430x323)"
+emsp430x325.c: $(srcdir)/emulparams/msp430x325.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x325 "$(tdir_msp430x325)"
+emsp430x336.c: $(srcdir)/emulparams/msp430x336.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x336 "$(tdir_msp430x336)"
+emsp430x337.c: $(srcdir)/emulparams/msp430x337.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x337 "$(tdir_msp430x337)"
+emsp430x435.c: $(srcdir)/emulparams/msp430x435.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x435 "$(tdir_msp430x435)"
+emsp430x436.c: $(srcdir)/emulparams/msp430x436.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x436 "$(tdir_msp430x436)"
+emsp430x437.c: $(srcdir)/emulparams/msp430x437.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x437 "$(tdir_msp430x437)"
+emsp430x167.c: $(srcdir)/emulparams/msp430x167.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x167 "$(tdir_msp430x167)"
+emsp430x168.c: $(srcdir)/emulparams/msp430x167.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x168 "$(tdir_msp430x168)"
+emsp430x169.c: $(srcdir)/emulparams/msp430x169.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x169 "$(tdir_msp430x169)"
+emsp430x155.c: $(srcdir)/emulparams/msp430x155.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x155 "$(tdir_msp430x155)"
+emsp430x156.c: $(srcdir)/emulparams/msp430x156.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x156 "$(tdir_msp430x156)"
+emsp430x157.c: $(srcdir)/emulparams/msp430x157.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x157 "$(tdir_msp430x157)"
 enews.c: $(srcdir)/emulparams/news.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} news "$(tdir_news)"
index 8defa7e..ddef260 100644 (file)
@@ -356,6 +356,44 @@ ALL_EMULATIONS = \
        emipslit.o \
        emipslnews.o \
        emipspe.o \
+       emsp430x1101.o \
+       emsp430x1111.o \
+       emsp430x1121.o \
+       emsp430x1331.o \
+       emsp430x1351.o \
+       emsp430x149.o \
+       emsp430x148.o \
+       emsp430x147.o \
+       emsp430x135.o \
+       emsp430x133.o \
+       emsp430x110.o \
+       emsp430x112.o \
+       emsp430x122.o \
+       emsp430x1222.o \
+       emsp430x123.o \
+       emsp430x1232.o \
+       emsp430x412.o \
+       emsp430x413.o \
+       emsp430x311.o \
+       emsp430x312.o \
+       emsp430x313.o \
+       emsp430x314.o \
+       emsp430x315.o \
+       emsp430x323.o \
+       emsp430x325.o \
+       emsp430x336.o \
+       emsp430x337.o \
+       emsp430x435.o \
+       emsp430x436.o \
+       emsp430x447.o \
+       emsp430x448.o \
+       emsp430x449.o \
+       emsp430x169.o \
+       emsp430x168.o \
+       emsp430x167.o \
+       emsp430x155.o \
+       emsp430x156.o \
+       emsp430x157.o \
        enews.o \
        ens32knbsd.o \
        eor32.o \
@@ -1662,6 +1700,162 @@ emn10300.c: $(srcdir)/emulparams/mn10300.sh \
 emn10200.c: $(srcdir)/emulparams/mn10200.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} mn10200 "$(tdir_mn10200)"
+emsp430x1101.c: $(srcdir)/emulparams/msp430x1101.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x1101 "$(tdir_msp430x1101)"
+emsp430x1111.c: $(srcdir)/emulparams/msp430x1111.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x1111 "$(tdir_msp430x1111)"
+emsp430x1121.c: $(srcdir)/emulparams/msp430x1121.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x1121 "$(tdir_msp430x1121)"
+emsp430x1331.c: $(srcdir)/emulparams/msp430x1331.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x1331 "$(tdir_msp430x1331)"
+emsp430x1351.c: $(srcdir)/emulparams/msp430x1351.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x1351 "$(tdir_msp430x1351)"
+emsp430x149.c: $(srcdir)/emulparams/msp430x149.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x149 "$(tdir_msp430x149)"
+emsp430x148.c: $(srcdir)/emulparams/msp430x148.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x148 "$(tdir_msp430x148)"
+emsp430x449.c: $(srcdir)/emulparams/msp430x449.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x449 "$(tdir_msp430x449)"
+emsp430x448.c: $(srcdir)/emulparams/msp430x448.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x448 "$(tdir_msp430x448)"
+emsp430x447.c: $(srcdir)/emulparams/msp430x447.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x447 "$(tdir_msp430x447)"
+emsp430x412.c: $(srcdir)/emulparams/msp430x412.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x412 "$(tdir_msp430x412)"
+emsp430x413.c: $(srcdir)/emulparams/msp430x413.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x413 "$(tdir_msp430x413)"
+emsp430x147.c: $(srcdir)/emulparams/msp430x147.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x147 "$(tdir_msp430x147)"
+emsp430x135.c: $(srcdir)/emulparams/msp430x135.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x135 "$(tdir_msp430x135)"
+emsp430x133.c: $(srcdir)/emulparams/msp430x133.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x133 "$(tdir_msp430x133)"
+emsp430x110.c: $(srcdir)/emulparams/msp430x110.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x110 "$(tdir_msp430x110)"
+emsp430x112.c: $(srcdir)/emulparams/msp430x112.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x112 "$(tdir_msp430x112)"
+emsp430x122.c: $(srcdir)/emulparams/msp430x122.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x122 "$(tdir_msp430x122)"
+emsp430x1222.c: $(srcdir)/emulparams/msp430x1222.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x1222 "$(tdir_msp430x1222)"
+emsp430x123.c: $(srcdir)/emulparams/msp430x123.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x123 "$(tdir_msp430x123)"
+emsp430x1232.c: $(srcdir)/emulparams/msp430x1232.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x1232 "$(tdir_msp430x1232)"
+emsp430x311.c: $(srcdir)/emulparams/msp430x311.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x311 "$(tdir_msp430x311)"
+emsp430x312.c: $(srcdir)/emulparams/msp430x312.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x312 "$(tdir_msp430x312)"
+emsp430x313.c: $(srcdir)/emulparams/msp430x313.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x313 "$(tdir_msp430x313)"
+emsp430x314.c: $(srcdir)/emulparams/msp430x314.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x314 "$(tdir_msp430x314)"
+emsp430x315.c: $(srcdir)/emulparams/msp430x315.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x315 "$(tdir_msp430x315)"
+emsp430x323.c: $(srcdir)/emulparams/msp430x323.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x323 "$(tdir_msp430x323)"
+emsp430x325.c: $(srcdir)/emulparams/msp430x325.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x325 "$(tdir_msp430x325)"
+emsp430x336.c: $(srcdir)/emulparams/msp430x336.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x336 "$(tdir_msp430x336)"
+emsp430x337.c: $(srcdir)/emulparams/msp430x337.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x337 "$(tdir_msp430x337)"
+emsp430x435.c: $(srcdir)/emulparams/msp430x435.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x435 "$(tdir_msp430x435)"
+emsp430x436.c: $(srcdir)/emulparams/msp430x436.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x436 "$(tdir_msp430x436)"
+emsp430x437.c: $(srcdir)/emulparams/msp430x437.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x437 "$(tdir_msp430x437)"
+emsp430x167.c: $(srcdir)/emulparams/msp430x167.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x167 "$(tdir_msp430x167)"
+emsp430x168.c: $(srcdir)/emulparams/msp430x167.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x168 "$(tdir_msp430x168)"
+emsp430x169.c: $(srcdir)/emulparams/msp430x169.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x169 "$(tdir_msp430x169)"
+emsp430x155.c: $(srcdir)/emulparams/msp430x155.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x155 "$(tdir_msp430x155)"
+emsp430x156.c: $(srcdir)/emulparams/msp430x156.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x156 "$(tdir_msp430x156)"
+emsp430x157.c: $(srcdir)/emulparams/msp430x157.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+  ${GEN_DEPENDS}
+       ${GENSCRIPTS} msp430x157 "$(tdir_msp430x157)"
 enews.c: $(srcdir)/emulparams/news.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} news "$(tdir_news)"
index baeaf28..1d261b1 100755 (executable)
@@ -719,249 +719,49 @@ test "$host_alias" != "$target_alias" &&
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
 
-# Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:726: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_CC="gcc"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
-  echo "$ac_t""$CC" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
 
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:756: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
-  ac_prog_rejected=no
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
-        ac_prog_rejected=yes
-       continue
-      fi
-      ac_cv_prog_CC="cc"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# -gt 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    set dummy "$ac_dir/$ac_word" "$@"
-    shift
-    ac_cv_prog_CC="$@"
-  fi
-fi
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
-  echo "$ac_t""$CC" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-  if test -z "$CC"; then
-    case "`uname -s`" in
-    *win32* | *WIN32*)
-      # Extract the first word of "cl", so it can be a program name with args.
-set dummy cl; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:807: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+        echo $ac_n "checking for strerror in -lcposix""... $ac_c" 1>&6
+echo "configure:725: checking for strerror in -lcposix" >&5
+ac_lib_var=`echo cposix'_'strerror | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_CC="cl"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
-  echo "$ac_t""$CC" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
- ;;
-    esac
-  fi
-  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:839: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-cat > conftest.$ac_ext << EOF
-
-#line 850 "configure"
+  ac_save_LIBS="$LIBS"
+LIBS="-lcposix  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 733 "configure"
 #include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char strerror();
 
-main(){return(0);}
+int main() {
+strerror()
+; return 0; }
 EOF
-if { (eval echo configure:855: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  ac_cv_prog_cc_works=yes
-  # If we can't run a trivial program, we are probably using a cross compiler.
-  if (./conftest; exit) 2>/dev/null; then
-    ac_cv_prog_cc_cross=no
-  else
-    ac_cv_prog_cc_cross=yes
-  fi
+if { (eval echo configure:744: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
-  ac_cv_prog_cc_works=no
-fi
-rm -fr conftest*
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
-  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
-fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:881: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:886: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.c <<EOF
-#ifdef __GNUC__
-  yes;
-#endif
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:895: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
-  ac_cv_prog_gcc=yes
-else
-  ac_cv_prog_gcc=no
-fi
-fi
-
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
-
-if test $ac_cv_prog_gcc = yes; then
-  GCC=yes
-else
-  GCC=
-fi
-
-ac_test_CFLAGS="${CFLAGS+set}"
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS=
-echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:914: checking whether ${CC-cc} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  echo 'void f(){}' > conftest.c
-if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
-  ac_cv_prog_cc_g=yes
-else
-  ac_cv_prog_cc_g=no
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
 fi
 rm -f conftest*
+LIBS="$ac_save_LIBS"
 
 fi
-
-echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS="$ac_save_CFLAGS"
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-
-echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
-echo "configure:946: checking for POSIXized ISC" >&5
-if test -d /etc/conf/kconfig.d &&
-  grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
-then
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-  ISC=yes # If later tests want to check for ISC.
-  cat >> confdefs.h <<\EOF
-#define _POSIX_SOURCE 1
-EOF
-
-  if test "$GCC" = yes; then
-    CC="$CC -posix"
-  else
-    CC="$CC -Xp"
-  fi
+  LIBS="$LIBS -lcposix"
 else
   echo "$ac_t""no" 1>&6
-  ISC=
 fi
 
+  
+
 
 BFD_VERSION=`sed -n -e 's/^.._INIT_AUTOMAKE.*,[        ]*\([^  ]*\)[   ]*).*/\1/p' < ${srcdir}/../bfd/configure.in`
 # Find a good install program.  We prefer a C program (faster),
@@ -976,7 +776,7 @@ BFD_VERSION=`sed -n -e 's/^.._INIT_AUTOMAKE.*,[     ]*\([^  ]*\)[   ]*).*/\1/p' < ${
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:980: checking for a BSD compatible install" >&5
+echo "configure:780: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1029,7 +829,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:1033: checking whether build environment is sane" >&5
+echo "configure:833: checking whether build environment is sane" >&5
 # Just in case
 sleep 1
 echo timestamp > conftestfile
@@ -1086,7 +886,7 @@ test "$program_suffix" != NONE &&
 test "$program_transform_name" = "" && program_transform_name="s,x,x,"
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:1090: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:890: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1132,7 +932,7 @@ EOF
 
 missing_dir=`cd $ac_aux_dir && pwd`
 echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:1136: checking for working aclocal" >&5
+echo "configure:936: checking for working aclocal" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -1145,7 +945,7 @@ else
 fi
 
 echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:1149: checking for working autoconf" >&5
+echo "configure:949: checking for working autoconf" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -1158,7 +958,7 @@ else
 fi
 
 echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:1162: checking for working automake" >&5
+echo "configure:962: checking for working automake" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -1171,7 +971,7 @@ else
 fi
 
 echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:1175: checking for working autoheader" >&5
+echo "configure:975: checking for working autoheader" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -1184,7 +984,7 @@ else
 fi
 
 echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:1188: checking for working makeinfo" >&5
+echo "configure:988: checking for working makeinfo" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -1267,6 +1067,228 @@ else
   enable_fast_install=yes
 fi
 
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1074: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="gcc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1104: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_prog_rejected=no
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+        ac_prog_rejected=yes
+       continue
+      fi
+      ac_cv_prog_CC="cc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# -gt 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    set dummy "$ac_dir/$ac_word" "$@"
+    shift
+    ac_cv_prog_CC="$@"
+  fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  if test -z "$CC"; then
+    case "`uname -s`" in
+    *win32* | *WIN32*)
+      # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1155: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="cl"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+ ;;
+    esac
+  fi
+  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:1187: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 1198 "configure"
+#include "confdefs.h"
+
+main(){return(0);}
+EOF
+if { (eval echo configure:1203: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  ac_cv_prog_cc_works=yes
+  # If we can't run a trivial program, we are probably using a cross compiler.
+  if (./conftest; exit) 2>/dev/null; then
+    ac_cv_prog_cc_cross=no
+  else
+    ac_cv_prog_cc_cross=yes
+  fi
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:1229: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:1234: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.c <<EOF
+#ifdef __GNUC__
+  yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1243: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+  ac_cv_prog_gcc=yes
+else
+  ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:1262: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+  ac_cv_prog_cc_g=yes
+else
+  ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS="$ac_save_CFLAGS"
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+
 # Check whether --with-gnu-ld or --without-gnu-ld was given.
 if test "${with_gnu_ld+set}" = set; then
   withval="$with_gnu_ld"
@@ -1279,7 +1301,7 @@ ac_prog=ld
 if test "$GCC" = yes; then
   # Check if gcc -print-prog-name=ld gives a path.
   echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
-echo "configure:1283: checking for ld used by GCC" >&5
+echo "configure:1305: checking for ld used by GCC" >&5
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return which upsets mingw
@@ -1309,10 +1331,10 @@ echo "configure:1283: checking for ld used by GCC" >&5
   esac
 elif test "$with_gnu_ld" = yes; then
   echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:1313: checking for GNU ld" >&5
+echo "configure:1335: checking for GNU ld" >&5
 else
   echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:1316: checking for non-GNU ld" >&5
+echo "configure:1338: checking for non-GNU ld" >&5
 fi
 if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1347,7 +1369,7 @@ else
 fi
 test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
 echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
-echo "configure:1351: checking if the linker ($LD) is GNU ld" >&5
+echo "configure:1373: checking if the linker ($LD) is GNU ld" >&5
 if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1364,7 +1386,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
 echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
-echo "configure:1368: checking for $LD option to reload object files" >&5
+echo "configure:1390: checking for $LD option to reload object files" >&5
 if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1376,7 +1398,7 @@ reload_flag=$lt_cv_ld_reload_flag
 test -n "$reload_flag" && reload_flag=" $reload_flag"
 
 echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-echo "configure:1380: checking for BSD-compatible nm" >&5
+echo "configure:1402: checking for BSD-compatible nm" >&5
 if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1414,7 +1436,7 @@ NM="$lt_cv_path_NM"
 echo "$ac_t""$NM" 1>&6
 
 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1418: checking whether ln -s works" >&5
+echo "configure:1440: checking whether ln -s works" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1435,7 +1457,7 @@ else
 fi
 
 echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
-echo "configure:1439: checking how to recognise dependant libraries" >&5
+echo "configure:1461: checking how to recognise dependant libraries" >&5
 if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1608,13 +1630,13 @@ file_magic_cmd=$lt_cv_file_magic_cmd
 deplibs_check_method=$lt_cv_deplibs_check_method
 
 echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-echo "configure:1612: checking for object suffix" >&5
+echo "configure:1634: checking for object suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   rm -f conftest*
 echo 'int i = 1;' > conftest.$ac_ext
-if { (eval echo configure:1618: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1640: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   for ac_file in conftest.*; do
     case $ac_file in
     *.c) ;;
@@ -1634,7 +1656,7 @@ ac_objext=$ac_cv_objext
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:1638: checking for executable suffix" >&5
+echo "configure:1660: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1644,7 +1666,7 @@ else
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:1648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:1670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
       *.c | *.o | *.obj) ;;
@@ -1677,7 +1699,7 @@ case $deplibs_check_method in
 file_magic*)
   if test "$file_magic_cmd" = '$MAGIC_CMD'; then
     echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6
-echo "configure:1681: checking for ${ac_tool_prefix}file" >&5
+echo "configure:1703: checking for ${ac_tool_prefix}file" >&5
 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1739,7 +1761,7 @@ fi
 if test -z "$lt_cv_path_MAGIC_CMD"; then
   if test -n "$ac_tool_prefix"; then
     echo $ac_n "checking for file""... $ac_c" 1>&6
-echo "configure:1743: checking for file" >&5
+echo "configure:1765: checking for file" >&5
 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1810,7 +1832,7 @@ esac
 # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1814: checking for $ac_word" >&5
+echo "configure:1836: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1842,7 +1864,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1846: checking for $ac_word" >&5
+echo "configure:1868: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1877,7 +1899,7 @@ fi
 # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1881: checking for $ac_word" >&5
+echo "configure:1903: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1909,7 +1931,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "strip", so it can be a program name with args.
 set dummy strip; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1913: checking for $ac_word" >&5
+echo "configure:1935: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1976,8 +1998,8 @@ test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic"
 case $host in
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 1980 "configure"' > conftest.$ac_ext
-  if { (eval echo configure:1981: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  echo '#line 2002 "configure"' > conftest.$ac_ext
+  if { (eval echo configure:2003: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     case `/usr/bin/file conftest.$ac_objext` in
     *32-bit*)
       LD="${LD-ld} -32"
@@ -1996,7 +2018,7 @@ case $host in
 ia64-*-hpux*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
-  if { (eval echo configure:2000: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  if { (eval echo configure:2022: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     case "`/usr/bin/file conftest.o`" in
     *ELF-32*)
       HPUX_IA64_MODE="32"
@@ -2014,7 +2036,7 @@ ia64-*-hpux*)
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -belf"
   echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-echo "configure:2018: checking whether the C compiler needs -belf" >&5
+echo "configure:2040: checking whether the C compiler needs -belf" >&5
 if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2027,14 +2049,14 @@ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$a
 cross_compiling=$ac_cv_prog_cc_cross
 
      cat > conftest.$ac_ext <<EOF
-#line 2031 "configure"
+#line 2053 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2038: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2060: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   lt_cv_cc_needs_belf=yes
 else
@@ -2217,7 +2239,7 @@ fi
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2221: checking for $ac_word" >&5
+echo "configure:2243: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2247,7 +2269,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2251: checking for $ac_word" >&5
+echo "configure:2273: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2298,7 +2320,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2302: checking for $ac_word" >&5
+echo "configure:2324: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2330,7 +2352,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:2334: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:2356: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -2341,12 +2363,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 2345 "configure"
+#line 2367 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:2350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -2372,12 +2394,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:2376: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2398: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:2381: checking whether we are using GNU C" >&5
+echo "configure:2403: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2386,7 +2408,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2390: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2412: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -2405,7 +2427,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:2409: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:2431: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2448,7 +2470,7 @@ fi
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:2452: checking for a BSD compatible install" >&5
+echo "configure:2474: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -2503,7 +2525,7 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 ALL_LINGUAS="fr sv tr es da"
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2507: checking how to run the C preprocessor" >&5
+echo "configure:2529: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -2518,13 +2540,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 2522 "configure"
+#line 2544 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2528: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2550: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2535,13 +2557,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 2539 "configure"
+#line 2561 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2545: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2567: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2552,13 +2574,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 2556 "configure"
+#line 2578 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2562: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2584: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2585,7 +2607,7 @@ echo "$ac_t""$CPP" 1>&6
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2589: checking for $ac_word" >&5
+echo "configure:2611: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2613,12 +2635,12 @@ else
 fi
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:2617: checking for ANSI C header files" >&5
+echo "configure:2639: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2622 "configure"
+#line 2644 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -2626,7 +2648,7 @@ else
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2630: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2652: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2643,7 +2665,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 2647 "configure"
+#line 2669 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -2661,7 +2683,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 2665 "configure"
+#line 2687 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -2682,7 +2704,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 2686 "configure"
+#line 2708 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -2693,7 +2715,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:2697: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2719: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -2717,12 +2739,12 @@ EOF
 fi
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:2721: checking for working const" >&5
+echo "configure:2743: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2726 "configure"
+#line 2748 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -2771,7 +2793,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:2775: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2797: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -2792,21 +2814,21 @@ EOF
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:2796: checking for inline" >&5
+echo "configure:2818: checking for inline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 2803 "configure"
+#line 2825 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:2810: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2832: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -2832,12 +2854,12 @@ EOF
 esac
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:2836: checking for off_t" >&5
+echo "configure:2858: checking for off_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2841 "configure"
+#line 2863 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -2865,12 +2887,12 @@ EOF
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:2869: checking for size_t" >&5
+echo "configure:2891: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2874 "configure"
+#line 2896 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -2900,19 +2922,19 @@ fi
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:2904: checking for working alloca.h" >&5
+echo "configure:2926: checking for working alloca.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2909 "configure"
+#line 2931 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:2916: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2938: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -2933,12 +2955,12 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:2937: checking for alloca" >&5
+echo "configure:2959: checking for alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2942 "configure"
+#line 2964 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -2966,7 +2988,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:2970: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2992: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -2998,12 +3020,12 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:3002: checking whether alloca needs Cray hooks" >&5
+echo "configure:3024: checking whether alloca needs Cray hooks" >&5
 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3007 "configure"
+#line 3029 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -3028,12 +3050,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3032: checking for $ac_func" >&5
+echo "configure:3054: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3037 "configure"
+#line 3059 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3056,7 +3078,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3060: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3083,7 +3105,7 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:3087: checking stack direction for C alloca" >&5
+echo "configure:3109: checking stack direction for C alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3091,7 +3113,7 @@ else
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 3095 "configure"
+#line 3117 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -3110,7 +3132,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:3114: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_stack_direction=1
 else
@@ -3135,17 +3157,17 @@ for ac_hdr in stdlib.h unistd.h sys/stat.h sys/types.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3139: checking for $ac_hdr" >&5
+echo "configure:3161: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3144 "configure"
+#line 3166 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3149: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3171: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3174,12 +3196,12 @@ done
 for ac_func in getpagesize
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3178: checking for $ac_func" >&5
+echo "configure:3200: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3183 "configure"
+#line 3205 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3202,7 +3224,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3227,7 +3249,7 @@ fi
 done
 
 echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:3231: checking for working mmap" >&5
+echo "configure:3253: checking for working mmap" >&5
 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3235,7 +3257,7 @@ else
   ac_cv_func_mmap_fixed_mapped=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 3239 "configure"
+#line 3261 "configure"
 #include "confdefs.h"
 
 /* Thanks to Mike Haertel and Jim Avera for this test.
@@ -3388,7 +3410,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:3392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3414: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_mmap_fixed_mapped=yes
 else
@@ -3416,17 +3438,17 @@ unistd.h values.h sys/param.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3420: checking for $ac_hdr" >&5
+echo "configure:3442: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3425 "configure"
+#line 3447 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3430: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3452: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3456,12 +3478,12 @@ done
 __argz_count __argz_stringify __argz_next
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3460: checking for $ac_func" >&5
+echo "configure:3482: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3465 "configure"
+#line 3487 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3484,7 +3506,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3488: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3513,12 +3535,12 @@ done
      for ac_func in stpcpy
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3517: checking for $ac_func" >&5
+echo "configure:3539: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3522 "configure"
+#line 3544 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3541,7 +3563,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3575,19 +3597,19 @@ EOF
 
    if test $ac_cv_header_locale_h = yes; then
     echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:3579: checking for LC_MESSAGES" >&5
+echo "configure:3601: checking for LC_MESSAGES" >&5
 if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3584 "configure"
+#line 3606 "configure"
 #include "confdefs.h"
 #include <locale.h>
 int main() {
 return LC_MESSAGES
 ; return 0; }
 EOF
-if { (eval echo configure:3591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_val_LC_MESSAGES=yes
 else
@@ -3608,7 +3630,7 @@ EOF
     fi
   fi
    echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:3612: checking whether NLS is requested" >&5
+echo "configure:3634: checking whether NLS is requested" >&5
         # Check whether --enable-nls or --disable-nls was given.
 if test "${enable_nls+set}" = set; then
   enableval="$enable_nls"
@@ -3628,7 +3650,7 @@ fi
 EOF
 
       echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:3632: checking whether included gettext is requested" >&5
+echo "configure:3654: checking whether included gettext is requested" >&5
       # Check whether --with-included-gettext or --without-included-gettext was given.
 if test "${with_included_gettext+set}" = set; then
   withval="$with_included_gettext"
@@ -3647,17 +3669,17 @@ fi
 
        ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:3651: checking for libintl.h" >&5
+echo "configure:3673: checking for libintl.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3656 "configure"
+#line 3678 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3661: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3683: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3674,19 +3696,19 @@ fi
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6
-echo "configure:3678: checking for gettext in libc" >&5
+echo "configure:3700: checking for gettext in libc" >&5
 if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3683 "configure"
+#line 3705 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 int main() {
 return (int) gettext ("")
 ; return 0; }
 EOF
-if { (eval echo configure:3690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3712: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gt_cv_func_gettext_libc=yes
 else
@@ -3702,7 +3724,7 @@ echo "$ac_t""$gt_cv_func_gettext_libc" 1>&6
 
           if test "$gt_cv_func_gettext_libc" != "yes"; then
             echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
-echo "configure:3706: checking for bindtextdomain in -lintl" >&5
+echo "configure:3728: checking for bindtextdomain in -lintl" >&5
 ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3710,7 +3732,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3714 "configure"
+#line 3736 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3721,7 +3743,7 @@ int main() {
 bindtextdomain()
 ; return 0; }
 EOF
-if { (eval echo configure:3725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3737,19 +3759,19 @@ fi
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6
-echo "configure:3741: checking for gettext in libintl" >&5
+echo "configure:3763: checking for gettext in libintl" >&5
 if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3746 "configure"
+#line 3768 "configure"
 #include "confdefs.h"
 
 int main() {
 return (int) gettext ("")
 ; return 0; }
 EOF
-if { (eval echo configure:3753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gt_cv_func_gettext_libintl=yes
 else
@@ -3777,7 +3799,7 @@ EOF
              # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3781: checking for $ac_word" >&5
+echo "configure:3803: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3811,12 +3833,12 @@ fi
                for ac_func in dcgettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3815: checking for $ac_func" >&5
+echo "configure:3837: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3820 "configure"
+#line 3842 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3839,7 +3861,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3843: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3866,7 +3888,7 @@ done
                # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3870: checking for $ac_word" >&5
+echo "configure:3892: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3902,7 +3924,7 @@ fi
                # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3906: checking for $ac_word" >&5
+echo "configure:3928: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3934,7 +3956,7 @@ else
 fi
 
                cat > conftest.$ac_ext <<EOF
-#line 3938 "configure"
+#line 3960 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -3942,7 +3964,7 @@ extern int _nl_msg_cat_cntr;
                               return _nl_msg_cat_cntr
 ; return 0; }
 EOF
-if { (eval echo configure:3946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   CATOBJEXT=.gmo
                   DATADIRNAME=share
@@ -3974,7 +3996,7 @@ fi
         # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3978: checking for $ac_word" >&5
+echo "configure:4000: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4008,7 +4030,7 @@ fi
         # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4012: checking for $ac_word" >&5
+echo "configure:4034: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4044,7 +4066,7 @@ fi
         # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4048: checking for $ac_word" >&5
+echo "configure:4070: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4134,7 +4156,7 @@ fi
        LINGUAS=
      else
        echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:4138: checking for catalogs to be installed" >&5
+echo "configure:4160: checking for catalogs to be installed" >&5
        NEW_LINGUAS=
        for lang in ${LINGUAS=$ALL_LINGUAS}; do
          case "$ALL_LINGUAS" in
@@ -4162,17 +4184,17 @@ echo "configure:4138: checking for catalogs to be installed" >&5
       if test "$CATOBJEXT" = ".cat"; then
         ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6
-echo "configure:4166: checking for linux/version.h" >&5
+echo "configure:4188: checking for linux/version.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4171 "configure"
+#line 4193 "configure"
 #include "confdefs.h"
 #include <linux/version.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4176: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4198: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4237,7 +4259,7 @@ fi
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:4241: checking for executable suffix" >&5
+echo "configure:4263: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4247,7 +4269,7 @@ else
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:4251: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:4273: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
       *.c | *.o | *.obj) ;;
@@ -4273,7 +4295,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4277: checking for $ac_word" >&5
+echo "configure:4299: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4309,7 +4331,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4313: checking for $ac_word" >&5
+echo "configure:4335: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4342,7 +4364,7 @@ test -n "$LEX" || LEX=""$missing_dir/missing flex""
 # Extract the first word of "flex", so it can be a program name with args.
 set dummy flex; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4346: checking for $ac_word" >&5
+echo "configure:4368: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4376,7 +4398,7 @@ then
   *) ac_lib=l ;;
   esac
   echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
-echo "configure:4380: checking for yywrap in -l$ac_lib" >&5
+echo "configure:4402: checking for yywrap in -l$ac_lib" >&5
 ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4384,7 +4406,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$ac_lib  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4388 "configure"
+#line 4410 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4395,7 +4417,7 @@ int main() {
 yywrap()
 ; return 0; }
 EOF
-if { (eval echo configure:4399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4418,7 +4440,7 @@ fi
 fi
 
 echo $ac_n "checking lex output file root""... $ac_c" 1>&6
-echo "configure:4422: checking lex output file root" >&5
+echo "configure:4444: checking lex output file root" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_lex_root'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4439,7 +4461,7 @@ echo "$ac_t""$ac_cv_prog_lex_root" 1>&6
 LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
 
 echo $ac_n "checking whether yytext is a pointer""... $ac_c" 1>&6
-echo "configure:4443: checking whether yytext is a pointer" >&5
+echo "configure:4465: checking whether yytext is a pointer" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_lex_yytext_pointer'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4451,14 +4473,14 @@ echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c
 ac_save_LIBS="$LIBS"
 LIBS="$LIBS $LEXLIB"
 cat > conftest.$ac_ext <<EOF
-#line 4455 "configure"
+#line 4477 "configure"
 #include "confdefs.h"
 `cat $LEX_OUTPUT_ROOT.c`
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4462: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4484: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_prog_lex_yytext_pointer=yes
 else
@@ -4481,7 +4503,7 @@ fi
 
 
 echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:4485: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:4507: checking whether to enable maintainer-specific portions of Makefiles" >&5
     # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
 if test "${enable_maintainer_mode+set}" = set; then
   enableval="$enable_maintainer_mode"
@@ -4515,17 +4537,17 @@ for ac_hdr in string.h strings.h stdlib.h unistd.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4519: checking for $ac_hdr" >&5
+echo "configure:4541: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4524 "configure"
+#line 4546 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4529: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4551: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4554,12 +4576,12 @@ done
 for ac_func in sbrk realpath
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4558: checking for $ac_func" >&5
+echo "configure:4580: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4563 "configure"
+#line 4585 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4582,7 +4604,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4586: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4608: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -4611,12 +4633,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:4615: checking for $ac_hdr that defines DIR" >&5
+echo "configure:4637: checking for $ac_hdr that defines DIR" >&5
 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4620 "configure"
+#line 4642 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
@@ -4624,7 +4646,7 @@ int main() {
 DIR *dirp = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:4628: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4650: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_header_dirent_$ac_safe=yes"
 else
@@ -4649,7 +4671,7 @@ done
 # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 if test $ac_header_dirent = dirent.h; then
 echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:4653: checking for opendir in -ldir" >&5
+echo "configure:4675: checking for opendir in -ldir" >&5
 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4657,7 +4679,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldir  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4661 "configure"
+#line 4683 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4668,7 +4690,7 @@ int main() {
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:4672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4694: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4690,7 +4712,7 @@ fi
 
 else
 echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:4694: checking for opendir in -lx" >&5
+echo "configure:4716: checking for opendir in -lx" >&5
 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4698,7 +4720,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lx  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4702 "configure"
+#line 4724 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4709,7 +4731,7 @@ int main() {
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:4713: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4742,12 +4764,12 @@ EOF
 esac
 
 echo $ac_n "checking whether strstr must be declared""... $ac_c" 1>&6
-echo "configure:4746: checking whether strstr must be declared" >&5
+echo "configure:4768: checking whether strstr must be declared" >&5
 if eval "test \"`echo '$''{'bfd_cv_decl_needed_strstr'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4751 "configure"
+#line 4773 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4768,7 +4790,7 @@ int main() {
 char *(*pfn) = (char *(*)) strstr
 ; return 0; }
 EOF
-if { (eval echo configure:4772: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4794: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_decl_needed_strstr=no
 else
@@ -4789,12 +4811,12 @@ EOF
 fi
 
 echo $ac_n "checking whether free must be declared""... $ac_c" 1>&6
-echo "configure:4793: checking whether free must be declared" >&5
+echo "configure:4815: checking whether free must be declared" >&5
 if eval "test \"`echo '$''{'bfd_cv_decl_needed_free'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4798 "configure"
+#line 4820 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4815,7 +4837,7 @@ int main() {
 char *(*pfn) = (char *(*)) free
 ; return 0; }
 EOF
-if { (eval echo configure:4819: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4841: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_decl_needed_free=no
 else
@@ -4836,12 +4858,12 @@ EOF
 fi
 
 echo $ac_n "checking whether sbrk must be declared""... $ac_c" 1>&6
-echo "configure:4840: checking whether sbrk must be declared" >&5
+echo "configure:4862: checking whether sbrk must be declared" >&5
 if eval "test \"`echo '$''{'bfd_cv_decl_needed_sbrk'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4845 "configure"
+#line 4867 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4862,7 +4884,7 @@ int main() {
 char *(*pfn) = (char *(*)) sbrk
 ; return 0; }
 EOF
-if { (eval echo configure:4866: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4888: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_decl_needed_sbrk=no
 else
@@ -4883,12 +4905,12 @@ EOF
 fi
 
 echo $ac_n "checking whether getenv must be declared""... $ac_c" 1>&6
-echo "configure:4887: checking whether getenv must be declared" >&5
+echo "configure:4909: checking whether getenv must be declared" >&5
 if eval "test \"`echo '$''{'bfd_cv_decl_needed_getenv'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4892 "configure"
+#line 4914 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4909,7 +4931,7 @@ int main() {
 char *(*pfn) = (char *(*)) getenv
 ; return 0; }
 EOF
-if { (eval echo configure:4913: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4935: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_decl_needed_getenv=no
 else
@@ -4930,12 +4952,12 @@ EOF
 fi
 
 echo $ac_n "checking whether environ must be declared""... $ac_c" 1>&6
-echo "configure:4934: checking whether environ must be declared" >&5
+echo "configure:4956: checking whether environ must be declared" >&5
 if eval "test \"`echo '$''{'bfd_cv_decl_needed_environ'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4939 "configure"
+#line 4961 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4956,7 +4978,7 @@ int main() {
 char *(*pfn) = (char *(*)) environ
 ; return 0; }
 EOF
-if { (eval echo configure:4960: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4982: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_decl_needed_environ=no
 else
@@ -4984,19 +5006,19 @@ fi
 # constants, while still supporting pre-ANSI compilers which do not
 # support string concatenation.
 echo $ac_n "checking whether ANSI C string concatenation works""... $ac_c" 1>&6
-echo "configure:4988: checking whether ANSI C string concatenation works" >&5
+echo "configure:5010: checking whether ANSI C string concatenation works" >&5
 if eval "test \"`echo '$''{'ld_cv_string_concatenation'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4993 "configure"
+#line 5015 "configure"
 #include "confdefs.h"
 
 int main() {
 char *a = "a" "a";
 ; return 0; }
 EOF
-if { (eval echo configure:5000: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5022: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ld_cv_string_concatenation=yes
 else
@@ -5271,7 +5293,6 @@ s%@build_alias@%$build_alias%g
 s%@build_cpu@%$build_cpu%g
 s%@build_vendor@%$build_vendor%g
 s%@build_os@%$build_os%g
-s%@CC@%$CC%g
 s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
 s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
 s%@INSTALL_DATA@%$INSTALL_DATA%g
@@ -5283,6 +5304,7 @@ s%@AUTOMAKE@%$AUTOMAKE%g
 s%@AUTOHEADER@%$AUTOHEADER%g
 s%@MAKEINFO@%$MAKEINFO%g
 s%@SET_MAKE@%$SET_MAKE%g
+s%@CC@%$CC%g
 s%@LN_S@%$LN_S%g
 s%@OBJEXT@%$OBJEXT%g
 s%@EXEEXT@%$EXEEXT%g
index 6860268..4a69324 100644 (file)
@@ -422,6 +422,8 @@ mmix-*-*)           targ_emul=mmo
                        ;;
 mn10200-*-*)           targ_emul=mn10200 ;;
 mn10300-*-*)           targ_emul=mn10300 ;;
+msp430-*-*)             targ_emul=msp430x149
+                        targ_extra_emuls="msp430x148 msp430x147 msp430x133 msp430x135 msp430x110 msp430x112 msp430x122 msp430x123 msp430x412 msp430x413 msp430x311 msp430x312 msp430x313 msp430x314 msp430x315 msp430x323 msp430x325 msp430x336 msp430x337 msp430x1101 msp430x1111 msp430x1121 msp430x1331 msp430x1351 msp430x435 msp430x436 msp430x437 msp430x447 msp430x448 msp430x449 msp430x1222 msp430x1232 msp430x169 msp430x168 msp430x167 msp430x155  msp430x156 msp430x157" ;;
 alpha*-*-freebsd*)     targ_emul=elf64alpha_fbsd
                        targ_extra_emuls="elf64alpha alpha"
                        tdir_alpha=`echo ${targ_alias} | sed -e 's/freebsd/freebsdecoff/'`
diff --git a/ld/emulparams/msp430x110.sh b/ld/emulparams/msp430x110.sh
new file mode 100644 (file)
index 0000000..54e8272
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:11
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xfc00
+ROM_SIZE=0x3e0
+RAM_START=0x0200
+RAM_SIZE=128
+
+STACK=0x280
diff --git a/ld/emulparams/msp430x1101.sh b/ld/emulparams/msp430x1101.sh
new file mode 100644 (file)
index 0000000..9a0273c
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:110
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xfc00
+ROM_SIZE=0x3e0
+RAM_START=0x0200
+RAM_SIZE=128
+
+STACK=0x280
diff --git a/ld/emulparams/msp430x1111.sh b/ld/emulparams/msp430x1111.sh
new file mode 100644 (file)
index 0000000..c8c95e2
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:110
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf800
+ROM_SIZE=0x07e0
+RAM_START=0x0200
+RAM_SIZE=128
+
+STACK=0x280
diff --git a/ld/emulparams/msp430x112.sh b/ld/emulparams/msp430x112.sh
new file mode 100644 (file)
index 0000000..0b74404
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:11
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf000
+ROM_SIZE=0xfe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
diff --git a/ld/emulparams/msp430x1121.sh b/ld/emulparams/msp430x1121.sh
new file mode 100644 (file)
index 0000000..e190c2a
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:110
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf000
+ROM_SIZE=0x0fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
diff --git a/ld/emulparams/msp430x122.sh b/ld/emulparams/msp430x122.sh
new file mode 100644 (file)
index 0000000..ee2ba40
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:12
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf000
+ROM_SIZE=0xfe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
diff --git a/ld/emulparams/msp430x1222.sh b/ld/emulparams/msp430x1222.sh
new file mode 100644 (file)
index 0000000..ee2ba40
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:12
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf000
+ROM_SIZE=0xfe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
diff --git a/ld/emulparams/msp430x123.sh b/ld/emulparams/msp430x123.sh
new file mode 100644 (file)
index 0000000..6d946bc
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:12
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
diff --git a/ld/emulparams/msp430x1232.sh b/ld/emulparams/msp430x1232.sh
new file mode 100644 (file)
index 0000000..6d946bc
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:12
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
diff --git a/ld/emulparams/msp430x133.sh b/ld/emulparams/msp430x133.sh
new file mode 100644 (file)
index 0000000..1d6104f
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:13
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
diff --git a/ld/emulparams/msp430x1331.sh b/ld/emulparams/msp430x1331.sh
new file mode 100644 (file)
index 0000000..1d6104f
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:13
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
diff --git a/ld/emulparams/msp430x135.sh b/ld/emulparams/msp430x135.sh
new file mode 100644 (file)
index 0000000..f2eb544
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:13
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
diff --git a/ld/emulparams/msp430x1351.sh b/ld/emulparams/msp430x1351.sh
new file mode 100644 (file)
index 0000000..f2eb544
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:13
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
diff --git a/ld/emulparams/msp430x147.sh b/ld/emulparams/msp430x147.sh
new file mode 100644 (file)
index 0000000..a2747b7
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:14
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1K
+
+STACK=0x600
diff --git a/ld/emulparams/msp430x148.sh b/ld/emulparams/msp430x148.sh
new file mode 100644 (file)
index 0000000..5954c70
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:14
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x4000
+ROM_SIZE=0xbef0
+RAM_START=0x0200
+RAM_SIZE=0x07ff
+
+STACK=0xa00
diff --git a/ld/emulparams/msp430x149.sh b/ld/emulparams/msp430x149.sh
new file mode 100644 (file)
index 0000000..a695876
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:14
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x1100
+ROM_SIZE=0xeee0
+RAM_START=0x0200
+RAM_SIZE=0x07ff
+
+STACK=0xa00
diff --git a/ld/emulparams/msp430x155.sh b/ld/emulparams/msp430x155.sh
new file mode 100644 (file)
index 0000000..5b1c838
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:15
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
diff --git a/ld/emulparams/msp430x156.sh b/ld/emulparams/msp430x156.sh
new file mode 100644 (file)
index 0000000..0bb2867
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:15
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xa000
+ROM_SIZE=0x5fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
diff --git a/ld/emulparams/msp430x157.sh b/ld/emulparams/msp430x157.sh
new file mode 100644 (file)
index 0000000..21ea6f6
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:15
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1K
+
+STACK=0x600
diff --git a/ld/emulparams/msp430x167.sh b/ld/emulparams/msp430x167.sh
new file mode 100644 (file)
index 0000000..3b942f7
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:16
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1K
+
+STACK=0x600
diff --git a/ld/emulparams/msp430x168.sh b/ld/emulparams/msp430x168.sh
new file mode 100644 (file)
index 0000000..f92e6d4
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:16
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x4000
+ROM_SIZE=0xbef0
+RAM_START=0x0200
+RAM_SIZE=0x07ff
+
+STACK=0xa00
diff --git a/ld/emulparams/msp430x169.sh b/ld/emulparams/msp430x169.sh
new file mode 100644 (file)
index 0000000..72b0983
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:16
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x1100
+ROM_SIZE=0xeee0
+RAM_START=0x0200
+RAM_SIZE=0x07ff
+
+STACK=0xa00
diff --git a/ld/emulparams/msp430x311.sh b/ld/emulparams/msp430x311.sh
new file mode 100644 (file)
index 0000000..eebad54
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:31
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf800
+ROM_SIZE=0x07e0
+RAM_START=0x0200
+RAM_SIZE=128
+
+STACK=0x280
diff --git a/ld/emulparams/msp430x312.sh b/ld/emulparams/msp430x312.sh
new file mode 100644 (file)
index 0000000..789c73b
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:31
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf000
+ROM_SIZE=0x0fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
diff --git a/ld/emulparams/msp430x313.sh b/ld/emulparams/msp430x313.sh
new file mode 100644 (file)
index 0000000..8fac19f
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:31
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
diff --git a/ld/emulparams/msp430x314.sh b/ld/emulparams/msp430x314.sh
new file mode 100644 (file)
index 0000000..3ef1987
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:31
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xd000
+ROM_SIZE=0x2fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
diff --git a/ld/emulparams/msp430x315.sh b/ld/emulparams/msp430x315.sh
new file mode 100644 (file)
index 0000000..4156eb6
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:31
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
diff --git a/ld/emulparams/msp430x323.sh b/ld/emulparams/msp430x323.sh
new file mode 100644 (file)
index 0000000..13b9d51
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:32
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
diff --git a/ld/emulparams/msp430x325.sh b/ld/emulparams/msp430x325.sh
new file mode 100644 (file)
index 0000000..3c8e351
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:32
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
diff --git a/ld/emulparams/msp430x336.sh b/ld/emulparams/msp430x336.sh
new file mode 100644 (file)
index 0000000..c0dc08c
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:33
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xa000
+ROM_SIZE=0x5fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+
+STACK=0x600
diff --git a/ld/emulparams/msp430x337.sh b/ld/emulparams/msp430x337.sh
new file mode 100644 (file)
index 0000000..a52d129
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:33
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+
+STACK=0x600
diff --git a/ld/emulparams/msp430x412.sh b/ld/emulparams/msp430x412.sh
new file mode 100644 (file)
index 0000000..1a1f68b
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:41
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf000
+ROM_SIZE=0x0fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
diff --git a/ld/emulparams/msp430x413.sh b/ld/emulparams/msp430x413.sh
new file mode 100644 (file)
index 0000000..d3a739d
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:41
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
diff --git a/ld/emulparams/msp430x435.sh b/ld/emulparams/msp430x435.sh
new file mode 100644 (file)
index 0000000..d625ace
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:43
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
diff --git a/ld/emulparams/msp430x436.sh b/ld/emulparams/msp430x436.sh
new file mode 100644 (file)
index 0000000..75f711b
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:43
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xa000
+ROM_SIZE=0x5fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+
+STACK=0x600
diff --git a/ld/emulparams/msp430x437.sh b/ld/emulparams/msp430x437.sh
new file mode 100644 (file)
index 0000000..92de8cc
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:43
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+
+STACK=0x600
diff --git a/ld/emulparams/msp430x447.sh b/ld/emulparams/msp430x447.sh
new file mode 100644 (file)
index 0000000..058cc07
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:44
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1K
+
+STACK=0x600
diff --git a/ld/emulparams/msp430x448.sh b/ld/emulparams/msp430x448.sh
new file mode 100644 (file)
index 0000000..e8820ce
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:44
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x4000
+ROM_SIZE=0xbef0
+RAM_START=0x0200
+RAM_SIZE=0x07ff
+
+STACK=0xa00
diff --git a/ld/emulparams/msp430x449.sh b/ld/emulparams/msp430x449.sh
new file mode 100644 (file)
index 0000000..9c3442e
--- /dev/null
@@ -0,0 +1,14 @@
+ARCH=msp:44
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x1100
+ROM_SIZE=0xeee0
+RAM_START=0x0200
+RAM_SIZE=0x07ff
+
+STACK=0xa00
index 485e52c..0a6bd4c 100644 (file)
@@ -6,6 +6,7 @@
 @set H8300
 @set I960
 @set MMIX
+@set MSP430
 @set TICOFF
 @set WIN32
 
index 8e3a856..0af5765 100644 (file)
@@ -36,6 +36,7 @@
 @set MCORE
 @set MIPS
 @set MMIX
+@set MSP430
 @set PDP11
 @set PJ
 @set SH
@@ -4393,6 +4394,9 @@ functionality are not listed.
 @ifset MMIX
 * MMIX::                       @code{ld} and MMIX
 @end ifset
+@ifset MSP430
+* MSP430::                     @code{ld} and MSP430
+@end ifset
 @ifset TICOFF
 * TI COFF::                     @command{ld} and TI COFF
 @end ifset
@@ -4892,6 +4896,39 @@ Initial and trailing multiples of zero-valued 32-bit words in a section,
 are left out from an mmo file.
 @end ifset
 
+@ifset MSP430
+@node  MSP430
+@section @code{ld} and MSP430
+For the MSP430 it is possible to select the MPU architecture.  The flag @samp{-m [mpu type]}
+will select an appropriate linker script for selected MPU type.  (To get a list of known MPUs
+just pass @samp{-m help} option to the linker).
+
+@cindex MSP430 extra sections
+The linker will recognize some extra sections which are MSP430 specific:
+
+@table @code
+@item @samp{.vectors}
+Defines a portion of ROM where interrupt vectors located.
+
+@item @samp{.bootloader}
+Defines the bootloader portion of the ROM (if applicable).  Any code
+in this section will be uploaded to the MPU.
+
+@item @samp{.infomem}
+Defines an information memory section (if applicable).  Any code in
+this section will be uploaded to the MPU.
+
+@item @samp{.infomemnobits} 
+This is the same as the @samp{.infomem} section except that any code
+in this section will not be uploaded to the MPU.
+
+@item @samp{.noinit}
+Denotes a portion of RAM located above @samp{.bss} section.
+
+The last two sections are used by gcc. 
+@end table
+@end ifset
+
 @ifset TICOFF
 @node TI COFF
 @section @command{ld}'s support for various TI COFF versions
diff --git a/ld/scripttempl/elf32msp430.sc b/ld/scripttempl/elf32msp430.sc
new file mode 100644 (file)
index 0000000..7636576
--- /dev/null
@@ -0,0 +1,188 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}","${OUTPUT_FORMAT}","${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+MEMORY
+{
+  text   (rx)          : ORIGIN = $ROM_START,  LENGTH = $ROM_SIZE
+  data   (rwx)         : ORIGIN = $RAM_START,  LENGTH = $RAM_SIZE
+  vectors (rw)         : ORIGIN = 0xffe0,      LENGTH = 0x20
+  bootloader(rx)       : ORIGIN = 0x0c00,      LENGTH = 1K
+  infomem(rx)          : ORIGIN = 0x1000,      LENGTH = 256
+  infomemnobits(rx)    : ORIGIN = 0x1000,      LENGTH = 256
+}
+
+SECTIONS
+{
+  /* Read-only sections, merged into text segment.  */
+  ${TEXT_DYNAMIC+${DYNAMIC}}
+  .hash        ${RELOCATING-0} : { *(.hash)             }
+  .dynsym      ${RELOCATING-0} : { *(.dynsym)           }
+  .dynstr      ${RELOCATING-0} : { *(.dynstr)           }
+  .gnu.version ${RELOCATING-0} : { *(.gnu.version)      }
+  .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d)  }
+  .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r)  }
+
+  .rel.init    ${RELOCATING-0} : { *(.rel.init) }
+  .rela.init   ${RELOCATING-0} : { *(.rela.init) }
+  .rel.text    ${RELOCATING-0} :
+    {
+      *(.rel.text)
+      ${RELOCATING+*(.rel.text.*)}
+      ${RELOCATING+*(.rel.gnu.linkonce.t*)}
+    }
+  .rela.text   ${RELOCATING-0} :
+    {
+      *(.rela.text)
+      ${RELOCATING+*(.rela.text.*)}
+      ${RELOCATING+*(.rela.gnu.linkonce.t*)}
+    }
+  .rel.fini    ${RELOCATING-0} : { *(.rel.fini) }
+  .rela.fini   ${RELOCATING-0} : { *(.rela.fini) }
+  .rel.rodata  ${RELOCATING-0} :
+    {
+      *(.rel.rodata)
+      ${RELOCATING+*(.rel.rodata.*)}
+      ${RELOCATING+*(.rel.gnu.linkonce.r*)}
+    }
+  .rela.rodata ${RELOCATING-0} :
+    {
+      *(.rela.rodata)
+      ${RELOCATING+*(.rela.rodata.*)}
+      ${RELOCATING+*(.rela.gnu.linkonce.r*)}
+    }
+  .rel.data    ${RELOCATING-0} :
+    {
+      *(.rel.data)
+      ${RELOCATING+*(.rel.data.*)}
+      ${RELOCATING+*(.rel.gnu.linkonce.d*)}
+    }
+  .rela.data   ${RELOCATING-0} :
+    {
+      *(.rela.data)
+      ${RELOCATING+*(.rela.data.*)}
+      ${RELOCATING+*(.rela.gnu.linkonce.d*)}
+    }
+  .rel.ctors   ${RELOCATING-0} : { *(.rel.ctors)        }
+  .rela.ctors  ${RELOCATING-0} : { *(.rela.ctors)       }
+  .rel.dtors   ${RELOCATING-0} : { *(.rel.dtors)        }
+  .rela.dtors  ${RELOCATING-0} : { *(.rela.dtors)       }
+  .rel.got     ${RELOCATING-0} : { *(.rel.got)          }
+  .rela.got    ${RELOCATING-0} : { *(.rela.got)         }
+  .rel.bss     ${RELOCATING-0} : { *(.rel.bss)          }
+  .rela.bss    ${RELOCATING-0} : { *(.rela.bss)         }
+  .rel.plt     ${RELOCATING-0} : { *(.rel.plt)          }
+  .rela.plt    ${RELOCATING-0} : { *(.rela.plt)         }
+
+  /* Internal text space.  */
+  .text :
+  {
+    *(.init)
+    ${RELOCATING+. = ALIGN(2);}
+    *(.text)
+    ${RELOCATING+. = ALIGN(2);}
+    *(.text.*)
+    ${RELOCATING+. = ALIGN(2);}
+    *(.fini)
+    ${RELOCATING+ _etext = . ; }
+  } ${RELOCATING+ > text}
+
+  .data ${RELOCATING-0} : ${RELOCATING+AT (ADDR (.text) + SIZEOF (.text))}
+  {  
+    ${RELOCATING+ PROVIDE (__data_start = .) ; }
+    ${RELOCATING+. = ALIGN(2);}
+    *(.data)
+    ${RELOCATING+. = ALIGN(2);}
+    *(.gnu.linkonce.d*)
+    ${RELOCATING+. = ALIGN(2);}
+    ${RELOCATING+ _edata = . ; }
+  } ${RELOCATING+ > data}
+  
+  /* Bootloader.  */
+  .bootloader ${RELOCATING-0} :
+  {
+    ${RELOCATING+ PROVIDE (__boot_start = .) ; }
+    *(.bootloader)
+    ${RELOCATING+. = ALIGN(2);}
+    *(.bootloader.*)
+  } ${RELOCATING+ > bootloader}
+  
+  /* Information memory.  */
+  .infomem ${RELOCATING-0} :
+  {
+    *(.infomem)
+    ${RELOCATING+. = ALIGN(2);}
+    *(.infomem.*)
+  } ${RELOCATING+ > infomem}
+
+  /* Information memory (not loaded into MPU).  */
+  .infomemnobits ${RELOCATING-0} :
+  {
+    *(.infomemnobits)
+    ${RELOCATING+. = ALIGN(2);}
+    *(.infomemnobits.*)
+  } ${RELOCATING+ > infomemnobits}
+
+  .bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} :
+  {
+    ${RELOCATING+ PROVIDE (__bss_start = .) ; }
+    *(.bss)
+    *(COMMON)
+    ${RELOCATING+ PROVIDE (__bss_end = .) ; }
+    ${RELOCATING+ _end = . ;  }
+  } ${RELOCATING+ > data}
+
+  .noinit ${RELOCATING+ SIZEOF(.bss) + ADDR(.bss)} :
+  {
+    ${RELOCATING+ PROVIDE (__noinit_start = .) ; }
+    *(.noinit)
+    *(COMMON)
+    ${RELOCATING+ PROVIDE (__noinit_end = .) ; }
+    ${RELOCATING+ _end = . ;  }
+  } ${RELOCATING+ > data}
+
+  .vectors ${RELOCATING-0}:
+  {
+    ${RELOCATING+ PROVIDE (__vectors_start = .) ; }
+    *(.vectors*)
+    ${RELOCATING+ _vectors_end = . ; }
+  } ${RELOCATING+ > vectors}
+
+
+  /* Stabs debugging sections.  */
+  .stab 0 : { *(.stab) } 
+  .stabstr 0 : { *(.stabstr) }
+  .stab.excl 0 : { *(.stab.excl) }
+  .stab.exclstr 0 : { *(.stab.exclstr) }
+  .stab.index 0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment 0 : { *(.comment) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+
+  PROVIDE (__stack = ${STACK}) ;
+}
+EOF
diff --git a/ld/scripttempl/elf32msp430_3.sc b/ld/scripttempl/elf32msp430_3.sc
new file mode 100644 (file)
index 0000000..019e4b7
--- /dev/null
@@ -0,0 +1,157 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}","${OUTPUT_FORMAT}","${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+MEMORY
+{
+  text   (rx)   : ORIGIN = $ROM_START,  LENGTH = $ROM_SIZE
+  data   (rwx)  : ORIGIN = $RAM_START,         LENGTH = $RAM_SIZE
+  vectors (rw)  : ORIGIN = 0xffe0,      LENGTH = 0x20
+}
+
+SECTIONS
+{
+  /* Read-only sections, merged into text segment.  */
+  ${TEXT_DYNAMIC+${DYNAMIC}}
+  .hash        ${RELOCATING-0} : { *(.hash)             }
+  .dynsym      ${RELOCATING-0} : { *(.dynsym)           }
+  .dynstr      ${RELOCATING-0} : { *(.dynstr)           }
+  .gnu.version ${RELOCATING-0} : { *(.gnu.version)      }
+  .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d)  }
+  .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r)  }
+
+  .rel.init    ${RELOCATING-0} : { *(.rel.init) }
+  .rela.init   ${RELOCATING-0} : { *(.rela.init)        }
+  .rel.text    ${RELOCATING-0} :
+    {
+      *(.rel.text)
+      ${RELOCATING+*(.rel.text.*)}
+      ${RELOCATING+*(.rel.gnu.linkonce.t*)}
+    }
+  .rela.text   ${RELOCATING-0} :
+    {
+      *(.rela.text)
+      ${RELOCATING+*(.rela.text.*)}
+      ${RELOCATING+*(.rela.gnu.linkonce.t*)}
+    }
+  .rel.fini    ${RELOCATING-0} : { *(.rel.fini) }
+  .rela.fini   ${RELOCATING-0} : { *(.rela.fini)        }
+  .rel.rodata  ${RELOCATING-0} :
+    {
+      *(.rel.rodata)
+      ${RELOCATING+*(.rel.rodata.*)}
+      ${RELOCATING+*(.rel.gnu.linkonce.r*)}
+    }
+  .rela.rodata ${RELOCATING-0} :
+    {
+      *(.rela.rodata)
+      ${RELOCATING+*(.rela.rodata.*)}
+      ${RELOCATING+*(.rela.gnu.linkonce.r*)}
+    }
+  .rel.data    ${RELOCATING-0} :
+    {
+      *(.rel.data)
+      ${RELOCATING+*(.rel.data.*)}
+      ${RELOCATING+*(.rel.gnu.linkonce.d*)}
+    }
+  .rela.data   ${RELOCATING-0} :
+    {
+      *(.rela.data)
+      ${RELOCATING+*(.rela.data.*)}
+      ${RELOCATING+*(.rela.gnu.linkonce.d*)}
+    }
+  .rel.ctors   ${RELOCATING-0} : { *(.rel.ctors)        }
+  .rela.ctors  ${RELOCATING-0} : { *(.rela.ctors)       }
+  .rel.dtors   ${RELOCATING-0} : { *(.rel.dtors)        }
+  .rela.dtors  ${RELOCATING-0} : { *(.rela.dtors)       }
+  .rel.got     ${RELOCATING-0} : { *(.rel.got)          }
+  .rela.got    ${RELOCATING-0} : { *(.rela.got)         }
+  .rel.bss     ${RELOCATING-0} : { *(.rel.bss)          }
+  .rela.bss    ${RELOCATING-0} : { *(.rela.bss)         }
+  .rel.plt     ${RELOCATING-0} : { *(.rel.plt)          }
+  .rela.plt    ${RELOCATING-0} : { *(.rela.plt)         }
+
+  /* Internal text space.  */
+  .text :
+  {
+    *(.init)
+    ${RELOCATING+. = ALIGN(2);}
+    *(.text)
+    ${RELOCATING+. = ALIGN(2);}
+    *(.text.*)
+    ${RELOCATING+. = ALIGN(2);}
+    *(.fini)
+    ${RELOCATING+ _etext = . ; }
+  } ${RELOCATING+ > text}
+
+  .data ${RELOCATING-0} : ${RELOCATING+AT (ADDR (.text) + SIZEOF (.text))}
+  {  
+    ${RELOCATING+ PROVIDE (__data_start = .) ; }
+    *(.data)
+    *(.gnu.linkonce.d*)
+    ${RELOCATING+. = ALIGN(2);}
+    ${RELOCATING+ _edata = . ; }
+  } ${RELOCATING+ > data}
+  
+  .bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} :
+  {
+    ${RELOCATING+ PROVIDE (__bss_start = .) ; }
+    *(.bss)
+    *(COMMON)
+    ${RELOCATING+ PROVIDE (__bss_end = .) ; }
+    ${RELOCATING+ _end = . ;  }
+  } ${RELOCATING+ > data}
+
+  .noinit ${RELOCATING+ SIZEOF(.bss) + ADDR(.bss)} :
+  {
+    ${RELOCATING+ PROVIDE (__noinit_start = .) ; }
+    *(.noinit)
+    *(COMMON)
+    ${RELOCATING+ PROVIDE (__noinit_end = .) ; }
+    ${RELOCATING+ _end = . ;  }
+  } ${RELOCATING+ > data}
+
+  .vectors ${RELOCATING-0}:
+  {
+    ${RELOCATING+ PROVIDE (__vectors_start = .) ; }
+    *(.vectors*)
+    ${RELOCATING+ _vectors_end = . ; }
+  } ${RELOCATING+ > vectors}
+
+  /* Stabs debugging sections.  */
+  .stab 0 : { *(.stab) } 
+  .stabstr 0 : { *(.stabstr) }
+  .stab.excl 0 : { *(.stab.excl) }
+  .stab.exclstr 0 : { *(.stab.exclstr) }
+  .stab.index 0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment 0 : { *(.comment) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+
+  PROVIDE (__stack = ${STACK}) ;
+}
+EOF
index c5dff56..7ff7f95 100644 (file)
@@ -1,3 +1,10 @@
+2002-12-30    Dmitry Diky <diwil@mail.ru>
+
+       * configure.in: Add msp430 target.
+       * configure: Regenerate.
+       * disassemble.c: Add entry for msp430 disassembly.
+       * msp430-dis.c: New file: msp430 disassembler.
+
 2002-12-27  Chris Demetriou  <cgd@broadcom.com>
 
        * disassemble.c (disassembler_usage): Add invocation of
index da66cf5..08ea4b2 100644 (file)
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
 
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -451,7 +451,7 @@ acinclude.m4 aclocal.m4 config.in configure configure.in
 
 DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
 
-TAR = tar
+TAR = gtar
 GZIP_ENV = --best
 SOURCES = libopcodes.a.c $(libopcodes_la_SOURCES)
 OBJECTS = libopcodes.a.$(OBJEXT) $(libopcodes_la_OBJECTS)
@@ -600,7 +600,7 @@ maintainer-clean-recursive:
        dot_seen=no; \
        rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
          rev="$$subdir $$rev"; \
-         test "$$subdir" = "." && dot_seen=yes; \
+         test "$$subdir" != "." || dot_seen=yes; \
        done; \
        test "$$dot_seen" = "no" && rev=". $$rev"; \
        target=`echo $@ | sed s/-recursive//`; \
index 6825a0b..8eed735 100755 (executable)
@@ -2338,7 +2338,7 @@ if test "${enable_install_libbfd+set}" = set; then
   enableval="$enable_install_libbfd"
   install_libbfd_p=$enableval
 else
-  if test "${host}" = "${target}" -o "$enable_shared" = "yes"; then
+  if test "${host}" = "${target}" || test "$enable_shared" = "yes"; then
         install_libbfd_p=yes
       else
         install_libbfd_p=no
@@ -4625,6 +4625,7 @@ if test x${all_targets} = xfalse ; then
        bfd_mmix_arch)          ta="$ta mmix-dis.lo mmix-opc.lo" ;;
        bfd_mn10200_arch)       ta="$ta m10200-dis.lo m10200-opc.lo" ;;
        bfd_mn10300_arch)       ta="$ta m10300-dis.lo m10300-opc.lo" ;;
+       bfd_msp430_arch)        ta="$ta msp430-dis.lo" ;;
        bfd_ns32k_arch)         ta="$ta ns32k-dis.lo" ;;
        bfd_openrisc_arch)      ta="$ta openrisc-asm.lo openrisc-desc.lo openrisc-dis.lo openrisc-ibld.lo openrisc-opc.lo" using_cgen=yes ;;
        bfd_or32_arch)          ta="$ta or32-dis.lo or32-opc.lo" using_cgen=yes ;;
index 0e5eb6f..bc8d6f8 100644 (file)
@@ -200,6 +200,7 @@ if test x${all_targets} = xfalse ; then
        bfd_mmix_arch)          ta="$ta mmix-dis.lo mmix-opc.lo" ;;
        bfd_mn10200_arch)       ta="$ta m10200-dis.lo m10200-opc.lo" ;;
        bfd_mn10300_arch)       ta="$ta m10300-dis.lo m10300-opc.lo" ;;
+       bfd_msp430_arch)        ta="$ta msp430-dis.lo" ;;
        bfd_ns32k_arch)         ta="$ta ns32k-dis.lo" ;;
        bfd_openrisc_arch)      ta="$ta openrisc-asm.lo openrisc-desc.lo openrisc-dis.lo openrisc-ibld.lo openrisc-opc.lo" using_cgen=yes ;;
        bfd_or32_arch)          ta="$ta or32-dis.lo or32-opc.lo" using_cgen=yes ;;
index bfee746..1c2c21c 100644 (file)
@@ -49,6 +49,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #define ARCH_mmix
 #define ARCH_mn10200
 #define ARCH_mn10300
+#define ARCH_msp430
 #define ARCH_ns32k
 #define ARCH_openrisc
 #define ARCH_or32
@@ -214,6 +215,11 @@ disassembler (abfd)
       disassemble = print_insn_m88k;
       break;
 #endif
+#ifdef ARCH_msp430
+    case bfd_arch_msp430:
+      disassemble = print_insn_msp430;
+      break;
+#endif
 #ifdef ARCH_ns32k
     case bfd_arch_ns32k:
       disassemble = print_insn_ns32k;
diff --git a/opcodes/msp430-dis.c b/opcodes/msp430-dis.c
new file mode 100644 (file)
index 0000000..767ffa4
--- /dev/null
@@ -0,0 +1,805 @@
+/* Disassemble MSP430 instructions.
+   Copyright (C) 2002 Free Software Foundation, Inc.
+   
+   Contributed by Dmitry Diky <diwil@mail.ru>
+        
+   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 <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "dis-asm.h"
+#include "opintl.h"
+#include "libiberty.h"
+
+#define DASM_SECTION
+#include "opcode/msp430.h"
+#undef DASM_SECTION
+
+
+static unsigned short msp430dis_opcode
+  PARAMS ((bfd_vma, disassemble_info *));
+int print_insn_msp430
+  PARAMS ((bfd_vma, disassemble_info *));
+int msp430_nooperands
+  PARAMS ((struct msp430_opcode_s *, bfd_vma, unsigned short, char *, int *));
+int msp430_singleoperand
+  PARAMS ((disassemble_info *, struct msp430_opcode_s *, bfd_vma, unsigned short,
+          char *, char *, int *));
+int msp430_doubleoperand
+  PARAMS ((disassemble_info *, struct msp430_opcode_s *, bfd_vma, unsigned short,
+          char *, char *, char *, char *, int *));
+int msp430_branchinstr
+  PARAMS ((disassemble_info *, struct msp430_opcode_s *, bfd_vma, unsigned short,
+          char *, char *, int *));
+
+#define PS(x)   (0xffff & (x))
+
+static unsigned short
+msp430dis_opcode (addr, info)
+     bfd_vma addr;
+     disassemble_info *info;
+{
+  bfd_byte buffer[2];
+  int status;
+
+  status = info->read_memory_func (addr, buffer, 2, info);
+  if (status != 0)
+    {
+      info->memory_error_func (status, addr, info);
+      return -1;
+    }
+  return bfd_getl16 (buffer);
+}
+
+int
+print_insn_msp430 (addr, info)
+     bfd_vma addr;
+     disassemble_info *info;
+{
+  void *stream = info->stream;
+  fprintf_ftype prin = info->fprintf_func;
+  struct msp430_opcode_s *opcode;
+  char op1[32], op2[32], comm1[64], comm2[64];
+  int cmd_len = 0;
+  unsigned short insn;
+  int cycles = 0;
+  char *bc = "";
+  char dinfo[32];              /* Debug purposes.  */
+
+  insn = msp430dis_opcode (addr, info);
+  sprintf (dinfo, "0x%04x", insn);
+
+  if (((int) addr & 0xffff) > 0xffdf)
+    {
+      (*prin) (stream, "interrupt service routine at 0x%04x", 0xffff & insn);
+      return 2;
+    }
+
+  *comm1 = 0;
+  *comm2 = 0;
+
+  for (opcode = msp430_opcodes; opcode->name; opcode++)
+    {
+      if ((insn & opcode->bin_mask) == opcode->bin_opcode
+         && opcode->bin_opcode != 0x9300)
+       {
+         *op1 = 0;
+         *op2 = 0;
+         *comm1 = 0;
+         *comm2 = 0;
+
+         /* r0 as destination. Ad should be zero.  */
+         if (opcode->insn_opnumb == 3 && (insn & 0x000f) == 0
+             && (0x0080 & insn) == 0)
+           {
+             cmd_len =
+               msp430_branchinstr (info, opcode, addr, insn, op1, comm1,
+                                   &cycles);
+             if (cmd_len)
+               break;
+           }
+
+         switch (opcode->insn_opnumb)
+           {
+           case 0:
+             cmd_len = msp430_nooperands (opcode, addr, insn, comm1, &cycles);
+             break;
+           case 2:
+             cmd_len =
+               msp430_doubleoperand (info, opcode, addr, insn, op1, op2,
+                                     comm1, comm2, &cycles);
+             if (insn & BYTE_OPERATION)
+               bc = ".b";
+             break;
+           case 1:
+             cmd_len =
+               msp430_singleoperand (info, opcode, addr, insn, op1, comm1,
+                                     &cycles);
+             if (insn & BYTE_OPERATION && opcode->fmt != 3)
+               bc = ".b";
+             break;
+           default:
+             break;
+           }
+       }
+
+      if (cmd_len)
+       break;
+    }
+
+  dinfo[5] = 0;
+
+  if (cmd_len < 1)
+    {
+      /* Unknown opcode, or invalid combination of operands.  */
+      (*prin) (stream, ".word  0x%04x; ????", PS (insn));
+      return 2;
+    }
+
+  (*prin) (stream, "%s%s", opcode->name, bc);
+
+  if (*op1)
+    (*prin) (stream, "\t%s", op1);
+  if (*op2)
+    (*prin) (stream, ",");
+
+  if (strlen (op1) < 7)
+    (*prin) (stream, "\t");
+  if (!strlen (op1))
+    (*prin) (stream, "\t");
+
+  if (*op2)
+    (*prin) (stream, "%s", op2);
+  if (strlen (op2) < 8)
+    (*prin) (stream, "\t");
+
+  if (*comm1 || *comm2)
+    (*prin) (stream, ";");
+  else if (cycles)
+    {
+      if (*op2)
+       (*prin) (stream, ";");
+      else
+       {
+         if (strlen (op1) < 7)
+           (*prin) (stream, ";");
+         else
+           (*prin) (stream, "\t;");
+       }
+    }
+  if (*comm1)
+    (*prin) (stream, "%s", comm1);
+  if (*comm1 && *comm2)
+    (*prin) (stream, ",");
+  if (*comm2)
+    (*prin) (stream, " %s", comm2);
+  return cmd_len;
+}
+
+int
+msp430_nooperands (opcode, addr, insn, comm, cycles)
+     struct msp430_opcode_s *opcode;
+     bfd_vma addr ATTRIBUTE_UNUSED;
+     unsigned short insn ATTRIBUTE_UNUSED;
+     char *comm;
+     int *cycles;
+{
+  /* Pop with constant.  */
+  if (insn == 0x43b2)
+    return 0;
+  if (insn == opcode->bin_opcode)
+    return 2;
+
+  if (opcode->fmt == 0)
+    {
+      if ((insn & 0x0f00) != 3 || (insn & 0x0f00) != 2)
+       return 0;
+
+      strcpy (comm, "emulated...");
+      *cycles = 1;
+    }
+  else
+    {
+      strcpy (comm, "return from interupt");
+      *cycles = 5;
+    }
+
+  return 2;
+}
+
+
+int
+msp430_singleoperand (info, opcode, addr, insn, op, comm, cycles)
+     disassemble_info *info;
+     struct msp430_opcode_s *opcode;
+     bfd_vma addr;
+     unsigned short insn;
+     char *op;
+     char *comm;
+     int *cycles;
+{
+  int regs = 0, regd = 0;
+  int ad = 0, as = 0;
+  int where = 0;
+  int cmd_len = 2;
+  short dst = 0;
+
+  regd = insn & 0x0f;
+  regs = (insn & 0x0f00) >> 8;
+  as = (insn & 0x0030) >> 4;
+  ad = (insn & 0x0080) >> 7;
+
+  switch (opcode->fmt)
+    {
+    case 0:                    /* Emulated work with dst register.  */
+      if (regs != 2 && regs != 3 && regs != 1)
+       return 0;
+
+      /* Check if not clr insn.  */
+      if (opcode->bin_opcode == 0x4300 && (ad || as))
+       return 0;
+
+      /* Check if really inc, incd insns.  */
+      if ((opcode->bin_opcode & 0xff00) == 0x5300 && as == 3)
+       return 0;
+
+      if (ad == 0)
+       {
+         *cycles = 1;
+
+         /* Register.  */
+         if (regd == 0)
+           {
+             *cycles += 1;
+             sprintf (op, "r0");
+           }
+         else if (regd == 1)
+           sprintf (op, "r1");
+
+         else if (regd == 2)
+           sprintf (op, "r2");
+
+         else
+           sprintf (op, "r%d", regd);
+       }
+      else                     /* ad == 1 msp430dis_opcode.  */
+       {
+         if (regd == 0)
+           {
+             /* PC relative.  */
+             dst = msp430dis_opcode (addr + 2, info);
+             cmd_len += 2;
+             *cycles = 4;
+             sprintf (op, "0x%04x", dst);
+             sprintf (comm, "PC rel. abs addr 0x%04x",
+                      PS ((short) (addr + 2) + dst));
+           }
+         else if (regd == 2)
+           {
+             /* Absolute.  */
+             dst = msp430dis_opcode (addr + 2, info);
+             cmd_len += 2;
+             *cycles = 4;
+             sprintf (op, "&0x%04x", PS (dst));
+           }
+         else
+           {
+             dst = msp430dis_opcode (addr + 2, info);
+             cmd_len += 2;
+             *cycles = 4;
+             sprintf (op, "%d(r%d)", dst, regd);
+           }
+       }
+      break;
+
+    case 2:    /* rrc, push, call, swpb, rra, sxt, push, call, reti etc...  */
+
+      if (as == 0)
+       {
+         if (regd == 3)
+           {
+             /* Constsnts.  */
+             sprintf (op, "#0");
+             sprintf (comm, "r3 As==00");
+           }
+         else
+           {
+             /* Register.  */
+             sprintf (op, "r%d", regd);
+           }
+         *cycles = 1;
+       }
+      else if (as == 2)
+       {
+         *cycles = 1;
+         if (regd == 2)
+           {
+             sprintf (op, "#4");
+             sprintf (comm, "r2 As==10");
+           }
+         else if (regd == 3)
+           {
+             sprintf (op, "#2");
+             sprintf (comm, "r3 As==10");
+           }
+         else
+           {
+             *cycles = 3;
+             /* Indexed register mode @Rn.  */
+             sprintf (op, "@r%d", regd);
+           }
+       }
+      else if (as == 3)
+       {
+         *cycles = 1;
+         if (regd == 2)
+           {
+             sprintf (op, "#8");
+             sprintf (comm, "r2 As==11");
+           }
+         else if (regd == 3)
+           {
+             sprintf (op, "#-1");
+             sprintf (comm, "r3 As==11");
+           }
+         else if (regd == 0)
+           {
+             *cycles = 3;
+             /* absolute. @pc+ */
+             dst = msp430dis_opcode (addr + 2, info);
+             cmd_len += 2;
+             sprintf (op, "#%d", dst);
+             sprintf (comm, "#0x%04x", PS (dst));
+           }
+         else
+           {
+             *cycles = 3;
+             sprintf (op, "@r%d+", regd);
+           }
+       }
+      else if (as == 1)
+       {
+         *cycles = 4;
+         if (regd == 0)
+           {
+             /* PC relative.  */
+             dst = msp430dis_opcode (addr + 2, info);
+             cmd_len += 2;
+             sprintf (op, "0x%04x", PS (dst));
+             sprintf (comm, "PC rel. 0x%04x",
+                      PS ((short) addr + 2 + dst));
+           }
+         else if (regd == 2)
+           {
+             /* Absolute.  */
+             dst = msp430dis_opcode (addr + 2, info);
+             cmd_len += 2;
+             sprintf (op, "&0x%04x", PS (dst));
+           }
+         else if (regd == 3)
+           {
+             *cycles = 1;
+             sprintf (op, "#1");
+             sprintf (comm, "r3 As==01");
+           }
+         else
+           {
+             /* Indexd.  */
+             dst = msp430dis_opcode (addr + 2, info);
+             cmd_len += 2;
+             sprintf (op, "%d(r%d)", dst, regd);
+           }
+       }
+      break;
+
+    case 3:                    /* Jumps.  */
+      where = insn & 0x03ff;
+      if (where & 0x200)
+       where |= ~0x03ff;
+      if (where > 512 || where < -511)
+       return 0;
+
+      where *= 2;
+      sprintf (op, "$%+-8d", where + 2);
+      sprintf (comm, "abs 0x%x", PS ((short) (addr) + 2 + where));
+      *cycles = 2;
+      return 2;
+      break;
+    default:
+      cmd_len = 0;
+    }
+
+  return cmd_len;
+}
+
+int
+msp430_doubleoperand (info, opcode, addr, insn, op1, op2, comm1, comm2, cycles)
+     disassemble_info *info;
+     struct msp430_opcode_s *opcode;
+     bfd_vma addr;
+     unsigned short insn;
+     char *op1, *op2;
+     char *comm1, *comm2;
+     int *cycles;
+{
+  int regs = 0, regd = 0;
+  int ad = 0, as = 0;
+  int cmd_len = 2;
+  short dst = 0;
+
+  regd = insn & 0x0f;
+  regs = (insn & 0x0f00) >> 8;
+  as = (insn & 0x0030) >> 4;
+  ad = (insn & 0x0080) >> 7;
+
+  if (opcode->fmt == 0)
+    {
+      /* Special case: rla and rlc are the only 2 emulated instructions that
+        fall into two operand instructions.  */
+      /* With dst, there are only:
+        Rm             Register,
+         x(Rm)         Indexed,
+         0xXXXX        Relative,
+         &0xXXXX       Absolute 
+         emulated_ins   dst
+         basic_ins      dst, dst.  */
+
+      if (regd != regs || as != ad)
+       return 0;               /* May be 'data' section.  */
+
+      if (ad == 0)
+       {
+         /* Register mode.  */
+         if (regd == 3)
+           {
+             strcpy (comm1, "Illegal as emulation instr");
+             return -1;
+           }
+
+         sprintf (op1, "r%d", regd);
+         *cycles = 1;
+       }
+      else                     /* ad == 1 */
+       {
+         if (regd == 0)
+           {
+             /* PC relative, Symbolic.  */
+             dst = msp430dis_opcode (addr + 2, info);
+             cmd_len += 4;
+             *cycles = 6;
+             sprintf (op1, "0x%04x", PS (dst));
+             sprintf (comm1, "PC rel. 0x%04x",
+                      PS ((short) addr + 2 + dst));
+
+           }
+         else if (regd == 2)
+           {
+             /* Absolute.  */
+             dst = msp430dis_opcode (addr + 2, info);
+             cmd_len += 4;
+             *cycles = 6;
+             sprintf (op1, "&0x%04x", PS (dst));
+           }
+         else
+           {
+             /* Indexed.  */
+             dst = msp430dis_opcode (addr + 2, info);
+             cmd_len += 4;
+             *cycles = 6;
+             sprintf (op1, "%d(r%d)", dst, regd);
+           }
+       }
+
+      *op2 = 0;
+      *comm2 = 0;
+      return cmd_len;
+    }
+
+  /* Two operands exactly.  */
+  if (ad == 0 && regd == 3)
+    {
+      /* R2/R3 are illegal as dest: may be data section.  */
+      strcpy (comm1, "Illegal as 2-op instr");
+      return -1;
+    }
+
+  /* Source.  */
+  if (as == 0)
+    {
+      *cycles = 1;
+      if (regs == 3)
+       {
+         /* Constsnts.  */
+         sprintf (op1, "#0");
+         sprintf (comm1, "r3 As==00");
+       }
+      else
+       {
+         /* Register.  */
+         sprintf (op1, "r%d", regs);
+       }
+    }
+  else if (as == 2)
+    {
+      *cycles = 1;
+
+      if (regs == 2)
+       {
+         sprintf (op1, "#4");
+         sprintf (comm1, "r2 As==10");
+       }
+      else if (regs == 3)
+       {
+         sprintf (op1, "#2");
+         sprintf (comm1, "r3 As==10");
+       }
+      else
+       {
+         *cycles = 2;
+
+         /* Indexed register mode @Rn.  */
+         sprintf (op1, "@r%d", regs);
+       }
+      if (!regs)
+       *cycles = 3;
+    }
+  else if (as == 3)
+    {
+      if (regs == 2)
+       {
+         sprintf (op1, "#8");
+         sprintf (comm1, "r2 As==11");
+         *cycles = 1;
+       }
+      else if (regs == 3)
+       {
+         sprintf (op1, "#-1");
+         sprintf (comm1, "r3 As==11");
+         *cycles = 1;
+       }
+      else if (regs == 0)
+       {
+         *cycles = 3;
+         /* Absolute. @pc+  */
+         dst = msp430dis_opcode (addr + 2, info);
+         cmd_len += 2;
+         sprintf (op1, "#%d", dst);
+         sprintf (comm1, "#0x%04x", PS (dst));
+       }
+      else
+       {
+         *cycles = 2;
+         sprintf (op1, "@r%d+", regs);
+       }
+    }
+  else if (as == 1)
+    {
+      if (regs == 0)
+       {
+         *cycles = 4;
+         /* PC relative.  */
+         dst = msp430dis_opcode (addr + 2, info);
+         cmd_len += 2;
+         sprintf (op1, "0x%04x", PS (dst));
+         sprintf (comm1, "PC rel. 0x%04x",
+                  PS ((short) addr + 2 + dst));
+       }
+      else if (regs == 2)
+       {
+         *cycles = 2;
+         /* Absolute.  */
+         dst = msp430dis_opcode (addr + 2, info);
+         cmd_len += 2;
+         sprintf (op1, "&0x%04x", PS (dst));
+         sprintf (comm1, "0x%04x", PS (dst));
+       }
+      else if (regs == 3)
+       {
+         *cycles = 1;
+         sprintf (op1, "#1");
+         sprintf (comm1, "r3 As==01");
+       }
+      else
+       {
+         *cycles = 3;
+         /* Indexed.  */
+         dst = msp430dis_opcode (addr + 2, info);
+         cmd_len += 2;
+         sprintf (op1, "%d(r%d)", dst, regs);
+       }
+    }
+
+  /* Destination. Special care needed on addr + XXXX.  */
+
+  if (ad == 0)
+    {
+      /* Register.  */
+      if (regd == 0)
+       {
+         *cycles += 1;
+         sprintf (op2, "r0");
+       }
+      else if (regd == 1)
+       sprintf (op2, "r1");
+
+      else if (regd == 2)
+       sprintf (op2, "r2");
+
+      else
+       sprintf (op2, "r%d", regd);
+    }
+  else                         /* ad == 1.  */
+    {
+      * cycles += 3;
+
+      if (regd == 0)
+       {
+         /* PC relative.  */
+         *cycles += 1;
+         dst = msp430dis_opcode (addr + cmd_len, info);
+         sprintf (op2, "0x%04x", PS (dst));
+         sprintf (comm2, "PC rel. 0x%04x",
+                  PS ((short) addr + cmd_len + dst));
+         cmd_len += 2;
+       }
+      else if (regd == 2)
+       {
+         /* Absolute.  */
+         dst = msp430dis_opcode (addr + cmd_len, info);
+         cmd_len += 2;
+         sprintf (op2, "&0x%04x", PS (dst));
+       }
+      else
+       {
+         dst = msp430dis_opcode (addr + cmd_len, info);
+         cmd_len += 2;
+         sprintf (op2, "%d(r%d)", dst, regd);
+       }
+    }
+
+  return cmd_len;
+}
+
+
+int
+msp430_branchinstr (info, opcode, addr, insn, op1, comm1, cycles)
+     disassemble_info *info;
+     struct msp430_opcode_s *opcode ATTRIBUTE_UNUSED;
+     bfd_vma addr ATTRIBUTE_UNUSED;
+     unsigned short insn;
+     char *op1;
+     char *comm1;
+     int *cycles;
+{
+  int regs = 0, regd = 0;
+  int ad = 0, as = 0;
+  int cmd_len = 2;
+  short dst = 0;
+
+  regd = insn & 0x0f;
+  regs = (insn & 0x0f00) >> 8;
+  as = (insn & 0x0030) >> 4;
+  ad = (insn & 0x0080) >> 7;
+
+  if (regd != 0)       /* Destination register is not a PC.  */
+    return 0;
+
+  /* dst is a source register.  */
+  if (as == 0)
+    {
+      /* Constants.  */
+      if (regs == 3)
+       {
+         *cycles = 1;
+         sprintf (op1, "#0");
+         sprintf (comm1, "r3 As==00");
+       }
+      else
+       {
+         /* Register.  */
+         *cycles = 1;
+         sprintf (op1, "r%d", regs);
+       }
+    }
+  else if (as == 2)
+    {
+      if (regs == 2)
+       {
+         *cycles = 2;
+         sprintf (op1, "#4");
+         sprintf (comm1, "r2 As==10");
+       }
+      else if (regs == 3)
+       {
+         *cycles = 1;
+         sprintf (op1, "#2");
+         sprintf (comm1, "r3 As==10");
+       }
+      else
+       {
+         /* Indexed register mode @Rn.  */
+         *cycles = 2;
+         sprintf (op1, "@r%d", regs);
+       }
+    }
+  else if (as == 3)
+    {
+      if (regs == 2)
+       {
+         *cycles = 1;
+         sprintf (op1, "#8");
+         sprintf (comm1, "r2 As==11");
+       }
+      else if (regs == 3)
+       {
+         *cycles = 1;
+         sprintf (op1, "#-1");
+         sprintf (comm1, "r3 As==11");
+       }
+      else if (regs == 0)
+       {
+         /* Absolute. @pc+  */
+         *cycles = 3;
+         dst = msp430dis_opcode (addr + 2, info);
+         cmd_len += 2;
+         sprintf (op1, "#0x%04x", PS (dst));
+       }
+      else
+       {
+         *cycles = 2;
+         sprintf (op1, "@r%d+", regs);
+       }
+    }
+  else if (as == 1)
+    {
+      * cycles = 3;
+
+      if (regs == 0)
+       {
+         /* PC relative.  */
+         dst = msp430dis_opcode (addr + 2, info);
+         cmd_len += 2;
+         (*cycles)++;
+         sprintf (op1, "0x%04x", PS (dst));
+         sprintf (comm1, "PC rel. 0x%04x",
+                  PS ((short) addr + 2 + dst));
+       }
+      else if (regs == 2)
+       {
+         /* Absolute.  */
+         dst = msp430dis_opcode (addr + 2, info);
+         cmd_len += 2;
+         sprintf (op1, "&0x%04x", PS (dst));
+       }
+      else if (regs == 3)
+       {
+         (*cycles)--;
+         sprintf (op1, "#1");
+         sprintf (comm1, "r3 As==01");
+       }
+      else
+       {
+         /* Indexd.  */
+         dst = msp430dis_opcode (addr + 2, info);
+         cmd_len += 2;
+         sprintf (op1, "%d(r%d)", dst, regs);
+       }
+    }
+
+  return cmd_len;
+}