This commit was manufactured by cvs2svn to create tag 'x86_64versiong3'.

Sprout from binutils-2_11-branch 2001-02-04 13:53:50 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'binutils-'
Cherrypick from master 2001-02-28 12:49:40 UTC Andreas Jaeger <aj@suse.de> '2001-02-28  Andreas Jaeger  <aj@suse.de>, Bo Thorsen  <bo@suse.de>':
    COPYING.NEWLIB
    ChangeLog
    bfd/ChangeLog
    bfd/Makefile.am
    bfd/Makefile.in
    bfd/aout-target.h
    bfd/aoutx.h
    bfd/archures.c
    bfd/bfd-in2.h
    bfd/coff-ia64.c
    bfd/coffcode.h
    bfd/coffgen.c
    bfd/config.bfd
    bfd/configure
    bfd/configure.host
    bfd/configure.in
    bfd/cpu-ia64-opc.c
    bfd/cpu-pdp11.c
    bfd/cpu-s390.c
    bfd/doc/Makefile.in
    bfd/ecoff.c
    bfd/efi-app-ia64.c
    bfd/elf-m10200.c
    bfd/elf-m10300.c
    bfd/elf.c
    bfd/elf32-arm.h
    bfd/elf32-hppa.c
    bfd/elf32-i386.c
    bfd/elf32-mips.c
    bfd/elf32-s390.c
    bfd/elf32-sparc.c
    bfd/elf32-v850.c
    bfd/elf64-alpha.c
    bfd/elf64-hppa.c
    bfd/elf64-mips.c
    bfd/elf64-s390.c
    bfd/elf64-sparc.c
    bfd/elf64-x86-64.c
    bfd/elflink.h
    bfd/elfxx-ia64.c
    bfd/irix-core.c
    bfd/libaout.h
    bfd/libbfd-in.h
    bfd/libbfd.c
    bfd/libbfd.h
    bfd/libcoff-in.h
    bfd/libcoff.h
    bfd/libpei.h
    bfd/pdp11.c
    bfd/peXXigen.c
    bfd/peicode.h
    bfd/po/POTFILES.in
    bfd/po/bfd.pot
    bfd/reloc.c
    bfd/rs6000-core.c
    bfd/targets.c
    bfd/vms-misc.c
    bfd/vms.c
    binutils/ChangeLog
    binutils/MAINTAINERS
    binutils/Makefile.am
    binutils/Makefile.in
    binutils/NEWS
    binutils/acinclude.m4
    binutils/aclocal.m4
    binutils/binutils.texi
    binutils/bucomm.c
    binutils/configure
    binutils/configure.in
    binutils/ieee.c
    binutils/nm.c
    binutils/objdump.c
    binutils/po/binutils.pot
    binutils/readelf.c
    binutils/testsuite/ChangeLog
    binutils/testsuite/binutils-all/objcopy.exp
    binutils/testsuite/binutils-all/readelf.wi
    binutils/testsuite/binutils-all/testprog.c
    binutils/testsuite/config/default.exp
    binutils/unwind-ia64.c
    binutils/unwind-ia64.h
    config.guess
    config.sub
    config/ChangeLog
    config/mh-s390pic
    config/mt-s390pic
    configure
    configure.in
    gas/ChangeLog
    gas/Makefile.am
    gas/Makefile.in
    gas/cgen.c
    gas/config.in
    gas/config/obj-coff.c
    gas/config/tc-arm.c
    gas/config/tc-fr30.c
    gas/config/tc-hppa.c
    gas/config/tc-i386.c
    gas/config/tc-i386.h
    gas/config/tc-ia64.c
    gas/config/tc-ia64.h
    gas/config/tc-m32r.c
    gas/config/tc-m32r.h
    gas/config/tc-m68hc11.c
    gas/config/tc-m68hc11.h
    gas/config/tc-mips.c
    gas/config/tc-mips.h
    gas/config/tc-mn10300.c
    gas/config/tc-pdp11.c
    gas/config/tc-pdp11.h
    gas/config/tc-s390.c
    gas/config/tc-s390.h
    gas/config/tc-sh.c
    gas/config/tc-tic54x.h
    gas/config/te-ia64aix.h
    gas/configure
    gas/configure.in
    gas/doc/Makefile.am
    gas/doc/Makefile.in
    gas/doc/all.texi
    gas/doc/as.texinfo
    gas/doc/c-i386.texi
    gas/doc/c-pdp11.texi
    gas/doc/internals.texi
    gas/dwarf2dbg.c
    gas/expr.c
    gas/po/POTFILES.in
    gas/po/gas.pot
    gas/symbols.c
    gas/testsuite/ChangeLog
    gas/testsuite/gas/ia64/opc-a-err.l
    gas/testsuite/gas/ia64/opc-a.d
    gas/testsuite/gas/ia64/opc-a.pl
    gas/testsuite/gas/ia64/opc-a.s
    gas/testsuite/gas/m68hc11/all.exp
    gas/testsuite/gas/mips/mips.exp
    gas/testsuite/gas/mips/mips32.d
    gas/testsuite/gas/mips/mips64.d
    gas/testsuite/gas/mri/mri.exp
    gas/write.c
    gas/write.h
    gprof/ChangeLog
    gprof/Makefile.am
    gprof/Makefile.in
    gprof/basic_blocks.c
    gprof/configure
    gprof/configure.in
    gprof/gconfig.in
    gprof/po/gprof.pot
    include/ChangeLog
    include/coff/ChangeLog
    include/coff/pe.h
    include/demangle.h
    include/dis-asm.h
    include/elf/ChangeLog
    include/elf/arm.h
    include/elf/common.h
    include/elf/s390.h
    include/opcode/ChangeLog
    include/opcode/cgen.h
    include/opcode/i386.h
    include/opcode/mips.h
    include/opcode/pdp11.h
    include/opcode/s390.h
    ld/ChangeLog
    ld/Makefile.am
    ld/Makefile.in
    ld/configure
    ld/configure.host
    ld/configure.in
    ld/configure.tgt
    ld/emulparams/armelf_linux.sh
    ld/emulparams/elf64_aix.sh
    ld/emulparams/elf64_ia64.sh
    ld/emulparams/elf64_s390.sh
    ld/emulparams/elf_s390.sh
    ld/emulparams/pdp11.sh
    ld/ld.1
    ld/ldexp.c
    ld/ldexp.h
    ld/ldfile.c
    ld/ldlang.c
    ld/mpw-elfmips.c
    ld/po/ld.pot
    ld/testsuite/ChangeLog
    ld/testsuite/ld-bootstrap/bootstrap.exp
    ld/testsuite/ld-checks/checks.exp
    ld/testsuite/ld-elfvers/vers.exp
    ld/testsuite/ld-elfvsb/elfvsb.exp
    ld/testsuite/ld-selective/selective.exp
    ld/testsuite/ld-shared/shared.exp
    ld/testsuite/ld-srec/srec.exp
    libiberty/COPYING.LIB
    libiberty/ChangeLog
    libiberty/cp-demangle.c
    libiberty/cplus-dem.c
    libiberty/testsuite/demangle-expected
    ltcf-c.sh
    ltcf-cxx.sh
    ltcf-gcj.sh
    ltconfig
    opcodes/ChangeLog
    opcodes/Makefile.am
    opcodes/Makefile.in
    opcodes/cgen-opc.c
    opcodes/configure
    opcodes/configure.in
    opcodes/disassemble.c
    opcodes/fr30-desc.h
    opcodes/i386-dis.c
    opcodes/ia64-asmtab.c
    opcodes/ia64-ic.tbl
    opcodes/ia64-opc-a.c
    opcodes/ia64-opc-d.c
    opcodes/m32r-desc.h
    opcodes/mips-dis.c
    opcodes/pdp11-dis.c
    opcodes/pdp11-opc.c
    opcodes/po/POTFILES.in
    opcodes/po/opcodes.pot
    opcodes/s390-dis.c
    opcodes/s390-mkopc.c
    opcodes/s390-opc.c
    opcodes/s390-opc.txt
Delete:
    bfd/peigen.c
    ld/emulparams/armelf_linux26.sh
diff --git a/COPYING.NEWLIB b/COPYING.NEWLIB
index 30e1c9e..b7ebe11 100644
--- a/COPYING.NEWLIB
+++ b/COPYING.NEWLIB
@@ -20,10 +20,11 @@
 
 (2) DJ Delorie
 
-Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+Copyright (C) 1991 DJ Delorie
 
 This file is distributed under the terms listed in the document
-"copying.dj", available from DJ Delorie at the address above.
+"copying.dj".
+
 A copy of "copying.dj" should accompany this file; if not, a copy
 should be available from where this file was obtained.  This file
 may not be distributed without a verbatim copy of "copying.dj".
diff --git a/ChangeLog b/ChangeLog
index 55fe9ba..eaaf02d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,51 @@
+2001-02-22  Jeff Johnston <jjohnstn@redhat.com>
+
+	* COPYING.NEWLIB: Remove DJ Delorie's address because it is no
+	longer valid.
+
+2001-02-16  Nick Clifton  <nickc@redhat.com>
+
+	* configure.in (noconfigdirs): Allow configuration of texinfo
+	for Cygwin hosts.
+
+2001-02-09  Martin Schwidefsky  <schwidefsky@de.ibm.com>
+
+	* config.guess: Add linux target for S/390.
+	* config.sub: Likewise.
+	* configure.in: Likewise.
+
+2001-02-06  Ben Elliston  <bje@redhat.com>
+
+	* configure: Output host type to stdout, not stderr.
+
+2001-02-04  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
+
+	* config.guess: Import from subversions.gnu.org (revision 1.181).
+	* config.sub: Import from subversions.gnu.org (revision 1.199).
+
 2001-01-30  Alan Modra  <alan@linuxcare.com.au>
 
 	* config.guess: Handle hppa64-linux systems.
 
+2001-01-27  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
+
+	* ltcf-cxx.sh (ac_cv_prog_cc_pic_works, ac_cv_prog_cc_static_works):
+	Don't unset, it's non-portable and no longer necessary, set to empty
+	instead.
+
+2001-01-27  Michael Sokolov  <msokolov@ivan.Harhan.ORG>,  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>
+
+	* ltconfig: Shell portability fix for the tagname validity check.
+
+2001-01-27  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
+
+	* ltcf-cxx.sh: Use parentheses around eval $ac_compile.
+
+2001-01-27  Alexandre Oliva  <aoliva@redhat.com>
+
+	* ltcf-c.sh (ld_shlibs) [aix5*]: Disable on unknown CPU types.
+	* ltcf-cxx.sh, ltcf-gcj.sh: Likewise.
+
 2001-01-24  Alexandre Oliva  <aoliva@redhat.com>
 
 	* ltmain.sh (TAG disable-shared, TAG disable-static): Make sure we
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 6330a85..60bffa0 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,434 @@
+2001-02-28  Andreas Jaeger  <aj@suse.de>
+
+	* elf64-x86-64.c (elf64_x86_64_relocate_section): Add relocation
+	to addend.
+
+2001-02-28  Philip Blundell  <pb@futuretv.com>
+
+	* elf32-arm.h: Update mentions of renamed EF_xx constants.
+	(elf32_arm_print_private_bfd_data): Handle ARM EABI version 2.
+
+2001-02-27  H.J. Lu  <hjl@gnu.org>
+
+	* aoutx.h (NAME(aout,bfd_free_cached_info)): Return true if
+	abfd->tdata.aout_data == NULL.
+
+2001-02-27  Alan Modra  <alan@linuxcare.com.au>
+
+	* elf32-hppa.c: Correct field selector in stub comments.
+	(clobber_millicode_symbols): Formatting fix.
+
+	* configure.in: Bump version to 2.11.90.
+	* configure: Regenerate.
+	* Makefile.am (CFILES): Rename to SOURCE_CFILES.
+	(CFILES): $SOURCE_CFILES + generated C files.
+	(POTFILES): Include $HFILES not $SOURCE_HFILES.
+	Run "make dep-am"
+	* Makefile.in: Regenerate.
+	* doc/Makefile.in: This too.
+
+2001-02-26  Timothy Wall  <twall@cygnus.com>
+
+	* elfxx-ia64.c (elfNN_ia64_aix_add_symbol_hook): Remove obsolete
+	comments.
+
+2001-02-26  Nick Clifton <nickc@redhat.com>
+
+	* coffcode.h (styp_to_sec_flags) [COFF_WITH_PE version]: Tidy
+	up, replacing multiple if statements with a switch.
+        (handle_COMDAT): New function.
+
+2001-02-26  H.J. Lu  <hjl@gnu.org>
+
+	* coffcode.h (styp_to_sec_flags) [COFF_WITH_PE version]: Issue
+	a warning for section flags we do not handle instead of
+	aborting.
+
+2001-02-26  Andreas Jaeger  <aj@suse.de>
+
+	* elf64-x86-64.c (x86_64_elf_howto_table): Fix order of entries.
+
+2001-02-22  Timothy Wall  <twall@cygnus.com>
+
+	* config.bfd (targ_cpu): Add vectors for ia64-*-aix* (aka Monterey).
+	* configure.in: Add objects for elf64_ia64_aix vectors.
+	* configure: Regenerated.
+	* configure.host: Recognize ia64-*-aix*.
+	* elfxx-ia64.c: Add hooks for ELF64 on AIX5.  Define new vectors
+	for AIX.  AIX5 requires most relocations to be dynamic (*all*
+	binaries are somewhat similar to shared libraries).
+	* targets.c: Add elf64_ia64_aix vectors.
+
+2001-02-21  David Mosberger  <davidm@hpl.hp.com>
+
+	* cpu-ia64-opc.c (elf64_ia64_operands}: Fix typo: error string for
+	C8 said "1" instead of "8".  Clarify error string for IMM22:
+	"signed integer" instead of just "integer".
+
+2001-02-20  Andreas Jaeger  <aj@suse.de>
+
+	* elf64-x86-64.c (elf64_x86_64_finish_dynamic_symbol): Don't make
+	PLT entries that could serve as a definition for a weak symbol.
+
+2001-02-19  Jakub Jelinek  <jakub@redhat.com>
+
+	* elf32-sparc.c (elf32_sparc_finish_dynamic_symbol): Don't make PLT
+	entries that could serve as a definition for a weak symbol.
+	* elf64-sparc.c (sparc64_elf_finish_dynamic_symbol): Likewise.
+
+2001-02-18  David O'Brien  <obrien@FreeBSD>
+
+	* configure.in: Recognize FreeBSD/arm, FreeBSD/PowerPC, and treat
+	FreeBSD/i386-CURRENT differently until I can figure out the needed
+	corefile changes.
+	* configure: Regenerate.
+	* config.bfd: Recognize FreeBSD/x86-64, FreeBSD/ia64, FreeBSD/arm,
+	FreeBSD/PowerPC, and FreeBSD/sparc64.
+
+2001-02-18  lars brinkhoff  <lars@nocrew.org>
+
+	* Makefile.am: Add PDP-11 a.out target.
+	* config.bfd: Likewise.
+	* configure.in: Likewise.
+	* targets.c: Likewise.
+	* archures.c: Likewise.
+	* bfd-in2.h: Likewise.  Add PDP-11 relocations.
+	* libbfd.h: Add PDP-11 relocations.
+	* reloc.c: Likewise.
+	* cpu-pdp11.c: New file.
+	* pdp11.c: New file.
+
+	* libaout.h (GET_WORD) [ARCH_SIZE==16]: Define.
+	(GET_SWORD) [ARCH_SIZE==16]: Likewise.
+	(GET_SWORD) [ARCH_SIZE==16]: Likewise.
+	(PUT_WORD) [ARCH_SIZE==16]: Likewise.
+	(GET_MAGIC): New macro.
+	(PUT_MAGIC): Likewise.
+	* aout-target.h (MY(object_p)): Use GET_MAGIC to read magic word.
+
+2001-02-18  Jim Kingdon  <jkingdon@engr.sgi.com>
+
+	* irix-core.c (irix_core_core_file_p): Set the architecture (GDB
+	multiarch needs it).
+
+2001-02-18  H.J. Lu  <hjl@gnu.org>
+
+	* elflink.h (elf_link_input_bfd): Ignore invalid section symbol
+	index.
+
+2001-02-18  Kazu Hirata  <kazu@hxi.com>
+
+	* vms-misc.c: Fix formatting.
+
+2001-02-16  Kazu Hirata  <kazu@hxi.com>
+
+	* vms.c: Fix formatting.
+
+2001-02-14  H.J. Lu  <hjl@gnu.org>
+
+	* elf.c (elf_find_function): New function.
+	(_bfd_elf_find_nearest_line): Call elf_find_function () to find
+	the file name and function name.
+
+2001-02-14  Nick Clifton  <nickc@redhat.com>
+
+	* ecoff.c (bfd_debug_section): Update to initialise new fields in
+	asection structure.
+
+	* Makefile.am (BFD32_BACKENDS_CFILES): Remove peigen.c
+	(BFD64_BACKENDS): Add pepigen.c
+	Add rules to create peigen.c and pepigen.c from peXXigen.c.
+
+	* Makefile.in: Regenerate.
+	* configure:  Regenerate.
+	* po/POTFILES.in: Regenerate.
+	* po/bfd.pot: Regenerate.
+
+2001-02-14  H.J. Lu  <hjl@gnu.org>
+
+	* libcoff-in.h (pe_tdata): Add members target_subsystem and
+	force_minimum_alignment.
+
+2001-02-14  Bo Thorsen  <bo@suse.de>
+
+	* elf64-x86-64.c: Small formatting fixes and rearrangements of code.
+	(elf64_86_64_size_info): Struct added to fix a problem
+	with the hashtable string entries.
+	(elf64_x86_64_adjust_dynamic_symbol): Add generation of .got.plt.
+	(elf64_x86_64_size_dynamic_sections): A FIXME removed.
+	(elf64_x86_64_size_dynamic_sections): Fix a dynamic entry and
+	remove the FIXME for this.
+	(elf64_x86_64_adjust_dynamic_symbol): Fix check for unneeded .plt
+	section. Also removed the FIXME for it.
+	(x86_64_elf_howto_table): Use bfd_elf_generic_reloc.
+	(ELF_DYNAMIC_INTERPRETER): Fix the name of the dynamic linker.
+	(elf64_x86_64_finish_dynamic_sections): Enable .got.plt writing.
+
+2001-02-13  Richard Henderson  <rth@redhat.com>
+
+	* elfxx-ia64.c (elfNN_ia64_final_link): Set __gp if required
+	and not user provided.
+
+2001-02-13  Kazu Hirata  <kazu@hxi.com>
+
+	* vms.c (vms_print_symbol): Remove unreachable code.
+
+	* rs6000-core.c: Fix formatting.
+
+2001-02-13  David Mosberger  <davidm@hpl.hp.com>
+
+	* peicode.h (coff_swap_filehdr_out) [COFF_IMAGE_WITH_PE]: Define
+	as _bfd_XXi_only_swap_filehdr_out.
+	(pe_mkobject) [PEI_FORCE_MINIMUM_ALIGNMENT]: Set
+	pe->force_minimum_alignment to TRUE.
+	(pe_mkobject) [PEI_TARGET_SUBSYSTEM]: Set pe->target_subsystem to
+	PEI_TARGET_SUBSYSTEM.
+	(pe_print_private_bfd_data): Call
+	_bfd_XX_print_private_bfd_data_common() instead of
+	_bfd_pe_print_private_bfd_data_common().
+	(pe_bfd_copy_private_bfd_data): Call
+	_bfd_XX_bfd_copy_private_bfd_data_common() instead of
+	_bfd_pe_bfd_copy_private_bfd_data_common().
+	(coff_bfd_copy_private_section_data): Define as
+	_bfd_XX_bfd_copy_private_section_data instead of
+	_bfd_pe_bfd_copy_private_section_data.
+	(coff_get_symbol_info): Define as _bfd_XX_get_symbol_info instead
+	of a _bfd_pe_get_symbol_info.
+
+	* peigen.c: Delete.
+
+	* peXXigen.c: Renamed from peigen.c.
+	(COFF_WITH_XX): Define this macro (will get expanded into
+	COFF_WITH_pep or COFF_WITH_pe, depending on whether this is being
+	compiled as peigen.c or pepigen.c.
+	[COFF_WITH_pep]: Include "coff/ia64.h" instead of "coff/i386.h" to
+	define the canonical PEP structures and definitions.
+	(_bfd_XXi_swap_aouthdr_out): If pe->force_minimum_alignment is in
+	effect, enforce minimum file and section alignments.  If
+	extra->Subsystem is IMAGE_SUBSYSTEM_UNKNOWN, set it to
+	pe->target_subsystem (this defaults to IMAGE_SUBSYSTEM_UNKNOWN,
+	so, by default, this is a no-op).
+
+	* libpei.h: Rename COFF_WITH_PEP to COFF_WITH_pep.
+	(_bfd_XX_bfd_copy_private_bfd_data_common): Add macros to map
+	_bfd_XXfoo to _bfd_pepfoo if COFF_WIT_PEP is defined and to
+	_bfd_pefoo if it's not defined.  Use these macros to define
+	coff swap macros.
+
+	* libcoff.h (pe_tdata): Add members target_subsystem and
+	force_minimum_alignment.
+
+	* efi-app-ia64.c (COFF_WITH_pep): Rename COFF_WITH_PEP to
+	COFF_WITH_pep.
+	(PEI_TARGET_SUBSYSTEM): Rename from PEI_DEFAULT_TARGET_SUBSYSTEM.
+
+	* configure.in (bfd_efi_app_ia64_vec): Use pepigen.lo instead of
+	peigen.lo.
+
+	* coff-ia64.c: Rename COFF_WITH_PEP to COFF_WITH_pep.
+	(AOUTSZ): Rename PEP64AOUTSZ and PEP64AOUTHDR to PEPAOUTSZ and
+	PEPAOUTHDR.
+
+	* Makefile.in (BFD64_BACKENDS): Mention pepigen.lo.
+	(BFD64_BACKENDS_CFILES): Mention pepigen.c
+	(peigen.c): Add rule to generate from peXXigen.c.
+	(pepigen.c): Ditto.
+	(pepigen.lo): List dependencies for pepigen.lo.
+
+2001-02-13  Alan Modra  <alan@linuxcare.com.au>
+
+	* elf32-hppa.c (elf32_hppa_set_gp): Handle weak $global$.  If
+	$global$ referenced but not defined, set its value here.
+
+2001-02-09  Bo Thorsen  <bo@suse.de>
+
+	* elf64-x86-64.c (elf64_x86_64_check_relocs): Set .rela.got section
+	alignment to 3.
+	(elf64_x86_64_check_relocs): Write R_X86_64_GOTPCREL GOT entry
+	and relocation.
+	(elf64_x86_64_relocate_section): Fix formatting.
+	(elf64_x86_64_relocate_section): Fix addend for relocation of
+	R_X86_64_(8|16|32|PC8|PC16|PC32).
+
+2001-02-12  Jan Hubicka  <jh@suse.cz>
+
+	* elf64-x86-64.c (x86_64_elf_howto): Fix name of R_X86_64_GOTPCREL.
+
+2001-02-11  H.J. Lu  <hjl@gnu.org>
+
+	* elflink.h (elf_bfd_final_link): Use file_align for SYMTAB
+	alignment.
+
+2001-02-11  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
+
+	* elf32-mips.c (mips_elf_create_dynamic_relocation): Undo patch
+	from 2000-10-13.  Do not add the symbol's value for R_MIPS_REL32
+	relocations against dynsym symbols.
+
+	* elf32-mips.c (elf_mips_howto_table): Fix the comment on
+	the R_MIPS_26 relocation.
+	(mips_elf_calculate_relocation): Use (p + 4) instead of p for
+	the R_MIPS_26 relocation.
+	(mips_elf_perform_relocation): Fix the comment on the R_MIPS16_26
+	relocation.
+	* elf64-mips.c (mips_elf64_howto_table_rel): Fix the comment on
+	the R_MIPS_26 relocation.
+	(mips_elf64_howto_table_rela): Likewise.
+
+	* elf32-mips.c (struct mips_elf_link_hash_entry): Added no_fn_stub
+	member to mark symbols that have non-CALL relocations against
+	them.
+	(mips_elf_link_hash_newfunc): Initialize no_fn_stub.
+	(mips_elf_calculate_relocation): Handle R_MIPS_CALL16 like
+	R_MIPS_GOT16.
+	(_bfd_mips_elf_check_relocs): Set no_fn_stub for a symbol if a
+	non-CALL relocation against it is encountered.
+	(_bfd_mips_elf_copy_indirect_symbol): Merge no_fn_stub as well.
+	(_bfd_mips_elf_adjust_dynamic_symbol): Only create a stub if
+	no_fn_stub is not set.
+
+	* elf32-mips.c (mips_elf_output_extsym): Get the output section
+	information from the real symbol for indirect ones.
+	Check no_fn_stub to find out if a symbol has a function stub
+	indeed.
+
+2001-02-11  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
+
+	* Makefile.am (stamp-lib): ranlib the libbfd.a in the build directory.
+	* Makefile.in: Regenerate.
+
+2001-02-09  David Mosberger  <davidm@hpl.hp.com>
+
+	* elfxx-ia64.c (is_unwind_section_name): New function.  Returns
+	true if section name is an unwind table section name.
+	(elfNN_ia64_additional_program_headers): Count each unwind section
+	separately.
+	(elfNN_ia64_modify_segment_map): Install one unwind program header
+	for each unwind separate section.  Note: normally the linker
+	script merges the unwind sections that go into a single segment,
+	so this still generates at most one unwind program header per
+	segment.
+
+	* elfxx-ia64.c (elfNN_ia64_section_from_shdr): Accept any section
+	name for SHT_IA_64_UNWIND, not just .IA_64.unwind.
+	(elfNN_ia64_fake_sections): Mark sections with names that start
+	with .IA_64.unwind but not with .IA_64.unwind_info as an IA-64
+	unwind section.
+
+	* elfxx-ia64.c (elfNN_ia64_final_write_processing): New function.
+	Use it to make sh_info in unwind section point to the text section
+	it applies to.
+
+2001-02-09  Martin Schwidefsky  <schwidefsky@de.ibm.com>
+
+	* Makefile.am: Add linux target for S/390.
+	* archures.c: Likewise.
+	* bfd-in2.h: Likewise.
+	* config.bfd: Likewise.
+	* configure.in: Likewise.
+	* elf.c: Likewise.
+	* libbfd.h: Likewise.
+	* targets.c: Likewise.
+	* cpu-s390.c: New file.
+	* elf32-s390.c: New file.
+	* elf64-s390.c: New file.
+
+2001-02-09  Nick Clifton  <nickc@redhat.com>
+
+	* peigen.c (_bfd_pe_get_symbol_info): Suppress addition of
+	ImageBase.  This has already been done by coff_swap_hdr_in.
+
+2001-02-09  Jakub Jelinek  <jakub@redhat.com>
+
+	* elf64-sparc.c (sparc64_elf_copy_private_bfd_data): New function.
+
+2001-02-09  Jakub Jelinek  <jakub@redhat.com>
+
+	* elf64-sparc.c (sparc64_elf_check_relocs): Don't trust reloc_count.
+	(sparc64_elf_relocate_section): Likewise.
+
+2001-02-09  Mark Kettenis  <kettenis@gnu.org>
+
+	* elf32-sparc.c (_bfd_sparc_elf_howto_table): Treat R_SPARC_UA32
+	similar to R_SPARC_32.
+	* elf64-sparc.c	(sparc64_elf_howto_table): Likewise.
+
+2001-02-08  H.J. Lu  <hjl@gnu.org>
+
+	* elf32-i386.c (elf_i386_check_relocs): Reserve R_386_PC32
+	relocation entries for weak definitions when building DSO with
+	-Bsymbolic.
+
+2001-02-08  Richard Henderson  <rth@redhat.com>
+
+	* elf64-alpha.c (alpha_elf_dynamic_symbol_p): Respect weakness
+	before visibility.  Locally defined protected symbols are not
+	dynamic.
+
+2001-02-08  Geoffrey Keating  <geoffk@redhat.com>
+
+	* config.bfd: Enable coff64 for rs6000-*.  Patch from
+	<hzoli@austin.ibm.com>.
+
+2001-02-07  Mark Elbrecht  <snowball3@bigfoot.com>
+
+	* coffgen.c (coff_find_nearest_line): If stabs info is successfully
+	found, do not attempt to find dwarf2 info before returning.
+
+2001-02-07  Jakub Jelinek  <jakub@redhat.com>
+
+	* elflink.h (is_global_symbol_definition): Rename to
+	is_global_data_symbol_definition and have it reject function
+	symbols.
+	(elf_link_is_defined_archive_symbol): Use renamed function.
+
+2001-02-07  Todd Vierling  <tv@wasabisystems.com>
+
+	* libbfd-in.h (bfd_target_vector): Change extern array to pointer.
+	* libbfd.h (bfd_target_vector): Likewise.
+	* targets.c (bfd_target_vector): Rename to _bfd_target_vector and
+	make static; create pointer reference named bfd_target_vector.
+	(_bfd_target_vector_entries): Calculate this based on the array
+	typed _bfd_target_vector.
+
+2001-02-06  H.J. Lu  <hjl@gnu.org>
+
+	* elfxx-ia64.c (elfNN_ia64_dynamic_symbol_p): Only hidden and
+	internal symbols are not dynamic.
+	* elf64-alpha.c (alpha_elf_dynamic_symbol_p): Likewise.
+
+2001-02-06  Nick Clifton  <nickc@redhat.com>
+
+	* Makefile.am (BFD64_BACKENDS_CFILES): Remove elf64-ia64.c, so
+	that it will not be pulled into the list of files that make up
+	po/POTFILES.in.
+	* Makefile.in: Regenerate.
+	* po/bfd.pot:  Regenerate.
+
+2001-02-06  H.J. Lu  <hjl@gnu.org>
+
+	* bfd/peicode.h (coff_swap_filehdr_in): Remove the e_magic
+	checking.
+	(pe_bfd_object_p): Rewrite with external_PEI_DOS_hdr and
+	external_PEI_IMAGE_hdr.
+
+2001-02-06  Kazu Hirata  <kazu@hxi.com>
+
+	* elf-m10200.c: Fix formatting.
+
+2001-02-04  Nick Clifton  <nickc@redhat.com>
+
+	* elf32-v850.c (v850_elf_reloc): Do not convert reloc addend to PC
+	rel, it will be handled later on.
+
+2001-02-02  Fred Fish  <fnf@ninemoons.com>
+
+	* Makefile.in: Fix typo.
+
+2001-02-01  Kazu Hirata  <kazu@hxi.com>
+
+	* elf-m10300.c: Fix formatting.
+
 2001-01-30  Alan Modra  <alan@linuxcare.com.au>
 
 	* elf64-hppa.c (elf64_hppa_elf_get_symbol_type): New function.
@@ -1066,7 +1497,7 @@
 	* elf.c (elf_fake_sections): Do not mark the section SHT_NOBITS if
 	is has the SEC_HAS_CONTENTS flag set.
 
-2000-09-28  Örjan Friberg  <orjanf@axis.com>
+2000-09-28  Vrjan Friberg  <orjanf@axis.com>
 	    Hans-Peter Nilsson  <hp@axis.com>
 
 	* aout-cris.c (N_TXTADDR): Define.
@@ -2920,7 +3351,7 @@
 
 	* libhppa.h (HPPA_R_CONSTANT): Cast argument to bfd_signed_vma.
 
-2000-05-03  Martin v. Löwis  <loewis@informatik.hu-berlin.de>
+2000-05-03  Martin v. Lvwis  <loewis@informatik.hu-berlin.de>
 
 	* elflink.h (elf_link_add_object_symbols): Reset dynindx for
 	hidden and internal symbols.
diff --git a/bfd/Makefile.am b/bfd/Makefile.am
index b6741bc..4299e37 100644
--- a/bfd/Makefile.am
+++ b/bfd/Makefile.am
@@ -69,9 +69,11 @@
 	cpu-mcore.lo \
 	cpu-mips.lo \
 	cpu-ns32k.lo \
+	cpu-pdp11.lo \
 	cpu-pj.lo \
 	cpu-powerpc.lo \
 	cpu-rs6000.lo \
+	cpu-s390.lo \
 	cpu-sh.lo \
 	cpu-sparc.lo \
 	cpu-tic30.lo \
@@ -111,9 +113,11 @@
 	cpu-mcore.c \
 	cpu-mips.c \
 	cpu-ns32k.c \
+	cpu-pdp11.c \
 	cpu-pj.c \
 	cpu-powerpc.c \
 	cpu-rs6000.c \
+	cpu-s390.c \
 	cpu-sh.c \
 	cpu-sparc.c \
 	cpu-tic30.c \
@@ -199,6 +203,7 @@
 	elf32-mips.lo \
 	elf32-pj.lo \
 	elf32-ppc.lo \
+	elf32-s390.lo \
 	elf32-sh.lo \
 	elf32-sh-lin.lo \
 	elf32-sparc.lo \
@@ -236,6 +241,7 @@
 	ns32knetbsd.lo \
 	oasys.lo \
 	pc532-mach.lo \
+	pdp11.lo \
 	pe-arm.lo \
 	pei-arm.lo \
 	pe-i386.lo \
@@ -336,6 +342,7 @@
 	elf32-mips.c \
 	elf32-pj.c \
 	elf32-ppc.c \
+	elf32-s390.c \
 	elf32-sh.c \
 	elf32-sh-lin.c \
 	elf32-sparc.c \
@@ -373,6 +380,7 @@
 	ns32knetbsd.c \
 	oasys.c \
 	pc532-mach.c \
+	pdp11.c \
 	pe-arm.c \
 	pei-arm.c \
 	pe-i386.c \
@@ -385,7 +393,6 @@
 	pei-sh.c \
 	pe-mips.c \
 	pei-mips.c \
-	peigen.c \
 	ppcboot.c \
 	reloc16.c \
 	riscix.c \
@@ -417,10 +424,12 @@
 	elf64-ia64.lo \
 	elf64-gen.lo \
 	elf64-mips.lo \
+	elf64-s390.lo \
 	elf64-sparc.lo \
 	elf64.lo \
 	nlm32-alpha.lo \
-	nlm64.lo
+	nlm64.lo \
+	pepigen.lo
 
 BFD64_BACKENDS_CFILES = \
 	aout64.c \
@@ -431,9 +440,9 @@
 	elf64-x86-64.c \
 	elf64-alpha.c \
 	elf64-hppa.c \
-	elf64-ia64.c \
 	elf64-gen.c \
 	elf64-mips.c \
+	elf64-s390.c \
 	elf64-sparc.c \
 	elf64.c \
 	nlm32-alpha.c \
@@ -469,13 +478,17 @@
 INCLUDES = -D_GNU_SOURCE @HDEFINES@ @COREFLAG@ @TDEFINES@ $(CSEARCH) $(CSWITCHES) -I$(srcdir)/../intl -I../intl
 
 # C source files that correspond to .o's.
-CFILES = \
+SOURCE_CFILES = \
 	$(BFD_LIBS_CFILES) \
 	$(ALL_MACHINES_CFILES) \
 	$(BFD32_BACKENDS_CFILES) \
 	$(BFD64_BACKENDS_CFILES) \
 	$(OPTIONAL_BACKENDS_CFILES)
 
+CFILES = \
+	$(SOURCE_CFILES) \
+	elf32-ia64.c elf64-ia64.c peigen.c pepigen.c
+
 ## This is a list of all .h files which are in the source tree.
 SOURCE_HFILES = \
 	aout-target.h aoutf1.h aoutx.h coffcode.h coffswap.h ecoffswap.h \
@@ -489,7 +502,7 @@
 	elf32-target.h elf64-target.h targmatch.h \
 	$(SOURCE_HFILES)
 
-POTFILES = $(CFILES) $(SOURCE_HFILES)
+POTFILES = $(CFILES) $(HFILES)
 
 po/POTFILES.in: @MAINT@ Makefile
 	for file in $(POTFILES); do echo $$file; done | sort > tmp \
@@ -535,6 +548,7 @@
 	libtooldir=`$(LIBTOOL) --config | sed -n -e 's/^objdir=//p'`; \
 	if [ -f $$libtooldir/libbfd.a ]; then \
 	  cp $$libtooldir/libbfd.a libbfd.tmp; \
+	  $(RANLIB) libbfd.tmp; \
 	  $(SHELL) $(srcdir)/../move-if-change libbfd.tmp libbfd.a; \
 	else true; fi
 	touch stamp-lib
@@ -578,6 +592,16 @@
 	sed -e s/NN/64/g < $(srcdir)/elfxx-ia64.c > elf64-ia64.new
 	mv -f elf64-ia64.new elf64-ia64.c
 
+peigen.c : peXXigen.c
+	rm -f peigen.c
+	sed -e s/XX/pe/g < $(srcdir)/peXXigen.c > peigen.new
+	mv -f peigen.new peigen.c
+
+pepigen.c : peXXigen.c
+	rm -f pepigen.c
+	sed -e s/XX/pep/g < $(srcdir)/peXXigen.c > pepigen.new
+	mv -f pepigen.new pepigen.c
+
 BFD_H_DEPS= $(INCDIR)/ansidecl.h
 LOCAL_H_DEPS= libbfd.h sysdep.h config.h
 $(BFD_LIBS): $(BFD_H) $(BFD_H_DEPS) $(LOCAL_H_DEPS)
@@ -737,6 +761,9 @@
   $(INCDIR)/aout/stab.def
 stab-syms.lo: stab-syms.c libaout.h $(INCDIR)/bfdlink.h \
   $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab.def
+dwarf2.lo: dwarf2.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
+  elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+  $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/dwarf2.h
 cpu-a29k.lo: cpu-a29k.c $(INCDIR)/filenames.h
 cpu-alpha.lo: cpu-alpha.c $(INCDIR)/filenames.h
 cpu-arc.lo: cpu-arc.c $(INCDIR)/filenames.h
@@ -765,9 +792,11 @@
 cpu-mcore.lo: cpu-mcore.c $(INCDIR)/filenames.h
 cpu-mips.lo: cpu-mips.c $(INCDIR)/filenames.h
 cpu-ns32k.lo: cpu-ns32k.c $(INCDIR)/filenames.h ns32k.h
+cpu-pdp11.lo: cpu-pdp11.c $(INCDIR)/filenames.h
 cpu-pj.lo: cpu-pj.c $(INCDIR)/filenames.h
 cpu-powerpc.lo: cpu-powerpc.c $(INCDIR)/filenames.h
 cpu-rs6000.lo: cpu-rs6000.c $(INCDIR)/filenames.h
+cpu-s390.lo: cpu-s390.c $(INCDIR)/filenames.h
 cpu-sh.lo: cpu-sh.c $(INCDIR)/filenames.h
 cpu-sparc.lo: cpu-sparc.c $(INCDIR)/filenames.h
 cpu-tic30.lo: cpu-tic30.c $(INCDIR)/filenames.h
@@ -905,9 +934,6 @@
 dwarf1.lo: dwarf1.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
   elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
   $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/dwarf.h
-dwarf2.lo: dwarf2.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
-  elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
-  $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/dwarf2.h
 ecoff.lo: ecoff.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
   $(INCDIR)/aout/ar.h $(INCDIR)/aout/ranlib.h $(INCDIR)/aout/stab_gnu.h \
   $(INCDIR)/aout/stab.def libaout.h $(INCDIR)/aout/aout64.h \
@@ -978,10 +1004,6 @@
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h $(INCDIR)/elf/i960.h $(INCDIR)/elf/reloc-macros.h \
   elf32-target.h
-elf32-ia64.lo: elf32-ia64.c $(INCDIR)/filenames.h elf-bfd.h \
-  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
-  $(INCDIR)/bfdlink.h $(INCDIR)/opcode/ia64.h $(INCDIR)/elf/ia64.h \
-  $(INCDIR)/elf/reloc-macros.h elf32-target.h
 elf32-m32r.lo: elf32-m32r.c $(INCDIR)/filenames.h elf-bfd.h \
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h $(INCDIR)/elf/m32r.h $(INCDIR)/elf/reloc-macros.h \
@@ -1026,6 +1048,10 @@
   elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
   $(INCDIR)/elf/external.h $(INCDIR)/elf/ppc.h $(INCDIR)/elf/reloc-macros.h \
   elf32-target.h
+elf32-s390.lo: elf32-s390.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
+  elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+  $(INCDIR)/elf/external.h $(INCDIR)/elf/s390.h $(INCDIR)/elf/reloc-macros.h \
+  elf32-target.h
 elf32-sh.lo: elf32-sh.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
   elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
   $(INCDIR)/elf/external.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h \
@@ -1139,6 +1165,9 @@
 pc532-mach.lo: pc532-mach.c $(INCDIR)/filenames.h libaout.h \
   $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h aout-target.h \
   $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h
+pdp11.lo: pdp11.c $(INCDIR)/filenames.h libaout.h $(INCDIR)/bfdlink.h \
+  aout-target.h $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h \
+  $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h
 pe-arm.lo: pe-arm.c $(INCDIR)/filenames.h coff-arm.c \
   $(INCDIR)/coff/arm.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h \
   libcoff.h $(INCDIR)/bfdlink.h coffcode.h peicode.h \
@@ -1185,9 +1214,6 @@
   $(INCDIR)/coff/mipspe.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h \
   libcoff.h $(INCDIR)/bfdlink.h coffcode.h peicode.h \
   libpei.h
-peigen.lo: peigen.c $(INCDIR)/filenames.h $(INCDIR)/coff/internal.h \
-  $(INCDIR)/coff/i386.h $(INCDIR)/coff/pe.h libcoff.h \
-  $(INCDIR)/bfdlink.h libpei.h
 ppcboot.lo: ppcboot.c $(INCDIR)/filenames.h
 reloc16.lo: reloc16.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
   genlink.h $(INCDIR)/coff/internal.h libcoff.h
@@ -1242,6 +1268,10 @@
   coff-ia64.c $(INCDIR)/coff/ia64.h $(INCDIR)/coff/internal.h \
   $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \
   peicode.h libpei.h
+elf64-x86-64.lo: elf64-x86-64.c $(INCDIR)/filenames.h \
+  elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+  $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/x86-64.h \
+  $(INCDIR)/elf/reloc-macros.h elf64-target.h
 elf64-alpha.lo: elf64-alpha.c $(INCDIR)/filenames.h \
   elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
   $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/alpha.h \
@@ -1249,18 +1279,11 @@
   $(INCDIR)/coff/sym.h $(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h \
   $(INCDIR)/coff/alpha.h $(INCDIR)/aout/ar.h libcoff.h \
   libecoff.h ecoffswap.h elf64-target.h
-elf64-hppa.lo: elf64-hppa.c $(INCDIR)/filenames.h elf-bfd.h \
-  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
-  $(INCDIR)/bfdlink.h $(INCDIR)/elf/hppa.h $(INCDIR)/elf/reloc-macros.h \
-  libhppa.h elf64-hppa.h elf-hppa.h elf64-target.h
-elf64-ia64.lo: elf64-ia64.c $(INCDIR)/filenames.h elf-bfd.h \
-  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
-  $(INCDIR)/bfdlink.h $(INCDIR)/opcode/ia64.h $(INCDIR)/elf/ia64.h \
-  $(INCDIR)/elf/reloc-macros.h elf64-target.h
-elf64-x86-64.lo: elf64-x86-64.c $(INCDIR)/filenames.h elf-bfd.h \
-  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
-  $(INCDIR)/bfdlink.h $(INCDIR)/opcode/i386.h $(INCDIR)/elf/x86-64.h \
-  $(INCDIR)/elf/reloc-macros.h elf64-target.h
+elf64-hppa.lo: elf64-hppa.c $(INCDIR)/alloca-conf.h \
+  $(INCDIR)/filenames.h elf-bfd.h $(INCDIR)/elf/common.h \
+  $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
+  $(INCDIR)/elf/hppa.h $(INCDIR)/elf/reloc-macros.h libhppa.h \
+  elf64-hppa.h elf-hppa.h elf64-target.h
 elf64-gen.lo: elf64-gen.c $(INCDIR)/filenames.h elf-bfd.h \
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h elf64-target.h
@@ -1270,6 +1293,10 @@
   $(INCDIR)/elf/reloc-macros.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/symconst.h \
   $(INCDIR)/coff/internal.h $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/alpha.h \
   ecoffswap.h elf64-target.h
+elf64-s390.lo: elf64-s390.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
+  elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+  $(INCDIR)/elf/external.h $(INCDIR)/elf/s390.h $(INCDIR)/elf/reloc-macros.h \
+  elf64-target.h
 elf64-sparc.lo: elf64-sparc.c $(INCDIR)/filenames.h \
   elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
   $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/opcode/sparc.h \
@@ -1296,4 +1323,18 @@
 trad-core.lo: trad-core.c $(INCDIR)/filenames.h libaout.h \
   $(INCDIR)/bfdlink.h
 cisco-core.lo: cisco-core.c $(INCDIR)/filenames.h
+elf32-ia64.lo: elf32-ia64.c $(INCDIR)/filenames.h elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(INCDIR)/opcode/ia64.h $(INCDIR)/elf/ia64.h \
+  $(INCDIR)/elf/reloc-macros.h elf32-target.h
+elf64-ia64.lo: elf64-ia64.c $(INCDIR)/filenames.h elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(INCDIR)/opcode/ia64.h $(INCDIR)/elf/ia64.h \
+  $(INCDIR)/elf/reloc-macros.h elf64-target.h
+peigen.lo: peigen.c $(INCDIR)/filenames.h $(INCDIR)/coff/internal.h \
+  $(INCDIR)/coff/i386.h $(INCDIR)/coff/pe.h libcoff.h \
+  $(INCDIR)/bfdlink.h libpei.h
+pepigen.lo: pepigen.c $(INCDIR)/filenames.h $(INCDIR)/coff/internal.h \
+  $(INCDIR)/coff/ia64.h $(INCDIR)/coff/pe.h libcoff.h \
+  $(INCDIR)/bfdlink.h libpei.h
 # IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/bfd/Makefile.in b/bfd/Makefile.in
index 0c60c1c..b7c34fb 100644
--- a/bfd/Makefile.in
+++ b/bfd/Makefile.in
@@ -144,41 +144,457 @@
 # for the debugger, so if you are downloading things as S-records you
 # need two copies of the executable, one to download and one for the
 # debugger).
-BFD_LIBS =  	archive.lo archures.lo bfd.lo cache.lo coffgen.lo corefile.lo 	format.lo init.lo libbfd.lo opncls.lo reloc.lo 	section.lo syms.lo targets.lo hash.lo linker.lo 	srec.lo binary.lo tekhex.lo ihex.lo stabs.lo stab-syms.lo 	dwarf2.lo
+BFD_LIBS = \
+	archive.lo archures.lo bfd.lo cache.lo coffgen.lo corefile.lo \
+	format.lo init.lo libbfd.lo opncls.lo reloc.lo \
+	section.lo syms.lo targets.lo hash.lo linker.lo \
+	srec.lo binary.lo tekhex.lo ihex.lo stabs.lo stab-syms.lo \
+	dwarf2.lo
 
 
-BFD_LIBS_CFILES =  	archive.c archures.c bfd.c cache.c coffgen.c corefile.c 	format.c init.c libbfd.c opncls.c reloc.c 	section.c syms.c targets.c hash.c linker.c 	srec.c binary.c tekhex.c ihex.c stabs.c stab-syms.c 	dwarf2.c
+BFD_LIBS_CFILES = \
+	archive.c archures.c bfd.c cache.c coffgen.c corefile.c \
+	format.c init.c libbfd.c opncls.c reloc.c \
+	section.c syms.c targets.c hash.c linker.c \
+	srec.c binary.c tekhex.c ihex.c stabs.c stab-syms.c \
+	dwarf2.c
 
 
 # This list is alphabetized to make it easier to keep in sync
 # with the decls and initializer in archures.c.
-ALL_MACHINES =  	cpu-a29k.lo 	cpu-alpha.lo 	cpu-arc.lo 	cpu-arm.lo 	cpu-avr.lo 	cpu-cris.lo 	cpu-d10v.lo 	cpu-d30v.lo 	cpu-fr30.lo 	cpu-h8300.lo 	cpu-h8500.lo 	cpu-hppa.lo 	cpu-ia64.lo 	cpu-i370.lo 	cpu-i386.lo 	cpu-i860.lo 	cpu-i960.lo 	cpu-m32r.lo 	cpu-m68hc11.lo 	cpu-m68hc12.lo 	cpu-m68k.lo 	cpu-m88k.lo 	cpu-m10200.lo 	cpu-m10300.lo 	cpu-mcore.lo 	cpu-mips.lo 	cpu-ns32k.lo 	cpu-pj.lo 	cpu-powerpc.lo 	cpu-rs6000.lo 	cpu-sh.lo 	cpu-sparc.lo 	cpu-tic30.lo 	cpu-tic54x.lo 	cpu-tic80.lo 	cpu-v850.lo 	cpu-vax.lo 	cpu-we32k.lo 	cpu-w65.lo 	cpu-z8k.lo
+ALL_MACHINES = \
+	cpu-a29k.lo \
+	cpu-alpha.lo \
+	cpu-arc.lo \
+	cpu-arm.lo \
+	cpu-avr.lo \
+	cpu-cris.lo \
+	cpu-d10v.lo \
+	cpu-d30v.lo \
+	cpu-fr30.lo \
+	cpu-h8300.lo \
+	cpu-h8500.lo \
+	cpu-hppa.lo \
+	cpu-ia64.lo \
+	cpu-i370.lo \
+	cpu-i386.lo \
+	cpu-i860.lo \
+	cpu-i960.lo \
+	cpu-m32r.lo \
+	cpu-m68hc11.lo \
+	cpu-m68hc12.lo \
+	cpu-m68k.lo \
+	cpu-m88k.lo \
+	cpu-m10200.lo \
+	cpu-m10300.lo \
+	cpu-mcore.lo \
+	cpu-mips.lo \
+	cpu-ns32k.lo \
+	cpu-pdp11.lo \
+	cpu-pj.lo \
+	cpu-powerpc.lo \
+	cpu-rs6000.lo \
+	cpu-s390.lo \
+	cpu-sh.lo \
+	cpu-sparc.lo \
+	cpu-tic30.lo \
+	cpu-tic54x.lo \
+	cpu-tic80.lo \
+	cpu-v850.lo \
+	cpu-vax.lo \
+	cpu-we32k.lo \
+	cpu-w65.lo \
+	cpu-z8k.lo
 
 
-ALL_MACHINES_CFILES =  	cpu-a29k.c 	cpu-alpha.c 	cpu-arc.c 	cpu-arm.c 	cpu-avr.c 	cpu-cris.c 	cpu-d10v.c 	cpu-d30v.c 	cpu-fr30.c 	cpu-h8300.c 	cpu-h8500.c 	cpu-hppa.c 	cpu-ia64.c 	cpu-i370.c 	cpu-i386.c 	cpu-i860.c 	cpu-i960.c 	cpu-m32r.c 	cpu-m68hc11.c 	cpu-m68hc12.c 	cpu-m68k.c 	cpu-m88k.c 	cpu-m10200.c 	cpu-m10300.c 	cpu-mcore.c 	cpu-mips.c 	cpu-ns32k.c 	cpu-pj.c 	cpu-powerpc.c 	cpu-rs6000.c 	cpu-sh.c 	cpu-sparc.c 	cpu-tic30.c 	cpu-tic54x.c 	cpu-tic80.c 	cpu-v850.c 	cpu-vax.c 	cpu-we32k.c 	cpu-w65.c 	cpu-z8k.c
+ALL_MACHINES_CFILES = \
+	cpu-a29k.c \
+	cpu-alpha.c \
+	cpu-arc.c \
+	cpu-arm.c \
+	cpu-avr.c \
+	cpu-cris.c \
+	cpu-d10v.c \
+	cpu-d30v.c \
+	cpu-fr30.c \
+	cpu-h8300.c \
+	cpu-h8500.c \
+	cpu-hppa.c \
+	cpu-ia64.c \
+	cpu-i370.c \
+	cpu-i386.c \
+	cpu-i860.c \
+	cpu-i960.c \
+	cpu-m32r.c \
+	cpu-m68hc11.c \
+	cpu-m68hc12.c \
+	cpu-m68k.c \
+	cpu-m88k.c \
+	cpu-m10200.c \
+	cpu-m10300.c \
+	cpu-mcore.c \
+	cpu-mips.c \
+	cpu-ns32k.c \
+	cpu-pdp11.c \
+	cpu-pj.c \
+	cpu-powerpc.c \
+	cpu-rs6000.c \
+	cpu-s390.c \
+	cpu-sh.c \
+	cpu-sparc.c \
+	cpu-tic30.c \
+	cpu-tic54x.c \
+	cpu-tic80.c \
+	cpu-v850.c \
+	cpu-vax.c \
+	cpu-we32k.c \
+	cpu-w65.c \
+	cpu-z8k.c
 
 
 # The .o files needed by all of the 32 bit vectors that are configured into
 # target_vector in targets.c if configured with --enable-targets=all.
-BFD32_BACKENDS =  	aout-adobe.lo 	aout-arm.lo 	aout-cris.lo 	aout-ns32k.lo 	aout-sparcle.lo 	aout-tic30.lo 	aout0.lo 	aout32.lo 	armnetbsd.lo 	bout.lo 	cf-i386lynx.lo 	cf-m68klynx.lo 	cf-sparclynx.lo 	coff-a29k.lo 	coff-apollo.lo 	coff-arm.lo 	coff-aux.lo 	coff-h8300.lo 	coff-h8500.lo 	coff-i386.lo 	coff-go32.lo 	coff-i860.lo 	coff-i960.lo 	coff-m68k.lo 	coff-m88k.lo 	coff-mips.lo 	coff-pmac.lo 	coff-rs6000.lo 	coff-sh.lo 	coff-sparc.lo 	coff-stgo32.lo 	coff-svm68k.lo 	coff-tic30.lo 	coff-tic54x.lo 	coff-tic80.lo 	coff-u68k.lo 	coff-we32k.lo 	coff-w65.lo 	coff-z8k.lo 	cofflink.lo 	dwarf1.lo 	ecoff.lo 	ecofflink.lo 	efi-app-ia32.lo 	elf.lo 	elf32-arc.lo 	elfarm-oabi.lo 	elfarm-nabi.lo 	elf32-avr.lo 	elf32-cris.lo 	elf32-d10v.lo 	elf32-d30v.lo 	elf32-fr30.lo 	elf32-gen.lo 	elf32-hppa.lo 	elf32-i370.lo 	elf32-i386.lo 	elf32-i860.lo 	elf32-i960.lo 	elf32-ia64.lo 	elf32-m32r.lo 	elf32-m68hc11.lo 	elf32-m68hc12.lo 	elf32-m68k.lo 	elf32-m88k.lo 	elf-m10200.lo 	elf-m10300.lo 	elf32-mcore.lo 	elf32-mips.lo 	elf32-pj.lo 	elf32-ppc.lo 	elf32-sh.lo 	elf32-sh-lin.lo 	elf32-sparc.lo 	elf32-v850.lo 	elf32.lo 	elflink.lo 	epoc-pe-arm.lo 	epoc-pei-arm.lo 	hp300bsd.lo 	hp300hpux.lo 	som.lo 	i386aout.lo 	i386bsd.lo 	i386dynix.lo 	i386freebsd.lo 	i386linux.lo 	i386lynx.lo 	i386msdos.lo 	i386netbsd.lo 	i386mach3.lo 	i386os9k.lo 	ieee.lo 	m68k4knetbsd.lo 	m68klinux.lo 	m68klynx.lo 	m68knetbsd.lo 	m88kmach3.lo 	mipsbsd.lo 	newsos3.lo 	nlm.lo 	nlm32-i386.lo 	nlm32-sparc.lo 	nlm32-ppc.lo 	nlm32.lo 	ns32knetbsd.lo 	oasys.lo 	pc532-mach.lo 	pe-arm.lo 	pei-arm.lo 	pe-i386.lo 	pei-i386.lo 	pe-mcore.lo 	pei-mcore.lo 	pe-ppc.lo 	pei-ppc.lo 	pe-sh.lo 	pei-sh.lo 	pe-mips.lo 	pei-mips.lo 	peigen.lo 	ppcboot.lo 	reloc16.lo 	riscix.lo 	sparclinux.lo 	sparclynx.lo 	sparcnetbsd.lo 	sunos.lo 	vaxnetbsd.lo 	versados.lo 	vms.lo 	vms-gsd.lo 	vms-hdr.lo 	vms-misc.lo 	vms-tir.lo 	xcofflink.lo
+BFD32_BACKENDS = \
+	aout-adobe.lo \
+	aout-arm.lo \
+	aout-cris.lo \
+	aout-ns32k.lo \
+	aout-sparcle.lo \
+	aout-tic30.lo \
+	aout0.lo \
+	aout32.lo \
+	armnetbsd.lo \
+	bout.lo \
+	cf-i386lynx.lo \
+	cf-m68klynx.lo \
+	cf-sparclynx.lo \
+	coff-a29k.lo \
+	coff-apollo.lo \
+	coff-arm.lo \
+	coff-aux.lo \
+	coff-h8300.lo \
+	coff-h8500.lo \
+	coff-i386.lo \
+	coff-go32.lo \
+	coff-i860.lo \
+	coff-i960.lo \
+	coff-m68k.lo \
+	coff-m88k.lo \
+	coff-mips.lo \
+	coff-pmac.lo \
+	coff-rs6000.lo \
+	coff-sh.lo \
+	coff-sparc.lo \
+	coff-stgo32.lo \
+	coff-svm68k.lo \
+	coff-tic30.lo \
+	coff-tic54x.lo \
+	coff-tic80.lo \
+	coff-u68k.lo \
+	coff-we32k.lo \
+	coff-w65.lo \
+	coff-z8k.lo \
+	cofflink.lo \
+	dwarf1.lo \
+	ecoff.lo \
+	ecofflink.lo \
+	efi-app-ia32.lo \
+	elf.lo \
+	elf32-arc.lo \
+	elfarm-oabi.lo \
+	elfarm-nabi.lo \
+	elf32-avr.lo \
+	elf32-cris.lo \
+	elf32-d10v.lo \
+	elf32-d30v.lo \
+	elf32-fr30.lo \
+	elf32-gen.lo \
+	elf32-hppa.lo \
+	elf32-i370.lo \
+	elf32-i386.lo \
+	elf32-i860.lo \
+	elf32-i960.lo \
+	elf32-ia64.lo \
+	elf32-m32r.lo \
+	elf32-m68hc11.lo \
+	elf32-m68hc12.lo \
+	elf32-m68k.lo \
+	elf32-m88k.lo \
+	elf-m10200.lo \
+	elf-m10300.lo \
+	elf32-mcore.lo \
+	elf32-mips.lo \
+	elf32-pj.lo \
+	elf32-ppc.lo \
+	elf32-s390.lo \
+	elf32-sh.lo \
+	elf32-sh-lin.lo \
+	elf32-sparc.lo \
+	elf32-v850.lo \
+	elf32.lo \
+	elflink.lo \
+	epoc-pe-arm.lo \
+	epoc-pei-arm.lo \
+	hp300bsd.lo \
+	hp300hpux.lo \
+	som.lo \
+	i386aout.lo \
+	i386bsd.lo \
+	i386dynix.lo \
+	i386freebsd.lo \
+	i386linux.lo \
+	i386lynx.lo \
+	i386msdos.lo \
+	i386netbsd.lo \
+	i386mach3.lo \
+	i386os9k.lo \
+	ieee.lo \
+	m68k4knetbsd.lo \
+	m68klinux.lo \
+	m68klynx.lo \
+	m68knetbsd.lo \
+	m88kmach3.lo \
+	mipsbsd.lo \
+	newsos3.lo \
+	nlm.lo \
+	nlm32-i386.lo \
+	nlm32-sparc.lo \
+	nlm32-ppc.lo \
+	nlm32.lo \
+	ns32knetbsd.lo \
+	oasys.lo \
+	pc532-mach.lo \
+	pdp11.lo \
+	pe-arm.lo \
+	pei-arm.lo \
+	pe-i386.lo \
+	pei-i386.lo \
+	pe-mcore.lo \
+	pei-mcore.lo \
+	pe-ppc.lo \
+	pei-ppc.lo \
+	pe-sh.lo \
+	pei-sh.lo \
+	pe-mips.lo \
+	pei-mips.lo \
+	peigen.lo \
+	ppcboot.lo \
+	reloc16.lo \
+	riscix.lo \
+	sparclinux.lo \
+	sparclynx.lo \
+	sparcnetbsd.lo \
+	sunos.lo \
+	vaxnetbsd.lo \
+	versados.lo \
+	vms.lo \
+	vms-gsd.lo \
+	vms-hdr.lo \
+	vms-misc.lo \
+	vms-tir.lo \
+	xcofflink.lo
 
 
-BFD32_BACKENDS_CFILES =  	aout-adobe.c 	aout-arm.c 	aout-cris.c 	aout-ns32k.c 	aout-sparcle.c 	aout-tic30.c 	aout0.c 	aout32.c 	armnetbsd.c 	bout.c 	cf-i386lynx.c 	cf-m68klynx.c 	cf-sparclynx.c 	coff-a29k.c 	coff-apollo.c 	coff-arm.c 	coff-aux.c 	coff-h8300.c 	coff-h8500.c 	coff-i386.c 	coff-i860.c 	coff-go32.c 	coff-i960.c 	coff-m68k.c 	coff-m88k.c 	coff-mips.c 	coff-pmac.c 	coff-rs6000.c 	coff-sh.c 	coff-sparc.c 	coff-stgo32.c 	coff-svm68k.c 	coff-tic30.c 	coff-tic54x.c 	coff-tic80.c 	coff-u68k.c 	coff-we32k.c 	coff-w65.c 	coff-z8k.c 	cofflink.c 	dwarf1.c 	ecoff.c 	ecofflink.c 	efi-app-ia32.c 	elf.c 	elf32-arc.c 	elfarm-oabi.c 	elfarm-nabi.c 	elf32-avr.c 	elf32-cris.c 	elf32-d10v.c 	elf32-d30v.c 	elf32-fr30.c 	elf32-gen.c 	elf32-hppa.c 	elf32-i370.c 	elf32-i386.c 	elf32-i860.c 	elf32-i960.c 	elf32-m32r.c 	elf32-m68k.c 	elf32-m68hc11.c 	elf32-m68hc12.c 	elf32-m88k.c 	elf-m10200.c 	elf-m10300.c 	elf32-mcore.c 	elf32-mips.c 	elf32-pj.c 	elf32-ppc.c 	elf32-sh.c 	elf32-sh-lin.c 	elf32-sparc.c 	elf32-v850.c 	elf32.c 	elflink.c 	epoc-pe-arm.c 	epoc-pei-arm.c 	hp300bsd.c 	hp300hpux.c 	som.c 	i386aout.c 	i386bsd.c 	i386dynix.c 	i386freebsd.c 	i386linux.c 	i386lynx.c 	i386msdos.c 	i386netbsd.c 	i386mach3.c 	i386os9k.c 	ieee.c 	m68k4knetbsd.c 	m68klinux.c 	m68klynx.c 	m68knetbsd.c 	m88kmach3.c 	mipsbsd.c 	newsos3.c 	nlm.c 	nlm32-i386.c 	nlm32-sparc.c 	nlm32-ppc.c 	nlm32.c 	ns32knetbsd.c 	oasys.c 	pc532-mach.c 	pe-arm.c 	pei-arm.c 	pe-i386.c 	pei-i386.c 	pe-mcore.c 	pei-mcore.c 	pe-ppc.c 	pei-ppc.c 	pe-sh.c 	pei-sh.c 	pe-mips.c 	pei-mips.c 	peigen.c 	ppcboot.c 	reloc16.c 	riscix.c 	sparclinux.c 	sparclynx.c 	sparcnetbsd.c 	sunos.c 	vaxnetbsd.c 	versados.c 	vms.c 	vms-gsd.c 	vms-hdr.c 	vms-misc.c 	vms-tir.c 	xcofflink.c
+BFD32_BACKENDS_CFILES = \
+	aout-adobe.c \
+	aout-arm.c \
+	aout-cris.c \
+	aout-ns32k.c \
+	aout-sparcle.c \
+	aout-tic30.c \
+	aout0.c \
+	aout32.c \
+	armnetbsd.c \
+	bout.c \
+	cf-i386lynx.c \
+	cf-m68klynx.c \
+	cf-sparclynx.c \
+	coff-a29k.c \
+	coff-apollo.c \
+	coff-arm.c \
+	coff-aux.c \
+	coff-h8300.c \
+	coff-h8500.c \
+	coff-i386.c \
+	coff-i860.c \
+	coff-go32.c \
+	coff-i960.c \
+	coff-m68k.c \
+	coff-m88k.c \
+	coff-mips.c \
+	coff-pmac.c \
+	coff-rs6000.c \
+	coff-sh.c \
+	coff-sparc.c \
+	coff-stgo32.c \
+	coff-svm68k.c \
+	coff-tic30.c \
+	coff-tic54x.c \
+	coff-tic80.c \
+	coff-u68k.c \
+	coff-we32k.c \
+	coff-w65.c \
+	coff-z8k.c \
+	cofflink.c \
+	dwarf1.c \
+	ecoff.c \
+	ecofflink.c \
+	efi-app-ia32.c \
+	elf.c \
+	elf32-arc.c \
+	elfarm-oabi.c \
+	elfarm-nabi.c \
+	elf32-avr.c \
+	elf32-cris.c \
+	elf32-d10v.c \
+	elf32-d30v.c \
+	elf32-fr30.c \
+	elf32-gen.c \
+	elf32-hppa.c \
+	elf32-i370.c \
+	elf32-i386.c \
+	elf32-i860.c \
+	elf32-i960.c \
+	elf32-m32r.c \
+	elf32-m68k.c \
+	elf32-m68hc11.c \
+	elf32-m68hc12.c \
+	elf32-m88k.c \
+	elf-m10200.c \
+	elf-m10300.c \
+	elf32-mcore.c \
+	elf32-mips.c \
+	elf32-pj.c \
+	elf32-ppc.c \
+	elf32-s390.c \
+	elf32-sh.c \
+	elf32-sh-lin.c \
+	elf32-sparc.c \
+	elf32-v850.c \
+	elf32.c \
+	elflink.c \
+	epoc-pe-arm.c \
+	epoc-pei-arm.c \
+	hp300bsd.c \
+	hp300hpux.c \
+	som.c \
+	i386aout.c \
+	i386bsd.c \
+	i386dynix.c \
+	i386freebsd.c \
+	i386linux.c \
+	i386lynx.c \
+	i386msdos.c \
+	i386netbsd.c \
+	i386mach3.c \
+	i386os9k.c \
+	ieee.c \
+	m68k4knetbsd.c \
+	m68klinux.c \
+	m68klynx.c \
+	m68knetbsd.c \
+	m88kmach3.c \
+	mipsbsd.c \
+	newsos3.c \
+	nlm.c \
+	nlm32-i386.c \
+	nlm32-sparc.c \
+	nlm32-ppc.c \
+	nlm32.c \
+	ns32knetbsd.c \
+	oasys.c \
+	pc532-mach.c \
+	pdp11.c \
+	pe-arm.c \
+	pei-arm.c \
+	pe-i386.c \
+	pei-i386.c \
+	pe-mcore.c \
+	pei-mcore.c \
+	pe-ppc.c \
+	pei-ppc.c \
+	pe-sh.c \
+	pei-sh.c \
+	pe-mips.c \
+	pei-mips.c \
+	ppcboot.c \
+	reloc16.c \
+	riscix.c \
+	sparclinux.c \
+	sparclynx.c \
+	sparcnetbsd.c \
+	sunos.c \
+	vaxnetbsd.c \
+	versados.c \
+	vms.c \
+	vms-gsd.c \
+	vms-hdr.c \
+	vms-misc.c \
+	vms-tir.c \
+	xcofflink.c
 
 
 # The .o files needed by all of the 64 bit vectors that are configured into
 # target_vector in targets.c if configured with --enable-targets=all
 # and --enable-64-bit-bfd.
-BFD64_BACKENDS =  	aout64.lo 	coff-alpha.lo 	coff64-rs6000.lo 	demo64.lo 	efi-app-ia64.lo 	elf64-x86-64.lo 	elf64-alpha.lo 	elf64-hppa.lo 	elf64-ia64.lo 	elf64-gen.lo 	elf64-mips.lo 	elf64-sparc.lo 	elf64.lo 	nlm32-alpha.lo 	nlm64.lo
+BFD64_BACKENDS = \
+	aout64.lo \
+	coff-alpha.lo \
+	coff64-rs6000.lo \
+	demo64.lo \
+	efi-app-ia64.lo \
+	elf64-x86-64.lo \
+	elf64-alpha.lo \
+	elf64-hppa.lo \
+	elf64-ia64.lo \
+	elf64-gen.lo \
+	elf64-mips.lo \
+	elf64-s390.lo \
+	elf64-sparc.lo \
+	elf64.lo \
+	nlm32-alpha.lo \
+	nlm64.lo \
+	pepigen.lo
 
 
-BFD64_BACKENDS_CFILES =  	aout64.c 	coff-alpha.c 	coff64-rs6000.c 	demo64.c 	efi-app-ia64.c 	elf64-x86-64.c 	elf64-alpha.c 	elf64-hppa.c 	elf64-ia64.c 	elf64-gen.c 	elf64-mips.c 	elf64-sparc.c 	elf64.c 	nlm32-alpha.c 	nlm64.c
+BFD64_BACKENDS_CFILES = \
+	aout64.c \
+	coff-alpha.c \
+	coff64-rs6000.c \
+	demo64.c \
+	efi-app-ia64.c \
+	elf64-x86-64.c \
+	elf64-alpha.c \
+	elf64-hppa.c \
+	elf64-gen.c \
+	elf64-mips.c \
+	elf64-s390.c \
+	elf64-sparc.c \
+	elf64.c \
+	nlm32-alpha.c \
+	nlm64.c
 
 
-OPTIONAL_BACKENDS =  	aix386-core.lo 	hpux-core.lo 	irix-core.lo 	lynx-core.lo 	osf-core.lo 	sco5-core.lo 	trad-core.lo 	cisco-core.lo
+OPTIONAL_BACKENDS = \
+	aix386-core.lo \
+	hpux-core.lo \
+	irix-core.lo \
+	lynx-core.lo \
+	osf-core.lo \
+	sco5-core.lo \
+	trad-core.lo \
+	cisco-core.lo
 
 
-OPTIONAL_BACKENDS_CFILES =  	aix386-core.c 	hpux-core.c 	irix-core.c 	lynx-core.c 	osf-core.c 	sco5-core.c 	trad-core.c 	cisco-core.c
+OPTIONAL_BACKENDS_CFILES = \
+	aix386-core.c \
+	hpux-core.c \
+	irix-core.c \
+	lynx-core.c \
+	osf-core.c \
+	sco5-core.c \
+	trad-core.c \
+	cisco-core.c
 
 
 # These are defined by configure.in:
@@ -191,16 +607,34 @@
 INCLUDES = -D_GNU_SOURCE @HDEFINES@ @COREFLAG@ @TDEFINES@ $(CSEARCH) $(CSWITCHES) -I$(srcdir)/../intl -I../intl
 
 # C source files that correspond to .o's.
-CFILES =  	$(BFD_LIBS_CFILES) 	$(ALL_MACHINES_CFILES) 	$(BFD32_BACKENDS_CFILES) 	$(BFD64_BACKENDS_CFILES) 	$(OPTIONAL_BACKENDS_CFILES)
+SOURCE_CFILES = \
+	$(BFD_LIBS_CFILES) \
+	$(ALL_MACHINES_CFILES) \
+	$(BFD32_BACKENDS_CFILES) \
+	$(BFD64_BACKENDS_CFILES) \
+	$(OPTIONAL_BACKENDS_CFILES)
 
 
-SOURCE_HFILES =  	aout-target.h aoutf1.h aoutx.h coffcode.h coffswap.h ecoffswap.h 	elf-bfd.h elf-hppa.h elf32-arm.h elf32-hppa.h elf64-hppa.h 	elfcode.h elfcore.h elflink.h freebsd.h genlink.h go32stub.h 	libaout.h libbfd.h libcoff.h libecoff.h libhppa.h 	libieee.h libnlm.h liboasys.h libpei.h netbsd.h nlm-target.h 	nlmcode.h nlmswap.h ns32k.h peicode.h som.h vms.h xcoff-target.h
+CFILES = \
+	$(SOURCE_CFILES) \
+	elf32-ia64.c elf64-ia64.c peigen.c pepigen.c
 
 
-HFILES =  	elf32-target.h elf64-target.h targmatch.h 	$(SOURCE_HFILES)
+SOURCE_HFILES = \
+	aout-target.h aoutf1.h aoutx.h coffcode.h coffswap.h ecoffswap.h \
+	elf-bfd.h elf-hppa.h elf32-arm.h elf32-hppa.h elf64-hppa.h \
+	elfcode.h elfcore.h elflink.h freebsd.h genlink.h go32stub.h \
+	libaout.h libbfd.h libcoff.h libecoff.h libhppa.h \
+	libieee.h libnlm.h liboasys.h libpei.h netbsd.h nlm-target.h \
+	nlmcode.h nlmswap.h ns32k.h peicode.h som.h vms.h xcoff-target.h
 
 
-POTFILES = $(CFILES) $(SOURCE_HFILES)
+HFILES = \
+	elf32-target.h elf64-target.h targmatch.h \
+	$(SOURCE_HFILES)
+
+
+POTFILES = $(CFILES) $(HFILES)
 
 # Various kinds of .o files to put in libbfd.a:
 # BFD_BACKENDS	Routines the configured targets need.
@@ -224,15 +658,18 @@
 BFD_H_DEPS = $(INCDIR)/ansidecl.h
 LOCAL_H_DEPS = libbfd.h sysdep.h config.h
 
-BFD_H_FILES = bfd-in.h init.c opncls.c libbfd.c section.c archures.c 	reloc.c syms.c bfd.c archive.c corefile.c targets.c format.c
+BFD_H_FILES = bfd-in.h init.c opncls.c libbfd.c section.c archures.c \
+	reloc.c syms.c bfd.c archive.c corefile.c targets.c format.c
 
 LIBBFD_H_FILES = libbfd-in.h init.c libbfd.c cache.c reloc.c archures.c elf.c
 LIBCOFF_H_FILES = libcoff-in.h coffcode.h
 
-MOSTLYCLEANFILES = elf32-target.h elf64-target.h ofiles stamp-ofiles 	targmatch.h
+MOSTLYCLEANFILES = elf32-target.h elf64-target.h ofiles stamp-ofiles \
+	targmatch.h
 
 
-CLEANFILES = bfd.h dep.sed stmp-bfd-h DEP DEPA DEP1 DEP2 libbfd.a stamp-lib 	stmp-bin2-h stmp-lbfd-h stmp-lcoff-h
+CLEANFILES = bfd.h dep.sed stmp-bfd-h DEP DEPA DEP1 DEP2 libbfd.a stamp-lib \
+	stmp-bin2-h stmp-lbfd-h stmp-lcoff-h
 
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
@@ -526,7 +963,7 @@
 	@for file in $(DISTFILES); do \
 	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
 	  if test -d $$d/$$file; then \
-	    cp -pr $$/$$file $(distdir)/$$file; \
+	    cp -pr $$d/$$file $(distdir)/$$file; \
 	  else \
 	    test -f $(distdir)/$$file \
 	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
@@ -667,6 +1104,7 @@
 	libtooldir=`$(LIBTOOL) --config | sed -n -e 's/^objdir=//p'`; \
 	if [ -f $$libtooldir/libbfd.a ]; then \
 	  cp $$libtooldir/libbfd.a libbfd.tmp; \
+	  $(RANLIB) libbfd.tmp; \
 	  $(SHELL) $(srcdir)/../move-if-change libbfd.tmp libbfd.a; \
 	else true; fi
 	touch stamp-lib
@@ -709,6 +1147,16 @@
 	rm -f elf64-ia64.c
 	sed -e s/NN/64/g < $(srcdir)/elfxx-ia64.c > elf64-ia64.new
 	mv -f elf64-ia64.new elf64-ia64.c
+
+peigen.c : peXXigen.c
+	rm -f peigen.c
+	sed -e s/XX/pe/g < $(srcdir)/peXXigen.c > peigen.new
+	mv -f peigen.new peigen.c
+
+pepigen.c : peXXigen.c
+	rm -f pepigen.c
+	sed -e s/XX/pep/g < $(srcdir)/peXXigen.c > pepigen.new
+	mv -f pepigen.new pepigen.c
 $(BFD_LIBS): $(BFD_H) $(BFD_H_DEPS) $(LOCAL_H_DEPS)
 $(BFD_MACHINES): $(BFD_H) $(BFD_H_DEPS) $(LOCAL_H_DEPS)
 $(BFD_BACKENDS): $(BFD_H) $(BFD_H_DEPS) $(LOCAL_H_DEPS)
@@ -853,6 +1301,9 @@
   $(INCDIR)/aout/stab.def
 stab-syms.lo: stab-syms.c libaout.h $(INCDIR)/bfdlink.h \
   $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab.def
+dwarf2.lo: dwarf2.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
+  elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+  $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/dwarf2.h
 cpu-a29k.lo: cpu-a29k.c $(INCDIR)/filenames.h
 cpu-alpha.lo: cpu-alpha.c $(INCDIR)/filenames.h
 cpu-arc.lo: cpu-arc.c $(INCDIR)/filenames.h
@@ -881,9 +1332,11 @@
 cpu-mcore.lo: cpu-mcore.c $(INCDIR)/filenames.h
 cpu-mips.lo: cpu-mips.c $(INCDIR)/filenames.h
 cpu-ns32k.lo: cpu-ns32k.c $(INCDIR)/filenames.h ns32k.h
+cpu-pdp11.lo: cpu-pdp11.c $(INCDIR)/filenames.h
 cpu-pj.lo: cpu-pj.c $(INCDIR)/filenames.h
 cpu-powerpc.lo: cpu-powerpc.c $(INCDIR)/filenames.h
 cpu-rs6000.lo: cpu-rs6000.c $(INCDIR)/filenames.h
+cpu-s390.lo: cpu-s390.c $(INCDIR)/filenames.h
 cpu-sh.lo: cpu-sh.c $(INCDIR)/filenames.h
 cpu-sparc.lo: cpu-sparc.c $(INCDIR)/filenames.h
 cpu-tic30.lo: cpu-tic30.c $(INCDIR)/filenames.h
@@ -1021,9 +1474,6 @@
 dwarf1.lo: dwarf1.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
   elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
   $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/dwarf.h
-dwarf2.lo: dwarf2.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
-  elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
-  $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/dwarf2.h
 ecoff.lo: ecoff.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
   $(INCDIR)/aout/ar.h $(INCDIR)/aout/ranlib.h $(INCDIR)/aout/stab_gnu.h \
   $(INCDIR)/aout/stab.def libaout.h $(INCDIR)/aout/aout64.h \
@@ -1094,10 +1544,6 @@
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h $(INCDIR)/elf/i960.h $(INCDIR)/elf/reloc-macros.h \
   elf32-target.h
-elf32-ia64.lo: elf32-ia64.c $(INCDIR)/filenames.h elf-bfd.h \
-  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
-  $(INCDIR)/bfdlink.h $(INCDIR)/opcode/ia64.h $(INCDIR)/elf/ia64.h \
-  $(INCDIR)/elf/reloc-macros.h elf32-target.h
 elf32-m32r.lo: elf32-m32r.c $(INCDIR)/filenames.h elf-bfd.h \
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h $(INCDIR)/elf/m32r.h $(INCDIR)/elf/reloc-macros.h \
@@ -1142,6 +1588,10 @@
   elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
   $(INCDIR)/elf/external.h $(INCDIR)/elf/ppc.h $(INCDIR)/elf/reloc-macros.h \
   elf32-target.h
+elf32-s390.lo: elf32-s390.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
+  elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+  $(INCDIR)/elf/external.h $(INCDIR)/elf/s390.h $(INCDIR)/elf/reloc-macros.h \
+  elf32-target.h
 elf32-sh.lo: elf32-sh.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
   elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
   $(INCDIR)/elf/external.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h \
@@ -1255,6 +1705,9 @@
 pc532-mach.lo: pc532-mach.c $(INCDIR)/filenames.h libaout.h \
   $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h aout-target.h \
   $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h
+pdp11.lo: pdp11.c $(INCDIR)/filenames.h libaout.h $(INCDIR)/bfdlink.h \
+  aout-target.h $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h \
+  $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h
 pe-arm.lo: pe-arm.c $(INCDIR)/filenames.h coff-arm.c \
   $(INCDIR)/coff/arm.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h \
   libcoff.h $(INCDIR)/bfdlink.h coffcode.h peicode.h \
@@ -1301,9 +1754,6 @@
   $(INCDIR)/coff/mipspe.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h \
   libcoff.h $(INCDIR)/bfdlink.h coffcode.h peicode.h \
   libpei.h
-peigen.lo: peigen.c $(INCDIR)/filenames.h $(INCDIR)/coff/internal.h \
-  $(INCDIR)/coff/i386.h $(INCDIR)/coff/pe.h libcoff.h \
-  $(INCDIR)/bfdlink.h libpei.h
 ppcboot.lo: ppcboot.c $(INCDIR)/filenames.h
 reloc16.lo: reloc16.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
   genlink.h $(INCDIR)/coff/internal.h libcoff.h
@@ -1358,6 +1808,10 @@
   coff-ia64.c $(INCDIR)/coff/ia64.h $(INCDIR)/coff/internal.h \
   $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \
   peicode.h libpei.h
+elf64-x86-64.lo: elf64-x86-64.c $(INCDIR)/filenames.h \
+  elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+  $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/x86-64.h \
+  $(INCDIR)/elf/reloc-macros.h elf64-target.h
 elf64-alpha.lo: elf64-alpha.c $(INCDIR)/filenames.h \
   elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
   $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/alpha.h \
@@ -1365,18 +1819,11 @@
   $(INCDIR)/coff/sym.h $(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h \
   $(INCDIR)/coff/alpha.h $(INCDIR)/aout/ar.h libcoff.h \
   libecoff.h ecoffswap.h elf64-target.h
-elf64-hppa.lo: elf64-hppa.c $(INCDIR)/filenames.h elf-bfd.h \
-  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
-  $(INCDIR)/bfdlink.h $(INCDIR)/elf/hppa.h $(INCDIR)/elf/reloc-macros.h \
-  libhppa.h elf64-hppa.h elf-hppa.h elf64-target.h
-elf64-ia64.lo: elf64-ia64.c $(INCDIR)/filenames.h elf-bfd.h \
-  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
-  $(INCDIR)/bfdlink.h $(INCDIR)/opcode/ia64.h $(INCDIR)/elf/ia64.h \
-  $(INCDIR)/elf/reloc-macros.h elf64-target.h
-elf64-x86-64.lo: elf64-x86-64.c $(INCDIR)/filenames.h elf-bfd.h \
-  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
-  $(INCDIR)/bfdlink.h $(INCDIR)/opcode/i386.h $(INCDIR)/elf/x86-64.h \
-  $(INCDIR)/elf/reloc-macros.h elf64-target.h
+elf64-hppa.lo: elf64-hppa.c $(INCDIR)/alloca-conf.h \
+  $(INCDIR)/filenames.h elf-bfd.h $(INCDIR)/elf/common.h \
+  $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
+  $(INCDIR)/elf/hppa.h $(INCDIR)/elf/reloc-macros.h libhppa.h \
+  elf64-hppa.h elf-hppa.h elf64-target.h
 elf64-gen.lo: elf64-gen.c $(INCDIR)/filenames.h elf-bfd.h \
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h elf64-target.h
@@ -1386,6 +1833,10 @@
   $(INCDIR)/elf/reloc-macros.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/symconst.h \
   $(INCDIR)/coff/internal.h $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/alpha.h \
   ecoffswap.h elf64-target.h
+elf64-s390.lo: elf64-s390.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
+  elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
+  $(INCDIR)/elf/external.h $(INCDIR)/elf/s390.h $(INCDIR)/elf/reloc-macros.h \
+  elf64-target.h
 elf64-sparc.lo: elf64-sparc.c $(INCDIR)/filenames.h \
   elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
   $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/opcode/sparc.h \
@@ -1412,6 +1863,20 @@
 trad-core.lo: trad-core.c $(INCDIR)/filenames.h libaout.h \
   $(INCDIR)/bfdlink.h
 cisco-core.lo: cisco-core.c $(INCDIR)/filenames.h
+elf32-ia64.lo: elf32-ia64.c $(INCDIR)/filenames.h elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(INCDIR)/opcode/ia64.h $(INCDIR)/elf/ia64.h \
+  $(INCDIR)/elf/reloc-macros.h elf32-target.h
+elf64-ia64.lo: elf64-ia64.c $(INCDIR)/filenames.h elf-bfd.h \
+  $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
+  $(INCDIR)/bfdlink.h $(INCDIR)/opcode/ia64.h $(INCDIR)/elf/ia64.h \
+  $(INCDIR)/elf/reloc-macros.h elf64-target.h
+peigen.lo: peigen.c $(INCDIR)/filenames.h $(INCDIR)/coff/internal.h \
+  $(INCDIR)/coff/i386.h $(INCDIR)/coff/pe.h libcoff.h \
+  $(INCDIR)/bfdlink.h libpei.h
+pepigen.lo: pepigen.c $(INCDIR)/filenames.h $(INCDIR)/coff/internal.h \
+  $(INCDIR)/coff/ia64.h $(INCDIR)/coff/pe.h libcoff.h \
+  $(INCDIR)/bfdlink.h libpei.h
 # IF YOU PUT ANYTHING HERE IT WILL GO AWAY
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/bfd/aout-target.h b/bfd/aout-target.h
index 1902cdf..a27c11b 100644
--- a/bfd/aout-target.h
+++ b/bfd/aout-target.h
@@ -156,7 +156,7 @@
 #ifdef SWAP_MAGIC
   exec.a_info = SWAP_MAGIC (exec_bytes.e_info);
 #else
-  exec.a_info = bfd_h_get_32 (abfd, exec_bytes.e_info);
+  exec.a_info = GET_MAGIC (abfd, exec_bytes.e_info);
 #endif /* SWAP_MAGIC */
 
   if (N_BADMAG (exec)) return 0;
diff --git a/bfd/aoutx.h b/bfd/aoutx.h
index 94a46b0..e5cc394 100644
--- a/bfd/aoutx.h
+++ b/bfd/aoutx.h
@@ -2906,7 +2906,8 @@
 {
   asection *o;
 
-  if (bfd_get_format (abfd) != bfd_object)
+  if (bfd_get_format (abfd) != bfd_object
+      || abfd->tdata.aout_data == NULL)
     return true;
 
 #define BFCI_FREE(x) if (x != NULL) { free (x); x = NULL; }
diff --git a/bfd/archures.c b/bfd/archures.c
index 84b7744..7ca1c06 100644
--- a/bfd/archures.c
+++ b/bfd/archures.c
@@ -155,6 +155,7 @@
 .#define bfd_mach_h8300   1
 .#define bfd_mach_h8300h  2
 .#define bfd_mach_h8300s  3
+.  bfd_arch_pdp11,     {* DEC PDP-11 *}
 .  bfd_arch_powerpc,   {* PowerPC *}
 .#define bfd_mach_ppc		0
 .#define bfd_mach_ppc_403	403
@@ -248,6 +249,9 @@
 .#define bfd_mach_avr4		4
 .#define bfd_mach_avr5		5
 .  bfd_arch_cris,      {* Axis CRIS *}
+.  bfd_arch_s390,      {* IBM s390 *}
+.#define bfd_mach_s390_esa      0
+.#define bfd_mach_s390_esame    1
 .  bfd_arch_last
 .  };
 */
@@ -305,6 +309,7 @@
 extern const bfd_arch_info_type bfd_mips_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_pdp11_arch;
 extern const bfd_arch_info_type bfd_powerpc_arch;
 extern const bfd_arch_info_type bfd_rs6000_arch;
 extern const bfd_arch_info_type bfd_pj_arch;
@@ -323,6 +328,7 @@
 extern const bfd_arch_info_type bfd_mcore_arch;
 extern const bfd_arch_info_type bfd_avr_arch;
 extern const bfd_arch_info_type bfd_ia64_arch;
+extern const bfd_arch_info_type bfd_s390_arch;
 
 static const bfd_arch_info_type * const bfd_archures_list[] = {
 #ifdef SELECT_ARCHITECTURES
@@ -350,6 +356,7 @@
   &bfd_mips_arch,
   &bfd_mn10200_arch,
   &bfd_mn10300_arch,
+  &bfd_pdp11_arch,
   &bfd_powerpc_arch,
   &bfd_rs6000_arch,
   &bfd_sh_arch,
@@ -367,6 +374,7 @@
   &bfd_mcore_arch,
   &bfd_avr_arch,
   &bfd_ia64_arch,
+  &bfd_s390_arch,
 #endif
   0
 };
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index b8e864b..46240ec 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -1424,6 +1424,7 @@
 #define bfd_mach_h8300   1
 #define bfd_mach_h8300h  2
 #define bfd_mach_h8300s  3
+  bfd_arch_pdp11,     /* DEC PDP-11 */
   bfd_arch_powerpc,   /* PowerPC */
 #define bfd_mach_ppc           0
 #define bfd_mach_ppc_403       403
@@ -1517,6 +1518,9 @@
 #define bfd_mach_avr4          4
 #define bfd_mach_avr5          5
   bfd_arch_cris,      /* Axis CRIS */
+  bfd_arch_s390,      /* IBM s390 */
+#define bfd_mach_s390_esa      0
+#define bfd_mach_s390_esame    1
   bfd_arch_last
   };
 
@@ -2085,6 +2089,10 @@
   BFD_RELOC_NS32K_DISP_16_PCREL,
   BFD_RELOC_NS32K_DISP_32_PCREL,
 
+/* PDP11 relocations */
+  BFD_RELOC_PDP11_DISP_8_PCREL,
+  BFD_RELOC_PDP11_DISP_6_PCREL,
+
 /* Picojava relocs.  Not all of these appear in object files. */
   BFD_RELOC_PJ_CODE_HI16,
   BFD_RELOC_PJ_CODE_LO16,
@@ -2515,6 +2523,57 @@
 into 22 bits. */
   BFD_RELOC_AVR_CALL,
 
+/* Direct 12 bit. */
+  BFD_RELOC_390_12,
+
+/* 12 bit GOT offset. */
+  BFD_RELOC_390_GOT12,
+
+/* 32 bit PC relative PLT address. */
+  BFD_RELOC_390_PLT32,
+
+/* Copy symbol at runtime. */
+  BFD_RELOC_390_COPY,
+
+/* Create GOT entry. */
+  BFD_RELOC_390_GLOB_DAT,
+
+/* Create PLT entry. */
+  BFD_RELOC_390_JMP_SLOT,
+
+/* Adjust by program base. */
+  BFD_RELOC_390_RELATIVE,
+
+/* 32 bit PC relative offset to GOT. */
+  BFD_RELOC_390_GOTPC,
+
+/* 16 bit GOT offset. */
+  BFD_RELOC_390_GOT16,
+
+/* PC relative 16 bit shifted by 1. */
+  BFD_RELOC_390_PC16DBL,
+
+/* 16 bit PC rel. PLT shifted by 1. */
+  BFD_RELOC_390_PLT16DBL,
+
+/* PC relative 32 bit shifted by 1. */
+  BFD_RELOC_390_PC32DBL,
+
+/* 32 bit PC rel. PLT shifted by 1. */
+  BFD_RELOC_390_PLT32DBL,
+
+/* 32 bit PC rel. GOT shifted by 1. */
+  BFD_RELOC_390_GOTPCDBL,
+
+/* 64 bit GOT offset. */
+  BFD_RELOC_390_GOT64,
+
+/* 64 bit PC relative PLT address. */
+  BFD_RELOC_390_PLT64,
+
+/* 32 bit rel. offset to GOT entry. */
+  BFD_RELOC_390_GOTENT,
+
 /* These two relocations are used by the linker to determine which of
 the entries in a C++ virtual function table are actually used.  When
 the --gc-sections option is given, the linker will zero out the entries
diff --git a/bfd/coff-ia64.c b/bfd/coff-ia64.c
index 1f2b445..8a23a6d 100644
--- a/bfd/coff-ia64.c
+++ b/bfd/coff-ia64.c
@@ -1,5 +1,5 @@
 /* BFD back-end for HP/Intel IA-64 COFF files.
-   Copyright 1999 Free Software Foundation, Inc.
+   Copyright 1999, 2001 Free Software Foundation, Inc.
    Contributed by David Mosberger <davidm@hpl.hp.com>
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -21,13 +21,9 @@
 #include "bfd.h"
 #include "sysdep.h"
 #include "libbfd.h"
-
 #include "coff/ia64.h"
-
 #include "coff/internal.h"
-
 #include "coff/pe.h"
-
 #include "libcoff.h"
 
 #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (2)
@@ -43,10 +39,10 @@
 #define BADMAG(x) IA64BADMAG(x)
 #define IA64 1			/* Customize coffcode.h */
 
-#ifdef COFF_WITH_PEP64
+#ifdef COFF_WITH_pep
 # undef AOUTSZ
-# define AOUTSZ		PEP64AOUTSZ
-# define PEAOUTHDR	PEP64AOUTHDR
+# define AOUTSZ		PEPAOUTSZ
+# define PEAOUTHDR	PEPAOUTHDR
 #endif
 
 #define RTYPE2HOWTO(cache_ptr, dst) \
diff --git a/bfd/coffcode.h b/bfd/coffcode.h
index fce0491..29b4ab3 100644
--- a/bfd/coffcode.h
+++ b/bfd/coffcode.h
@@ -339,6 +339,9 @@
 #ifndef coff_mkobject_hook
 static PTR coff_mkobject_hook PARAMS ((bfd *, PTR,  PTR));
 #endif
+#ifdef COFF_WITH_PE
+static flagword handle_COMDAT PARAMS ((bfd *, flagword, PTR, const char *, asection *));
+#endif
 
 /* void warning(); */
 
@@ -698,6 +701,261 @@
 
 #else /* COFF_WITH_PE */
 
+static flagword
+handle_COMDAT (abfd, sec_flags, hdr, name, section)
+     bfd * abfd;
+     flagword sec_flags;
+     PTR hdr;
+     const char *name;
+     asection *section;
+{
+  struct internal_scnhdr *internal_s = (struct internal_scnhdr *) hdr;
+  bfd_byte *esymstart, *esym, *esymend;
+  int seen_state = 0;
+  char *target_name = NULL;
+
+  sec_flags |= SEC_LINK_ONCE;
+
+  /* Unfortunately, the PE format stores essential information in
+     the symbol table, of all places.  We need to extract that
+     information now, so that objdump and the linker will know how
+     to handle the section without worrying about the symbols.  We
+     can't call slurp_symtab, because the linker doesn't want the
+     swapped symbols.  */
+
+  /* COMDAT sections are special.  The first symbol is the section
+     symbol, which tells what kind of COMDAT section it is.  The
+     second symbol is the "comdat symbol" - the one with the
+     unique name.  GNU uses the section symbol for the unique
+     name; MS uses ".text" for every comdat section.  Sigh.  - DJ */
+
+  /* This is not mirrored in sec_to_styp_flags(), but there
+     doesn't seem to be a need to, either, and it would at best be
+     rather messy.  */
+
+  if (! _bfd_coff_get_external_symbols (abfd))
+    return sec_flags;
+  
+  esymstart = esym = (bfd_byte *) obj_coff_external_syms (abfd);
+  esymend = esym + obj_raw_syment_count (abfd) * bfd_coff_symesz (abfd);
+
+  while (esym < esymend)
+    {
+      struct internal_syment isym;
+      char buf[SYMNMLEN + 1];
+      const char *symname;
+
+      bfd_coff_swap_sym_in (abfd, (PTR) esym, (PTR) &isym);
+
+      if (sizeof (internal_s->s_name) > SYMNMLEN)
+	{
+	  /* This case implies that the matching
+	     symbol name will be in the string table.  */
+	  abort ();
+	}
+
+      if (isym.n_scnum == section->target_index)
+	{
+	  /* According to the MSVC documentation, the first
+	     TWO entries with the section # are both of
+	     interest to us.  The first one is the "section
+	     symbol" (section name).  The second is the comdat
+	     symbol name.  Here, we've found the first
+	     qualifying entry; we distinguish it from the
+	     second with a state flag.
+
+	     In the case of gas-generated (at least until that
+	     is fixed) .o files, it isn't necessarily the
+	     second one.  It may be some other later symbol.
+
+	     Since gas also doesn't follow MS conventions and
+	     emits the section similar to .text$<name>, where
+	     <something> is the name we're looking for, we
+	     distinguish the two as follows:
+
+	     If the section name is simply a section name (no
+	     $) we presume it's MS-generated, and look at
+	     precisely the second symbol for the comdat name.
+	     If the section name has a $, we assume it's
+	     gas-generated, and look for <something> (whatever
+	     follows the $) as the comdat symbol.  */
+
+	  /* All 3 branches use this */
+	  symname = _bfd_coff_internal_syment_name (abfd, &isym, buf);
+
+	  if (symname == NULL)
+	    abort ();
+
+	  switch (seen_state)
+	    {
+	    case 0:
+	      {
+		/* The first time we've seen the symbol.  */
+		union internal_auxent aux;
+
+		seen_state = 1;
+
+		/* If it isn't the stuff we're expecting, die;
+		   The MS documentation is vague, but it
+		   appears that the second entry serves BOTH
+		   as the comdat symbol and the defining
+		   symbol record (either C_STAT or C_EXT,
+		   possibly with an aux entry with debug
+		   information if it's a function.)  It
+		   appears the only way to find the second one
+		   is to count.  (On Intel, they appear to be
+		   adjacent, but on Alpha, they have been
+		   found separated.)
+
+		   Here, we think we've found the first one,
+		   but there's some checking we can do to be
+		   sure.  */
+
+		if (! (isym.n_sclass == C_STAT
+		       && isym.n_type == T_NULL
+		       && isym.n_value == 0))
+		  abort ();
+
+		/* FIXME LATER: MSVC generates section names
+		   like .text for comdats.  Gas generates
+		   names like .text$foo__Fv (in the case of a
+		   function).  See comment above for more.  */
+
+		if (strcmp (name, symname) != 0)
+		  abort ();
+
+		/* This is the section symbol.  */
+		bfd_coff_swap_aux_in (abfd, (PTR) (esym + bfd_coff_symesz (abfd)),
+				      isym.n_type, isym.n_sclass,
+				      0, isym.n_numaux, (PTR) &aux);
+
+		target_name = strchr (name, '$');
+		if (target_name != NULL)
+		  {
+		    /* Gas mode.  */
+		    seen_state = 2;
+		    /* Skip the `$'.  */
+		    target_name += 1;
+		  }
+
+		/* FIXME: Microsoft uses NODUPLICATES and
+		   ASSOCIATIVE, but gnu uses ANY and
+		   SAME_SIZE.  Unfortunately, gnu doesn't do
+		   the comdat symbols right.  So, until we can
+		   fix it to do the right thing, we are
+		   temporarily disabling comdats for the MS
+		   types (they're used in DLLs and C++, but we
+		   don't support *their* C++ libraries anyway
+		   - DJ.  */
+
+		/* Cygwin does not follow the MS style, and
+		   uses ANY and SAME_SIZE where NODUPLICATES
+		   and ASSOCIATIVE should be used.  For
+		   Interix, we just do the right thing up
+		   front.  */
+
+		switch (aux.x_scn.x_comdat)
+		  {
+		  case IMAGE_COMDAT_SELECT_NODUPLICATES:
+#ifdef STRICT_PE_FORMAT
+		    sec_flags |= SEC_LINK_DUPLICATES_ONE_ONLY;
+#else
+		    sec_flags &= ~SEC_LINK_ONCE;
+#endif
+		    break;
+
+		  case IMAGE_COMDAT_SELECT_ANY:
+		    sec_flags |= SEC_LINK_DUPLICATES_DISCARD;
+		    break;
+
+		  case IMAGE_COMDAT_SELECT_SAME_SIZE:
+		    sec_flags |= SEC_LINK_DUPLICATES_SAME_SIZE;
+		    break;
+
+		  case IMAGE_COMDAT_SELECT_EXACT_MATCH:
+		    /* Not yet fully implemented ??? */
+		    sec_flags |= SEC_LINK_DUPLICATES_SAME_CONTENTS;
+		    break;
+
+		    /* debug$S gets this case; other
+		       implications ??? */
+
+		    /* There may be no symbol... we'll search
+		       the whole table... Is this the right
+		       place to play this game? Or should we do
+		       it when reading it in.  */
+		  case IMAGE_COMDAT_SELECT_ASSOCIATIVE:
+#ifdef STRICT_PE_FORMAT
+		    /* FIXME: This is not currently implemented.  */
+		    sec_flags |= SEC_LINK_DUPLICATES_DISCARD;
+#else
+		    sec_flags &= ~SEC_LINK_ONCE;
+#endif
+		    break;
+
+		  default:  /* 0 means "no symbol" */
+		    /* debug$F gets this case; other
+		       implications ??? */
+		    sec_flags |= SEC_LINK_DUPLICATES_DISCARD;
+		    break;
+		  }
+	      }
+	      break;
+
+	    case 2:
+	      /* Gas mode: the first matching on partial name.  */
+
+#ifndef TARGET_UNDERSCORE
+#define TARGET_UNDERSCORE 0
+#endif
+	      /* Is this the name we're looking for? */
+	      if (strcmp (target_name,
+			  symname + (TARGET_UNDERSCORE ? 1 : 0)) != 0)
+		{
+		  /* Not the name we're looking for */
+		  esym += (isym.n_numaux + 1) * bfd_coff_symesz (abfd);
+		  continue;
+		}
+	      /* Fall through.  */
+	    case 1:
+	      /* MSVC mode: the lexically second symbol (or
+		 drop through from the above).  */
+	      {
+		char *newname;
+
+		/* This must the the second symbol with the
+		   section #.  It is the actual symbol name.
+		   Intel puts the two adjacent, but Alpha (at
+		   least) spreads them out.  */
+
+		section->comdat =
+		  bfd_alloc (abfd, sizeof (struct bfd_comdat_info));
+		if (section->comdat == NULL)
+		  abort ();
+
+		section->comdat->symbol =
+		  (esym - esymstart) / bfd_coff_symesz (abfd);
+
+		newname = bfd_alloc (abfd, strlen (symname) + 1);
+		if (newname == NULL)
+		  abort ();
+
+		strcpy (newname, symname);
+		section->comdat->name = newname;
+	      }
+
+	      goto breakloop;
+	    }
+	}
+
+      esym += (isym.n_numaux + 1) * bfd_coff_symesz (abfd);
+    }
+
+ breakloop:
+  return sec_flags;
+}
+
+
 /* The PE version; see above for the general comments.
 
    Since to set the SEC_LINK_ONCE and associated flags, we have to
@@ -709,318 +967,116 @@
 
 static flagword
 styp_to_sec_flags (abfd, hdr, name, section)
-     bfd *abfd ATTRIBUTE_UNUSED;
+     bfd *abfd;
      PTR hdr;
      const char *name;
      asection *section;
 {
   struct internal_scnhdr *internal_s = (struct internal_scnhdr *) hdr;
   long styp_flags = internal_s->s_flags;
-  flagword sec_flags = 0;
+  flagword sec_flags;
 
-  if (styp_flags & STYP_DSECT)
-    abort ();  /* Don't know what to do */
-#ifdef SEC_NEVER_LOAD
-  if (styp_flags & STYP_NOLOAD)
-    sec_flags |= SEC_NEVER_LOAD;
-#endif
-  if (styp_flags & STYP_GROUP)
-    abort ();  /* Don't know what to do */
-  /* skip IMAGE_SCN_TYPE_NO_PAD */
-  if (styp_flags & STYP_COPY)
-    abort ();  /* Don't know what to do */
-  if (styp_flags & IMAGE_SCN_CNT_CODE)
-    sec_flags |= SEC_CODE | SEC_ALLOC | SEC_LOAD;
-  if (styp_flags & IMAGE_SCN_CNT_INITIALIZED_DATA)
-    sec_flags |= SEC_DATA | SEC_ALLOC | SEC_LOAD;
-  if (styp_flags & IMAGE_SCN_CNT_UNINITIALIZED_DATA)
-    sec_flags |= SEC_ALLOC;
-  if (styp_flags & IMAGE_SCN_LNK_OTHER)
-    abort ();  /* Don't know what to do */
-  if (styp_flags & IMAGE_SCN_LNK_INFO)
+  /* Assume read only unless IMAGE_SCN_MEM_WRITE is specified.  */
+  sec_flags = SEC_READONLY;
+
+  /* Process each flag bit in styp_flags in turn.  */
+  while (styp_flags)
     {
-      /* We mark these as SEC_DEBUGGING, but only if COFF_PAGE_SIZE is
-	 defined.  coff_compute_section_file_positions uses
-	 COFF_PAGE_SIZE to ensure that the low order bits of the
-	 section VMA and the file offset match.  If we don't know
-	 COFF_PAGE_SIZE, we can't ensure the correct correspondence,
-	 and demand page loading of the file will fail.  */
-#ifdef COFF_PAGE_SIZE
-      sec_flags |= SEC_DEBUGGING;
-#endif
-    }
-  if (styp_flags & STYP_OVER)
-    abort ();  /* Don't know what to do */
-  if (styp_flags & IMAGE_SCN_LNK_REMOVE)
-    sec_flags |= SEC_EXCLUDE;
+      long flag = styp_flags & - styp_flags;
+      char * unhandled = NULL;
+      
+      styp_flags &= ~ flag;
 
-  if (styp_flags & IMAGE_SCN_MEM_SHARED)
-    sec_flags |= SEC_SHARED;
-  /* COMDAT: see below */
-  if (styp_flags & IMAGE_SCN_MEM_DISCARDABLE)
-    sec_flags |= SEC_DEBUGGING;
-  if (styp_flags & IMAGE_SCN_MEM_NOT_CACHED)
-    abort ();/* Don't know what to do */
-  if (styp_flags & IMAGE_SCN_MEM_NOT_PAGED)
-    abort (); /* Don't know what to do */
+      /* We infer from the distinct read/write/execute bits the settings
+	 of some of the bfd flags; the actual values, should we need them,
+	 are also in pei_section_data (abfd, section)->pe_flags.  */
 
-  /* We infer from the distinct read/write/execute bits the settings
-     of some of the bfd flags; the actual values, should we need them,
-     are also in pei_section_data (abfd, section)->pe_flags.  */
-
-  if (styp_flags & IMAGE_SCN_MEM_EXECUTE)
-    sec_flags |= SEC_CODE;   /* Probably redundant */
-  /* IMAGE_SCN_MEM_READ is simply ignored, assuming it always to be true.  */
-  if ((styp_flags & IMAGE_SCN_MEM_WRITE) == 0)
-    sec_flags |= SEC_READONLY;
-
-  /* COMDAT gets very special treatment.  */
-  if (styp_flags & IMAGE_SCN_LNK_COMDAT)
-    {
-      sec_flags |= SEC_LINK_ONCE;
-
-      /* Unfortunately, the PE format stores essential information in
-         the symbol table, of all places.  We need to extract that
-         information now, so that objdump and the linker will know how
-         to handle the section without worrying about the symbols.  We
-         can't call slurp_symtab, because the linker doesn't want the
-         swapped symbols.  */
-
-      /* COMDAT sections are special.  The first symbol is the section
-	 symbol, which tells what kind of COMDAT section it is.  The
-	 second symbol is the "comdat symbol" - the one with the
-	 unique name.  GNU uses the section symbol for the unique
-	 name; MS uses ".text" for every comdat section.  Sigh.  - DJ */
-
-      /* This is not mirrored in sec_to_styp_flags(), but there
-	 doesn't seem to be a need to, either, and it would at best be
-	 rather messy.  */
-
-      if (_bfd_coff_get_external_symbols (abfd))
+      switch (flag)
 	{
-	  bfd_byte *esymstart, *esym, *esymend;
-	  int seen_state = 0;
-	  char *target_name = NULL;
-
-	  esymstart = esym = (bfd_byte *) obj_coff_external_syms (abfd);
-	  esymend = esym + obj_raw_syment_count (abfd) * bfd_coff_symesz (abfd);
-
-	  while (esym < esymend)
-	    {
-	      struct internal_syment isym;
-	      char buf[SYMNMLEN + 1];
-	      const char *symname;
-
-	      bfd_coff_swap_sym_in (abfd, (PTR) esym, (PTR) &isym);
-
-	      if (sizeof (internal_s->s_name) > SYMNMLEN)
-		{
-		  /* This case implies that the matching symbol name
-                     will be in the string table.  */
-		  abort ();
-		}
-
-	      if (isym.n_scnum == section->target_index)
-		{
-		  /* According to the MSVC documentation, the first
-		     TWO entries with the section # are both of
-		     interest to us.  The first one is the "section
-		     symbol" (section name).  The second is the comdat
-		     symbol name.  Here, we've found the first
-		     qualifying entry; we distinguish it from the
-		     second with a state flag.
-
-		     In the case of gas-generated (at least until that
-		     is fixed) .o files, it isn't necessarily the
-		     second one.  It may be some other later symbol.
-
-		     Since gas also doesn't follow MS conventions and
-		     emits the section similar to .text$<name>, where
-		     <something> is the name we're looking for, we
-		     distinguish the two as follows:
-
-		     If the section name is simply a section name (no
-		     $) we presume it's MS-generated, and look at
-		     precisely the second symbol for the comdat name.
-		     If the section name has a $, we assume it's
-		     gas-generated, and look for <something> (whatever
-		     follows the $) as the comdat symbol.  */
-
-		  /* All 3 branches use this */
-		  symname = _bfd_coff_internal_syment_name (abfd, &isym, buf);
-
-		  if (symname == NULL)
-		    abort ();
-
-		  switch (seen_state)
-		    {
-		    case 0:
-		      {
-			/* The first time we've seen the symbol.  */
-			union internal_auxent aux;
-
-			seen_state = 1;
-
-			/* If it isn't the stuff we're expecting, die;
-			   The MS documentation is vague, but it
-			   appears that the second entry serves BOTH
-			   as the comdat symbol and the defining
-			   symbol record (either C_STAT or C_EXT,
-			   possibly with an aux entry with debug
-			   information if it's a function.)  It
-			   appears the only way to find the second one
-			   is to count.  (On Intel, they appear to be
-			   adjacent, but on Alpha, they have been
-			   found separated.)
-
-			   Here, we think we've found the first one,
-			   but there's some checking we can do to be
-			   sure.  */
-
-			if (! (isym.n_sclass == C_STAT
-			       && isym.n_type == T_NULL
-			       && isym.n_value == 0))
-			  abort ();
-
-			/* FIXME LATER: MSVC generates section names
-			   like .text for comdats.  Gas generates
-			   names like .text$foo__Fv (in the case of a
-			   function).  See comment above for more.  */
-
-			if (strcmp (name, symname) != 0)
-			  abort ();
-
-			/* This is the section symbol.  */
-
-			bfd_coff_swap_aux_in (abfd, (PTR) (esym + bfd_coff_symesz (abfd)),
-					      isym.n_type, isym.n_sclass,
-					      0, isym.n_numaux, (PTR) &aux);
-
-			target_name = strchr (name, '$');
-			if (target_name != NULL)
-			  {
-			    /* Gas mode.  */
-			    seen_state = 2;
-			    /* Skip the `$'.  */
-			    target_name += 1;
-			  }
-
-			/* FIXME: Microsoft uses NODUPLICATES and
-			   ASSOCIATIVE, but gnu uses ANY and
-			   SAME_SIZE.  Unfortunately, gnu doesn't do
-			   the comdat symbols right.  So, until we can
-			   fix it to do the right thing, we are
-			   temporarily disabling comdats for the MS
-			   types (they're used in DLLs and C++, but we
-			   don't support *their* C++ libraries anyway
-			   - DJ.  */
-
-			/* Cygwin does not follow the MS style, and
-			   uses ANY and SAME_SIZE where NODUPLICATES
-			   and ASSOCIATIVE should be used.  For
-			   Interix, we just do the right thing up
-			   front.  */
-
-			switch (aux.x_scn.x_comdat)
-			  {
-			  case IMAGE_COMDAT_SELECT_NODUPLICATES:
-#ifdef STRICT_PE_FORMAT
-			    sec_flags |= SEC_LINK_DUPLICATES_ONE_ONLY;
-#else
-			    sec_flags &= ~SEC_LINK_ONCE;
+	case STYP_DSECT:
+	  unhandled = "STYP_DSECT";
+	  break;
+	case STYP_GROUP:
+	  unhandled = "STYP_GROUP";
+	  break;
+	case STYP_COPY:
+	  unhandled = "STYP_COPY";
+	  break;
+	case STYP_OVER:
+	  unhandled = "STYP_OVER";
+	  break;
+#ifdef SEC_NEVER_LOAD
+	case STYP_NOLOAD:
+	  sec_flags |= SEC_NEVER_LOAD;
+	  break;
+#endif	
+	case IMAGE_SCN_MEM_READ:
+	  /* Ignored, assume it always to be true.  */
+	  break;
+	case IMAGE_SCN_TYPE_NO_PAD:
+	  /* Skip.  */
+	  break;
+	case IMAGE_SCN_LNK_OTHER:
+	  unhandled = "IMAGE_SCN_LNK_OTHER";
+	  break;
+	case IMAGE_SCN_MEM_NOT_CACHED:
+	  unhandled = "IMAGE_SCN_MEM_NOT_CACHED";
+	  break;
+	case IMAGE_SCN_MEM_NOT_PAGED:
+	  unhandled = "IMAGE_SCN_MEM_NOT_PAGED";
+	  break;
+	case IMAGE_SCN_MEM_EXECUTE:
+	  sec_flags |= SEC_CODE;
+	  break;
+	case IMAGE_SCN_MEM_WRITE:
+	  sec_flags &= ~ SEC_READONLY;
+	  break;
+	case IMAGE_SCN_MEM_DISCARDABLE:
+	  sec_flags |= SEC_DEBUGGING;
+	  break;
+	case IMAGE_SCN_MEM_SHARED:
+	  sec_flags |= SEC_SHARED;
+	  break;
+	case IMAGE_SCN_LNK_REMOVE:
+	  sec_flags |= SEC_EXCLUDE;
+	  break;
+	case IMAGE_SCN_CNT_CODE:
+	  sec_flags |= SEC_CODE | SEC_ALLOC | SEC_LOAD;
+	  break;
+	case IMAGE_SCN_CNT_INITIALIZED_DATA:
+	  sec_flags |= SEC_DATA | SEC_ALLOC | SEC_LOAD;
+	  break;
+	case IMAGE_SCN_CNT_UNINITIALIZED_DATA:
+	  sec_flags |= SEC_ALLOC;
+	  break;
+	case IMAGE_SCN_LNK_INFO:
+	  /* We mark these as SEC_DEBUGGING, but only if COFF_PAGE_SIZE is
+	     defined.  coff_compute_section_file_positions uses
+	     COFF_PAGE_SIZE to ensure that the low order bits of the
+	     section VMA and the file offset match.  If we don't know
+	     COFF_PAGE_SIZE, we can't ensure the correct correspondence,
+	     and demand page loading of the file will fail.  */
+#ifdef COFF_PAGE_SIZE
+	  sec_flags |= SEC_DEBUGGING;
 #endif
-			    break;
-
-			  case IMAGE_COMDAT_SELECT_ANY:
-			    sec_flags |= SEC_LINK_DUPLICATES_DISCARD;
-			    break;
-
-			  case IMAGE_COMDAT_SELECT_SAME_SIZE:
-			    sec_flags |= SEC_LINK_DUPLICATES_SAME_SIZE;
-			    break;
-
-			  case IMAGE_COMDAT_SELECT_EXACT_MATCH:
-			    /* Not yet fully implemented ??? */
-			    sec_flags |= SEC_LINK_DUPLICATES_SAME_CONTENTS;
-			    break;
-
-			  /* debug$S gets this case; other
-                             implications ??? */
-
-			  /* There may be no symbol... we'll search
-			     the whole table... Is this the right
-			     place to play this game? Or should we do
-			     it when reading it in.  */
-			  case IMAGE_COMDAT_SELECT_ASSOCIATIVE:
-#ifdef STRICT_PE_FORMAT
-			    /* FIXME: This is not currently implemented.  */
-			    sec_flags |= SEC_LINK_DUPLICATES_DISCARD;
-#else
-			    sec_flags &= ~SEC_LINK_ONCE;
-#endif
-			    break;
-
-			  default:  /* 0 means "no symbol" */
-			    /* debug$F gets this case; other
-                               implications ??? */
-			    sec_flags |= SEC_LINK_DUPLICATES_DISCARD;
-			    break;
-			  }
-	 	      }
-		      break;
-
-		    case 2:
-		      /* Gas mode: the first matching on partial name.  */
-
-#ifndef TARGET_UNDERSCORE
-#define TARGET_UNDERSCORE 0
-#endif
-		      /* Is this the name we're looking for? */
-		      if (strcmp (target_name,
-				  symname + (TARGET_UNDERSCORE ? 1 : 0)) != 0)
-			{
-			    /* Not the name we're looking for */
-	                    esym += (isym.n_numaux + 1) * bfd_coff_symesz (abfd);
-			    continue;
-			}
-		      /* Fall through.  */
-		    case 1:
-		      /* MSVC mode: the lexically second symbol (or
-			 drop through from the above).  */
-		      {
-		        char *newname;
-
-			/* This must the the second symbol with the
-			   section #.  It is the actual symbol name.
-			   Intel puts the two adjacent, but Alpha (at
-			   least) spreads them out.  */
-
-		        section->comdat =
-			  bfd_alloc (abfd, sizeof (struct bfd_comdat_info));
-		        if (section->comdat == NULL)
-		          abort ();
-		        section->comdat->symbol =
-			  (esym - esymstart) / bfd_coff_symesz (abfd);
-
-		        newname = bfd_alloc (abfd, strlen (symname) + 1);
-		        if (newname == NULL)
-		          abort ();
-
-		        strcpy (newname, symname);
-		        section->comdat->name = newname;
-
-		      }
-
-		      goto breakloop;
-		    }
-		}
-
-	      esym += (isym.n_numaux + 1) * bfd_coff_symesz (abfd);
-	    }
-	breakloop:
-	  /* SunOS requires a statement after any label.  */
-	  ;
+	  break;
+	case IMAGE_SCN_LNK_COMDAT:
+	  /* COMDAT gets very special treatment.  */
+	  sec_flags = handle_COMDAT (abfd, sec_flags, hdr, name, section);
+	  break;
+	default:
+	  /* Silently ignore for now.  */
+	  break;	  
 	}
+
+      /* If the section flag was not handled, report it here.  This will allow
+	 users of the BFD library to report a problem but continue executing.
+	 Tools which need to be aware of these problems (such as the linker)
+	 can override the default bfd_error_handler to intercept these reports.  */
+      if (unhandled != NULL)
+	(*_bfd_error_handler)
+	  (_("%s (%s): Section flag %s (0x%x) ignored"),
+	   bfd_get_filename (abfd), name, unhandled, flag);
     }
 
 #if defined (COFF_LONG_SECTION_NAMES) && defined (COFF_SUPPORT_GNU_LINKONCE)
diff --git a/bfd/coffgen.c b/bfd/coffgen.c
index 49b43ed..35e8f71 100644
--- a/bfd/coffgen.c
+++ b/bfd/coffgen.c
@@ -2188,6 +2188,9 @@
 					     &coff_data(abfd)->line_info))
     return false;
 
+  if (found)
+    return true;
+
   /* Also try examining DWARF2 debugging information.  */
   if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
 				     filename_ptr, functionname_ptr,
@@ -2195,9 +2198,6 @@
 				     &coff_data(abfd)->dwarf2_find_line_info))
     return true;
 
-if (found)
-    return true;
-
   *filename_ptr = 0;
   *functionname_ptr = 0;
   *line_ptr = 0;
diff --git a/bfd/config.bfd b/bfd/config.bfd
index ed55107..b6a6842 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -44,8 +44,10 @@
 m68*)	targ_archs=bfd_m68k_arch ;;
 m88*)	targ_archs=bfd_m88k_arch ;;
 mips*)	targ_archs=bfd_mips_arch ;;
+pdp11*)	targ_archs=bfd_pdp11_arch ;;
 pj*)	targ_archs="bfd_pj_arch bfd_i386_arch";;
 powerpc*) targ_archs="bfd_rs6000_arch bfd_powerpc_arch" ;;
+s390*)  targ_archs=bfd_s390_arch ;;
 rs6000)	targ_archs="bfd_rs6000_arch bfd_powerpc_arch" ;;
 sparc*) targ_archs=bfd_sparc_arch ;;
 v850*)	targ_archs=bfd_v850_arch ;;
@@ -84,7 +86,11 @@
   alpha*-*-*)
     targ_defvec=ecoffalpha_little_vec
     ;;
-  ia64*-*-linux-gnu* | ia64*-*-elf*)
+  ia64*-*-aix*)
+    targ_defvec=bfd_elf64_ia64_aix_little_vec
+    targ_selvecs="bfd_elf64_ia64_aix_big_vec bfd_efi_app_ia64_vec"
+    ;;
+  ia64*-*-freebsd* | ia64*-*-linux-gnu* | ia64*-*-elf*)
     targ_defvec=bfd_elf64_ia64_little_vec
     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
     ;;
@@ -92,7 +98,7 @@
     targ_defvec=bfd_elf64_ia64_big_vec
     targ_selvecs="bfd_elf32_ia64_big_vec"
     ;;
-  sparc64-*-netbsd*)
+  sparc64-*-freebsd* | sparc64-*-netbsd*)
     targ_defvec=bfd_elf64_sparc_vec
     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
     ;;
@@ -147,7 +153,7 @@
     targ_defvec=bfd_elf32_bigarm_vec
     targ_selvecs=bfd_elf32_littlearm_vec
     ;;
-  arm-*-elf | arm*-*-linux-gnu* | arm*-*-conix* | arm*-*-uclinux*)
+  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | arm*-*-uclinux*)
     targ_defvec=bfd_elf32_littlearm_vec
     targ_selvecs=bfd_elf32_bigarm_vec
     ;;
@@ -364,6 +370,10 @@
     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
     ;;
 #ifdef BFD64    
+  x86_64-*-freebsd*)
+    targ_defvec=bfd_elf64_x86_64_vec
+    targ_selvecs="bfd_elf32_i386_vec i386coff_vec bfd_efi_app_ia32_vec"
+    ;;
   x86_64-*-linux-gnu*)
     targ_defvec=bfd_elf64_x86_64_vec
     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
@@ -679,6 +689,11 @@
     targ_underscore=yes
     ;;
 
+  pdp11-*-*)
+    targ_defvec=pdp11_aout_vec
+    targ_underscore=yes
+    ;;
+
   pj-*-*)
     targ_defvec=bfd_elf32_pj_vec
     targ_selvecs="bfd_elf32_pj_vec bfd_elf32_pjl_vec"
@@ -689,7 +704,7 @@
     targ_selvecs="bfd_elf32_pjl_vec bfd_elf32_pj_vec bfd_elf32_i386_vec"
     ;;
 
-  powerpc-*-aix* | powerpc-*-beos*)
+  powerpc-*-aix* | powerpc-*-beos* | rs6000-*-*)
     targ_defvec=rs6000coff_vec
     targ_selvecs="rs6000coff64_vec"
     ;;
@@ -718,9 +733,14 @@
     targ_selvecs="bfd_powerpcle_pei_vec bfd_powerpc_pei_vec bfd_powerpcle_pe_vec bfd_powerpc_pe_vec"
     ;;
 
-  rs6000-*-*)
-    targ_defvec=rs6000coff_vec
+  s390-*-linux*)
+    targ_defvec=bfd_elf32_s390_vec
     ;;
+#ifdef BFD64
+  s390x-*-linux*)
+    targ_defvec=bfd_elf64_s390_vec
+    ;;
+#endif
 
   sh-*-linux*)
     targ_defvec=bfd_elf32_shblin_vec
diff --git a/bfd/configure b/bfd/configure
index d65a378..19d7e72 100755
--- a/bfd/configure
+++ b/bfd/configure
@@ -927,7 +927,7 @@
 
 PACKAGE=bfd
 
-VERSION=2.10.91
+VERSION=2.11.90
 
 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
   { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
@@ -5016,6 +5016,7 @@
 	;;
   alpha*-*-netbsd*)	COREFILE=netbsd-core.lo ;;
   alpha*-*-*)		COREFILE=osf-core.lo ;;
+  arm-*-freebsd*)	COREFILE='' ;;
   arm-*-riscix)		COREFILE=trad-core.lo ;;
   hppa*-*-hpux*)	COREFILE=hpux-core.lo ;;
   hppa*-*-hiux*)	COREFILE=hpux-core.lo ;;
@@ -5036,10 +5037,14 @@
 	COREFILE=trad-core.lo
 	TRAD_HEADER='"hosts/symmetry.h"'
 	;;
-  i[3456]86-*-bsd* | i[3456]86-*-freebsd*)
+  i[3456]86-*-bsd* | i[34567]86-*-freebsd[1234] | i[34567]86-*-freebsd[1234]\.* | i[34567]86-*-freebsd*aout*)
 	COREFILE=trad-core.lo
 	TRAD_HEADER='"hosts/i386bsd.h"'
 	;;
+  i[3456]86-*-freebsd*)
+	COREFILE=''
+	TRAD_HEADER='"hosts/i386bsd.h"'
+	;;
   i[3456]86-*-netbsd* | i[3456]86-*-openbsd*)
 	COREFILE=netbsd-core.lo
 	;;
@@ -5147,11 +5152,12 @@
 	;;
   rs6000-*-aix4*)	COREFILE=rs6000-core.lo ;;
   rs6000-*-*)		COREFILE=rs6000-core.lo ;;
-  powerpc-*-*bsd*)	COREFILE=netbsd-core.lo ;;
   powerpc-*-aix4*)	COREFILE=rs6000-core.lo ;;
   powerpc-*-aix*)	COREFILE=rs6000-core.lo ;;
   powerpc-*-beos*)	;;
+  powerpc-*-freebsd*)	COREFILE='' ;;
   powerpc-*-netbsd*)	COREFILE=netbsd-core.lo ;;
+  powerpc-*-*bsd*)	COREFILE=netbsd-core.lo ;;
   sparc-*-netbsd* | sparc-*-openbsd*)
 	COREFILE=netbsd-core.lo
 	;;
@@ -5193,17 +5199,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5197: checking for $ac_hdr" >&5
+echo "configure:5203: 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 5202 "configure"
+#line 5208 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5207: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5213: \"$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*
@@ -5231,12 +5237,12 @@
 
   if test "$ac_cv_header_sys_procfs_h" = yes; then
     echo $ac_n "checking for prstatus_t in sys/procfs.h""... $ac_c" 1>&6
-echo "configure:5235: checking for prstatus_t in sys/procfs.h" >&5
+echo "configure:5241: checking for prstatus_t in sys/procfs.h" >&5
  if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_prstatus_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5240 "configure"
+#line 5246 "configure"
 #include "confdefs.h"
 
 #define _SYSCALL32
@@ -5245,7 +5251,7 @@
 prstatus_t avar
 ; return 0; }
 EOF
-if { (eval echo configure:5249: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5255: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_have_sys_procfs_type_prstatus_t=yes
 else
@@ -5267,12 +5273,12 @@
  echo "$ac_t""$bfd_cv_have_sys_procfs_type_prstatus_t" 1>&6
 
     echo $ac_n "checking for prstatus32_t in sys/procfs.h""... $ac_c" 1>&6
-echo "configure:5271: checking for prstatus32_t in sys/procfs.h" >&5
+echo "configure:5277: checking for prstatus32_t in sys/procfs.h" >&5
  if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_prstatus32_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5276 "configure"
+#line 5282 "configure"
 #include "confdefs.h"
 
 #define _SYSCALL32
@@ -5281,7 +5287,7 @@
 prstatus32_t avar
 ; return 0; }
 EOF
-if { (eval echo configure:5285: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5291: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_have_sys_procfs_type_prstatus32_t=yes
 else
@@ -5303,12 +5309,12 @@
  echo "$ac_t""$bfd_cv_have_sys_procfs_type_prstatus32_t" 1>&6
 
     echo $ac_n "checking for prstatus_t.pr_who in sys/procfs.h""... $ac_c" 1>&6
-echo "configure:5307: checking for prstatus_t.pr_who in sys/procfs.h" >&5
+echo "configure:5313: checking for prstatus_t.pr_who in sys/procfs.h" >&5
  if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5312 "configure"
+#line 5318 "configure"
 #include "confdefs.h"
 
 #define _SYSCALL32
@@ -5317,7 +5323,7 @@
 prstatus_t avar; void* aref = (void*) &avar.pr_who
 ; return 0; }
 EOF
-if { (eval echo configure:5321: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5327: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who=yes
 else
@@ -5339,12 +5345,12 @@
  echo "$ac_t""$bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who" 1>&6
 
     echo $ac_n "checking for prstatus32_t.pr_who in sys/procfs.h""... $ac_c" 1>&6
-echo "configure:5343: checking for prstatus32_t.pr_who in sys/procfs.h" >&5
+echo "configure:5349: checking for prstatus32_t.pr_who in sys/procfs.h" >&5
  if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5348 "configure"
+#line 5354 "configure"
 #include "confdefs.h"
 
 #define _SYSCALL32
@@ -5353,7 +5359,7 @@
 prstatus32_t avar; void* aref = (void*) &avar.pr_who
 ; return 0; }
 EOF
-if { (eval echo configure:5357: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5363: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who=yes
 else
@@ -5375,12 +5381,12 @@
  echo "$ac_t""$bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who" 1>&6
 
     echo $ac_n "checking for pstatus_t in sys/procfs.h""... $ac_c" 1>&6
-echo "configure:5379: checking for pstatus_t in sys/procfs.h" >&5
+echo "configure:5385: checking for pstatus_t in sys/procfs.h" >&5
  if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_pstatus_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5384 "configure"
+#line 5390 "configure"
 #include "confdefs.h"
 
 #define _SYSCALL32
@@ -5389,7 +5395,7 @@
 pstatus_t avar
 ; return 0; }
 EOF
-if { (eval echo configure:5393: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5399: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_have_sys_procfs_type_pstatus_t=yes
 else
@@ -5411,12 +5417,12 @@
  echo "$ac_t""$bfd_cv_have_sys_procfs_type_pstatus_t" 1>&6
 
     echo $ac_n "checking for pxstatus_t in sys/procfs.h""... $ac_c" 1>&6
-echo "configure:5415: checking for pxstatus_t in sys/procfs.h" >&5
+echo "configure:5421: checking for pxstatus_t in sys/procfs.h" >&5
  if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_pxstatus_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5420 "configure"
+#line 5426 "configure"
 #include "confdefs.h"
 
 #define _SYSCALL32
@@ -5425,7 +5431,7 @@
 pxstatus_t avar
 ; return 0; }
 EOF
-if { (eval echo configure:5429: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5435: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_have_sys_procfs_type_pxstatus_t=yes
 else
@@ -5447,12 +5453,12 @@
  echo "$ac_t""$bfd_cv_have_sys_procfs_type_pxstatus_t" 1>&6
 
     echo $ac_n "checking for pstatus32_t in sys/procfs.h""... $ac_c" 1>&6
-echo "configure:5451: checking for pstatus32_t in sys/procfs.h" >&5
+echo "configure:5457: checking for pstatus32_t in sys/procfs.h" >&5
  if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_pstatus32_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5456 "configure"
+#line 5462 "configure"
 #include "confdefs.h"
 
 #define _SYSCALL32
@@ -5461,7 +5467,7 @@
 pstatus32_t avar
 ; return 0; }
 EOF
-if { (eval echo configure:5465: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5471: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_have_sys_procfs_type_pstatus32_t=yes
 else
@@ -5483,12 +5489,12 @@
  echo "$ac_t""$bfd_cv_have_sys_procfs_type_pstatus32_t" 1>&6
 
     echo $ac_n "checking for prpsinfo_t in sys/procfs.h""... $ac_c" 1>&6
-echo "configure:5487: checking for prpsinfo_t in sys/procfs.h" >&5
+echo "configure:5493: checking for prpsinfo_t in sys/procfs.h" >&5
  if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_prpsinfo_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5492 "configure"
+#line 5498 "configure"
 #include "confdefs.h"
 
 #define _SYSCALL32
@@ -5497,7 +5503,7 @@
 prpsinfo_t avar
 ; return 0; }
 EOF
-if { (eval echo configure:5501: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5507: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_have_sys_procfs_type_prpsinfo_t=yes
 else
@@ -5519,12 +5525,12 @@
  echo "$ac_t""$bfd_cv_have_sys_procfs_type_prpsinfo_t" 1>&6
 
     echo $ac_n "checking for prpsinfo32_t in sys/procfs.h""... $ac_c" 1>&6
-echo "configure:5523: checking for prpsinfo32_t in sys/procfs.h" >&5
+echo "configure:5529: checking for prpsinfo32_t in sys/procfs.h" >&5
  if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_prpsinfo32_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5528 "configure"
+#line 5534 "configure"
 #include "confdefs.h"
 
 #define _SYSCALL32
@@ -5533,7 +5539,7 @@
 prpsinfo32_t avar
 ; return 0; }
 EOF
-if { (eval echo configure:5537: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5543: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_have_sys_procfs_type_prpsinfo32_t=yes
 else
@@ -5555,12 +5561,12 @@
  echo "$ac_t""$bfd_cv_have_sys_procfs_type_prpsinfo32_t" 1>&6
 
     echo $ac_n "checking for psinfo_t in sys/procfs.h""... $ac_c" 1>&6
-echo "configure:5559: checking for psinfo_t in sys/procfs.h" >&5
+echo "configure:5565: checking for psinfo_t in sys/procfs.h" >&5
  if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_psinfo_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5564 "configure"
+#line 5570 "configure"
 #include "confdefs.h"
 
 #define _SYSCALL32
@@ -5569,7 +5575,7 @@
 psinfo_t avar
 ; return 0; }
 EOF
-if { (eval echo configure:5573: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5579: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_have_sys_procfs_type_psinfo_t=yes
 else
@@ -5591,12 +5597,12 @@
  echo "$ac_t""$bfd_cv_have_sys_procfs_type_psinfo_t" 1>&6
 
     echo $ac_n "checking for psinfo32_t in sys/procfs.h""... $ac_c" 1>&6
-echo "configure:5595: checking for psinfo32_t in sys/procfs.h" >&5
+echo "configure:5601: checking for psinfo32_t in sys/procfs.h" >&5
  if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_psinfo32_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5600 "configure"
+#line 5606 "configure"
 #include "confdefs.h"
 
 #define _SYSCALL32
@@ -5605,7 +5611,7 @@
 psinfo32_t avar
 ; return 0; }
 EOF
-if { (eval echo configure:5609: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5615: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_have_sys_procfs_type_psinfo32_t=yes
 else
@@ -5627,12 +5633,12 @@
  echo "$ac_t""$bfd_cv_have_sys_procfs_type_psinfo32_t" 1>&6
 
     echo $ac_n "checking for lwpstatus_t in sys/procfs.h""... $ac_c" 1>&6
-echo "configure:5631: checking for lwpstatus_t in sys/procfs.h" >&5
+echo "configure:5637: checking for lwpstatus_t in sys/procfs.h" >&5
  if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_lwpstatus_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5636 "configure"
+#line 5642 "configure"
 #include "confdefs.h"
 
 #define _SYSCALL32
@@ -5641,7 +5647,7 @@
 lwpstatus_t avar
 ; return 0; }
 EOF
-if { (eval echo configure:5645: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5651: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_have_sys_procfs_type_lwpstatus_t=yes
 else
@@ -5663,12 +5669,12 @@
  echo "$ac_t""$bfd_cv_have_sys_procfs_type_lwpstatus_t" 1>&6
 
     echo $ac_n "checking for lwpxstatus_t in sys/procfs.h""... $ac_c" 1>&6
-echo "configure:5667: checking for lwpxstatus_t in sys/procfs.h" >&5
+echo "configure:5673: checking for lwpxstatus_t in sys/procfs.h" >&5
  if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_lwpxstatus_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5672 "configure"
+#line 5678 "configure"
 #include "confdefs.h"
 
 #define _SYSCALL32
@@ -5677,7 +5683,7 @@
 lwpxstatus_t avar
 ; return 0; }
 EOF
-if { (eval echo configure:5681: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5687: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_have_sys_procfs_type_lwpxstatus_t=yes
 else
@@ -5699,12 +5705,12 @@
  echo "$ac_t""$bfd_cv_have_sys_procfs_type_lwpxstatus_t" 1>&6
 
     echo $ac_n "checking for lwpstatus_t.pr_context in sys/procfs.h""... $ac_c" 1>&6
-echo "configure:5703: checking for lwpstatus_t.pr_context in sys/procfs.h" >&5
+echo "configure:5709: checking for lwpstatus_t.pr_context in sys/procfs.h" >&5
  if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5708 "configure"
+#line 5714 "configure"
 #include "confdefs.h"
 
 #define _SYSCALL32
@@ -5713,7 +5719,7 @@
 lwpstatus_t avar; void* aref = (void*) &avar.pr_context
 ; return 0; }
 EOF
-if { (eval echo configure:5717: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5723: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context=yes
 else
@@ -5735,12 +5741,12 @@
  echo "$ac_t""$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context" 1>&6
 
     echo $ac_n "checking for lwpstatus_t.pr_reg in sys/procfs.h""... $ac_c" 1>&6
-echo "configure:5739: checking for lwpstatus_t.pr_reg in sys/procfs.h" >&5
+echo "configure:5745: checking for lwpstatus_t.pr_reg in sys/procfs.h" >&5
  if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5744 "configure"
+#line 5750 "configure"
 #include "confdefs.h"
 
 #define _SYSCALL32
@@ -5749,7 +5755,7 @@
 lwpstatus_t avar; void* aref = (void*) &avar.pr_reg
 ; return 0; }
 EOF
-if { (eval echo configure:5753: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5759: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg=yes
 else
@@ -5771,12 +5777,12 @@
  echo "$ac_t""$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg" 1>&6
 
     echo $ac_n "checking for win32_pstatus_t in sys/procfs.h""... $ac_c" 1>&6
-echo "configure:5775: checking for win32_pstatus_t in sys/procfs.h" >&5
+echo "configure:5781: checking for win32_pstatus_t in sys/procfs.h" >&5
  if eval "test \"`echo '$''{'bfd_cv_have_sys_procfs_type_win32_pstatus_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5780 "configure"
+#line 5786 "configure"
 #include "confdefs.h"
 
 #define _SYSCALL32
@@ -5785,7 +5791,7 @@
 win32_pstatus_t avar
 ; return 0; }
 EOF
-if { (eval echo configure:5789: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5795: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_have_sys_procfs_type_win32_pstatus_t=yes
 else
@@ -5928,7 +5934,7 @@
     b_out_vec_big_host)		tb="$tb bout.lo aout32.lo" ;;
     b_out_vec_little_host)	tb="$tb bout.lo aout32.lo" ;;
     bfd_efi_app_ia32_vec)	tb="$tb efi-app-ia32.lo peigen.lo cofflink.lo" ;;
-    bfd_efi_app_ia64_vec)	tb="$tb efi-app-ia64.lo peigen.lo cofflink.lo"
+    bfd_efi_app_ia64_vec)	tb="$tb efi-app-ia64.lo pepigen.lo cofflink.lo"
   				target64=true ;;
     bfd_elf64_alpha_vec)	tb="$tb elf64-alpha.lo elf64.lo $elf"
 				target64=true ;;
@@ -5939,6 +5945,11 @@
 				target64=true ;;
     bfd_elf64_ia64_big_vec)	tb="$tb elf64-ia64.lo elf64.lo $elf"
 				target64=true ;;
+    bfd_elf64_ia64_aix_little_vec)	
+				tb="$tb elf64-ia64.lo elf64.lo $elf"
+				target64=true ;;
+    bfd_elf64_ia64_aix_big_vec)	tb="$tb elf64-ia64.lo elf64.lo $elf"
+				target64=true ;;
     bfd_elf32_ia64_big_vec)	tb="$tb elf32-ia64.lo elf32.lo $elf" ;;
     bfd_elf32_avr_vec)		tb="$tb elf32-avr.lo elf32.lo $elf" ;;
     bfd_elf32_littlearc_vec)	tb="$tb elf32-arc.lo elf32.lo $elf" ;;
@@ -5982,6 +5993,7 @@
     bfd_elf32_pjl_vec)          tb="$tb elf32-pj.lo elf32.lo $elf";;
     bfd_elf32_powerpc_vec)	tb="$tb elf32-ppc.lo elf32.lo $elf" ;;
     bfd_elf32_powerpcle_vec)	tb="$tb elf32-ppc.lo elf32.lo $elf" ;;
+    bfd_elf32_s390_vec)		tb="$tb elf32-s390.lo elf32.lo $elf" ;;
     bfd_elf32_sh_vec)		tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo" ;;
     bfd_elf32_shl_vec)		tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo" ;;
     bfd_elf32_shlin_vec)	tb="$tb elf32-sh-lin.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
@@ -5994,6 +6006,8 @@
 				target64=true ;;
     bfd_elf64_little_generic_vec) tb="$tb elf64-gen.lo elf64.lo $elf"
 				target64=true ;;
+    bfd_elf64_s390_vec)		tb="$tb elf64-s390.lo elf64.lo $elf" 
+				target64=true ;;
     bfd_elf64_sparc_vec)	tb="$tb elf64-sparc.lo elf64.lo $elf"
 				target64=true ;;
     cisco_core_big_vec)		tb="$tb cisco-core.lo" ;;
@@ -6058,6 +6072,7 @@
     nlm32_powerpc_vec)		tb="$tb nlm32-ppc.lo nlm32.lo nlm.lo" ;;
     pc532netbsd_vec)		tb="$tb ns32knetbsd.lo aout-ns32k.lo" ;;
     pc532machaout_vec)		tb="$tb pc532-mach.lo aout-ns32k.lo" ;;
+    pdp11_aout_vec)		tb="$tb pdp11.lo" ;;
     pmac_xcoff_vec)		tb="$tb coff-pmac.lo xcofflink.lo" ;;
     rs6000coff_vec)		tb="$tb coff-rs6000.lo xcofflink.lo" ;;
     bfd_powerpc_pe_vec)         tb="$tb pe-ppc.lo peigen.lo cofflink.lo" ;;  
@@ -6179,17 +6194,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6183: checking for $ac_hdr" >&5
+echo "configure:6198: 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 6188 "configure"
+#line 6203 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6193: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6208: \"$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*
@@ -6218,12 +6233,12 @@
 for ac_func in getpagesize
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6222: checking for $ac_func" >&5
+echo "configure:6237: 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 6227 "configure"
+#line 6242 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -6246,7 +6261,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:6250: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6265: \"$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
@@ -6271,7 +6286,7 @@
 done
 
 echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:6275: checking for working mmap" >&5
+echo "configure:6290: 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
@@ -6279,7 +6294,7 @@
   ac_cv_func_mmap_fixed_mapped=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 6283 "configure"
+#line 6298 "configure"
 #include "confdefs.h"
 
 /* Thanks to Mike Haertel and Jim Avera for this test.
@@ -6419,7 +6434,7 @@
 }
 
 EOF
-if { (eval echo configure:6423: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6438: \"$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
@@ -6444,12 +6459,12 @@
 for ac_func in madvise mprotect
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6448: checking for $ac_func" >&5
+echo "configure:6463: 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 6453 "configure"
+#line 6468 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -6472,7 +6487,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:6476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6491: \"$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
diff --git a/bfd/configure.host b/bfd/configure.host
index c72a4b3..f2104eb 100644
--- a/bfd/configure.host
+++ b/bfd/configure.host
@@ -28,6 +28,7 @@
 hppa*-*-osf*)		HDEFINES=-DHOST_HPPAOSF ;;
 
 ia64-*-linux*)		host64=true; HOST_64BIT_TYPE=long ;;
+ia64-*-aix*)		host64=true; HOST_64BIT_TYPE=long ;;
 
 i[3456]86-sequent-bsd*)	HDEFINES=-Dshared=genshared ;;
 i[3456]86-sequent-sysv4*) ;;
diff --git a/bfd/configure.in b/bfd/configure.in
index d643b97..2346166 100644
--- a/bfd/configure.in
+++ b/bfd/configure.in
@@ -7,7 +7,7 @@
 AC_CANONICAL_SYSTEM
 AC_ISC_POSIX
 
-AM_INIT_AUTOMAKE(bfd, 2.10.91)
+AM_INIT_AUTOMAKE(bfd, 2.11.90)
 
 dnl These must be called before AM_PROG_LIBTOOL, because it may want
 dnl to call AC_CHECK_PROG.
@@ -144,6 +144,7 @@
 	;;
   alpha*-*-netbsd*)	COREFILE=netbsd-core.lo ;;
   alpha*-*-*)		COREFILE=osf-core.lo ;;
+  arm-*-freebsd*)	COREFILE='' ;;
   arm-*-riscix)		COREFILE=trad-core.lo ;;
   hppa*-*-hpux*)	COREFILE=hpux-core.lo ;;
   hppa*-*-hiux*)	COREFILE=hpux-core.lo ;;
@@ -169,12 +170,18 @@
 	TRAD_HEADER='"hosts/symmetry.h"'
 	;;
 changequote(,)dnl
-  i[3456]86-*-bsd* | i[3456]86-*-freebsd*)
+  i[3456]86-*-bsd* | i[34567]86-*-freebsd[1234] | i[34567]86-*-freebsd[1234]\.* | i[34567]86-*-freebsd*aout*)
 changequote([,])dnl
 	COREFILE=trad-core.lo
 	TRAD_HEADER='"hosts/i386bsd.h"'
 	;;
 changequote(,)dnl
+  i[3456]86-*-freebsd*)
+changequote([,])dnl
+	COREFILE=''
+	TRAD_HEADER='"hosts/i386bsd.h"'
+	;;
+changequote(,)dnl
   i[3456]86-*-netbsd* | i[3456]86-*-openbsd*)
 changequote([,])dnl
 	COREFILE=netbsd-core.lo
@@ -297,11 +304,12 @@
 	;;
   rs6000-*-aix4*)	COREFILE=rs6000-core.lo ;;
   rs6000-*-*)		COREFILE=rs6000-core.lo ;;
-  powerpc-*-*bsd*)	COREFILE=netbsd-core.lo ;;
   powerpc-*-aix4*)	COREFILE=rs6000-core.lo ;;
   powerpc-*-aix*)	COREFILE=rs6000-core.lo ;;
   powerpc-*-beos*)	;;
+  powerpc-*-freebsd*)	COREFILE='' ;;
   powerpc-*-netbsd*)	COREFILE=netbsd-core.lo ;;
+  powerpc-*-*bsd*)	COREFILE=netbsd-core.lo ;;
   sparc-*-netbsd* | sparc-*-openbsd*)
 	COREFILE=netbsd-core.lo
 	;;
@@ -477,7 +485,7 @@
     b_out_vec_big_host)		tb="$tb bout.lo aout32.lo" ;;
     b_out_vec_little_host)	tb="$tb bout.lo aout32.lo" ;;
     bfd_efi_app_ia32_vec)	tb="$tb efi-app-ia32.lo peigen.lo cofflink.lo" ;;
-    bfd_efi_app_ia64_vec)	tb="$tb efi-app-ia64.lo peigen.lo cofflink.lo"
+    bfd_efi_app_ia64_vec)	tb="$tb efi-app-ia64.lo pepigen.lo cofflink.lo"
   				target64=true ;;
     bfd_elf64_alpha_vec)	tb="$tb elf64-alpha.lo elf64.lo $elf"
 				target64=true ;;
@@ -488,6 +496,11 @@
 				target64=true ;;
     bfd_elf64_ia64_big_vec)	tb="$tb elf64-ia64.lo elf64.lo $elf"
 				target64=true ;;
+    bfd_elf64_ia64_aix_little_vec)	
+				tb="$tb elf64-ia64.lo elf64.lo $elf"
+				target64=true ;;
+    bfd_elf64_ia64_aix_big_vec)	tb="$tb elf64-ia64.lo elf64.lo $elf"
+				target64=true ;;
     bfd_elf32_ia64_big_vec)	tb="$tb elf32-ia64.lo elf32.lo $elf" ;;
     bfd_elf32_avr_vec)		tb="$tb elf32-avr.lo elf32.lo $elf" ;;
     bfd_elf32_littlearc_vec)	tb="$tb elf32-arc.lo elf32.lo $elf" ;;
@@ -531,6 +544,7 @@
     bfd_elf32_pjl_vec)          tb="$tb elf32-pj.lo elf32.lo $elf";;
     bfd_elf32_powerpc_vec)	tb="$tb elf32-ppc.lo elf32.lo $elf" ;;
     bfd_elf32_powerpcle_vec)	tb="$tb elf32-ppc.lo elf32.lo $elf" ;;
+    bfd_elf32_s390_vec)		tb="$tb elf32-s390.lo elf32.lo $elf" ;;
     bfd_elf32_sh_vec)		tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo" ;;
     bfd_elf32_shl_vec)		tb="$tb elf32-sh.lo elf32.lo $elf coff-sh.lo" ;;
     bfd_elf32_shlin_vec)	tb="$tb elf32-sh-lin.lo elf32.lo $elf coff-sh.lo cofflink.lo" ;;
@@ -543,6 +557,8 @@
 				target64=true ;;
     bfd_elf64_little_generic_vec) tb="$tb elf64-gen.lo elf64.lo $elf"
 				target64=true ;;
+    bfd_elf64_s390_vec)		tb="$tb elf64-s390.lo elf64.lo $elf" 
+				target64=true ;;
     bfd_elf64_sparc_vec)	tb="$tb elf64-sparc.lo elf64.lo $elf"
 				target64=true ;;
     cisco_core_big_vec)		tb="$tb cisco-core.lo" ;;
@@ -607,6 +623,7 @@
     nlm32_powerpc_vec)		tb="$tb nlm32-ppc.lo nlm32.lo nlm.lo" ;;
     pc532netbsd_vec)		tb="$tb ns32knetbsd.lo aout-ns32k.lo" ;;
     pc532machaout_vec)		tb="$tb pc532-mach.lo aout-ns32k.lo" ;;
+    pdp11_aout_vec)		tb="$tb pdp11.lo" ;;
     pmac_xcoff_vec)		tb="$tb coff-pmac.lo xcofflink.lo" ;;
     rs6000coff_vec)		tb="$tb coff-rs6000.lo xcofflink.lo" ;;
     bfd_powerpc_pe_vec)         tb="$tb pe-ppc.lo peigen.lo cofflink.lo" ;;  
diff --git a/bfd/cpu-ia64-opc.c b/bfd/cpu-ia64-opc.c
index 84774d2..2cd96c3 100644
--- a/bfd/cpu-ia64-opc.c
+++ b/bfd/cpu-ia64-opc.c
@@ -421,7 +421,7 @@
     { CST, ins_const, ext_const, "ar.ccv",	{{ 0, 0}}, 0, "ar.ccv" },
     { CST, ins_const, ext_const, "ar.pfs",	{{ 0, 0}}, 0, "ar.pfs" },
     { CST, ins_const, ext_const, "1",		{{ 0, 0}}, 0, "1" },
-    { CST, ins_const, ext_const, "8",		{{ 0, 0}}, 0, "1" },
+    { CST, ins_const, ext_const, "8",		{{ 0, 0}}, 0, "8" },
     { CST, ins_const, ext_const, "16",		{{ 0, 0}}, 0, "16" },
     { CST, ins_const, ext_const, "r0",		{{ 0, 0}}, 0, "r0" },
     { CST, ins_const, ext_const, "ip",		{{ 0, 0}}, 0, "ip" },
@@ -551,7 +551,7 @@
       "a 21-bit unsigned" },
     { ABS, ins_imms,  ext_imms,  0,				/* IMM22 */
       {{ 7, 13}, { 9, 27}, { 5, 22}, { 1, 36}}, SDEC,
-      "a 22-bit integer" },
+      "a 22-bit signed integer" },
     { ABS, ins_immu,  ext_immu,  0,				/* IMMU24 */
       {{21,  6}, { 2, 31}, { 1, 36}}, 0,
       "a 24-bit unsigned" },
diff --git a/bfd/cpu-pdp11.c b/bfd/cpu-pdp11.c
new file mode 100644
index 0000000..6d8971c
--- /dev/null
+++ b/bfd/cpu-pdp11.c
@@ -0,0 +1,39 @@
+/* BFD back-end for PDP-11 support.
+   Copyright (C) 2001 Free Software Foundation, Inc.
+
+This file is part of BFD, the Binary File Descriptor library.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#include "bfd.h"
+#include "sysdep.h"
+#include "libbfd.h"
+
+const bfd_arch_info_type bfd_pdp11_arch =
+  {
+    16,	/* 16 bits in a word */
+    16,	/* 16 bits in an address */
+    8,	/* 8 bits in a byte */
+    bfd_arch_pdp11,
+    0,	/* only 1 machine */
+    "pdp11",
+    "pdp11",
+    1,		/* aligment = 16 bit */
+    true, /* the one and only */
+    bfd_default_compatible, 
+    bfd_default_scan ,
+    0,
+  };
+
diff --git a/bfd/cpu-s390.c b/bfd/cpu-s390.c
new file mode 100644
index 0000000..15eb9a5
--- /dev/null
+++ b/bfd/cpu-s390.c
@@ -0,0 +1,56 @@
+/* BFD support for the s390 processor.
+   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Contributed by Carl B. Pedersen and Martin Schwidefsky.
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
+#include "bfd.h"
+#include "sysdep.h"
+#include "libbfd.h"
+
+const bfd_arch_info_type bfd_s390_esame_arch =
+{
+    64,        /* bits in a word */
+    64,        /* bits in an address */
+    8, /* bits in a byte */
+    bfd_arch_s390,
+    bfd_mach_s390_esame,
+    "s390",
+    "s390:esame",
+    3, /* section alignment power */
+    true, /* the default */
+    bfd_default_compatible,
+    bfd_default_scan,
+    NULL
+};
+
+const bfd_arch_info_type bfd_s390_arch =
+{
+    32,	/* bits in a word */
+    32,	/* bits in an address */
+    8,	/* bits in a byte */
+    bfd_arch_s390,
+    bfd_mach_s390_esa,
+    "s390",
+    "s390:390",
+    3, /* section alignment power */
+    true, /* the default */
+    bfd_default_compatible,
+    bfd_default_scan,
+    &bfd_s390_esame_arch
+};
diff --git a/bfd/doc/Makefile.in b/bfd/doc/Makefile.in
index dfc33e1..d4c30a6 100644
--- a/bfd/doc/Makefile.in
+++ b/bfd/doc/Makefile.in
@@ -194,7 +194,7 @@
 
 DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
 
-TAR = gtar
+TAR = tar
 GZIP_ENV = --best
 all: all-redirect
 .SUFFIXES:
diff --git a/bfd/ecoff.c b/bfd/ecoff.c
index f22112b..afe9bc1 100644
--- a/bfd/ecoff.c
+++ b/bfd/ecoff.c
@@ -1,5 +1,5 @@
 /* Generic ECOFF (Extended-COFF) routines.
-   Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000
+   Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001
    Free Software Foundation, Inc.
    Original version by Per Bothner.
    Full support added by Ian Lance Taylor, ian@cygnus.com.
@@ -74,20 +74,26 @@
 
 static asection bfd_debug_section =
 {
-  /* name,   index, next, flags, set_vma, reloc_done, linker_mark, gc_mark */
-  "*DEBUG*", 0,     0,    0,     0,       0,          0,           0,
-  /* vma, lma, _cooked_size, _raw_size, output_offset, output_section, */
-  0,      0,   0,            0,         0,             NULL,
-  /* alig, reloc..., orel..., reloc_count, filepos, rel_..., line_... */
-  0,       0,        0,       0,           0,       0, 	   0,
-  /* userdata, contents, lineno, lineno_count */
-  0,           0,        0,      0,
-  /* comdat_info, moving_line_filepos, target_index, used_by_bfd,  */
-  NULL,           0,                   0,            0,
-  /* cons, owner, symbol */
-  0,       0,     (struct symbol_cache_entry *) NULL,
-  /* symbol_ptr_ptr,                   link_order_head, ..._tail */
-  (struct symbol_cache_entry **) NULL, NULL,            NULL
+  /* name,   id,  index, next, flags, user_set_vma, reloc_done,    */ 
+  "*DEBUG*", 0,    0,    0,     0,    0,            0,        
+  /* linker_mark, gc_mark, segment_mark, vma, lma, _cooked_size,   */ 
+     0,           0,       0,            0,   0,   0,
+  /* _raw_size, output_offset, output_section, alignment_power,    */
+     0,         0,             NULL,           0,
+  /* relocation, orelocation, reloc_count, filepos, rel_filepos,   */
+     0,          0,           0,           0,       0,
+  /* line_filepos, userdata, contents, lineno, lineno_count,       */
+     0,            NULL,     NULL,     NULL,   0,
+  /* comdat, kept_section, moving_line_filepos, target_index,      */
+     NULL,   NULL,         0,                   0,
+  /* used_by_bfd, constructor_chain, owner,                        */
+     NULL,        NULL,              NULL,
+  /* symbol,                                                       */
+     (struct symbol_cache_entry *) NULL,
+  /* symbol_ptr_ptr,                                               */
+     (struct symbol_cache_entry **) NULL,
+  /* link_order_head, link_order_tail                              */
+     NULL,            NULL
 };
 
 /* Create an ECOFF object.  */
diff --git a/bfd/efi-app-ia64.c b/bfd/efi-app-ia64.c
index b3182dc..4569c42 100644
--- a/bfd/efi-app-ia64.c
+++ b/bfd/efi-app-ia64.c
@@ -1,5 +1,5 @@
 /* BFD back-end for HP/Intel IA-64 EFI application files.
-   Copyright 1999 Free Software Foundation, Inc.
+   Copyright 1999, 2001 Free Software Foundation, Inc.
    Contributed by David Mosberger <davidm@hpl.hp.com>
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -25,11 +25,11 @@
 #define TARGET_NAME "efi-app-ia64"
 #define COFF_IMAGE_WITH_PE
 #define COFF_WITH_PE
-#define COFF_WITH_PEP64
+#define COFF_WITH_pep
 #define PCRELOFFSET true
 #define TARGET_UNDERSCORE '_'
 #define COFF_LONG_SECTION_NAMES
-#define PEI_DEFAULT_TARGET_SUBSYSTEM	IMAGE_SUBSYSTEM_EFI_APPLICATION
+#define PEI_TARGET_SUBSYSTEM		IMAGE_SUBSYSTEM_EFI_APPLICATION
 #define PEI_FORCE_MINIMUM_ALIGNMENT
 
 #include "coff-ia64.c"
diff --git a/bfd/elf-m10200.c b/bfd/elf-m10200.c
index 0053e0e..b6aea65 100644
--- a/bfd/elf-m10200.c
+++ b/bfd/elf-m10200.c
@@ -1,5 +1,5 @@
 /* Matsushita 10200 specific support for 32-bit ELF
-   Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
 
 This file is part of BFD, the Binary File Descriptor library.
 
@@ -35,8 +35,7 @@
    does absolutely nothing.  */
 #define USE_RELA
 
-enum reloc_type
-{
+enum reloc_type {
   R_MN10200_NONE = 0,
   R_MN10200_32,
   R_MN10200_16,
@@ -48,8 +47,7 @@
   R_MN10200_MAX
 };
 
-static reloc_howto_type elf_mn10200_howto_table[] =
-{
+static reloc_howto_type elf_mn10200_howto_table[] = {
   /* Dummy relocation.  Does nothing.  */
   HOWTO (R_MN10200_NONE,
 	 0,
@@ -165,20 +163,18 @@
 	 true),
 };
 
-struct mn10200_reloc_map
-{
+struct mn10200_reloc_map {
   bfd_reloc_code_real_type bfd_reloc_val;
   unsigned char elf_reloc_val;
 };
 
-static const struct mn10200_reloc_map mn10200_reloc_map[] =
-{
-  { BFD_RELOC_NONE, R_MN10200_NONE, },
-  { BFD_RELOC_32, R_MN10200_32, },
-  { BFD_RELOC_16, R_MN10200_16, },
-  { BFD_RELOC_8, R_MN10200_8, },
-  { BFD_RELOC_24, R_MN10200_24, },
-  { BFD_RELOC_8_PCREL, R_MN10200_PCREL8, },
+static const struct mn10200_reloc_map mn10200_reloc_map[] = {
+  { BFD_RELOC_NONE    , R_MN10200_NONE   , },
+  { BFD_RELOC_32      , R_MN10200_32     , },
+  { BFD_RELOC_16      , R_MN10200_16     , },
+  { BFD_RELOC_8       , R_MN10200_8      , },
+  { BFD_RELOC_24      , R_MN10200_24     , },
+  { BFD_RELOC_8_PCREL , R_MN10200_PCREL8 , },
   { BFD_RELOC_16_PCREL, R_MN10200_PCREL16, },
   { BFD_RELOC_24_PCREL, R_MN10200_PCREL24, },
 };
@@ -250,7 +246,7 @@
     case R_MN10200_16:
       value += addend;
 
-      if ((long)value > 0x7fff || (long)value < -0x8000)
+      if ((long) value > 0x7fff || (long) value < -0x8000)
 	return bfd_reloc_overflow;
 
       bfd_put_16 (input_bfd, value, hit_data);
@@ -259,7 +255,7 @@
     case R_MN10200_8:
       value += addend;
 
-      if ((long)value > 0x7f || (long)value < -0x80)
+      if ((long) value > 0x7f || (long) value < -0x80)
 	return bfd_reloc_overflow;
 
       bfd_put_8 (input_bfd, value, hit_data);
@@ -268,7 +264,7 @@
     case R_MN10200_24:
       value += addend;
 
-      if ((long)value > 0x7fffff || (long)value < -0x800000)
+      if ((long) value > 0x7fffff || (long) value < -0x800000)
 	return bfd_reloc_overflow;
 
       value &= 0xffffff;
@@ -282,8 +278,8 @@
       value -= (offset + 1);
       value += addend;
 
-      if ((long)value > 0xff || (long)value < -0x100)
-        return bfd_reloc_overflow;
+      if ((long) value > 0xff || (long) value < -0x100)
+	return bfd_reloc_overflow;
 
       bfd_put_8 (input_bfd, value, hit_data);
       return bfd_reloc_ok;
@@ -294,8 +290,8 @@
       value -= (offset + 2);
       value += addend;
 
-      if ((long)value > 0xffff || (long)value < -0x10000)
-        return bfd_reloc_overflow;
+      if ((long) value > 0xffff || (long) value < -0x10000)
+	return bfd_reloc_overflow;
 
       bfd_put_16 (input_bfd, value, hit_data);
       return bfd_reloc_ok;
@@ -306,8 +302,8 @@
       value -= (offset + 3);
       value += addend;
 
-      if ((long)value > 0xffffff || (long)value < -0x1000000)
-        return bfd_reloc_overflow;
+      if ((long) value > 0xffffff || (long) value < -0x1000000)
+	return bfd_reloc_overflow;
 
       value &= 0xffffff;
       value |= (bfd_get_32 (input_bfd, hit_data) & 0xff000000);
@@ -422,7 +418,7 @@
       if (r != bfd_reloc_ok)
 	{
 	  const char *name;
-	  const char *msg = (const char *)0;
+	  const char *msg = (const char *) 0;
 
 	  if (h != NULL)
 	    name = h->root.root.string;
@@ -667,7 +663,7 @@
 	  /* See if the value will fit in 16 bits, note the high value is
 	     0x7fff + 2 as the target will be two bytes closer if we are
 	     able to relax.  */
-	  if ((long)value < 0x8001 && (long)value > -0x8000)
+	  if ((long) value < 0x8001 && (long) value > -0x8000)
 	    {
 	      unsigned char code;
 
@@ -725,7 +721,7 @@
 	  /* See if the value will fit in 8 bits, note the high value is
 	     0x7f + 1 as the target will be one bytes closer if we are
 	     able to relax.  */
-	  if ((long)value < 0x80 && (long)value > -0x80)
+	  if ((long) value < 0x80 && (long) value > -0x80)
 	    {
 	      unsigned char code;
 
@@ -845,60 +841,60 @@
 	  /* Reverse the condition of the first branch.  */
 	  switch (code)
 	    {
-	      case 0xfc:
-		code = 0xfd;
-		break;
-	      case 0xfd:
-		code = 0xfc;
-		break;
-	      case 0xfe:
-		code = 0xff;
-		break;
-	      case 0xff:
-		code = 0xfe;
-		break;
-	      case 0xe8:
-		code = 0xe9;
-		break;
-	      case 0xe9:
-		code = 0xe8;
-		break;
-	      case 0xe0:
-		code = 0xe2;
-		break;
-	      case 0xe2:
-		code = 0xe0;
-		break;
-	      case 0xe3:
-		code = 0xe1;
-		break;
-	      case 0xe1:
-		code = 0xe3;
-		break;
-	      case 0xe4:
-		code = 0xe6;
-		break;
-	      case 0xe6:
-		code = 0xe4;
-		break;
-	      case 0xe7:
-		code = 0xe5;
-		break;
-	      case 0xe5:
-		code = 0xe7;
-		break;
-	      case 0xec:
-		code = 0xed;
-		break;
-	      case 0xed:
-		code = 0xec;
-		break;
-	      case 0xee:
-		code = 0xef;
-		break;
-	      case 0xef:
-		code = 0xee;
-		break;
+	    case 0xfc:
+	      code = 0xfd;
+	      break;
+	    case 0xfd:
+	      code = 0xfc;
+	      break;
+	    case 0xfe:
+	      code = 0xff;
+	      break;
+	    case 0xff:
+	      code = 0xfe;
+	      break;
+	    case 0xe8:
+	      code = 0xe9;
+	      break;
+	    case 0xe9:
+	      code = 0xe8;
+	      break;
+	    case 0xe0:
+	      code = 0xe2;
+	      break;
+	    case 0xe2:
+	      code = 0xe0;
+	      break;
+	    case 0xe3:
+	      code = 0xe1;
+	      break;
+	    case 0xe1:
+	      code = 0xe3;
+	      break;
+	    case 0xe4:
+	      code = 0xe6;
+	      break;
+	    case 0xe6:
+	      code = 0xe4;
+	      break;
+	    case 0xe7:
+	      code = 0xe5;
+	      break;
+	    case 0xe5:
+	      code = 0xe7;
+	      break;
+	    case 0xec:
+	      code = 0xed;
+	      break;
+	    case 0xed:
+	      code = 0xec;
+	      break;
+	    case 0xee:
+	      code = 0xef;
+	      break;
+	    case 0xef:
+	      code = 0xee;
+	      break;
 	    }
 	  bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
 
@@ -929,7 +925,7 @@
 	  /* See if the value will fit in 16 bits.
 	     We allow any 16bit match here.  We prune those we can't
 	     handle below.  */
-	  if ((long)value < 0x7fff && (long)value > -0x8000)
+	  if ((long) value < 0x7fff && (long) value > -0x8000)
 	    {
 	      unsigned char code;
 
@@ -1072,20 +1068,20 @@
 		     move the value out of high mem and thus not fit
 		     in a signed 16bit value.  */
 		  if (((code & 0xfc) == 0x78
-			|| (code & 0xfc) == 0x60
-			|| (code & 0xfc) == 0x64
-			|| (code & 0xfc) == 0x68
-			|| (code & 0xfc) == 0x6c
-			|| (code & 0xfc) == 0x80
-			|| (code & 0xfc) == 0xf0
-			|| (code & 0xfc) == 0x00
-			|| (code & 0xfc) == 0x10
-			|| (code & 0xfc) == 0xb0
-			|| (code & 0xfc) == 0x30
-			|| (code & 0xfc) == 0xa0
-			|| (code & 0xfc) == 0x20
-			|| (code & 0xfc) == 0x90)
-		       && (value & 0x8000) != 0)
+		       || (code & 0xfc) == 0x60
+		       || (code & 0xfc) == 0x64
+		       || (code & 0xfc) == 0x68
+		       || (code & 0xfc) == 0x6c
+		       || (code & 0xfc) == 0x80
+		       || (code & 0xfc) == 0xf0
+		       || (code & 0xfc) == 0x00
+		       || (code & 0xfc) == 0x10
+		       || (code & 0xfc) == 0xb0
+		       || (code & 0xfc) == 0x30
+		       || (code & 0xfc) == 0xa0
+		       || (code & 0xfc) == 0x20
+		       || (code & 0xfc) == 0x90)
+		      && (value & 0x8000) != 0)
 		    continue;
 
 		  /* Note that we've changed the reldection contents, etc.  */
diff --git a/bfd/elf-m10300.c b/bfd/elf-m10300.c
index 9208857..19f03a7 100644
--- a/bfd/elf-m10300.c
+++ b/bfd/elf-m10300.c
@@ -1,5 +1,6 @@
 /* Matsushita 10300 specific support for 32-bit ELF
-   Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+   Free Software Foundation, Inc.
 
 This file is part of BFD, the Binary File Descriptor library.
 
@@ -23,8 +24,7 @@
 #include "elf-bfd.h"
 #include "elf/mn10300.h"
 
-struct elf32_mn10300_link_hash_entry
-{
+struct elf32_mn10300_link_hash_entry {
   /* The basic elf link hash table entry.  */
   struct elf_link_hash_entry root;
 
@@ -62,8 +62,7 @@
 /* We derive a hash table from the main elf linker hash table so
    we can store state variables and a secondary hash table without
    resorting to global variables.  */
-struct elf32_mn10300_link_hash_table
-{
+struct elf32_mn10300_link_hash_table {
   /* The main hash table.  */
   struct elf_link_hash_table root;
 
@@ -119,8 +118,7 @@
    does absolutely nothing.  */
 #define USE_RELA
 
-static reloc_howto_type elf_mn10300_howto_table[] =
-{
+static reloc_howto_type elf_mn10300_howto_table[] = {
   /* Dummy relocation.  Does nothing.  */
   HOWTO (R_MN10300_NONE,
 	 0,
@@ -264,17 +262,14 @@
 	 0xffffff,
 	 0xffffff,
 	 false),
-
 };
 
-struct mn10300_reloc_map
-{
+struct mn10300_reloc_map {
   bfd_reloc_code_real_type bfd_reloc_val;
   unsigned char elf_reloc_val;
 };
 
-static const struct mn10300_reloc_map mn10300_reloc_map[] =
-{
+static const struct mn10300_reloc_map mn10300_reloc_map[] = {
   { BFD_RELOC_NONE, R_MN10300_NONE, },
   { BFD_RELOC_32, R_MN10300_32, },
   { BFD_RELOC_16, R_MN10300_16, },
@@ -459,7 +454,7 @@
     case R_MN10300_24:
       value += addend;
 
-      if ((long)value > 0x7fffff || (long)value < -0x800000)
+      if ((long) value > 0x7fffff || (long) value < -0x800000)
 	return bfd_reloc_overflow;
 
       bfd_put_8 (input_bfd, value & 0xff, hit_data);
@@ -470,7 +465,7 @@
     case R_MN10300_16:
       value += addend;
 
-      if ((long)value > 0x7fff || (long)value < -0x8000)
+      if ((long) value > 0x7fff || (long) value < -0x8000)
 	return bfd_reloc_overflow;
 
       bfd_put_16 (input_bfd, value, hit_data);
@@ -479,7 +474,7 @@
     case R_MN10300_8:
       value += addend;
 
-      if ((long)value > 0x7f || (long)value < -0x80)
+      if ((long) value > 0x7f || (long) value < -0x80)
 	return bfd_reloc_overflow;
 
       bfd_put_8 (input_bfd, value, hit_data);
@@ -491,7 +486,7 @@
       value -= offset;
       value += addend;
 
-      if ((long)value > 0xff || (long)value < -0x100)
+      if ((long) value > 0xff || (long) value < -0x100)
 	return bfd_reloc_overflow;
 
       bfd_put_8 (input_bfd, value, hit_data);
@@ -503,7 +498,7 @@
       value -= offset;
       value += addend;
 
-      if ((long)value > 0xffff || (long)value < -0x10000)
+      if ((long) value > 0xffff || (long) value < -0x10000)
 	return bfd_reloc_overflow;
 
       bfd_put_16 (input_bfd, value, hit_data);
@@ -636,7 +631,7 @@
       if (r != bfd_reloc_ok)
 	{
 	  const char *name;
-	  const char *msg = (const char *)0;
+	  const char *msg = (const char *) 0;
 
 	  if (h != NULL)
 	    name = h->root.root.root.string;
@@ -702,7 +697,7 @@
   struct elf32_mn10300_link_hash_entry *entry;
   unsigned int byte_count = 0;
 
-  entry = (struct elf32_mn10300_link_hash_entry *)gen_entry;
+  entry = (struct elf32_mn10300_link_hash_entry *) gen_entry;
 
   /* If we already know we want to convert "call" to "calls" for calls
      to this symbol, then return now.  */
@@ -822,22 +817,22 @@
 	  /* We're going to need all the symbols for each bfd.  */
 	  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
 
-          /* Get cached copy if it exists.  */
-          if (symtab_hdr->contents != NULL)
-            extsyms = (Elf32_External_Sym *) symtab_hdr->contents;
-          else
-            {
-              /* Go get them off disk.  */
-              extsyms = ((Elf32_External_Sym *)
-                         bfd_malloc (symtab_hdr->sh_size));
-              if (extsyms == NULL)
-                goto error_return;
-              free_extsyms = extsyms;
-              if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
-                  || (bfd_read (extsyms, 1, symtab_hdr->sh_size, input_bfd)
-                      != symtab_hdr->sh_size))
-                goto error_return;
-            }
+	  /* Get cached copy if it exists.  */
+	  if (symtab_hdr->contents != NULL)
+	    extsyms = (Elf32_External_Sym *) symtab_hdr->contents;
+	  else
+	    {
+	      /* Go get them off disk.  */
+	      extsyms = ((Elf32_External_Sym *)
+			 bfd_malloc (symtab_hdr->sh_size));
+	      if (extsyms == NULL)
+		goto error_return;
+	      free_extsyms = extsyms;
+	      if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
+		  || (bfd_read (extsyms, 1, symtab_hdr->sh_size, input_bfd)
+		      != symtab_hdr->sh_size))
+		goto error_return;
+	    }
 
 	  /* Iterate over each section in this bfd.  */
 	  for (section = input_bfd->sections;
@@ -856,7 +851,7 @@
 	      else if (section->_raw_size != 0)
 		{
 		  /* Go get them off disk.  */
-		  contents = (bfd_byte *)bfd_malloc (section->_raw_size);
+		  contents = (bfd_byte *) bfd_malloc (section->_raw_size);
 		  if (contents == NULL)
 		    goto error_return;
 		  free_contents = contents;
@@ -899,7 +894,7 @@
 		      r_type = ELF32_R_TYPE (irel->r_info);
 		      r_index = ELF32_R_SYM (irel->r_info);
 
-		      if (r_type < 0 || r_type >= (int)R_MN10300_MAX)
+		      if (r_type < 0 || r_type >= (int) R_MN10300_MAX)
 			goto error_return;
 
 		      /* We need the name and hash table entry of the target
@@ -944,7 +939,8 @@
 			  if (new_name == 0)
 			    goto error_return;
 
-			  sprintf (new_name, "%s_%08x", sym_name, (int)sym_sec);
+			  sprintf (new_name, "%s_%08x",
+				   sym_name, (int) sym_sec);
 			  sym_name = new_name;
 
 			  hash = (struct elf32_mn10300_link_hash_entry *)
@@ -1024,7 +1020,8 @@
 			  if (new_name == 0)
 			    goto error_return;
 
-			  sprintf (new_name, "%s_%08x", sym_name, (int)sym_sec);
+			  sprintf (new_name, "%s_%08x",
+				   sym_name, (int) sym_sec);
 			  sym_name = new_name;
 
 			  hash = (struct elf32_mn10300_link_hash_entry *)
@@ -1033,7 +1030,7 @@
 						          true, false);
 			  free (new_name);
 			  compute_function_info (input_bfd, hash,
-					         isym.st_value, contents);
+						 isym.st_value, contents);
 			}
 		    }
 
@@ -1118,22 +1115,22 @@
 	  /* We're going to need all the symbols for each bfd.  */
 	  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
 
-          /* Get cached copy if it exists.  */
-          if (symtab_hdr->contents != NULL)
-            extsyms = (Elf32_External_Sym *) symtab_hdr->contents;
-          else
-            {
-              /* Go get them off disk.  */
-              extsyms = ((Elf32_External_Sym *)
-                         bfd_malloc (symtab_hdr->sh_size));
-              if (extsyms == NULL)
-                goto error_return;
-              free_extsyms = extsyms;
-              if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
-                  || (bfd_read (extsyms, 1, symtab_hdr->sh_size, input_bfd)
-                      != symtab_hdr->sh_size))
-                goto error_return;
-            }
+	  /* Get cached copy if it exists.  */
+	  if (symtab_hdr->contents != NULL)
+	    extsyms = (Elf32_External_Sym *) symtab_hdr->contents;
+	  else
+	    {
+	      /* Go get them off disk.  */
+	      extsyms = ((Elf32_External_Sym *)
+			 bfd_malloc (symtab_hdr->sh_size));
+	      if (extsyms == NULL)
+		goto error_return;
+	      free_extsyms = extsyms;
+	      if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
+		  || (bfd_read (extsyms, 1, symtab_hdr->sh_size, input_bfd)
+		      != symtab_hdr->sh_size))
+		goto error_return;
+	    }
 
 	  /* Walk over each section in this bfd.  */
 	  for (section = input_bfd->sections;
@@ -1150,15 +1147,15 @@
 
 	      if (section->reloc_count != 0)
 		{
-                  /* Get a copy of the native relocations.  */
-                  internal_relocs = (_bfd_elf32_link_read_relocs
-                                     (input_bfd, section, (PTR) NULL,
-                                      (Elf_Internal_Rela *) NULL,
-                                      link_info->keep_memory));
-                  if (internal_relocs == NULL)
-                    goto error_return;
-                  if (! link_info->keep_memory)
-                    free_relocs = internal_relocs;
+		  /* Get a copy of the native relocations.  */
+		  internal_relocs = (_bfd_elf32_link_read_relocs
+				     (input_bfd, section, (PTR) NULL,
+				      (Elf_Internal_Rela *) NULL,
+				      link_info->keep_memory));
+		  if (internal_relocs == NULL)
+		    goto error_return;
+		  if (! link_info->keep_memory)
+		    free_relocs = internal_relocs;
 		}
 
 	      /* Get cached copy of section contents if it exists.  */
@@ -1167,7 +1164,7 @@
 	      else
 		{
 		  /* Go get them off disk.  */
-		  contents = (bfd_byte *)bfd_malloc (section->_raw_size);
+		  contents = (bfd_byte *) bfd_malloc (section->_raw_size);
 		  if (contents == NULL)
 		    goto error_return;
 		  free_contents = contents;
@@ -1218,7 +1215,7 @@
 		  new_name = bfd_malloc (strlen (sym_name) + 10);
 		  if (new_name == 0)
 		    goto error_return;
-		  sprintf (new_name, "%s_%08x", sym_name, (int)sym_sec);
+		  sprintf (new_name, "%s_%08x", sym_name, (int) sym_sec);
 		  sym_name = new_name;
 
 		  sym_hash = (struct elf32_mn10300_link_hash_entry *)
@@ -1242,7 +1239,7 @@
 		      elf_section_data (section)->this_hdr.contents = contents;
 		      free_contents = NULL;
 
-		      symtab_hdr->contents = (bfd_byte *)extsyms;
+		      symtab_hdr->contents = (bfd_byte *) extsyms;
 		      free_extsyms = NULL;
 
 		      /* Count how many bytes we're going to delete.  */
@@ -1299,7 +1296,7 @@
 		      elf_section_data (section)->this_hdr.contents = contents;
 		      free_contents = NULL;
 
-		      symtab_hdr->contents = (bfd_byte *)extsyms;
+		      symtab_hdr->contents = (bfd_byte *) extsyms;
 		      free_extsyms = NULL;
 
 		      /* Count how many bytes we're going to delete.  */
@@ -1489,7 +1486,7 @@
 	  new_name = bfd_malloc (strlen (sym_name) + 10);
 	  if (new_name == 0)
 	    goto error_return;
-	  sprintf (new_name, "%s_%08x", sym_name, (int)sym_sec);
+	  sprintf (new_name, "%s_%08x", sym_name, (int) sym_sec);
 	  sym_name = new_name;
 
 	  h = (struct elf32_mn10300_link_hash_entry *)
@@ -1603,7 +1600,7 @@
 	  /* See if the value will fit in 16 bits, note the high value is
 	     0x7fff + 2 as the target will be two bytes closer if we are
 	     able to relax.  */
-	  if ((long)value < 0x8001 && (long)value > -0x8000)
+	  if ((long) value < 0x8001 && (long) value > -0x8000)
 	    {
 	      unsigned char code;
 
@@ -1718,7 +1715,7 @@
 	  /* See if the value will fit in 8 bits, note the high value is
 	     0x7f + 1 as the target will be one bytes closer if we are
 	     able to relax.  */
-	  if ((long)value < 0x80 && (long)value > -0x80)
+	  if ((long) value < 0x80 && (long) value > -0x80)
 	    {
 	      unsigned char code;
 
@@ -1837,48 +1834,48 @@
 	  /* Reverse the condition of the first branch.  */
 	  switch (code)
 	    {
-	      case 0xc8:
-		code = 0xc9;
-		break;
-	      case 0xc9:
-		code = 0xc8;
-		break;
-	      case 0xc0:
-		code = 0xc2;
-		break;
-	      case 0xc2:
-		code = 0xc0;
-		break;
-	      case 0xc3:
-		code = 0xc1;
-		break;
-	      case 0xc1:
-		code = 0xc3;
-		break;
-	      case 0xc4:
-		code = 0xc6;
-		break;
-	      case 0xc6:
-		code = 0xc4;
-		break;
-	      case 0xc7:
-		code = 0xc5;
-		break;
-	      case 0xc5:
-		code = 0xc7;
-		break;
-	      case 0xe8:
-		code = 0xe9;
-		break;
-	      case 0x9d:
-		code = 0xe8;
-		break;
-	      case 0xea:
-		code = 0xeb;
-		break;
-	      case 0xeb:
-		code = 0xea;
-		break;
+	    case 0xc8:
+	      code = 0xc9;
+	      break;
+	    case 0xc9:
+	      code = 0xc8;
+	      break;
+	    case 0xc0:
+	      code = 0xc2;
+	      break;
+	    case 0xc2:
+	      code = 0xc0;
+	      break;
+	    case 0xc3:
+	      code = 0xc1;
+	      break;
+	    case 0xc1:
+	      code = 0xc3;
+	      break;
+	    case 0xc4:
+	      code = 0xc6;
+	      break;
+	    case 0xc6:
+	      code = 0xc4;
+	      break;
+	    case 0xc7:
+	      code = 0xc5;
+	      break;
+	    case 0xc5:
+	      code = 0xc7;
+	      break;
+	    case 0xe8:
+	      code = 0xe9;
+	      break;
+	    case 0x9d:
+	      code = 0xe8;
+	      break;
+	    case 0xea:
+	      code = 0xeb;
+	      break;
+	    case 0xeb:
+	      code = 0xea;
+	      break;
 	    }
 	  bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
 
@@ -1908,7 +1905,7 @@
 	  value += irel->r_addend;
 
 	  /* See if the value will fit in 8 bits.  */
-	  if ((long)value < 0x7f && (long)value > -0x80)
+	  if ((long) value < 0x7f && (long) value > -0x80)
 	    {
 	      unsigned char code;
 
@@ -1920,8 +1917,8 @@
 
 	      if (code == 0xfd)
 		{
-	          /* Get the second opcode.  */
-	          code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
+		  /* Get the second opcode.  */
+		  code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
 
 		  /* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
 		     equivalent instructions exists.  */
@@ -1953,9 +1950,9 @@
 			  bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
 
 			  /* Fix the relocation's type.  */
-			  irel->r_info
-			    = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
-						         R_MN10300_8);
+			  irel->r_info =
+			    ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
+					  R_MN10300_8);
 
 			  /* Delete two bytes of data.  */
 			  if (!mn10300_elf_relax_delete_bytes (abfd, sec,
@@ -1964,12 +1961,11 @@
 
 			  /* That will change things, so, we should relax
 			     again.  Note that this is not required, and it
-			      may be slow.  */
+			     may be slow.  */
 			  *again = true;
 			  break;
 			}
 		    }
-
 		}
 	    }
 	}
@@ -1984,7 +1980,7 @@
 	  /* See if the value will fit in 24 bits.
 	     We allow any 16bit match here.  We prune those we can't
 	     handle below.  */
-	  if ((long)value < 0x7fffff && (long)value > -0x800000)
+	  if ((long) value < 0x7fffff && (long) value > -0x800000)
 	    {
 	      unsigned char code;
 
@@ -2002,7 +1998,7 @@
 		  /* All the am33 32 -> 24 relaxing possibilities.  */
 		  /* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
 		     equivalent instructions exists.  */
-	          if (code != 0x6b && code != 0x7b
+		  if (code != 0x6b && code != 0x7b
 		      && code != 0x8b && code != 0x9b
 		      && ((code & 0x0f) == 0x09 || (code & 0x0f) == 0x08
 			  || (code & 0x0f) == 0x0a || (code & 0x0f) == 0x0b
@@ -2030,9 +2026,9 @@
 			  bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
 
 			  /* Fix the relocation's type.  */
-			  irel->r_info
-			    = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
-						         R_MN10300_24);
+			  irel->r_info =
+			    ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
+					  R_MN10300_24);
 
 			  /* Delete one byte of data.  */
 			  if (!mn10300_elf_relax_delete_bytes (abfd, sec,
@@ -2041,19 +2037,18 @@
 
 			  /* That will change things, so, we should relax
 			     again.  Note that this is not required, and it
-			      may be slow.  */
+			     may be slow.  */
 			  *again = true;
 			  break;
 			}
 		    }
-
 		}
 	    }
 
 	  /* See if the value will fit in 16 bits.
 	     We allow any 16bit match here.  We prune those we can't
 	     handle below.  */
-	  if ((long)value < 0x7fff && (long)value > -0x8000)
+	  if ((long) value < 0x7fff && (long) value > -0x8000)
 	    {
 	      unsigned char code;
 
@@ -2356,7 +2351,7 @@
 
 		  /* Fix the relocation's type.  */
 		  irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
-						 R_MN10300_16);
+					       R_MN10300_16);
 
 		  /* Delete two bytes of data.  */
 		  if (!mn10300_elf_relax_delete_bytes (abfd, sec,
@@ -2872,12 +2867,12 @@
 {
   switch (flags & EF_MN10300_MACH)
     {
-      case E_MN10300_MACH_MN10300:
-      default:
-        return bfd_mach_mn10300;
+    case E_MN10300_MACH_MN10300:
+    default:
+      return bfd_mach_mn10300;
 
-      case E_MN10300_MACH_AM33:
-        return bfd_mach_am33;
+    case E_MN10300_MACH_AM33:
+      return bfd_mach_am33;
     }
 }
 
@@ -2894,14 +2889,14 @@
 
   switch (bfd_get_mach (abfd))
     {
-      default:
-      case bfd_mach_mn10300:
-	val = E_MN10300_MACH_MN10300;
-	break;
+    default:
+    case bfd_mach_mn10300:
+      val = E_MN10300_MACH_MN10300;
+      break;
 
-      case bfd_mach_am33:
-	val = E_MN10300_MACH_AM33;
-	break;
+    case bfd_mach_am33:
+      val = E_MN10300_MACH_AM33;
+      break;
     }
 
   elf_elfheader (abfd)->e_flags &= ~ (EF_MN10300_MACH);
@@ -2913,7 +2908,7 @@
      bfd *abfd;
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_mn10300,
-                             elf_mn10300_mach (elf_elfheader (abfd)->e_flags));
+			     elf_mn10300_mach (elf_elfheader (abfd)->e_flags));
   return true;
 }
 
diff --git a/bfd/elf.c b/bfd/elf.c
index 5ae24ee..9e4ebfe 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -56,6 +56,10 @@
 static boolean elf_map_symbols PARAMS ((bfd *));
 static bfd_size_type get_program_header_size PARAMS ((bfd *));
 static boolean elfcore_read_notes PARAMS ((bfd *, bfd_vma, bfd_vma));
+static boolean elf_find_function PARAMS ((bfd *, asection *,
+                                         asymbol **,
+                                         bfd_vma, const char **,
+                                         const char **));
 
 /* Swap version information in and out.  The version information is
    currently size independent.  If that ever changes, this code will
@@ -3320,6 +3324,9 @@
     case bfd_arch_m68hc12:
       i_ehdrp->e_machine = EM_68HC12;
       break;
+    case bfd_arch_s390:
+      i_ehdrp->e_machine = EM_S390;
+      break;
     case bfd_arch_m68k:
       i_ehdrp->e_machine = EM_68K;
       break;
@@ -4707,7 +4714,7 @@
       Elf_Internal_Verdef *iverdefarr;
       Elf_Internal_Verdef iverdefmem;
       unsigned int i;
-      unsigned int maxidx;
+      int maxidx;
 
       hdr = &elf_tdata (abfd)->dynverdef_hdr;
 
@@ -4971,53 +4978,24 @@
   return bfd_default_set_arch_mach (abfd, arch, machine);
 }
 
-/* Find the nearest line to a particular section and offset, for error
-   reporting.  */
+/* Find the function to a particular section and offset,
+   for error reporting.  */
 
-boolean
-_bfd_elf_find_nearest_line (abfd,
-			    section,
-			    symbols,
-			    offset,
-			    filename_ptr,
-			    functionname_ptr,
-			    line_ptr)
-     bfd *abfd;
+static boolean
+elf_find_function (abfd, section, symbols, offset,
+                  filename_ptr, functionname_ptr)
+     bfd *abfd ATTRIBUTE_UNUSED;
      asection *section;
      asymbol **symbols;
      bfd_vma offset;
      CONST char **filename_ptr;
      CONST char **functionname_ptr;
-     unsigned int *line_ptr;
 {
-  boolean found;
   const char *filename;
   asymbol *func;
   bfd_vma low_func;
   asymbol **p;
 
-  if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
-				     filename_ptr, functionname_ptr,
-				     line_ptr))
-    return true;
-
-  if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
-				     filename_ptr, functionname_ptr,
-				     line_ptr, 0,
-				     &elf_tdata (abfd)->dwarf2_find_line_info))
-    return true;
-
-  if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
-					     &found, filename_ptr,
-					     functionname_ptr, line_ptr,
-					     &elf_tdata (abfd)->line_info))
-    return false;
-  if (found)
-    return true;
-
-  if (symbols == NULL)
-    return false;
-
   filename = NULL;
   func = NULL;
   low_func = 0;
@@ -5054,8 +5032,70 @@
   if (func == NULL)
     return false;
 
-  *filename_ptr = filename;
-  *functionname_ptr = bfd_asymbol_name (func);
+  if (filename_ptr)
+    *filename_ptr = filename;
+  if (functionname_ptr)
+    *functionname_ptr = bfd_asymbol_name (func);
+
+  return true;
+}
+
+/* Find the nearest line to a particular section and offset,
+   for error reporting.  */
+
+boolean
+_bfd_elf_find_nearest_line (abfd, section, symbols, offset,
+                           filename_ptr, functionname_ptr, line_ptr)
+     bfd *abfd;
+     asection *section;
+     asymbol **symbols;
+     bfd_vma offset;
+     CONST char **filename_ptr;
+     CONST char **functionname_ptr;
+     unsigned int *line_ptr;
+{
+  boolean found;
+
+  if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
+                                    filename_ptr, functionname_ptr,
+                                    line_ptr))
+    {
+      if (!*functionname_ptr)
+       elf_find_function (abfd, section, symbols, offset,
+                          *filename_ptr ? NULL : filename_ptr,
+                          functionname_ptr);
+       
+      return true;
+    }
+
+  if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
+                                    filename_ptr, functionname_ptr,
+                                    line_ptr, 0,
+                                    &elf_tdata (abfd)->dwarf2_find_line_info))
+    {
+      if (!*functionname_ptr)
+       elf_find_function (abfd, section, symbols, offset,
+                          *filename_ptr ? NULL : filename_ptr,
+                          functionname_ptr);
+       
+      return true;
+    }
+
+  if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
+                                            &found, filename_ptr,
+                                            functionname_ptr, line_ptr,
+                                            &elf_tdata (abfd)->line_info))
+    return false;
+  if (found)
+    return true;
+
+  if (symbols == NULL)
+    return false;
+
+  if (! elf_find_function (abfd, section, symbols, offset,
+                          filename_ptr, functionname_ptr))
+    return false;
+
   *line_ptr = 0;
   return true;
 }
diff --git a/bfd/elf32-arm.h b/bfd/elf32-arm.h
index abda34d..6b56797 100644
--- a/bfd/elf32-arm.h
+++ b/bfd/elf32-arm.h
@@ -55,7 +55,7 @@
   PARAMS ((struct bfd_link_info *, const char *, bfd *, bfd *, asection *,
 	   bfd_byte *, asection *, bfd_vma, bfd_signed_vma, bfd_vma));
 
-#define INTERWORK_FLAG(abfd)   (elf_elfheader (abfd)->e_flags & EF_INTERWORK)
+#define INTERWORK_FLAG(abfd)   (elf_elfheader (abfd)->e_flags & EF_ARM_INTERWORK)
 
 /* The linker script knows the section names for placement.
    The entry_names are used to do simple name mangling on the stubs.
@@ -1963,7 +1963,7 @@
     {
       if (EF_ARM_EABI_VERSION (flags) == EF_ARM_EABI_UNKNOWN)
 	{
-	  if (flags & EF_INTERWORK)
+	  if (flags & EF_ARM_INTERWORK)
 	    _bfd_error_handler (_("\
 Warning: Not setting interwork flag of %s since it has already been specified as non-interworking"),
 				bfd_get_filename (abfd));
@@ -2004,28 +2004,28 @@
       && in_flags != out_flags)
     {
       /* Cannot mix APCS26 and APCS32 code.  */
-      if ((in_flags & EF_APCS_26) != (out_flags & EF_APCS_26))
+      if ((in_flags & EF_ARM_APCS_26) != (out_flags & EF_ARM_APCS_26))
 	return false;
 
       /* Cannot mix float APCS and non-float APCS code.  */
-      if ((in_flags & EF_APCS_FLOAT) != (out_flags & EF_APCS_FLOAT))
+      if ((in_flags & EF_ARM_APCS_FLOAT) != (out_flags & EF_ARM_APCS_FLOAT))
 	return false;
 
       /* If the src and dest have different interworking flags
          then turn off the interworking bit.  */
-      if ((in_flags & EF_INTERWORK) != (out_flags & EF_INTERWORK))
+      if ((in_flags & EF_ARM_INTERWORK) != (out_flags & EF_ARM_INTERWORK))
 	{
-	  if (out_flags & EF_INTERWORK)
+	  if (out_flags & EF_ARM_INTERWORK)
 	    _bfd_error_handler (_("\
 Warning: Clearing the interwork flag in %s because non-interworking code in %s has been linked with it"),
 			  bfd_get_filename (obfd), bfd_get_filename (ibfd));
 
-	  in_flags &= ~EF_INTERWORK;
+	  in_flags &= ~EF_ARM_INTERWORK;
 	}
 
       /* Likewise for PIC, though don't warn for this case.  */
-      if ((in_flags & EF_PIC) != (out_flags & EF_PIC))
-	in_flags &= ~EF_PIC;
+      if ((in_flags & EF_ARM_PIC) != (out_flags & EF_ARM_PIC))
+	in_flags &= ~EF_ARM_PIC;
     }
 
   elf_elfheader (obfd)->e_flags = in_flags;
@@ -2122,49 +2122,49 @@
   /* Not sure what needs to be checked for EABI versions >= 1.  */
   if (EF_ARM_EABI_VERSION (in_flags) == EF_ARM_EABI_UNKNOWN)
     {
-      if ((in_flags & EF_APCS_26) != (out_flags & EF_APCS_26))
+      if ((in_flags & EF_ARM_APCS_26) != (out_flags & EF_ARM_APCS_26))
 	{
 	  _bfd_error_handler (_("\
 Error: %s compiled for APCS-%d, whereas %s is compiled for APCS-%d"),
 			bfd_get_filename (ibfd),
-			in_flags & EF_APCS_26 ? 26 : 32,
+			in_flags & EF_ARM_APCS_26 ? 26 : 32,
 			bfd_get_filename (obfd),
-			out_flags & EF_APCS_26 ? 26 : 32);
+			out_flags & EF_ARM_APCS_26 ? 26 : 32);
 	  flags_compatible = false;
 	}
 
-      if ((in_flags & EF_APCS_FLOAT) != (out_flags & EF_APCS_FLOAT))
+      if ((in_flags & EF_ARM_APCS_FLOAT) != (out_flags & EF_ARM_APCS_FLOAT))
 	{
 	  _bfd_error_handler (_("\
 Error: %s passes floats in %s registers, whereas %s passes them in %s registers"),
 			bfd_get_filename (ibfd),
-		     in_flags & EF_APCS_FLOAT ? _("float") : _("integer"),
+		     in_flags & EF_ARM_APCS_FLOAT ? _("float") : _("integer"),
 			bfd_get_filename (obfd),
-		      out_flags & EF_APCS_26 ? _("float") : _("integer"));
+		      out_flags & EF_ARM_APCS_26 ? _("float") : _("integer"));
 	  flags_compatible = false;
 	}
 
-#ifdef EF_SOFT_FLOAT
-      if ((in_flags & EF_SOFT_FLOAT) != (out_flags & EF_SOFT_FLOAT))
+#ifdef EF_ARM_SOFT_FLOAT
+      if ((in_flags & EF_ARM_SOFT_FLOAT) != (out_flags & EF_ARM_SOFT_FLOAT))
 	{
 	  _bfd_error_handler (_ ("\
 Error: %s uses %s floating point, whereas %s uses %s floating point"),
 			      bfd_get_filename (ibfd),
-			      in_flags & EF_SOFT_FLOAT ? _("soft") : _("hard"),
+			      in_flags & EF_ARM_SOFT_FLOAT ? _("soft") : _("hard"),
 			      bfd_get_filename (obfd),
-			      out_flags & EF_SOFT_FLOAT ? _("soft") : _("hard"));
+			      out_flags & EF_ARM_SOFT_FLOAT ? _("soft") : _("hard"));
 	  flags_compatible = false;
 	}
 #endif
 
       /* Interworking mismatch is only a warning.  */
-      if ((in_flags & EF_INTERWORK) != (out_flags & EF_INTERWORK))
+      if ((in_flags & EF_ARM_INTERWORK) != (out_flags & EF_ARM_INTERWORK))
 	_bfd_error_handler (_("\
 Warning: %s %s interworking, whereas %s %s"),
 			  bfd_get_filename (ibfd),
-	  in_flags & EF_INTERWORK ? _("supports") : _("does not support"),
+	  in_flags & EF_ARM_INTERWORK ? _("supports") : _("does not support"),
 			  bfd_get_filename (obfd),
-		    out_flags & EF_INTERWORK ? _("does not") : _("does"));
+		    out_flags & EF_ARM_INTERWORK ? _("does not") : _("does"));
     }
 
   return flags_compatible;
@@ -2198,31 +2198,31 @@
       /* The following flag bits are GNU extenstions and not part of the
 	 official ARM ELF extended ABI.  Hence they are only decoded if
 	 the EABI version is not set.  */
-      if (flags & EF_INTERWORK)
+      if (flags & EF_ARM_INTERWORK)
 	fprintf (file, _(" [interworking enabled]"));
 
-      if (flags & EF_APCS_26)
+      if (flags & EF_ARM_APCS_26)
 	fprintf (file, _(" [APCS-26]"));
       else
 	fprintf (file, _(" [APCS-32]"));
 
-      if (flags & EF_APCS_FLOAT)
+      if (flags & EF_ARM_APCS_FLOAT)
 	fprintf (file, _(" [floats passed in float registers]"));
 
-      if (flags & EF_PIC)
+      if (flags & EF_ARM_PIC)
 	fprintf (file, _(" [position independent]"));
 
-      if (flags & EF_NEW_ABI)
+      if (flags & EF_ARM_NEW_ABI)
 	fprintf (file, _(" [new ABI]"));
 
-      if (flags & EF_OLD_ABI)
+      if (flags & EF_ARM_OLD_ABI)
 	fprintf (file, _(" [old ABI]"));
 
-      if (flags & EF_SOFT_FLOAT)
+      if (flags & EF_ARM_SOFT_FLOAT)
 	fprintf (file, _(" [software FP]"));
 
-      flags &= ~(EF_INTERWORK | EF_APCS_26 | EF_APCS_FLOAT | EF_PIC
-		 | EF_NEW_ABI | EF_OLD_ABI | EF_SOFT_FLOAT);
+      flags &= ~(EF_ARM_INTERWORK | EF_ARM_APCS_26 | EF_ARM_APCS_FLOAT | EF_ARM_PIC
+		 | EF_ARM_NEW_ABI | EF_ARM_OLD_ABI | EF_ARM_SOFT_FLOAT);
       break;
 
     case EF_ARM_EABI_VER1:
@@ -2236,6 +2236,24 @@
       flags &= ~ EF_ARM_SYMSARESORTED;
       break;
 
+    case EF_ARM_EABI_VER2:
+      fprintf (file, _(" [Version2 EABI]"));
+
+      if (flags & EF_ARM_SYMSARESORTED)
+	fprintf (file, _(" [sorted symbol table]"));
+      else
+	fprintf (file, _(" [unsorted symbol table]"));
+
+      if (flags & EF_ARM_DYNSYMSUSESEGIDX)
+	fprintf (file, _(" [dynamic symbols use segment index]"));
+
+      if (flags & EF_ARM_MAPSYMSFIRST)
+	fprintf (file, _(" [mapping symbols precede others]"));
+
+      flags &= ~(EF_ARM_SYMSARESORTED | EF_ARM_DYNSYMSUSESEGIDX 
+		 | EF_ARM_MAPSYMSFIRST);
+      break;
+
     default:
       fprintf (file, _(" <EABI version unrecognised>"));
       break;
diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c
index 13f1e5a..40defb4 100644
--- a/bfd/elf32-hppa.c
+++ b/bfd/elf32-hppa.c
@@ -64,28 +64,28 @@
 
    PIC long branch stub:
    :		b,l .+8,%r1
-   :		addil L'X - ($PIC_pcrel$0 - 4),%r1
-   :		be,n R'X - ($PIC_pcrel$0 - 8)(%sr4,%r1)
+   :		addil LR'X - ($PIC_pcrel$0 - 4),%r1
+   :		be,n RR'X - ($PIC_pcrel$0 - 8)(%sr4,%r1)
 
    Import stub to call shared library routine from normal object file
    (single sub-space version)
-   :		addil L'lt_ptr+ltoff,%dp	; get procedure entry point
-   :		ldw R'lt_ptr+ltoff(%r1),%r21
+   :		addil LR'lt_ptr+ltoff,%dp	; get procedure entry point
+   :		ldw RR'lt_ptr+ltoff(%r1),%r21
    :            bv %r0(%r21)
-   :		ldw R'lt_ptr+ltoff+4(%r1),%r19	; get new dlt value.
+   :		ldw RR'lt_ptr+ltoff+4(%r1),%r19	; get new dlt value.
 
    Import stub to call shared library routine from shared library
    (single sub-space version)
-   :		addil L'ltoff,%r19		; get procedure entry point
-   :		ldw R'ltoff(%r1),%r21
+   :		addil LR'ltoff,%r19		; get procedure entry point
+   :		ldw RR'ltoff(%r1),%r21
    :            bv %r0(%r21)
-   :		ldw R'ltoff+4(%r1),%r19		; get new dlt value.
+   :		ldw RR'ltoff+4(%r1),%r19	; get new dlt value.
 
    Import stub to call shared library routine from normal object file
    (multiple sub-space support)
-   :		addil L'lt_ptr+ltoff,%dp	; get procedure entry point
-   :		ldw R'lt_ptr+ltoff(%r1),%r21
-   :		ldw R'lt_ptr+ltoff+4(%r1),%r19	; get new dlt value.
+   :		addil LR'lt_ptr+ltoff,%dp	; get procedure entry point
+   :		ldw RR'lt_ptr+ltoff(%r1),%r21
+   :		ldw RR'lt_ptr+ltoff+4(%r1),%r19	; get new dlt value.
    :		ldsid (%r21),%r1
    :		mtsp %r1,%sr0
    :		be 0(%sr0,%r21)			; branch to target
@@ -93,9 +93,9 @@
 
    Import stub to call shared library routine from shared library
    (multiple sub-space support)
-   :		addil L'ltoff,%r19		; get procedure entry point
-   :		ldw R'ltoff(%r1),%r21
-   :		ldw R'ltoff+4(%r1),%r19		; get new dlt value.
+   :		addil LR'ltoff,%r19		; get procedure entry point
+   :		ldw RR'ltoff(%r1),%r21
+   :		ldw RR'ltoff+4(%r1),%r19	; get new dlt value.
    :		ldsid (%r21),%r1
    :		mtsp %r1,%sr0
    :		be 0(%sr0,%r21)			; branch to target
@@ -781,16 +781,16 @@
 #define BE_SR4_R1	0xe0202002	/* be,n  RR'XXX(%sr4,%r1)	*/
 
 #define BL_R1		0xe8200000	/* b,l   .+8,%r1		*/
-#define ADDIL_R1	0x28200000	/* addil L'XXX,%r1,%r1		*/
+#define ADDIL_R1	0x28200000	/* addil LR'XXX,%r1,%r1		*/
 #define DEPI_R1		0xd4201c1e	/* depi  0,31,2,%r1		*/
 
-#define ADDIL_DP	0x2b600000	/* addil L'XXX,%dp,%r1		*/
-#define LDW_R1_R21	0x48350000	/* ldw   R'XXX(%sr0,%r1),%r21	*/
+#define ADDIL_DP	0x2b600000	/* addil LR'XXX,%dp,%r1		*/
+#define LDW_R1_R21	0x48350000	/* ldw   RR'XXX(%sr0,%r1),%r21	*/
 #define BV_R0_R21	0xeaa0c000	/* bv    %r0(%r21)		*/
-#define LDW_R1_R19	0x48330000	/* ldw   R'XXX(%sr0,%r1),%r19	*/
+#define LDW_R1_R19	0x48330000	/* ldw   RR'XXX(%sr0,%r1),%r19	*/
 
-#define ADDIL_R19	0x2a600000	/* addil L'XXX,%r19,%r1		*/
-#define LDW_R1_DP	0x483b0000	/* ldw   R'XXX(%sr0,%r1),%dp	*/
+#define ADDIL_R19	0x2a600000	/* addil LR'XXX,%r19,%r1	*/
+#define LDW_R1_DP	0x483b0000	/* ldw   RR'XXX(%sr0,%r1),%dp	*/
 
 #define LDSID_R21_R1	0x02a010a1	/* ldsid (%sr0,%r21),%r1	*/
 #define MTSP_R1		0x00011820	/* mtsp  %r1,%sr0		*/
@@ -2138,7 +2138,7 @@
   /* Note!  We only want to remove these from the dynamic symbol
      table.  Therefore we do not set ELF_LINK_FORCED_LOCAL.  */
   if (h->type == STT_PARISC_MILLI)
-    elf32_hppa_hide_symbol(info, h);
+    elf32_hppa_hide_symbol (info, h);
   return true;
 }
 
@@ -3024,7 +3024,9 @@
   h = elf_link_hash_lookup (&hplink->root, "$global$",
 			    false, false, false);
 
-  if (h != NULL && h->root.type == bfd_link_hash_defined)
+  if (h != NULL
+      && (h->root.type == bfd_link_hash_defined
+	  || h->root.type == bfd_link_hash_defweak))
     {
       gp_val = h->root.u.def.value;
       sec = h->root.u.def.section;
@@ -3067,6 +3069,16 @@
 	      sec = bfd_get_section_by_name (abfd, ".data");
 	    }
 	}
+
+      if (h != NULL)
+	{
+	  h->root.type = bfd_link_hash_defined;
+	  h->root.u.def.value = gp_val;
+	  if (sec != NULL)
+	    h->root.u.def.section = sec;
+	  else
+	    h->root.u.def.section = bfd_abs_section_ptr;
+	}
     }
 
   if (sec != NULL)
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index b433c25..4ad2c2b 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -643,16 +643,19 @@
 	     including in the link (i.e., DEF_REGULAR is set).  At
 	     this point we have not seen all the input files, so it is
 	     possible that DEF_REGULAR is not set now but will be set
-	     later (it is never cleared).  We account for that
-	     possibility below by storing information in the
-	     pcrel_relocs_copied field of the hash table entry.
-	     A similar situation occurs when creating shared libraries
-	     and symbol visibility changes render the symbol local.  */
+	     later (it is never cleared).  In case of a weak definition,
+	     DEF_REGULAR may be cleared later by a strong definition in
+	     a shared library. We account for that possibility below by
+	     storing information in the relocs_copied field of the hash
+	     table entry.  A similar situation occurs when creating
+	     shared libraries and symbol visibility changes render the
+	     symbol local.  */
 	  if (info->shared
 	      && (sec->flags & SEC_ALLOC) != 0
 	      && (ELF32_R_TYPE (rel->r_info) != R_386_PC32
 		  || (h != NULL
 		      && (! info->symbolic
+			  || h->root.type == bfd_link_hash_defweak
 			  || (h->elf_link_hash_flags
 			      & ELF_LINK_HASH_DEF_REGULAR) == 0))))
 	    {
diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c
index 5bb1e94..7eb8aa2 100644
--- a/bfd/elf32-mips.c
+++ b/bfd/elf32-mips.c
@@ -80,6 +80,12 @@
      section) against this symbol.  */
   unsigned int min_dyn_reloc_index;
 
+  /* We must not create a stub for a symbol that has relocations
+     related to taking the function's address, i.e. any but
+     R_MIPS_CALL*16 ones -- see "MIPS ABI Supplement, 3rd Edition",
+     p. 4-20.  */
+  boolean no_fn_stub;
+
   /* If there is a stub that 32 bit functions should use to call this
      16 bit function, this points to the section containing the stub.  */
   asection *fn_stub;
@@ -193,7 +199,7 @@
 static boolean mips_elf_create_dynamic_relocation
   PARAMS ((bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
 	   struct mips_elf_link_hash_entry *, asection *,
-	   bfd_vma, bfd_vma *, asection *, boolean local_p));
+	   bfd_vma, bfd_vma *, asection *));
 static void mips_elf_allocate_dynamic_relocations
   PARAMS ((bfd *, unsigned int));
 static boolean mips_elf_stub_section_p
@@ -531,7 +537,7 @@
 	 complain_overflow_dont, /* complain_on_overflow */
 	 			/* This needs complex overflow
 				   detection, because the upper four
-				   bits must match the PC.  */
+				   bits must match the PC + 4.  */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_26",		/* name */
 	 true,			/* partial_inplace */
@@ -3955,6 +3961,7 @@
       ret->esym.ifd = -2;
       ret->possibly_dynamic_relocs = 0;
       ret->min_dyn_reloc_index = 0;
+      ret->no_fn_stub = false;
       ret->fn_stub = NULL;
       ret->need_fn_stub = false;
       ret->call_stub = NULL;
@@ -4330,24 +4337,36 @@
     }
   else if ((h->root.elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
     {
-      /* Set type and value for a symbol with a function stub.  */
-      h->esym.asym.st = stProc;
-      sec = h->root.root.u.def.section;
-      if (sec == NULL)
-	h->esym.asym.value = 0;
-      else
+      struct mips_elf_link_hash_entry *hd = h;
+      boolean no_fn_stub = h->no_fn_stub;
+
+      while (hd->root.root.type == bfd_link_hash_indirect)
 	{
-	  output_section = sec->output_section;
-	  if (output_section != NULL)
-	    h->esym.asym.value = (h->root.plt.offset
-				  + sec->output_offset
-				  + output_section->vma);
-	  else
-	    h->esym.asym.value = 0;
+	  hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
+	  no_fn_stub = no_fn_stub || hd->no_fn_stub;
 	}
+
+      if (!no_fn_stub)
+	{
+	  /* Set type and value for a symbol with a function stub.  */
+	  h->esym.asym.st = stProc;
+	  sec = hd->root.root.u.def.section;
+	  if (sec == NULL)
+	    h->esym.asym.value = 0;
+	  else
+	    {
+	      output_section = sec->output_section;
+	      if (output_section != NULL)
+		h->esym.asym.value = (hd->root.plt.offset
+				      + sec->output_offset
+				      + output_section->vma);
+	      else
+		h->esym.asym.value = 0;
+	    }
 #if 0 /* FIXME?  */
-      h->esym.ifd = 0;
+	  h->esym.ifd = 0;
 #endif
+	}
     }
 
   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
@@ -5748,7 +5767,7 @@
 
 static boolean
 mips_elf_create_dynamic_relocation (output_bfd, info, rel, h, sec,
-				    symbol, addendp, input_section, local_p)
+				    symbol, addendp, input_section)
      bfd *output_bfd;
      struct bfd_link_info *info;
      const Elf_Internal_Rela *rel;
@@ -5757,7 +5776,6 @@
      bfd_vma symbol;
      bfd_vma *addendp;
      asection *input_section;
-     boolean local_p;
 {
   Elf_Internal_Rel outrel;
   boolean skip;
@@ -5842,15 +5860,16 @@
 	  /* The relocation we're building is section-relative.
 	     Therefore, the original addend must be adjusted by the
 	     section offset.  */
-	  *addendp += symbol - sec->output_section->vma;
+	  *addendp += section_offset;
 	  /* Now, the relocation is just against the section.  */
 	  symbol = sec->output_section->vma;
 	}
 
-      /* If the relocation is against a local symbol was previously an
-	 absolute relocation, we must adjust it by the value we give
-	 it in the dynamic symbol table.  */
-      if (local_p && r_type != R_MIPS_REL32)
+      /* If the relocation was previously an absolute relocation and
+	 this symbol will not be referred to by the relocation, we must
+	 adjust it by the value we give it in the dynamic symbol table.
+	 Otherwise leave the job up to the dynamic linker.  */
+      if (!indx && r_type != R_MIPS_REL32)
 	*addendp += symbol;
 
       /* The relocation is always an REL32 relocation because we don't
@@ -6225,7 +6244,7 @@
 				 symbol + addend, sgot->contents + g);
 	    }
 	}
-      else if (r_type == R_MIPS_GOT16)
+      else if (r_type == R_MIPS_GOT16 || r_type == R_MIPS_CALL16)
 	/* There's no need to create a local GOT entry here; the
 	   calculation for a local GOT16 entry does not involve G.  */
 	break;
@@ -6288,7 +6307,7 @@
 						   sec,
 						   symbol,
 						   &value,
-						   input_section, local_p))
+						   input_section))
 	    return false;
 	}
       else
@@ -6320,14 +6339,14 @@
       break;
 
     case R_MIPS16_26:
-      /* The calculation for R_MIPS_26 is just the same as for an
+      /* The calculation for R_MIPS16_26 is just the same as for an
 	 R_MIPS_26.  It's only the storage of the relocated field into
 	 the output file that's different.  That's handled in
 	 mips_elf_perform_relocation.  So, we just fall through to the
 	 R_MIPS_26 case here.  */
     case R_MIPS_26:
       if (local_p)
-	value = (((addend << 2) | (p & 0xf0000000)) + symbol) >> 2;
+	value = (((addend << 2) | ((p + 4) & 0xf0000000)) + symbol) >> 2;
       else
 	value = (mips_elf_sign_extend (addend << 2, 28) + symbol) >> 2;
       value &= howto->dst_mask;
@@ -6393,6 +6412,7 @@
       break;
 
     case R_MIPS_GOT16:
+    case R_MIPS_CALL16:
       if (local_p)
 	{
 	  boolean forced;
@@ -6415,7 +6435,6 @@
 
       /* Fall through.  */
 
-    case R_MIPS_CALL16:
     case R_MIPS_GOT_DISP:
       value = g;
       overflowed_p = mips_elf_overflow_p (value, 16);
@@ -6620,9 +6639,9 @@
 	 ((sub1 << 16) | sub2)).
 
 	 When producing a relocateable object file, the calculation is
-	 (((A < 2) | (P & 0xf0000000) + S) >> 2)
+	 (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
 	 When producing a fully linked file, the calculation is
-	 let R = (((A < 2) | (P & 0xf0000000) + S) >> 2)
+	 let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
 	 ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)  */
 
       if (!info->relocateable)
@@ -7728,10 +7747,10 @@
 	  /* We may need a local GOT entry for this relocation.  We
 	     don't count R_MIPS_GOT_PAGE because we can estimate the
 	     maximum number of pages needed by looking at the size of
-	     the segment.  Similar comments apply to R_MIPS_GOT16.  We
-	     don't count R_MIPS_GOT_HI16, or R_MIPS_CALL_HI16 because
-	     these are always followed by an R_MIPS_GOT_LO16 or
-	     R_MIPS_CALL_LO16.
+	     the segment.  Similar comments apply to R_MIPS_GOT16 and
+	     R_MIPS_CALL16.  We don't count R_MIPS_GOT_HI16, or
+	     R_MIPS_CALL_HI16 because these are always followed by an
+	     R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.
 
 	     This estimation is very conservative since we can merge
 	     duplicate entries in the GOT.  In order to be less
@@ -7863,6 +7882,25 @@
 	  break;
 	}
 
+      /* We must not create a stub for a symbol that has relocations
+         related to taking the function's address.  */
+      switch (r_type)
+	{
+	default:
+	  if (h != NULL)
+	    {
+	      struct mips_elf_link_hash_entry *mh;
+
+	      mh = (struct mips_elf_link_hash_entry *) h;
+	      mh->no_fn_stub = true;
+	    }
+	  break;
+	case R_MIPS_CALL16:
+	case R_MIPS_CALL_HI16:
+	case R_MIPS_CALL_LO16:
+	  break;
+	}
+
       /* If this reloc is not a 16 bit call, and it has a global
          symbol, then we will need the fn_stub if there is one.
          References from a stub section do not count.  */
@@ -7998,6 +8036,8 @@
       || (indmips->min_dyn_reloc_index != 0
 	  && indmips->min_dyn_reloc_index < dirmips->min_dyn_reloc_index))
     dirmips->min_dyn_reloc_index = indmips->min_dyn_reloc_index;
+  if (indmips->no_fn_stub)
+    dirmips->no_fn_stub = true;
 }
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
@@ -8038,8 +8078,9 @@
     mips_elf_allocate_dynamic_relocations (dynobj,
 					   hmips->possibly_dynamic_relocs);
 
-  /* For a function, create a stub, if needed.  */
-  if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
+  /* For a function, create a stub, if allowed.  */
+  if (! hmips->no_fn_stub
+      && (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
     {
       if (! elf_hash_table (info)->dynamic_sections_created)
 	return true;
diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c
new file mode 100644
index 0000000..313a41a
--- /dev/null
+++ b/bfd/elf32-s390.c
@@ -0,0 +1,2179 @@
+/* IBM S/390-specific support for 32-bit ELF
+   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Contributed by Carl B. Pedersen and Martin Schwidefsky.
+
+   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 "bfdlink.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+
+static reloc_howto_type *elf_s390_reloc_type_lookup
+  PARAMS ((bfd *, bfd_reloc_code_real_type));
+static void elf_s390_info_to_howto
+  PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
+static boolean elf_s390_is_local_label_name PARAMS ((bfd *, const char *));
+static struct bfd_hash_entry *elf_s390_link_hash_newfunc
+  PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
+static struct bfd_link_hash_table *elf_s390_link_hash_table_create
+  PARAMS ((bfd *));
+static boolean elf_s390_check_relocs
+  PARAMS ((bfd *, struct bfd_link_info *, asection *,
+	   const Elf_Internal_Rela *));
+static boolean elf_s390_adjust_dynamic_symbol
+  PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
+static boolean elf_s390_size_dynamic_sections
+  PARAMS ((bfd *, struct bfd_link_info *));
+static boolean elf_s390_relocate_section
+  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
+	   Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
+static boolean elf_s390_finish_dynamic_symbol
+  PARAMS ((bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
+	   Elf_Internal_Sym *));
+static boolean elf_s390_finish_dynamic_sections
+  PARAMS ((bfd *, struct bfd_link_info *));
+
+#define USE_RELA 1		/* We want RELA relocations, not REL.  */
+
+#include "elf/s390.h"
+
+/* The relocation "howto" table.  */
+
+static reloc_howto_type elf_howto_table[] =
+{
+  HOWTO (R_390_NONE,		/* type */
+	 0,			/* rightshift */
+	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_390_NONE",		/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0,			/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  HOWTO(R_390_8,         0, 0,  8, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_8",       false, 0,0x000000ff, false),
+  HOWTO(R_390_12,        0, 1, 12, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_390_12",      false, 0,0x00000fff, false),
+  HOWTO(R_390_16,        0, 1, 16, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_16",      false, 0,0x0000ffff, false),
+  HOWTO(R_390_32,        0, 2, 32, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_32",      false, 0,0xffffffff, false),
+  HOWTO(R_390_PC32,	 0, 2, 32,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_PC32",    false, 0,0xffffffff,  true),
+  HOWTO(R_390_GOT12,	 0, 1, 12, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_390_GOT12",   false, 0,0x00000fff, false),
+  HOWTO(R_390_GOT32,	 0, 2, 32, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_GOT32",   false, 0,0xffffffff, false),
+  HOWTO(R_390_PLT32,	 0, 2, 32,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_PLT32",   false, 0,0xffffffff,  true),
+  HOWTO(R_390_COPY,      0, 2, 32, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_COPY",    false, 0,0xffffffff, false),
+  HOWTO(R_390_GLOB_DAT,  0, 2, 32, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_GLOB_DAT",false, 0,0xffffffff, false),
+  HOWTO(R_390_JMP_SLOT,  0, 2, 32, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_JMP_SLOT",false, 0,0xffffffff, false),
+  HOWTO(R_390_RELATIVE,  0, 2, 32,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_RELATIVE",false, 0,0xffffffff, false),
+  HOWTO(R_390_GOTOFF,    0, 2, 32, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_GOTOFF",  false, 0,0xffffffff, false),
+  HOWTO(R_390_GOTPC,     0, 2, 32,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_GOTPC",   false, 0,0xffffffff,  true),
+  HOWTO(R_390_GOT16,     0, 1, 16, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_GOT16",   false, 0,0x0000ffff, false),
+  HOWTO(R_390_PC16,      0, 1, 16,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_PC16",    false, 0,0x0000ffff,  true),
+  HOWTO(R_390_PC16DBL,   1, 1, 16,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_PC16DBL", false, 0,0x0000ffff,  true),
+  HOWTO(R_390_PLT16DBL,  1, 1, 16,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_PLT16DBL", false, 0,0x0000ffff,  true),
+};
+
+/* GNU extension to record C++ vtable hierarchy.  */
+static reloc_howto_type elf32_s390_vtinherit_howto =
+  HOWTO (R_390_GNU_VTINHERIT, 0,2,0,false,0,complain_overflow_dont, NULL, "R_390_GNU_VTINHERIT", false,0, 0, false);
+static reloc_howto_type elf32_s390_vtentry_howto =
+  HOWTO (R_390_GNU_VTENTRY, 0,2,0,false,0,complain_overflow_dont, _bfd_elf_rel_vtable_reloc_fn,"R_390_GNU_VTENTRY", false,0,0, false); 
+
+static reloc_howto_type *
+elf_s390_reloc_type_lookup (abfd, code)
+     bfd *abfd ATTRIBUTE_UNUSED;
+     bfd_reloc_code_real_type code;
+{
+  switch (code) {
+  case BFD_RELOC_NONE:
+    return &elf_howto_table[(int) R_390_NONE];
+  case BFD_RELOC_8:
+    return &elf_howto_table[(int) R_390_8];
+  case BFD_RELOC_390_12:
+    return &elf_howto_table[(int) R_390_12];
+  case BFD_RELOC_16:
+    return &elf_howto_table[(int) R_390_16];
+  case BFD_RELOC_32:
+    return &elf_howto_table[(int) R_390_32];
+  case BFD_RELOC_CTOR:
+    return &elf_howto_table[(int) R_390_32];
+  case BFD_RELOC_32_PCREL:
+    return &elf_howto_table[(int) R_390_PC32];
+  case BFD_RELOC_390_GOT12:
+    return &elf_howto_table[(int) R_390_GOT12];
+  case BFD_RELOC_32_GOT_PCREL:
+    return &elf_howto_table[(int) R_390_GOT32];
+  case BFD_RELOC_390_PLT32:
+    return &elf_howto_table[(int) R_390_PLT32];
+  case BFD_RELOC_390_COPY:
+    return &elf_howto_table[(int) R_390_COPY];
+  case BFD_RELOC_390_GLOB_DAT:
+    return &elf_howto_table[(int) R_390_GLOB_DAT];
+  case BFD_RELOC_390_JMP_SLOT:
+    return &elf_howto_table[(int) R_390_JMP_SLOT];
+  case BFD_RELOC_390_RELATIVE:
+    return &elf_howto_table[(int) R_390_RELATIVE];
+  case BFD_RELOC_32_GOTOFF:
+    return &elf_howto_table[(int) R_390_GOTOFF];
+  case BFD_RELOC_390_GOTPC:
+    return &elf_howto_table[(int) R_390_GOTPC];
+  case BFD_RELOC_390_GOT16:
+    return &elf_howto_table[(int) R_390_GOT16];
+  case BFD_RELOC_16_PCREL:
+    return &elf_howto_table[(int) R_390_PC16];
+  case BFD_RELOC_390_PC16DBL:
+    return &elf_howto_table[(int) R_390_PC16DBL];
+  case BFD_RELOC_390_PLT16DBL:
+    return &elf_howto_table[(int) R_390_PLT16DBL];
+  case BFD_RELOC_VTABLE_INHERIT:
+    return &elf32_s390_vtinherit_howto;
+  case BFD_RELOC_VTABLE_ENTRY:
+    return &elf32_s390_vtentry_howto;
+  default:
+    break;                                         
+  }
+  return 0;
+}
+
+/* We need to use ELF32_R_TYPE so we have our own copy of this function,
+   and elf32-s390.c has its own copy.  */
+
+static void
+elf_s390_info_to_howto (abfd, cache_ptr, dst)
+     bfd *abfd ATTRIBUTE_UNUSED;
+     arelent *cache_ptr;
+     Elf_Internal_Rela *dst;
+{
+  switch (ELF32_R_TYPE(dst->r_info))
+    {
+    case R_390_GNU_VTINHERIT:
+      cache_ptr->howto = &elf32_s390_vtinherit_howto;
+      break;
+
+    case R_390_GNU_VTENTRY:
+      cache_ptr->howto = &elf32_s390_vtentry_howto;
+      break;
+
+    default:
+      BFD_ASSERT (ELF32_R_TYPE(dst->r_info) < (unsigned int) R_390_max);
+      cache_ptr->howto = &elf_howto_table[ELF32_R_TYPE(dst->r_info)];
+    }     
+}
+
+static boolean
+elf_s390_is_local_label_name (abfd, name)
+     bfd *abfd;
+     const char *name;
+{
+  if (name[0] == '.' && (name[1] == 'X' || name[1] == 'L'))
+    return true;
+
+  return _bfd_elf_is_local_label_name (abfd, name);
+}
+
+/* Functions for the 390 ELF linker.  */
+
+/* The name of the dynamic interpreter.  This is put in the .interp
+   section.  */
+
+#define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
+
+/* The nop opcode we use.  */
+
+#define s390_NOP 0x07070707
+
+
+/* The size in bytes of the first entry in the procedure linkage table.  */
+#define PLT_FIRST_ENTRY_SIZE 32
+/* The size in bytes of an entry in the procedure linkage table.  */
+#define PLT_ENTRY_SIZE 32 
+
+#define GOT_ENTRY_SIZE 4
+
+/* The first three entries in a procedure linkage table are reserved,
+   and the initial contents are unimportant (we zero them out).
+   Subsequent entries look like this.  See the SVR4 ABI 386
+   supplement to see how this works.  */
+
+/* For the s390, simple addr offset can only be 0 - 4096.
+   To use the full 2 GB address space, several instructions
+   are needed to load an address in a register and execute
+   a branch( or just saving the address)
+
+   Furthermore, only r 0 and 1 are free to use!!!  */ 
+
+/* The first 3 words in the GOT are then reserved.
+   Word 0 is the address of the dynamic table.
+   Word 1 is a pointer to a structure describing the object
+   Word 2 is used to point to the loader entry address.
+
+   The code for position independand PLT entries looks like this:
+
+   r12 holds addr of the current GOT at entry to the PLT
+
+   The GOT holds the address in the PLT to be executed.
+   The loader then gets:
+   24(15) =  Pointer to the structure describing the object.
+   28(15) =  Offset in symbol table                                             
+
+   The loader  must  then find the module where the function is
+   and insert the address in the GOT.
+
+  Note: 390 can only address +- 64 K relative.
+        We check if offset > 65536, then make a relative branch -64xxx
+        back to a previous defined branch
+
+PLT1: BASR 1,0         # 2 bytes
+      L    1,22(1)     # 4 bytes  Load offset in GOT in r 1
+      L    1,(1,12)    # 4 bytes  Load address from GOT in r1
+      BCR  15,1        # 2 bytes  Jump to address
+RET1: BASR 1,0         # 2 bytes  Return from GOT 1st time
+      L    1,14(1)     # 4 bytes  Load offset in symol table in r1
+      BRC  15,-x       # 4 bytes  Jump to start of PLT
+      .word 0          # 2 bytes filler
+      .long ?          # 4 bytes  offset in GOT
+      .long ?          # 4 bytes  offset into symbol table
+
+  This was the general case. There are two additional, optimizes PLT
+  definitions. One for GOT offsets < 4096 and one for GOT offsets < 32768.
+  First the one for GOT offsets < 4096:
+
+PLT1: L    1,<offset>(12) # 4 bytes  Load address from GOT in R1
+      BCR  15,1           # 2 bytes  Jump to address
+      .word 0,0,0         # 6 bytes  filler
+RET1: BASR 1,0            # 2 bytes  Return from GOT 1st time
+      L    1,14(1)        # 4 bytes  Load offset in symbol table in r1
+      BRC  15,-x          # 4 bytes  Jump to start of PLT
+      .word 0,0,0         # 6 bytes  filler
+      .long ?             # 4 bytes  offset into symbol table
+
+  Second the one for GOT offsets < 32768:
+
+PLT1: LHI  1,<offset>     # 4 bytes  Load offset in GOT to r1
+      L    1,(1,12)       # 4 bytes  Load address from GOT to r1
+      BCR  15,1           # 2 bytes  Jump to address
+      .word 0             # 2 bytes  filler
+RET1: BASR 1,0            # 2 bytes  Return from GOT 1st time
+      L    1,14(1)        # 4 bytes  Load offset in symbol table in r1
+      BRC  15,-x          # 4 bytes  Jump to start of PLT
+      .word 0,0,0         # 6 bytes  filler
+      .long ?             # 4 bytes  offset into symbol table
+
+Total = 32 bytes per PLT entry
+
+   The code for static build PLT entries looks like this:
+
+PLT1: BASR 1,0         # 2 bytes
+      L    1,22(1)     # 4 bytes  Load address of GOT entry
+      L    1,0(0,1)    # 4 bytes  Load address from GOT in r1
+      BCR  15,1        # 2 bytes  Jump to address
+RET1: BASR 1,0         # 2 bytes  Return from GOT 1st time
+      L    1,14(1)     # 4 bytes  Load offset in symbol table in r1
+      BRC  15,-x       # 4 bytes  Jump to start of PLT
+      .word 0          # 2 bytes  filler
+      .long ?          # 4 bytes  address of GOT entry
+      .long ?          # 4 bytes  offset into symbol table  */
+
+#define PLT_PIC_ENTRY_WORD0 0x0d105810
+#define PLT_PIC_ENTRY_WORD1 0x10165811
+#define PLT_PIC_ENTRY_WORD2 0xc00007f1
+#define PLT_PIC_ENTRY_WORD3 0x0d105810
+#define PLT_PIC_ENTRY_WORD4 0x100ea7f4
+
+#define PLT_PIC12_ENTRY_WORD0 0x5810c000
+#define PLT_PIC12_ENTRY_WORD1 0x07f10000
+#define PLT_PIC12_ENTRY_WORD2 0x00000000
+#define PLT_PIC12_ENTRY_WORD3 0x0d105810
+#define PLT_PIC12_ENTRY_WORD4 0x100ea7f4
+
+#define PLT_PIC16_ENTRY_WORD0 0xa7180000
+#define PLT_PIC16_ENTRY_WORD1 0x5811c000
+#define PLT_PIC16_ENTRY_WORD2 0x07f10000
+#define PLT_PIC16_ENTRY_WORD3 0x0d105810
+#define PLT_PIC16_ENTRY_WORD4 0x100ea7f4
+
+#define PLT_ENTRY_WORD0     0x0d105810
+#define PLT_ENTRY_WORD1     0x10165810
+#define PLT_ENTRY_WORD2     0x100007f1
+#define PLT_ENTRY_WORD3     0x0d105810
+#define PLT_ENTRY_WORD4     0x100ea7f4
+
+/* The first PLT entry pushes the offset into the symbol table
+   from R1 onto the stack at 8(15) and the loader object info
+   at 12(15), loads the loader address in R1 and jumps to it.  */
+
+/* The first entry in the PLT for PIC code:
+
+PLT0:
+   ST   1,28(15)  # R1 has offset into symbol table
+   L    1,4(12)   # Get loader ino(object struct address)
+   ST   1,24(15)  # Store address 
+   L    1,8(12)   # Entry address of loader in R1
+   BR   1         # Jump to loader
+
+   The first entry in the PLT for static code:
+
+PLT0:
+   ST   1,28(15)      # R1 has offset into symbol table
+   BASR 1,0
+   L    1,18(0,1)     # Get address of GOT
+   MVC  24(4,15),4(1) # Move loader ino to stack
+   L    1,8(1)        # Get address of loader
+   BR   1             # Jump to loader
+   .word 0            # filler
+   .long got          # address of GOT  */
+
+#define PLT_PIC_FIRST_ENTRY_WORD0 0x5010f01c
+#define PLT_PIC_FIRST_ENTRY_WORD1 0x5810c004
+#define PLT_PIC_FIRST_ENTRY_WORD2 0x5010f018
+#define PLT_PIC_FIRST_ENTRY_WORD3 0x5810c008
+#define PLT_PIC_FIRST_ENTRY_WORD4 0x07f10000
+
+#define PLT_FIRST_ENTRY_WORD0     0x5010f01c
+#define PLT_FIRST_ENTRY_WORD1     0x0d105810
+#define PLT_FIRST_ENTRY_WORD2     0x1012D203
+#define PLT_FIRST_ENTRY_WORD3     0xf0181004
+#define PLT_FIRST_ENTRY_WORD4     0x58101008
+#define PLT_FIRST_ENTRY_WORD5     0x07f10000
+
+/* The s390 linker needs to keep track of the number of relocs that it
+   decides to copy in check_relocs for each symbol.  This is so that
+   it can discard PC relative relocs if it doesn't need them when
+   linking with -Bsymbolic.  We store the information in a field
+   extending the regular ELF linker hash table.  */
+
+/* This structure keeps track of the number of PC relative relocs we
+   have copied for a given symbol.  */
+
+struct elf_s390_pcrel_relocs_copied
+{
+  /* Next section.  */
+  struct elf_s390_pcrel_relocs_copied *next;
+  /* A section in dynobj.  */
+  asection *section;
+  /* Number of relocs copied in this section.  */
+  bfd_size_type count;
+};
+
+/* s390 ELF linker hash entry.  */
+
+struct elf_s390_link_hash_entry
+{
+  struct elf_link_hash_entry root;
+
+  /* Number of PC relative relocs copied for this symbol.  */
+  struct elf_s390_pcrel_relocs_copied *pcrel_relocs_copied;
+};
+
+/* s390 ELF linker hash table.  */
+
+struct elf_s390_link_hash_table
+{
+  struct elf_link_hash_table root;
+};
+
+/* Declare this now that the above structures are defined.  */
+
+static boolean elf_s390_discard_copies
+  PARAMS ((struct elf_s390_link_hash_entry *, PTR));
+
+/* Traverse an s390 ELF linker hash table.  */
+
+#define elf_s390_link_hash_traverse(table, func, info)			\
+  (elf_link_hash_traverse						\
+   (&(table)->root,							\
+    (boolean (*) PARAMS ((struct elf_link_hash_entry *, PTR))) (func),	\
+    (info)))
+
+/* Get the s390 ELF linker hash table from a link_info structure.  */
+
+#define elf_s390_hash_table(p) \
+  ((struct elf_s390_link_hash_table *) ((p)->hash))
+
+/* Create an entry in an s390 ELF linker hash table.  */
+
+static struct bfd_hash_entry *
+elf_s390_link_hash_newfunc (entry, table, string)
+     struct bfd_hash_entry *entry;
+     struct bfd_hash_table *table;
+     const char *string;
+{
+  struct elf_s390_link_hash_entry *ret =
+    (struct elf_s390_link_hash_entry *) entry;
+
+  /* Allocate the structure if it has not already been allocated by a
+     subclass.  */
+  if (ret == (struct elf_s390_link_hash_entry *) NULL)
+    ret = ((struct elf_s390_link_hash_entry *)
+	   bfd_hash_allocate (table,
+			      sizeof (struct elf_s390_link_hash_entry)));
+  if (ret == (struct elf_s390_link_hash_entry *) NULL)
+    return (struct bfd_hash_entry *) ret;
+
+  /* Call the allocation method of the superclass.  */
+  ret = ((struct elf_s390_link_hash_entry *)
+	 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
+				     table, string));
+  if (ret != (struct elf_s390_link_hash_entry *) NULL)
+    {
+      ret->pcrel_relocs_copied = NULL;
+    }
+
+  return (struct bfd_hash_entry *) ret;
+}
+
+/* Create an s390 ELF linker hash table.  */
+
+static struct bfd_link_hash_table *
+elf_s390_link_hash_table_create (abfd)
+     bfd *abfd;
+{
+  struct elf_s390_link_hash_table *ret;
+
+  ret = ((struct elf_s390_link_hash_table *)
+	 bfd_alloc (abfd, sizeof (struct elf_s390_link_hash_table)));
+  if (ret == (struct elf_s390_link_hash_table *) NULL)
+    return NULL;
+
+  if (! _bfd_elf_link_hash_table_init (&ret->root, abfd,
+				       elf_s390_link_hash_newfunc))
+    {
+      bfd_release (abfd, ret);
+      return NULL;
+    }
+
+  return &ret->root.root;
+}
+
+
+/* Look through the relocs for a section during the first phase, and
+   allocate space in the global offset table or procedure linkage
+   table.  */
+
+static boolean
+elf_s390_check_relocs (abfd, info, sec, relocs)
+     bfd *abfd;
+     struct bfd_link_info *info;
+     asection *sec;
+     const Elf_Internal_Rela *relocs;
+{
+  bfd *dynobj;
+  Elf_Internal_Shdr *symtab_hdr;
+  struct elf_link_hash_entry **sym_hashes;
+  bfd_signed_vma *local_got_refcounts;
+  const Elf_Internal_Rela *rel;
+  const Elf_Internal_Rela *rel_end;
+  asection *sgot;
+  asection *srelgot;
+  asection *sreloc;
+
+  if (info->relocateable)
+    return true;
+
+  dynobj = elf_hash_table (info)->dynobj;
+  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+  sym_hashes = elf_sym_hashes (abfd);
+  local_got_refcounts = elf_local_got_offsets (abfd);
+
+  sgot = NULL;
+  srelgot = NULL;
+  sreloc = NULL;
+
+  rel_end = relocs + sec->reloc_count;
+  for (rel = relocs; rel < rel_end; rel++)
+    {
+      unsigned long r_symndx;
+      struct elf_link_hash_entry *h;
+
+      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];      
+
+      /* Some relocs require a global offset table.  */
+      if (dynobj == NULL)
+	{
+	  switch (ELF32_R_TYPE (rel->r_info))
+	    {
+	    case R_390_GOT12:
+            case R_390_GOT16:
+	    case R_390_GOT32:
+	    case R_390_GOTOFF:
+	    case R_390_GOTPC:
+	      elf_hash_table (info)->dynobj = dynobj = abfd;
+	      if (! _bfd_elf_create_got_section (dynobj, info))
+		return false;
+	      break;
+
+	    default:
+	      break;
+	    }
+	}
+
+
+      switch (ELF32_R_TYPE (rel->r_info))
+	{
+	case R_390_GOT12:
+        case R_390_GOT16:
+	case R_390_GOT32:
+	  /* This symbol requires a global offset table entry.  */
+
+	  if (sgot == NULL)
+	    {
+	      sgot = bfd_get_section_by_name (dynobj, ".got");
+	      BFD_ASSERT (sgot != NULL);
+	    }
+
+
+	  if (srelgot == NULL
+	      && (h != NULL || info->shared))
+	    {
+	      srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+	      if (srelgot == NULL)
+		{
+		  srelgot = bfd_make_section (dynobj, ".rela.got");
+		  if (srelgot == NULL
+		      || ! bfd_set_section_flags (dynobj, srelgot,
+						  (SEC_ALLOC
+						   | SEC_LOAD
+						   | SEC_HAS_CONTENTS
+						   | SEC_IN_MEMORY
+						   | SEC_LINKER_CREATED
+						   | SEC_READONLY))
+		      || ! bfd_set_section_alignment (dynobj, srelgot, 2))
+		    return false;
+		}
+	    }
+
+	  if (h != NULL)
+	    {
+	      if (h->got.refcount == -1)
+		{
+		  h->got.refcount = 1;
+
+		  /* Make sure this symbol is output as a dynamic symbol.  */
+		  if (h->dynindx == -1)
+		    {
+		      if (! bfd_elf32_link_record_dynamic_symbol (info, h))
+			return false;
+		    }
+
+		  sgot->_raw_size += 4;
+		  srelgot->_raw_size += sizeof (Elf32_External_Rela);
+		}
+	      else
+		h->got.refcount += 1;
+	    }
+	  else
+	    {
+     	      /* This is a global offset table entry for a local symbol.  */
+	      if (local_got_refcounts == NULL)
+		{
+		  size_t size;
+
+		  size = symtab_hdr->sh_info * sizeof (bfd_signed_vma);
+		  local_got_refcounts = (bfd_signed_vma *)
+		                         bfd_alloc (abfd, size);
+		  if (local_got_refcounts == NULL)
+		    return false;
+		  elf_local_got_refcounts (abfd) = local_got_refcounts;
+		  memset (local_got_refcounts, -1, size);
+		}
+	      if (local_got_refcounts[r_symndx] == -1)
+		{
+		  local_got_refcounts[r_symndx] = 1;
+
+		  sgot->_raw_size += 4;
+		  if (info->shared)
+		    {
+		      /* If we are generating a shared object, we need to
+			 output a R_390_RELATIVE reloc so that the dynamic
+			 linker can adjust this GOT entry.  */
+		      srelgot->_raw_size += sizeof (Elf32_External_Rela);
+		    }
+		}
+	      else
+		local_got_refcounts[r_symndx] += 1;
+	    }
+	  break;
+
+        case R_390_PLT16DBL:
+	case R_390_PLT32:
+	  /* This symbol requires a procedure linkage table entry.  We
+             actually build the entry in adjust_dynamic_symbol,
+             because this might be a case of linking PIC code which is
+             never referenced by a dynamic object, in which case we
+             don't need to generate a procedure linkage table entry
+             after all.  */
+
+	  /* If this is a local symbol, we resolve it directly without
+             creating a procedure linkage table entry.  */
+	  if (h == NULL)
+	    continue;
+
+	  if (h->plt.refcount == -1)
+	    {
+	      h->plt.refcount = 1;
+	      h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_PLT;
+	    }
+	  else
+	    h->plt.refcount += 1;
+	  break;
+
+        case R_390_8:
+        case R_390_16:
+	case R_390_32:
+        case R_390_PC16:
+        case R_390_PC16DBL:
+	case R_390_PC32:
+	  if (h != NULL)
+	    h->elf_link_hash_flags |= ELF_LINK_NON_GOT_REF;
+
+	  /* If we are creating a shared library, and this is a reloc
+             against a global symbol, or a non PC relative reloc
+             against a local symbol, then we need to copy the reloc
+             into the shared library.  However, if we are linking with
+             -Bsymbolic, we do not need to copy a reloc against a
+             global symbol which is defined in an object we are
+             including in the link (i.e., DEF_REGULAR is set).  At
+             this point we have not seen all the input files, so it is
+             possible that DEF_REGULAR is not set now but will be set
+             later (it is never cleared).  We account for that
+             possibility below by storing information in the
+             pcrel_relocs_copied field of the hash table entry.  */
+	  if (info->shared
+              && (sec->flags & SEC_ALLOC) != 0
+	      && ((ELF32_R_TYPE (rel->r_info) != R_390_PC16 &&
+                   ELF32_R_TYPE (rel->r_info) != R_390_PC16DBL &&
+                   ELF32_R_TYPE (rel->r_info) != R_390_PC32)
+		  || (h != NULL
+		      && (! info->symbolic
+			  || (h->elf_link_hash_flags
+			      & ELF_LINK_HASH_DEF_REGULAR) == 0))))
+	    {
+	      /* When creating a shared object, we must copy these
+                 reloc types into the output file.  We create a reloc
+                 section in dynobj and make room for this reloc.  */
+	      if (sreloc == NULL)
+		{
+		  const char *name;
+
+		  name = (bfd_elf_string_from_elf_section
+			  (abfd,
+			   elf_elfheader (abfd)->e_shstrndx,
+			   elf_section_data (sec)->rel_hdr.sh_name));
+		  if (name == NULL)
+		    return false;
+
+		  BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+			      && strcmp (bfd_get_section_name (abfd, sec),
+					 name + 5) == 0);
+
+		  sreloc = bfd_get_section_by_name (dynobj, name);
+		  if (sreloc == NULL)
+		    {
+		      flagword flags;
+
+		      sreloc = bfd_make_section (dynobj, name);
+		      flags = (SEC_HAS_CONTENTS | SEC_READONLY
+			       | SEC_IN_MEMORY | SEC_LINKER_CREATED);
+		      if ((sec->flags & SEC_ALLOC) != 0)
+			flags |= SEC_ALLOC | SEC_LOAD;
+		      if (sreloc == NULL
+			  || ! bfd_set_section_flags (dynobj, sreloc, flags)
+			  || ! bfd_set_section_alignment (dynobj, sreloc, 2))
+			return false;
+		    }
+		}
+
+	      sreloc->_raw_size += sizeof (Elf32_External_Rela);
+
+	      /* If we are linking with -Bsymbolic, and this is a
+                 global symbol, we count the number of PC relative
+                 relocations we have entered for this symbol, so that
+                 we can discard them again if the symbol is later
+                 defined by a regular object.  Note that this function
+                 is only called if we are using an elf_s390 linker
+                 hash table, which means that h is really a pointer to
+                 an elf_s390_link_hash_entry.  */
+	      if (h != NULL
+		  && (ELF32_R_TYPE (rel->r_info) == R_390_PC16 ||
+                      ELF32_R_TYPE (rel->r_info) == R_390_PC16DBL ||
+                      ELF32_R_TYPE (rel->r_info) == R_390_PC32))
+		{
+		  struct elf_s390_link_hash_entry *eh;
+		  struct elf_s390_pcrel_relocs_copied *p;
+
+		  eh = (struct elf_s390_link_hash_entry *) h;
+
+		  for (p = eh->pcrel_relocs_copied; p != NULL; p = p->next)
+		    if (p->section == sreloc)
+		      break;
+
+		  if (p == NULL)
+		    {
+		      p = ((struct elf_s390_pcrel_relocs_copied *)
+			   bfd_alloc (dynobj, sizeof *p));
+		      if (p == NULL)
+			return false;
+		      p->next = eh->pcrel_relocs_copied;
+		      eh->pcrel_relocs_copied = p;
+		      p->section = sreloc;
+		      p->count = 0;
+		    }
+
+		  ++p->count;
+		}
+	    }
+
+	  break;
+
+	  /* This relocation describes the C++ object vtable hierarchy.
+	     Reconstruct it for later use during GC.  */
+        case R_390_GNU_VTINHERIT:
+          if (!_bfd_elf32_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
+            return false;
+          break;
+
+	  /* This relocation describes which C++ vtable entries are actually
+	     used.  Record for later use during GC.  */
+        case R_390_GNU_VTENTRY:
+          if (!_bfd_elf32_gc_record_vtentry (abfd, sec, h, rel->r_addend))
+            return false;
+          break;
+                   
+	default:
+	  break;
+	}
+    }
+
+  return true;
+}
+
+/* Return the section that should be marked against GC for a given
+   relocation.  */
+
+static asection *
+elf_s390_gc_mark_hook (abfd, info, rel, h, sym)
+     bfd *abfd;
+     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))
+	{
+	case R_390_GNU_VTINHERIT:
+	case R_390_GNU_VTENTRY:
+	  break;
+
+	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
+    {
+      if (!(elf_bad_symtab (abfd)
+	    && ELF_ST_BIND (sym->st_info) != STB_LOCAL)
+	  && ! ((sym->st_shndx <= 0 || sym->st_shndx >= SHN_LORESERVE)
+		&& sym->st_shndx != SHN_COMMON))
+	{
+	  return bfd_section_from_elf_index (abfd, sym->st_shndx);
+	}
+    }
+
+  return NULL;
+}
+
+/* Update the got entry reference counts for the section being removed.  */
+
+static boolean
+elf_s390_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;
+{
+  Elf_Internal_Shdr *symtab_hdr;
+  struct elf_link_hash_entry **sym_hashes;
+  bfd_signed_vma *local_got_refcounts;
+  const Elf_Internal_Rela *rel, *relend;
+  unsigned long r_symndx;
+  struct elf_link_hash_entry *h;
+  bfd *dynobj;
+  asection *sgot;
+  asection *srelgot;
+
+  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+  sym_hashes = elf_sym_hashes (abfd);
+  local_got_refcounts = elf_local_got_refcounts (abfd);
+
+  dynobj = elf_hash_table (info)->dynobj;
+  if (dynobj == NULL)
+    return true;
+
+  sgot = bfd_get_section_by_name (dynobj, ".got");
+  srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+
+  relend = relocs + sec->reloc_count;
+  for (rel = relocs; rel < relend; rel++)
+    switch (ELF32_R_TYPE (rel->r_info))
+      {
+      case R_390_GOT12:
+      case R_390_GOT16:
+      case R_390_GOT32:
+      case R_390_GOTOFF:
+      case R_390_GOTPC:
+	r_symndx = ELF32_R_SYM (rel->r_info);
+	if (r_symndx >= symtab_hdr->sh_info)
+	  {
+	    h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+	    if (h->got.refcount > 0)
+	      {
+		h->got.refcount -= 1;
+		if (h->got.refcount == 0)
+		  {
+		    sgot->_raw_size -= 4;
+		    srelgot->_raw_size -= sizeof (Elf32_External_Rela);
+		  }
+	      }
+	  }
+	else if (local_got_refcounts != NULL)
+	  {
+	    if (local_got_refcounts[r_symndx] > 0)
+	      {
+		local_got_refcounts[r_symndx] -= 1;
+		if (local_got_refcounts[r_symndx] == 0)
+		  {
+		    sgot->_raw_size -= 4;
+		    if (info->shared)
+		      srelgot->_raw_size -= sizeof (Elf32_External_Rela);
+		  }
+	      }
+	  }
+	break;
+
+      case R_390_PLT16DBL:
+      case R_390_PLT32:
+	r_symndx = ELF32_R_SYM (rel->r_info);
+	if (r_symndx >= symtab_hdr->sh_info)
+	  {
+	    h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+	    if (h->plt.refcount > 0)
+	      h->plt.refcount -= 1;
+	  }
+	break;
+
+      default:
+	break;
+      }
+
+  return true;
+}
+
+/* Adjust a symbol defined by a dynamic object and referenced by a
+   regular object.  The current definition is in some section of the
+   dynamic object, but we're not including those sections.  We have to
+   change the definition to something the rest of the link can
+   understand.  */
+
+static boolean
+elf_s390_adjust_dynamic_symbol (info, h)
+     struct bfd_link_info *info;
+     struct elf_link_hash_entry *h;
+{
+  bfd *dynobj;
+  asection *s;
+  unsigned int power_of_two;
+
+  dynobj = elf_hash_table (info)->dynobj;
+
+  /* Make sure we know what is going on here.  */
+  BFD_ASSERT (dynobj != NULL
+	      && ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
+		  || h->weakdef != NULL
+		  || ((h->elf_link_hash_flags
+		       & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+		      && (h->elf_link_hash_flags
+			  & ELF_LINK_HASH_REF_REGULAR) != 0
+		      && (h->elf_link_hash_flags
+			  & ELF_LINK_HASH_DEF_REGULAR) == 0)));
+
+  /* If this is a function, put it in the procedure linkage table.  We
+     will fill in the contents of the procedure linkage table later
+     (although we could actually do it here). */
+  if (h->type == STT_FUNC
+      || (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
+    {
+      if ((! info->shared
+	   && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
+	   && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) == 0)
+	  || (info->shared && h->plt.refcount <= 0))
+	{
+	  /* This case can occur if we saw a PLT32 reloc in an input
+             file, but the symbol was never referred to by a dynamic
+             object, or if all references were garbage collected.  In
+	     such a case, we don't actually need to build a procedure
+	     linkage table, and we can just do a PC32 reloc instead.  */
+	  h->plt.offset = (bfd_vma) -1;
+	  h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
+	  return true;
+	}
+
+      /* Make sure this symbol is output as a dynamic symbol.  */
+      if (h->dynindx == -1)
+	{
+	  if (! bfd_elf32_link_record_dynamic_symbol (info, h))
+	    return false;
+	}
+
+      s = bfd_get_section_by_name (dynobj, ".plt");
+      BFD_ASSERT (s != NULL);
+
+      /* The first entry in .plt is reserved.  */
+      if (s->_raw_size == 0)
+	s->_raw_size = PLT_FIRST_ENTRY_SIZE;
+
+     /* If this symbol is not defined in a regular file, and we are
+       not generating a shared library, then set the symbol to this
+       location in the .plt.  This is required to make function
+       pointers compare as equal between the normal executable and
+       the shared library.  */
+     if (! info->shared
+	&& (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
+      {
+	h->root.u.def.section = s;
+	h->root.u.def.value = s->_raw_size;
+      }
+
+      h->plt.offset = s->_raw_size;
+
+      /* Make room for this entry.  */
+      s->_raw_size += PLT_ENTRY_SIZE;
+
+      /* We also need to make an entry in the .got.plt section, which
+	 will be placed in the .got section by the linker script.  */
+      s = bfd_get_section_by_name (dynobj, ".got.plt");
+      BFD_ASSERT (s != NULL);
+      s->_raw_size += GOT_ENTRY_SIZE;
+
+      /* We also need to make an entry in the .rela.plt section.  */
+      s = bfd_get_section_by_name (dynobj, ".rela.plt");
+      BFD_ASSERT (s != NULL);
+      s->_raw_size += sizeof (Elf32_External_Rela);
+
+      return true;
+    }
+
+  /* If this is a weak symbol, and there is a real definition, the
+     processor independent code will have arranged for us to see the
+     real definition first, and we can just use the same value.  */
+  if (h->weakdef != NULL)
+    {
+      BFD_ASSERT (h->weakdef->root.type == bfd_link_hash_defined
+		  || h->weakdef->root.type == bfd_link_hash_defweak);
+      h->root.u.def.section = h->weakdef->root.u.def.section;
+      h->root.u.def.value = h->weakdef->root.u.def.value;
+      return true;
+    }
+
+  /* This is a reference to a symbol defined by a dynamic object which
+     is not a function.  */
+
+  /* If we are creating a shared library, we must presume that the
+     only references to the symbol are via the global offset table.
+     For such cases we need not do anything here; the relocations will
+     be handled correctly by relocate_section.  */
+  if (info->shared)
+    return true;
+
+  /* If there are no references to this symbol that do not use the
+     GOT, we don't need to generate a copy reloc.  */
+  if ((h->elf_link_hash_flags & ELF_LINK_NON_GOT_REF) == 0)
+    return true;
+
+  /* We must allocate the symbol in our .dynbss section, which will
+     become part of the .bss section of the executable.  There will be
+     an entry for this symbol in the .dynsym section.  The dynamic
+     object will contain position independent code, so all references
+     from the dynamic object to this symbol will go through the global
+     offset table.  The dynamic linker will use the .dynsym entry to
+     determine the address it must put in the global offset table, so
+     both the dynamic object and the regular object will refer to the
+     same memory location for the variable.  */
+
+  s = bfd_get_section_by_name (dynobj, ".dynbss");
+  BFD_ASSERT (s != NULL);
+
+  /* We must generate a R_390_COPY reloc to tell the dynamic linker
+     to copy the initial value out of the dynamic object and into the
+     runtime process image.  We need to remember the offset into the
+     .rel.bss section we are going to use.  */
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+    {
+      asection *srel;
+
+      srel = bfd_get_section_by_name (dynobj, ".rela.bss");
+      BFD_ASSERT (srel != NULL);
+      srel->_raw_size += sizeof (Elf32_External_Rela);
+      h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_COPY;
+    }
+
+  /* We need to figure out the alignment required for this symbol.  I
+     have no idea how ELF linkers handle this.  */
+  power_of_two = bfd_log2 (h->size);
+  if (power_of_two > 3)
+    power_of_two = 3;
+
+  /* Apply the required alignment.  */
+  s->_raw_size = BFD_ALIGN (s->_raw_size,
+			    (bfd_size_type) (1 << power_of_two));
+  if (power_of_two > bfd_get_section_alignment (dynobj, s))
+    {
+      if (! bfd_set_section_alignment (dynobj, s, power_of_two))
+	return false;
+    }
+
+  /* Define the symbol as being at this point in the section.  */
+  h->root.u.def.section = s;
+  h->root.u.def.value = s->_raw_size;
+
+  /* Increment the section size to make room for the symbol.  */
+  s->_raw_size += h->size;
+
+  return true;
+}
+
+/* Set the sizes of the dynamic sections.  */
+
+static boolean
+elf_s390_size_dynamic_sections (output_bfd, info)
+     bfd *output_bfd;
+     struct bfd_link_info *info;
+{
+  bfd *dynobj;
+  asection *s;
+  boolean reltext;
+  boolean relocs;
+  boolean plt;
+
+  dynobj = elf_hash_table (info)->dynobj;
+  BFD_ASSERT (dynobj != NULL);
+
+  if (elf_hash_table (info)->dynamic_sections_created)
+    {
+      /* Set the contents of the .interp section to the interpreter.  */
+      if (! info->shared)
+	{
+	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  BFD_ASSERT (s != NULL);
+	  s->_raw_size = sizeof ELF_DYNAMIC_INTERPRETER;
+	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
+	}
+    }
+  else
+    {
+      /* We may have created entries in the .rela.got section.
+         However, if we are not creating the dynamic sections, we will
+         not actually use these entries.  Reset the size of .rela.got,
+         which will cause it to get stripped from the output file
+         below.  */
+      s = bfd_get_section_by_name (dynobj, ".rela.got");
+      if (s != NULL)
+	s->_raw_size = 0;
+    }
+
+  /* If this is a -Bsymbolic shared link, then we need to discard all
+     PC relative relocs against symbols defined in a regular object.
+     We allocated space for them in the check_relocs routine, but we
+     will not fill them in in the relocate_section routine.  */
+  if (info->shared)
+    elf_s390_link_hash_traverse (elf_s390_hash_table (info),
+				 elf_s390_discard_copies,
+				 (PTR) info);
+
+  /* The check_relocs and adjust_dynamic_symbol entry points have
+     determined the sizes of the various dynamic sections.  Allocate
+     memory for them.  */
+  plt = false;
+  reltext = false;
+  relocs = false;
+  for (s = dynobj->sections; s != NULL; s = s->next)
+    {
+      const char *name;
+      boolean strip;
+
+      if ((s->flags & SEC_LINKER_CREATED) == 0)
+	continue;
+
+      /* It's OK to base decisions on the section name, because none
+	 of the dynobj section names depend upon the input files.  */
+      name = bfd_get_section_name (dynobj, s);
+
+      strip = false;
+
+      if (strcmp (name, ".plt") == 0)
+	{
+	  if (s->_raw_size == 0)
+	    {
+	      /* Strip this section if we don't need it; see the
+                 comment below.  */
+	      strip = true;
+	    }
+	  else
+	    {
+	      /* Remember whether there is a PLT.  */
+	      plt = true;
+	    }
+	}
+      else if (strncmp (name, ".rela", 5) == 0)
+	{
+	  if (s->_raw_size == 0)
+	    {
+	      /* If we don't need this section, strip it from the
+		 output file.  This is to handle .rela.bss and
+		 .rel.plt.  We must create it in
+		 create_dynamic_sections, because it must be created
+		 before the linker maps input sections to output
+		 sections.  The linker does that before
+		 adjust_dynamic_symbol is called, and it is that
+		 function which decides whether anything needs to go
+		 into these sections.  */
+	      strip = true;
+	    }
+	  else
+	    {
+	      asection *target;
+
+	      /* Remember whether there are any reloc sections other
+                 than .rela.plt.  */
+	      if (strcmp (name, ".rela.plt") != 0)
+		{
+		  const char *outname;
+
+		  relocs = true;
+
+		  /* If this relocation section applies to a read only
+		     section, then we probably need a DT_TEXTREL
+		     entry.  The entries in the .rela.plt section
+		     really apply to the .got section, which we
+		     created ourselves and so know is not readonly.  */
+		  outname = bfd_get_section_name (output_bfd,
+						  s->output_section);
+		  target = bfd_get_section_by_name (output_bfd, outname + 5);
+		  if (target != NULL
+		      && (target->flags & SEC_READONLY) != 0
+		      && (target->flags & SEC_ALLOC) != 0)
+		    reltext = true;
+		}
+
+	      /* We use the reloc_count field as a counter if we need
+		 to copy relocs into the output file.  */
+	      s->reloc_count = 0;
+	    }
+	}
+      else if (strncmp (name, ".got", 4) != 0)
+	{
+	  /* It's not one of our sections, so don't allocate space.  */
+	  continue;
+	}
+
+      if (strip)
+	{
+	  _bfd_strip_section_from_output (info, s);
+	  continue;
+	}
+
+      /* Allocate memory for the section contents.  */
+      s->contents = (bfd_byte *) bfd_alloc (dynobj, s->_raw_size);
+      if (s->contents == NULL && s->_raw_size != 0)
+	return false;
+    }
+
+  if (elf_hash_table (info)->dynamic_sections_created)
+    {
+      /* Add some entries to the .dynamic section.  We fill in the
+	 values later, in elf_s390_finish_dynamic_sections, but we
+	 must add the entries now so that we get the correct size for
+	 the .dynamic section.  The DT_DEBUG entry is filled in by the
+	 dynamic linker and used by the debugger.  */
+      if (! info->shared)
+	{
+	  if (! bfd_elf32_add_dynamic_entry (info, DT_DEBUG, 0))
+	    return false;
+	}
+
+      if (plt)
+	{
+	  if (! bfd_elf32_add_dynamic_entry (info, DT_PLTGOT, 0)
+	      || ! bfd_elf32_add_dynamic_entry (info, DT_PLTRELSZ, 0)
+	      || ! bfd_elf32_add_dynamic_entry (info, DT_PLTREL, DT_RELA)
+	      || ! bfd_elf32_add_dynamic_entry (info, DT_JMPREL, 0))
+	    return false;
+	}
+
+      if (relocs)
+        {
+          if (! bfd_elf32_add_dynamic_entry (info, DT_RELA, 0)
+              || ! bfd_elf32_add_dynamic_entry (info, DT_RELASZ, 0)
+              || ! bfd_elf32_add_dynamic_entry (info, DT_RELAENT,
+					    sizeof (Elf32_External_Rela)))
+	    return false;
+         }
+
+      if (reltext)
+	{
+	  if (! bfd_elf32_add_dynamic_entry (info, DT_TEXTREL, 0))
+	    return false;
+	  info->flags |= DF_TEXTREL;
+	}
+    }
+
+  return true;
+}
+
+/* This function is called via elf_s390_link_hash_traverse if we are
+   creating a shared object with -Bsymbolic.  It discards the space
+   allocated to copy PC relative relocs against symbols which are
+   defined in regular objects.  We allocated space for them in the
+   check_relocs routine, but we won't fill them in in the
+   relocate_section routine.  */
+
+/*ARGSUSED*/
+static boolean
+elf_s390_discard_copies (h, inf)
+     struct elf_s390_link_hash_entry *h;
+     PTR inf;
+{
+  struct elf_s390_pcrel_relocs_copied *s;
+  struct bfd_link_info *info = (struct bfd_link_info *) inf;
+
+  /* If a symbol has been forced local or we have found a regular
+     definition for the symbolic link case, then we won't be needing
+     any relocs.  */
+  if ((h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
+      && ((h->root.elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0
+	  || info->symbolic))
+    {
+      for (s = h->pcrel_relocs_copied; s != NULL; s = s->next)
+	s->section->_raw_size -= s->count * sizeof (Elf32_External_Rela);
+    }
+  return true;
+}
+/* Relocate a 390 ELF section.  */
+
+static boolean
+elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
+			      contents, relocs, local_syms, local_sections)
+     bfd *output_bfd;
+     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;
+{
+  bfd *dynobj;
+  Elf_Internal_Shdr *symtab_hdr;
+  struct elf_link_hash_entry **sym_hashes;
+  bfd_vma *local_got_offsets;
+  asection *sgot;
+  asection *splt;
+  asection *sreloc;
+  Elf_Internal_Rela *rel;
+  Elf_Internal_Rela *relend;
+
+  dynobj = elf_hash_table (info)->dynobj;
+  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
+  sym_hashes = elf_sym_hashes (input_bfd);
+  local_got_offsets = elf_local_got_offsets (input_bfd);
+
+  sgot = NULL;
+  splt = NULL;
+  sreloc = NULL;
+  if (dynobj != NULL)
+    {
+      splt = bfd_get_section_by_name (dynobj, ".plt");
+      sgot = bfd_get_section_by_name (dynobj, ".got");
+    }
+
+  rel = relocs;
+  relend = relocs + input_section->reloc_count;
+  for (; rel < relend; rel++)
+    {
+      int r_type;
+      reloc_howto_type *howto;
+      unsigned long r_symndx;
+      struct elf_link_hash_entry *h;
+      Elf_Internal_Sym *sym;
+      asection *sec;
+      bfd_vma relocation;
+      bfd_reloc_status_type r;
+
+      r_type = ELF32_R_TYPE (rel->r_info);
+      if (r_type == (int) R_390_GNU_VTINHERIT
+          || r_type == (int) R_390_GNU_VTENTRY)
+        continue;
+      if (r_type < 0 || r_type >= (int) R_390_max)
+	{
+	  bfd_set_error (bfd_error_bad_value);
+	  return false;
+	}
+      howto = elf_howto_table + r_type;
+
+      r_symndx = ELF32_R_SYM (rel->r_info);
+
+      if (info->relocateable)
+	{
+	  /* This is a relocateable link.  We don't have to change
+	     anything, unless the reloc is against a section symbol,
+	     in which case we have to adjust according to where the
+	     section symbol winds up in the output section.  */
+	  if (r_symndx < symtab_hdr->sh_info)
+	    {
+	      sym = local_syms + r_symndx;
+	      if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+		{
+		  sec = local_sections[r_symndx];
+		  rel->r_addend += sec->output_offset + sym->st_value;
+		}
+	    }
+
+	  continue;
+	}
+
+      /* This is a final link.  */
+      h = NULL;
+      sym = NULL;
+      sec = NULL;
+      if (r_symndx < symtab_hdr->sh_info)
+	{
+	  sym = local_syms + r_symndx;
+	  sec = local_sections[r_symndx];
+	  relocation = (sec->output_section->vma
+			+ sec->output_offset
+			+ sym->st_value);
+	}
+      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;
+	  if (h->root.type == bfd_link_hash_defined
+	      || h->root.type == bfd_link_hash_defweak)
+	    {
+	      sec = h->root.u.def.section;
+	      if (r_type == R_390_GOTPC
+		  || ((r_type == R_390_PLT16DBL ||
+                       r_type == R_390_PLT32)
+		      && splt != NULL
+		      && h->plt.offset != (bfd_vma) -1)
+		  || ((r_type == R_390_GOT12 ||
+                       r_type == R_390_GOT16 ||
+                       r_type == R_390_GOT32)
+		      && elf_hash_table (info)->dynamic_sections_created
+		      && (! info->shared
+			  || (! info->symbolic && h->dynindx != -1)
+			  || (h->elf_link_hash_flags
+			      & ELF_LINK_HASH_DEF_REGULAR) == 0))
+		  || (info->shared
+		      && ((! info->symbolic && h->dynindx != -1)
+			  || (h->elf_link_hash_flags
+			      & ELF_LINK_HASH_DEF_REGULAR) == 0)
+		      && ( r_type == R_390_8 ||
+			   r_type == R_390_16 ||
+                           r_type == R_390_32 ||
+                           r_type == R_390_PC16 ||
+                           r_type == R_390_PC16DBL ||
+                           r_type == R_390_PC32)
+                      && ((input_section->flags & SEC_ALLOC) != 0
+                          /* DWARF will emit R_386_32 relocations in its
+                             sections against symbols defined externally
+                             in shared libraries.  We can't do anything
+                             with them here.  */
+                          || ((input_section->flags & SEC_DEBUGGING) != 0
+			      && (h->elf_link_hash_flags
+				  & ELF_LINK_HASH_DEF_DYNAMIC) != 0))))
+		{
+		  /* In these cases, we don't need the relocation
+                     value.  We check specially because in some
+                     obscure cases sec->output_section will be NULL.  */
+		  relocation = 0;
+		}
+	      else if (sec->output_section == NULL)
+		{
+		  (*_bfd_error_handler)
+		    (_("%s: warning: unresolvable relocation against symbol `%s' from %s section"),
+		     bfd_get_filename (input_bfd), h->root.root.string,
+		     bfd_get_section_name (input_bfd, input_section));
+		  relocation = 0;
+		}
+	      else
+		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->shared && !info->symbolic
+		   && !info->no_undefined
+		   && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
+	    relocation = 0;
+	  else
+	    {
+	      if (! ((*info->callbacks->undefined_symbol)
+		     (info, h->root.root.string, input_bfd,
+          	      input_section, rel->r_offset,
+	 	     (!info->shared || info->no_undefined
+		      || ELF_ST_VISIBILITY (h->other)))))
+		return false;
+	      relocation = 0;
+	    }
+	}
+
+      switch (r_type)
+	{
+        case R_390_GOT12:
+        case R_390_GOT16:
+        case R_390_GOT32:
+          /* Relocation is to the entry for this symbol in the global
+             offset table.  */
+	  BFD_ASSERT (sgot != NULL);
+
+          if (h != NULL)
+            {
+              bfd_vma off;
+
+              off = h->got.offset;
+              BFD_ASSERT (off != (bfd_vma) -1);
+
+              if (! elf_hash_table (info)->dynamic_sections_created
+                  || (info->shared
+                      && (info->symbolic || h->dynindx == -1)
+                      && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
+                {
+                  /* This is actually a static link, or it is a
+                     -Bsymbolic link and the symbol is defined
+                     locally, or the symbol was forced to be local
+                     because of a version file.  We must initialize
+                     this entry in the global offset table.  Since the
+                     offset must always be a multiple of 2, we use the
+                     least significant bit to record whether we have
+                     initialized it already.
+
+                     When doing a dynamic link, we create a .rel.got
+                     relocation entry to initialize the value.  This
+                     is done in the finish_dynamic_symbol routine.  */
+                  if ((off & 1) != 0)
+                    off &= ~1;
+                  else
+                    {
+		      bfd_put_32 (output_bfd, relocation,
+				  sgot->contents + off);
+                      h->got.offset |= 1;
+                    }
+                }
+	      relocation = sgot->output_offset + off;
+            }
+          else
+            {
+              bfd_vma off;
+
+              BFD_ASSERT (local_got_offsets != NULL
+                          && local_got_offsets[r_symndx] != (bfd_vma) -1);
+
+              off = local_got_offsets[r_symndx];
+
+              /* The offset must always be a multiple of 4.  We use
+                 the least significant bit to record whether we have
+                 already generated the necessary reloc.  */
+              if ((off & 1) != 0)
+                off &= ~1;
+              else
+                {
+                  bfd_put_32 (output_bfd, relocation, sgot->contents + off);
+
+                  if (info->shared)
+                    {
+                      asection *srelgot;
+                      Elf_Internal_Rela outrel;
+
+                      srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+                      BFD_ASSERT (srelgot != NULL);
+
+                      outrel.r_offset = (sgot->output_section->vma
+                                         + sgot->output_offset
+                                         + off);
+                      outrel.r_info = ELF32_R_INFO (0, R_390_RELATIVE);
+		      outrel.r_addend = relocation;
+                      bfd_elf32_swap_reloca_out (output_bfd, &outrel,
+                                                (((Elf32_External_Rela *)
+                                                  srelgot->contents)
+                                                 + srelgot->reloc_count));
+                      ++srelgot->reloc_count;
+                    }
+
+                  local_got_offsets[r_symndx] |= 1;
+                }
+
+	      relocation = sgot->output_offset + off;
+            }
+
+
+          break;
+ 
+        case R_390_GOTOFF:
+          /* Relocation is relative to the start of the global offset
+             table.  */
+
+          if (sgot == NULL)
+            {
+              sgot = bfd_get_section_by_name (dynobj, ".got");
+              BFD_ASSERT (sgot != NULL);
+            }
+
+          /* Note that sgot->output_offset is not involved in this
+             calculation.  We always want the start of .got.  If we
+             defined _GLOBAL_OFFSET_TABLE in a different way, as is
+             permitted by the ABI, we might have to change this
+             calculation.  */
+          relocation -= sgot->output_section->vma;
+
+          break;
+
+        case R_390_GOTPC:
+          /* Use global offset table as symbol value.  */
+
+          if (sgot == NULL)
+            {
+              sgot = bfd_get_section_by_name (dynobj, ".got");
+              BFD_ASSERT (sgot != NULL);
+            }
+
+          relocation = sgot->output_section->vma;
+
+          break;
+
+        case R_390_PLT16DBL:
+        case R_390_PLT32:
+          /* Relocation is to the entry for this symbol in the
+             procedure linkage table.  */
+
+          /* Resolve a PLT32 reloc against a local symbol directly,
+             without using the procedure linkage table.  */
+          if (h == NULL)
+            break;
+
+          if (h->plt.offset == (bfd_vma) -1 || splt == NULL)
+            {
+              /* We didn't make a PLT entry for this symbol.  This
+                 happens when statically linking PIC code, or when
+                 using -Bsymbolic.  */
+              break;
+            }
+
+          relocation = (splt->output_section->vma
+                        + splt->output_offset
+                        + h->plt.offset);
+
+          break;
+
+        case R_390_8:
+        case R_390_16:
+        case R_390_32:
+        case R_390_PC16:
+        case R_390_PC16DBL:
+        case R_390_PC32:
+          if (info->shared
+              && (input_section->flags & SEC_ALLOC) != 0
+              && ((r_type != R_390_PC16 &&
+                   r_type != R_390_PC16DBL &&
+                   r_type != R_390_PC32)
+                  || (h != NULL
+                      && h->dynindx != -1
+                      && (! info->symbolic
+                          || (h->elf_link_hash_flags
+                              & ELF_LINK_HASH_DEF_REGULAR) == 0))))
+            {
+              Elf_Internal_Rela outrel;
+              boolean skip, relocate;
+
+              /* When generating a shared object, these relocations
+                 are copied into the output file to be resolved at run
+                 time.  */
+
+              if (sreloc == NULL)
+                {
+                  const char *name;
+
+                  name = (bfd_elf_string_from_elf_section
+                          (input_bfd,
+                           elf_elfheader (input_bfd)->e_shstrndx,
+                           elf_section_data (input_section)->rel_hdr.sh_name));
+                  if (name == NULL)
+                    return false;
+
+                  BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+                              && strcmp (bfd_get_section_name (input_bfd,
+                                                               input_section),
+                                         name + 5) == 0);
+
+                  sreloc = bfd_get_section_by_name (dynobj, name);
+                  BFD_ASSERT (sreloc != NULL);
+                }
+
+              skip = false;
+
+              if (elf_section_data (input_section)->stab_info == NULL)
+                outrel.r_offset = rel->r_offset;
+              else
+                {
+                  bfd_vma off;
+
+                  off = (_bfd_stab_section_offset
+                         (output_bfd, &elf_hash_table (info)->stab_info,
+                          input_section,
+                          &elf_section_data (input_section)->stab_info,
+                          rel->r_offset));
+                  if (off == (bfd_vma) -1)
+                    skip = true;
+                  outrel.r_offset = off;
+                }
+
+              outrel.r_offset += (input_section->output_section->vma
+                                  + input_section->output_offset);
+
+              if (skip)
+                {
+                  memset (&outrel, 0, sizeof outrel);
+                  relocate = false;
+                }
+              else if (r_type == R_390_PC16 ||
+                       r_type == R_390_PC16DBL ||
+                       r_type == R_390_PC32)
+                {
+                  BFD_ASSERT (h != NULL && h->dynindx != -1);
+		  relocate = false;
+                  outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
+		  outrel.r_addend = relocation + rel->r_addend;
+                }
+              else
+                {
+                  /* h->dynindx may be -1 if this symbol was marked to
+                     become local.  */
+                  if (h == NULL
+                      || ((info->symbolic || h->dynindx == -1)
+                          && (h->elf_link_hash_flags
+                              & ELF_LINK_HASH_DEF_REGULAR) != 0))
+                    {
+                      relocate = true;
+                      outrel.r_info = ELF32_R_INFO (0, R_390_RELATIVE);
+		      outrel.r_addend = relocation + rel->r_addend;
+                    }
+		  else
+		    {
+		      BFD_ASSERT (h->dynindx != -1);
+		      relocate = false;
+		      outrel.r_info = ELF32_R_INFO (h->dynindx, R_390_32);
+		      outrel.r_addend = relocation + rel->r_addend;
+		    }
+                }
+
+              bfd_elf32_swap_reloca_out (output_bfd, &outrel,
+                                        (((Elf32_External_Rela *)
+                                          sreloc->contents)
+                                         + sreloc->reloc_count));
+              ++sreloc->reloc_count;
+
+              /* If this reloc is against an external symbol, we do
+                 not want to fiddle with the addend.  Otherwise, we
+                 need to include the symbol value so that it becomes
+                 an addend for the dynamic reloc.  */
+              if (! relocate)
+                continue;
+            }
+
+          break;
+
+        default:
+          break;
+        }
+
+      r = _bfd_final_link_relocate (howto, input_bfd, input_section,
+				      contents, rel->r_offset,
+				      relocation, rel->r_addend);
+
+      if (r != bfd_reloc_ok)
+	{
+	  switch (r)
+	    {
+	    default:
+	    case bfd_reloc_outofrange:
+	      abort ();
+	    case bfd_reloc_overflow:
+	      {
+		const char *name;
+
+		if (h != NULL)
+		  name = h->root.root.string;
+		else
+		  {
+		    name = bfd_elf_string_from_elf_section (input_bfd,
+							    symtab_hdr->sh_link,
+							    sym->st_name);
+		    if (name == NULL)
+		      return false;
+		    if (*name == '\0')
+		      name = bfd_section_name (input_bfd, sec);
+		  }
+		if (! ((*info->callbacks->reloc_overflow)
+		       (info, name, howto->name, (bfd_vma) 0,
+			input_bfd, input_section, rel->r_offset)))
+		  return false;
+	      }
+	      break;
+	    }
+	}
+    }
+
+  return true;
+}
+
+/* Finish up dynamic symbol handling.  We set the contents of various
+   dynamic sections here.  */
+
+static boolean
+elf_s390_finish_dynamic_symbol (output_bfd, info, h, sym)
+     bfd *output_bfd;
+     struct bfd_link_info *info;
+     struct elf_link_hash_entry *h;
+     Elf_Internal_Sym *sym;
+{
+  bfd *dynobj;
+
+  dynobj = elf_hash_table (info)->dynobj;
+
+  if (h->plt.offset != (bfd_vma) -1)
+    {
+      asection *splt;
+      asection *srela;
+      Elf_Internal_Rela rela;
+      bfd_vma relative_offset;
+      bfd_vma got_offset;
+      bfd_vma plt_index;
+      asection *sgot;
+
+      /* This symbol has an entry in the procedure linkage table.  Set
+         it up.  */
+
+      BFD_ASSERT (h->dynindx != -1);
+
+      splt = bfd_get_section_by_name (dynobj, ".plt");
+      sgot = bfd_get_section_by_name (dynobj, ".got.plt");
+      srela = bfd_get_section_by_name (dynobj, ".rela.plt");
+      BFD_ASSERT (splt != NULL && sgot != NULL && srela != NULL);
+
+      /* Calc. index no. 
+         Current offset - size first entry / entry size.  */
+      plt_index = (h->plt.offset - PLT_FIRST_ENTRY_SIZE) / PLT_ENTRY_SIZE;
+
+      /* Offset in GOT is PLT index plus GOT headers(3) times 4,
+         addr & GOT addr.  */
+      got_offset = (plt_index + 3) * GOT_ENTRY_SIZE;
+
+      /* S390 uses halfwords for relative branch calc!  */
+      relative_offset = - ((PLT_FIRST_ENTRY_SIZE + 
+                           (PLT_ENTRY_SIZE * plt_index) + 18)/2);
+      /* If offset is > 32768, branch to a previous branch
+         390 can only handle +-64 K jumps.  */
+      if ( -32768 > (int)relative_offset )
+          relative_offset = -(((65536/PLT_ENTRY_SIZE-1)*PLT_ENTRY_SIZE)/2);
+
+      /* Fill in the entry in the procedure linkage table.  */
+      if (!info->shared)
+       {
+        bfd_put_32 (output_bfd, PLT_ENTRY_WORD0,
+                    splt->contents + h->plt.offset);
+        bfd_put_32 (output_bfd, PLT_ENTRY_WORD1,
+                    splt->contents + h->plt.offset + 4);
+        bfd_put_32 (output_bfd, PLT_ENTRY_WORD2,
+                    splt->contents + h->plt.offset + 8);
+        bfd_put_32 (output_bfd, PLT_ENTRY_WORD3,
+                    splt->contents + h->plt.offset + 12);
+        bfd_put_32 (output_bfd, PLT_ENTRY_WORD4,
+                    splt->contents + h->plt.offset + 16);
+        bfd_put_32 (output_bfd, 0+(relative_offset << 16),
+                    splt->contents + h->plt.offset + 20);
+        bfd_put_32 (output_bfd,
+                    (sgot->output_section->vma +
+                     sgot->output_offset +
+                     got_offset),
+                     splt->contents + h->plt.offset + 24);
+       }
+      else if (got_offset < 4096)
+       {
+        bfd_put_32 (output_bfd, PLT_PIC12_ENTRY_WORD0 + got_offset,
+                    splt->contents + h->plt.offset);
+        bfd_put_32 (output_bfd, PLT_PIC12_ENTRY_WORD1,
+                    splt->contents + h->plt.offset + 4);
+        bfd_put_32 (output_bfd, PLT_PIC12_ENTRY_WORD2,
+                    splt->contents + h->plt.offset + 8);
+        bfd_put_32 (output_bfd, PLT_PIC12_ENTRY_WORD3,
+                    splt->contents + h->plt.offset + 12);
+        bfd_put_32 (output_bfd, PLT_PIC12_ENTRY_WORD4,
+                    splt->contents + h->plt.offset + 16);
+        bfd_put_32 (output_bfd, 0+(relative_offset << 16),
+                    splt->contents + h->plt.offset + 20);
+        bfd_put_32 (output_bfd, 0,
+                    splt->contents + h->plt.offset + 24);
+       }
+      else if (got_offset < 32768)
+       {
+        bfd_put_32 (output_bfd, PLT_PIC16_ENTRY_WORD0 + got_offset,
+                    splt->contents + h->plt.offset);
+        bfd_put_32 (output_bfd, PLT_PIC16_ENTRY_WORD1,
+                    splt->contents + h->plt.offset + 4);
+        bfd_put_32 (output_bfd, PLT_PIC16_ENTRY_WORD2,
+                    splt->contents + h->plt.offset + 8);
+        bfd_put_32 (output_bfd, PLT_PIC16_ENTRY_WORD3,
+                    splt->contents + h->plt.offset + 12);
+        bfd_put_32 (output_bfd, PLT_PIC16_ENTRY_WORD4,
+                    splt->contents + h->plt.offset + 16);
+        bfd_put_32 (output_bfd, 0+(relative_offset << 16),
+                    splt->contents + h->plt.offset + 20);
+        bfd_put_32 (output_bfd, 0,
+                    splt->contents + h->plt.offset + 24);
+       }
+      else
+       {
+        bfd_put_32 (output_bfd, PLT_PIC_ENTRY_WORD0,
+		    splt->contents + h->plt.offset);
+        bfd_put_32 (output_bfd, PLT_PIC_ENTRY_WORD1,
+		    splt->contents + h->plt.offset + 4);
+        bfd_put_32 (output_bfd, PLT_PIC_ENTRY_WORD2,
+		    splt->contents + h->plt.offset + 8);
+        bfd_put_32 (output_bfd, PLT_PIC_ENTRY_WORD3, 
+		    splt->contents + h->plt.offset + 12);
+        bfd_put_32 (output_bfd, PLT_PIC_ENTRY_WORD4,
+		    splt->contents + h->plt.offset + 16);
+        bfd_put_32 (output_bfd, 0+(relative_offset << 16),
+		    splt->contents + h->plt.offset + 20);
+        bfd_put_32 (output_bfd, got_offset,
+		    splt->contents + h->plt.offset + 24);
+       }
+      /* Insert offset into  reloc. table here.  */
+      bfd_put_32 (output_bfd, plt_index * sizeof (Elf32_External_Rela),
+                  splt->contents + h->plt.offset + 28);
+      /* Fill in the entry in the .rela.plt section.  */
+      rela.r_offset = (sgot->output_section->vma
+		       + sgot->output_offset
+		       + got_offset);
+      rela.r_info = ELF32_R_INFO (h->dynindx, R_390_JMP_SLOT);
+      rela.r_addend = 0;
+      bfd_elf32_swap_reloca_out (output_bfd, &rela,
+				 ((Elf32_External_Rela *) srela->contents
+				  + plt_index ));
+
+      /* Fill in the entry in the global offset table.
+         Points to instruction after GOT offset.  */
+      bfd_put_32 (output_bfd,
+		  (splt->output_section->vma
+		   + splt->output_offset
+		   + h->plt.offset
+		   + 12),
+		  sgot->contents + got_offset);
+
+
+      if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
+	{
+	  /* Mark the symbol as undefined, rather than as defined in
+	     the .plt section.  Leave the value alone.  */
+	  sym->st_shndx = SHN_UNDEF;
+	}
+    }
+
+  if (h->got.offset != (bfd_vma) -1)
+    {
+      asection *sgot;
+      asection *srela;
+      Elf_Internal_Rela rela;
+
+      /* This symbol has an entry in the global offset table.  Set it
+         up.  */
+
+      sgot = bfd_get_section_by_name (dynobj, ".got");
+      srela = bfd_get_section_by_name (dynobj, ".rela.got");
+      BFD_ASSERT (sgot != NULL && srela != NULL);
+
+      rela.r_offset = (sgot->output_section->vma
+		       + sgot->output_offset
+		       + (h->got.offset &~ 1));
+
+      /* If this is a static link, or it is a -Bsymbolic link and the
+	 symbol is defined locally or was forced to be local because
+	 of a version file, we just want to emit a RELATIVE reloc.
+	 The entry in the global offset table will already have been
+	 initialized in the relocate_section function.  */
+      if (! elf_hash_table (info)->dynamic_sections_created
+	  || (info->shared
+	      && (info->symbolic || h->dynindx == -1)
+	      && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
+        {
+          rela.r_info = ELF32_R_INFO (0, R_390_RELATIVE);
+          rela.r_addend = (h->root.u.def.value
+                           + h->root.u.def.section->output_section->vma
+                           + h->root.u.def.section->output_offset);
+        }
+      else
+	{
+	  BFD_ASSERT((h->got.offset & 1) == 0);
+	  bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
+	  rela.r_info = ELF32_R_INFO (h->dynindx, R_390_GLOB_DAT);
+          rela.r_addend = 0;
+        }
+
+      bfd_elf32_swap_reloca_out (output_bfd, &rela,
+				 ((Elf32_External_Rela *) srela->contents
+				  + srela->reloc_count));
+      ++srela->reloc_count;
+    }
+
+  if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_COPY) != 0)
+    {
+      asection *s;
+      Elf_Internal_Rela rela;
+
+      /* This symbols needs a copy reloc.  Set it up.  */
+
+      BFD_ASSERT (h->dynindx != -1
+		  && (h->root.type == bfd_link_hash_defined
+		      || h->root.type == bfd_link_hash_defweak));
+
+
+      s = bfd_get_section_by_name (h->root.u.def.section->owner,
+				   ".rela.bss");
+      BFD_ASSERT (s != NULL);
+
+      rela.r_offset = (h->root.u.def.value
+		       + h->root.u.def.section->output_section->vma
+		       + h->root.u.def.section->output_offset);
+      rela.r_info = ELF32_R_INFO (h->dynindx, R_390_COPY);
+      rela.r_addend = 0;
+      bfd_elf32_swap_reloca_out (output_bfd, &rela,
+				 ((Elf32_External_Rela *) s->contents
+				  + s->reloc_count));
+      ++s->reloc_count;
+    }
+
+  /* Mark some specially defined symbols as absolute.  */
+  if (strcmp (h->root.root.string, "_DYNAMIC") == 0
+      || strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0
+      || strcmp (h->root.root.string, "_PROCEDURE_LINKAGE_TABLE_") == 0)
+    sym->st_shndx = SHN_ABS;
+
+  return true;
+}
+
+/* Finish up the dynamic sections.  */
+
+static boolean
+elf_s390_finish_dynamic_sections (output_bfd, info)
+     bfd *output_bfd;
+     struct bfd_link_info *info;
+{
+  bfd *dynobj;
+  asection *sdyn;
+  asection *sgot;
+
+  dynobj = elf_hash_table (info)->dynobj;
+
+  sgot = bfd_get_section_by_name (dynobj, ".got.plt");
+  BFD_ASSERT (sgot != NULL);
+  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+
+  if (elf_hash_table (info)->dynamic_sections_created)
+    {
+      asection *splt;
+      Elf32_External_Dyn *dyncon, *dynconend;
+
+      BFD_ASSERT (sdyn != NULL);
+
+      dyncon = (Elf32_External_Dyn *) sdyn->contents;
+      dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->_raw_size);
+      for (; dyncon < dynconend; dyncon++)
+	{
+	  Elf_Internal_Dyn dyn;
+	  const char *name;
+	  asection *s;
+
+	  bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
+
+	  switch (dyn.d_tag)
+	    {
+	    default:
+	      break;
+
+	    case DT_PLTGOT:
+	      name = ".got";
+	      goto get_vma;
+	    case DT_JMPREL:
+	      name = ".rela.plt";
+	    get_vma:
+	      s = bfd_get_section_by_name(output_bfd, name);
+	      BFD_ASSERT (s != NULL);
+	      dyn.d_un.d_ptr = s->vma;
+	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
+	      break;
+
+	    case DT_PLTRELSZ:
+	      s = bfd_get_section_by_name (output_bfd, ".rela.plt");
+	      BFD_ASSERT (s != NULL);
+	      if (s->_cooked_size != 0)
+		dyn.d_un.d_val = s->_cooked_size;
+	      else
+		dyn.d_un.d_val = s->_raw_size;
+	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
+	      break;
+	    }
+	}
+
+      /* Fill in the special first entry in the procedure linkage table.  */
+      splt = bfd_get_section_by_name (dynobj, ".plt");
+      if (splt && splt->_raw_size > 0)
+	{
+          memset (splt->contents, 0, PLT_FIRST_ENTRY_SIZE);
+          if (info->shared)
+           {
+	      bfd_put_32 (output_bfd, PLT_PIC_FIRST_ENTRY_WORD0,
+		          splt->contents );
+	      bfd_put_32 (output_bfd, PLT_PIC_FIRST_ENTRY_WORD1,
+		          splt->contents +4 );
+	      bfd_put_32 (output_bfd, PLT_PIC_FIRST_ENTRY_WORD2,
+		          splt->contents +8 );
+	      bfd_put_32 (output_bfd, PLT_PIC_FIRST_ENTRY_WORD3,
+		          splt->contents +12 );
+	      bfd_put_32 (output_bfd, PLT_PIC_FIRST_ENTRY_WORD4,
+		          splt->contents +16 );
+           }
+          else
+           {
+              bfd_put_32 (output_bfd, PLT_FIRST_ENTRY_WORD0,
+                          splt->contents );
+              bfd_put_32 (output_bfd, PLT_FIRST_ENTRY_WORD1,
+                          splt->contents +4 );
+              bfd_put_32 (output_bfd, PLT_FIRST_ENTRY_WORD2,
+                          splt->contents +8 );
+              bfd_put_32 (output_bfd, PLT_FIRST_ENTRY_WORD3,
+                          splt->contents +12 );
+              bfd_put_32 (output_bfd, PLT_FIRST_ENTRY_WORD4,
+                          splt->contents +16 );
+              bfd_put_32 (output_bfd, PLT_FIRST_ENTRY_WORD5,
+                          splt->contents +20 );
+              bfd_put_32 (output_bfd,
+                          sgot->output_section->vma + sgot->output_offset,
+                          splt->contents + 24);
+           }
+	  elf_section_data (splt->output_section)->this_hdr.sh_entsize = 4;
+	}
+
+    }
+
+  /* Set the first entry in the global offset table to the address of
+     the dynamic section.  */
+  if (sgot->_raw_size > 0)
+    {
+      if (sdyn == NULL)
+	bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents);
+      else
+	bfd_put_32 (output_bfd,
+		    sdyn->output_section->vma + sdyn->output_offset,
+		    sgot->contents);
+
+      /* One entry for shared object struct ptr.  */
+      bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 4);
+      /* One entry for _dl_runtime_resolve.  */
+      bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 8);
+    }
+
+  elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4;
+
+  return true;
+}
+
+static boolean
+elf_s390_object_p (abfd)
+     bfd *abfd;
+{
+  return bfd_default_set_arch_mach (abfd, bfd_arch_s390, bfd_mach_s390_esa);
+}
+
+#define TARGET_BIG_SYM	bfd_elf32_s390_vec
+#define TARGET_BIG_NAME	"elf32-s390"
+#define ELF_ARCH	bfd_arch_s390
+#define ELF_MACHINE_CODE EM_S390
+#define ELF_MACHINE_ALT1 EM_S390_OLD
+#define ELF_MAXPAGESIZE 0x1000
+
+#define elf_backend_can_gc_sections	1
+#define elf_backend_want_got_plt	1
+#define elf_backend_plt_readonly	1
+#define elf_backend_want_plt_sym	0
+#define elf_backend_got_header_size	12
+#define elf_backend_plt_header_size	PLT_ENTRY_SIZE
+
+#define elf_info_to_howto                     elf_s390_info_to_howto
+
+#define bfd_elf32_bfd_final_link	      _bfd_elf32_gc_common_final_link
+#define bfd_elf32_bfd_is_local_label_name     elf_s390_is_local_label_name
+#define bfd_elf32_bfd_link_hash_table_create  elf_s390_link_hash_table_create
+#define bfd_elf32_bfd_reloc_type_lookup	      elf_s390_reloc_type_lookup
+
+#define elf_backend_adjust_dynamic_symbol     elf_s390_adjust_dynamic_symbol
+#define elf_backend_check_relocs              elf_s390_check_relocs
+#define elf_backend_create_dynamic_sections   _bfd_elf_create_dynamic_sections
+#define elf_backend_finish_dynamic_sections   elf_s390_finish_dynamic_sections
+#define elf_backend_finish_dynamic_symbol     elf_s390_finish_dynamic_symbol
+#define elf_backend_gc_mark_hook              elf_s390_gc_mark_hook
+#define elf_backend_gc_sweep_hook             elf_s390_gc_sweep_hook
+#define elf_backend_relocate_section          elf_s390_relocate_section
+#define elf_backend_size_dynamic_sections     elf_s390_size_dynamic_sections
+
+#define elf_backend_object_p            elf_s390_object_p
+
+#include "elf32-target.h"
diff --git a/bfd/elf32-sparc.c b/bfd/elf32-sparc.c
index 4e9c6c2..8b64f19 100644
--- a/bfd/elf32-sparc.c
+++ b/bfd/elf32-sparc.c
@@ -1,5 +1,5 @@
 /* SPARC-specific support for 32-bit ELF
-   Copyright (C) 1993, 94, 95, 96, 97, 98, 99, 2000
+   Copyright (C) 1993, 94, 95, 96, 97, 98, 99, 2000, 2001
    Free Software Foundation, Inc.
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -85,7 +85,7 @@
   HOWTO(R_SPARC_GLOB_DAT,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_GLOB_DAT",false,0,0x00000000,true),
   HOWTO(R_SPARC_JMP_SLOT,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_JMP_SLOT",false,0,0x00000000,true),
   HOWTO(R_SPARC_RELATIVE,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_RELATIVE",false,0,0x00000000,true),
-  HOWTO(R_SPARC_UA32,      0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_UA32",    false,0,0x00000000,true),
+  HOWTO(R_SPARC_UA32,      0,2,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_UA32",    false,0,0xffffffff,true),
   HOWTO(R_SPARC_PLT32,     0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsupported_reloc,  "R_SPARC_PLT32",    false,0,0x00000000,true),
   HOWTO(R_SPARC_HIPLT22,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsupported_reloc,  "R_SPARC_HIPLT22",  false,0,0x00000000,true),
   HOWTO(R_SPARC_LOPLT10,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsupported_reloc,  "R_SPARC_LOPLT10",  false,0,0x00000000,true),
@@ -1759,6 +1759,13 @@
 	  /* Mark the symbol as undefined, rather than as defined in
 	     the .plt section.  Leave the value alone.  */
 	  sym->st_shndx = SHN_UNDEF;
+	  /* If the symbol is weak, we do need to clear the value.
+	     Otherwise, the PLT entry would provide a definition for
+	     the symbol even if the symbol wasn't defined anywhere,
+	     and so the symbol would never be NULL.  */
+	  if ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR_NONWEAK)
+	      == 0)
+	    sym->st_value = 0;
 	}
     }
 
diff --git a/bfd/elf32-v850.c b/bfd/elf32-v850.c
index 67fede0..435c9e3 100644
--- a/bfd/elf32-v850.c
+++ b/bfd/elf32-v850.c
@@ -1300,6 +1300,21 @@
   relocation += symbol->section->output_offset;
   relocation += reloc->addend;
 
+#if 0 /* Since this reloc is going to be processed later on, we should
+	 not make it pc-relative here.  To test this, try assembling and
+	 linking this program:
+
+	 	.text
+		.globl _start
+		nop
+	_start:         
+        	jr foo
+
+	        .section ".foo","ax"
+		nop
+	foo:
+        	nop
+      */
   if (reloc->howto->pc_relative == true)
     {
       /* Here the variable relocation holds the final address of the
@@ -1309,7 +1324,7 @@
       /* Deal with pcrel_offset */
       relocation -= reloc->address;
     }
-
+#endif
   reloc->addend = relocation;
   return bfd_reloc_ok;
 }
diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c
index 197dcff..28f0f4c 100644
--- a/bfd/elf64-alpha.c
+++ b/bfd/elf64-alpha.c
@@ -240,13 +240,24 @@
 
   if (h->dynindx == -1)
     return false;
-  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
-    return false;
 
   if (h->root.type == bfd_link_hash_undefweak
       || h->root.type == bfd_link_hash_defweak)
     return true;
 
+  switch (ELF_ST_VISIBILITY (h->other))
+    {
+    case STV_DEFAULT:
+      break;
+    case STV_HIDDEN:
+    case STV_INTERNAL:
+      return false;
+    case STV_PROTECTED:
+      if (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)
+        return false;
+      break;
+    }
+
   if ((info->shared && !info->symbolic)
       || ((h->elf_link_hash_flags
 	   & (ELF_LINK_HASH_DEF_DYNAMIC | ELF_LINK_HASH_REF_REGULAR))
diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c
index abd0f0e..df1d34e 100644
--- a/bfd/elf64-mips.c
+++ b/bfd/elf64-mips.c
@@ -161,7 +161,7 @@
 	 complain_overflow_dont, /* complain_on_overflow */
 	 			/* This needs complex overflow
 				   detection, because the upper four
-				   bits must match the PC.  */
+				   bits must match the PC + 4.  */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_26",		/* name */
 	 true,			/* partial_inplace */
@@ -714,7 +714,7 @@
 	 complain_overflow_dont, /* complain_on_overflow */
 	 			/* This needs complex overflow
 				   detection, because the upper four
-				   bits must match the PC.  */
+				   bits must match the PC + 4.  */
 	 bfd_elf_generic_reloc,	/* special_function */
 	 "R_MIPS_26",		/* name */
 	 true,			/* partial_inplace */
diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c
new file mode 100644
index 0000000..9296a26
--- /dev/null
+++ b/bfd/elf64-s390.c
@@ -0,0 +1,2178 @@
+/* IBM S/390-specific support for 64-bit ELF
+   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Contributed Martin Schwidefsky (schwidefsky@de.ibm.com).
+
+   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 "bfdlink.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+
+static reloc_howto_type *elf_s390_reloc_type_lookup
+  PARAMS ((bfd *, bfd_reloc_code_real_type));
+static void elf_s390_info_to_howto
+  PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
+static boolean elf_s390_is_local_label_name PARAMS ((bfd *, const char *));
+static struct bfd_hash_entry *elf_s390_link_hash_newfunc
+  PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
+static struct bfd_link_hash_table *elf_s390_link_hash_table_create
+  PARAMS ((bfd *));
+static boolean elf_s390_check_relocs
+  PARAMS ((bfd *, struct bfd_link_info *, asection *,
+	   const Elf_Internal_Rela *));
+static boolean elf_s390_adjust_dynamic_symbol
+  PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
+static boolean elf_s390_size_dynamic_sections
+  PARAMS ((bfd *, struct bfd_link_info *));
+static boolean elf_s390_relocate_section
+  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
+	   Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
+static boolean elf_s390_finish_dynamic_symbol
+  PARAMS ((bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
+	   Elf_Internal_Sym *));
+static boolean elf_s390_finish_dynamic_sections
+  PARAMS ((bfd *, struct bfd_link_info *));
+
+#define USE_RELA 1		/* We want RELA relocations, not REL.  */
+
+#include "elf/s390.h"
+
+/* In case we're on a 32-bit machine, construct a 64-bit "-1" value
+   from smaller values.  Start with zero, widen, *then* decrement.  */
+#define MINUS_ONE      (((bfd_vma)0) - 1)
+
+/* The relocation "howto" table.  */
+static reloc_howto_type elf_howto_table[] =
+{
+  HOWTO (R_390_NONE,		/* type */
+	 0,			/* rightshift */
+	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 0,			/* bitsize */
+	 false,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_390_NONE",		/* name */
+	 false,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0,			/* dst_mask */
+	 false),		/* pcrel_offset */
+
+  HOWTO(R_390_8,         0, 0,  8, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_8",       false, 0,0x000000ff, false),
+  HOWTO(R_390_12,        0, 1, 12, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_390_12",      false, 0,0x00000fff, false),
+  HOWTO(R_390_16,        0, 1, 16, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_16",      false, 0,0x0000ffff, false),
+  HOWTO(R_390_32,        0, 2, 32, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_32",      false, 0,0xffffffff, false),
+  HOWTO(R_390_PC32,	 0, 2, 32,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_PC32",    false, 0,0xffffffff,  true),
+  HOWTO(R_390_GOT12,	 0, 1, 12, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_390_GOT12",   false, 0,0x00000fff, false),
+  HOWTO(R_390_GOT32,	 0, 2, 32, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_GOT32",   false, 0,0xffffffff, false),
+  HOWTO(R_390_PLT32,	 0, 2, 32,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_PLT32",   false, 0,0xffffffff,  true),
+  HOWTO(R_390_COPY,      0, 4, 64, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_COPY",    false, 0,MINUS_ONE, false),
+  HOWTO(R_390_GLOB_DAT,  0, 4, 64, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_GLOB_DAT",false, 0,MINUS_ONE, false),
+  HOWTO(R_390_JMP_SLOT,  0, 4, 64, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_JMP_SLOT",false, 0,MINUS_ONE, false),
+  HOWTO(R_390_RELATIVE,  0, 4, 64,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_RELATIVE",false, 0,MINUS_ONE, false),
+  HOWTO(R_390_GOTOFF,    0, 4, 64, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_GOTOFF",  false, 0,MINUS_ONE, false),
+  HOWTO(R_390_GOTPC,     0, 4, 64,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_GOTPC",   false, 0,MINUS_ONE,  true),
+  HOWTO(R_390_GOT16,     0, 1, 16, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_GOT16",   false, 0,0x0000ffff, false),
+  HOWTO(R_390_PC16,      0, 1, 16,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_PC16",    false, 0,0x0000ffff,  true),
+  HOWTO(R_390_PC16DBL,   1, 1, 16,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_PC16DBL", false, 0,0x0000ffff,  true),
+  HOWTO(R_390_PLT16DBL,  1, 1, 16,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_PLT16DBL", false, 0,0x0000ffff,  true),
+  HOWTO(R_390_PC32DBL,	 1, 2, 32,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_PC32DBL", false, 0,0xffffffff,  true),
+  HOWTO(R_390_PLT32DBL,	 1, 2, 32,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_PLT32DBL", false, 0,0xffffffff,  true),
+  HOWTO(R_390_GOTPCDBL,  1, 2, 32,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_GOTPCDBL", false, 0,MINUS_ONE,  true),
+  HOWTO(R_390_64,        0, 4, 64, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_64",      false, 0,MINUS_ONE, false),
+  HOWTO(R_390_PC64,	 0, 4, 64,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_PC64",    false, 0,MINUS_ONE,  true),
+  HOWTO(R_390_GOT64,	 0, 4, 64, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_GOT64",   false, 0,MINUS_ONE, false),
+  HOWTO(R_390_PLT64,	 0, 4, 64,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_PLT64",   false, 0,MINUS_ONE,  true),
+  HOWTO(R_390_GOTENT,	 1, 2, 32,  true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_390_GOTENT",   false, 0,MINUS_ONE,  true),
+};
+
+/* GNU extension to record C++ vtable hierarchy.  */
+static reloc_howto_type elf64_s390_vtinherit_howto =
+  HOWTO (R_390_GNU_VTINHERIT, 0,4,0,false,0,complain_overflow_dont, NULL, "R_390_GNU_VTINHERIT", false,0, 0, false);
+static reloc_howto_type elf64_s390_vtentry_howto =
+  HOWTO (R_390_GNU_VTENTRY, 0,4,0,false,0,complain_overflow_dont, _bfd_elf_rel_vtable_reloc_fn,"R_390_GNU_VTENTRY", false,0,0, false); 
+
+static reloc_howto_type *
+elf_s390_reloc_type_lookup (abfd, code)
+     bfd *abfd ATTRIBUTE_UNUSED;
+     bfd_reloc_code_real_type code;
+{
+  switch (code) {
+  case BFD_RELOC_NONE:
+    return &elf_howto_table[(int) R_390_NONE];
+  case BFD_RELOC_8:
+    return &elf_howto_table[(int) R_390_8];
+  case BFD_RELOC_390_12:
+    return &elf_howto_table[(int) R_390_12];
+  case BFD_RELOC_16:
+    return &elf_howto_table[(int) R_390_16];
+  case BFD_RELOC_32:
+    return &elf_howto_table[(int) R_390_32];
+  case BFD_RELOC_CTOR:
+    return &elf_howto_table[(int) R_390_32];
+  case BFD_RELOC_32_PCREL:
+    return &elf_howto_table[(int) R_390_PC32];
+  case BFD_RELOC_390_GOT12:
+    return &elf_howto_table[(int) R_390_GOT12];
+  case BFD_RELOC_32_GOT_PCREL:
+    return &elf_howto_table[(int) R_390_GOT32];
+  case BFD_RELOC_390_PLT32:
+    return &elf_howto_table[(int) R_390_PLT32];
+  case BFD_RELOC_390_COPY:
+    return &elf_howto_table[(int) R_390_COPY];
+  case BFD_RELOC_390_GLOB_DAT:
+    return &elf_howto_table[(int) R_390_GLOB_DAT];
+  case BFD_RELOC_390_JMP_SLOT:
+    return &elf_howto_table[(int) R_390_JMP_SLOT];
+  case BFD_RELOC_390_RELATIVE:
+    return &elf_howto_table[(int) R_390_RELATIVE];
+  case BFD_RELOC_32_GOTOFF:
+    return &elf_howto_table[(int) R_390_GOTOFF];
+  case BFD_RELOC_390_GOTPC:
+    return &elf_howto_table[(int) R_390_GOTPC];
+  case BFD_RELOC_390_GOT16:
+    return &elf_howto_table[(int) R_390_GOT16];
+  case BFD_RELOC_16_PCREL:
+    return &elf_howto_table[(int) R_390_PC16];
+  case BFD_RELOC_390_PC16DBL:
+    return &elf_howto_table[(int) R_390_PC16DBL];
+  case BFD_RELOC_390_PLT16DBL:
+    return &elf_howto_table[(int) R_390_PLT16DBL];
+  case BFD_RELOC_VTABLE_INHERIT:
+    return &elf64_s390_vtinherit_howto;
+  case BFD_RELOC_VTABLE_ENTRY:
+    return &elf64_s390_vtentry_howto;
+  case BFD_RELOC_390_PC32DBL:
+    return &elf_howto_table[(int) R_390_PC32DBL];
+  case BFD_RELOC_390_PLT32DBL:
+    return &elf_howto_table[(int) R_390_PLT32DBL];
+  case BFD_RELOC_390_GOTPCDBL:
+    return &elf_howto_table[(int) R_390_GOTPCDBL];
+  case BFD_RELOC_64:
+    return &elf_howto_table[(int) R_390_64];
+  case BFD_RELOC_64_PCREL:
+    return &elf_howto_table[(int) R_390_PC64];
+  case BFD_RELOC_390_GOT64:
+    return &elf_howto_table[(int) R_390_GOT64];
+  case BFD_RELOC_390_PLT64:
+    return &elf_howto_table[(int) R_390_PLT64];
+  case BFD_RELOC_390_GOTENT:
+    return &elf_howto_table[(int) R_390_GOTENT];
+  default:
+    break;                                         
+  }
+  return 0;
+}
+
+/* We need to use ELF64_R_TYPE so we have our own copy of this function,
+   and elf64-s390.c has its own copy.  */
+
+static void
+elf_s390_info_to_howto (abfd, cache_ptr, dst)
+     bfd *abfd ATTRIBUTE_UNUSED;
+     arelent *cache_ptr;
+     Elf_Internal_Rela *dst;
+{
+  switch (ELF64_R_TYPE(dst->r_info))
+    {
+    case R_390_GNU_VTINHERIT:
+      cache_ptr->howto = &elf64_s390_vtinherit_howto;
+      break;
+
+    case R_390_GNU_VTENTRY:
+      cache_ptr->howto = &elf64_s390_vtentry_howto;
+      break;
+
+    default:
+      BFD_ASSERT (ELF64_R_TYPE(dst->r_info) < (unsigned int) R_390_max);
+      cache_ptr->howto = &elf_howto_table[ELF64_R_TYPE(dst->r_info)];
+    }     
+}
+
+static boolean
+elf_s390_is_local_label_name (abfd, name)
+     bfd *abfd;
+     const char *name;
+{
+  if (name[0] == '.' && (name[1] == 'X' || name[1] == 'L'))
+    return true;
+
+  return _bfd_elf_is_local_label_name (abfd, name);
+}
+
+/* Functions for the 390 ELF linker.  */
+
+/* The name of the dynamic interpreter.  This is put in the .interp
+   section.  */
+
+#define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
+
+/* The nop opcode we use.  */
+
+#define s390_NOP 0x07070707
+
+
+/* The size in bytes of the first entry in the procedure linkage table.  */
+#define PLT_FIRST_ENTRY_SIZE 32
+/* The size in bytes of an entry in the procedure linkage table.  */
+#define PLT_ENTRY_SIZE 32 
+
+#define GOT_ENTRY_SIZE 8
+
+/* The first three entries in a procedure linkage table are reserved,
+   and the initial contents are unimportant (we zero them out).
+   Subsequent entries look like this.  See the SVR4 ABI 386
+   supplement to see how this works.  */
+
+/* For the s390, simple addr offset can only be 0 - 4096.
+   To use the full 16777216 TB address space, several instructions
+   are needed to load an address in a register and execute
+   a branch( or just saving the address)
+
+   Furthermore, only r 0 and 1 are free to use!!!  */ 
+
+/* The first 3 words in the GOT are then reserved.
+   Word 0 is the address of the dynamic table.
+   Word 1 is a pointer to a structure describing the object
+   Word 2 is used to point to the loader entry address.
+
+   The code for PLT entries looks like this:
+
+   The GOT holds the address in the PLT to be executed.
+   The loader then gets:
+   24(15) =  Pointer to the structure describing the object.
+   28(15) =  Offset in symbol table                                             
+   The loader  must  then find the module where the function is
+   and insert the address in the GOT.
+
+   PLT1: LARL 1,<fn>@GOTENT # 6 bytes  Load address of GOT entry in r1
+         LG   1,0(1)      # 6 bytes  Load address from GOT in r1
+         BCR  15,1        # 2 bytes  Jump to address
+   RET1: BASR 1,0         # 2 bytes  Return from GOT 1st time
+         LGF  1,12(1)     # 6 bytes  Load offset in symbl table in r1
+         BRCL 15,-x       # 6 bytes  Jump to start of PLT
+         .long ?          # 4 bytes  offset into symbol table
+
+   Total = 32 bytes per PLT entry
+   Fixup at offset 2: relative address to GOT entry
+   Fixup at offset 22: relative branch to PLT0
+   Fixup at offset 28: 32 bit offset into symbol table
+
+   A 32 bit offset into the symbol table is enough. It allows for symbol
+   tables up to a size of 2 gigabyte. A single dynamic object (the main
+   program, any shared library) is limited to 4GB in size and I want to see
+   the program that manages to have a symbol table of more than 2 GB with a
+   total size of at max 4 GB.  */
+
+#define PLT_ENTRY_WORD0     0xc0100000
+#define PLT_ENTRY_WORD1     0x0000e310
+#define PLT_ENTRY_WORD2     0x10000004
+#define PLT_ENTRY_WORD3     0x07f10d10
+#define PLT_ENTRY_WORD4     0xe310100c
+#define PLT_ENTRY_WORD5     0x0014c0f4
+#define PLT_ENTRY_WORD6     0x00000000
+#define PLT_ENTRY_WORD7     0x00000000
+
+/* The first PLT entry pushes the offset into the symbol table
+   from R1 onto the stack at 8(15) and the loader object info
+   at 12(15), loads the loader address in R1 and jumps to it.  */
+
+/* The first entry in the PLT:
+
+  PLT0:
+     STG  1,56(15)  # r1 contains the offset into the symbol table
+     LARL 1,_GLOBAL_OFFSET_TABLE # load address of global offset table
+     MVC  48(8,15),8(1) # move loader ino (object struct address) to stack
+     LG   1,16(1)   # get entry address of loader
+     BCR  15,1      # jump to loader
+
+     Fixup at offset 8: relative address to start of GOT.  */
+
+#define PLT_FIRST_ENTRY_WORD0     0xe310f038
+#define PLT_FIRST_ENTRY_WORD1     0x0024c010
+#define PLT_FIRST_ENTRY_WORD2     0x00000000
+#define PLT_FIRST_ENTRY_WORD3     0xd207f030
+#define PLT_FIRST_ENTRY_WORD4     0x1008e310
+#define PLT_FIRST_ENTRY_WORD5     0x10100004
+#define PLT_FIRST_ENTRY_WORD6     0x07f10700
+#define PLT_FIRST_ENTRY_WORD7     0x07000700
+
+/* The s390 linker needs to keep track of the number of relocs that it
+   decides to copy in check_relocs for each symbol.  This is so that
+   it can discard PC relative relocs if it doesn't need them when
+   linking with -Bsymbolic.  We store the information in a field
+   extending the regular ELF linker hash table.  */
+
+/* This structure keeps track of the number of PC relative relocs we
+   have copied for a given symbol.  */
+
+struct elf_s390_pcrel_relocs_copied
+{
+  /* Next section.  */
+  struct elf_s390_pcrel_relocs_copied *next;
+  /* A section in dynobj.  */
+  asection *section;
+  /* Number of relocs copied in this section.  */
+  bfd_size_type count;
+};
+
+/* s390 ELF linker hash entry.  */
+
+struct elf_s390_link_hash_entry
+{
+  struct elf_link_hash_entry root;
+
+  /* Number of PC relative relocs copied for this symbol.  */
+  struct elf_s390_pcrel_relocs_copied *pcrel_relocs_copied;
+};
+
+/* s390 ELF linker hash table.  */
+
+struct elf_s390_link_hash_table
+{
+  struct elf_link_hash_table root;
+};
+
+/* Declare this now that the above structures are defined.  */
+
+static boolean elf_s390_discard_copies
+  PARAMS ((struct elf_s390_link_hash_entry *, PTR));
+
+/* Traverse an s390 ELF linker hash table.  */
+
+#define elf_s390_link_hash_traverse(table, func, info)		\
+  (elf_link_hash_traverse						\
+   (&(table)->root,							\
+    (boolean (*) PARAMS ((struct elf_link_hash_entry *, PTR))) (func),	\
+    (info)))
+
+/* Get the s390 ELF linker hash table from a link_info structure.  */
+
+#define elf_s390_hash_table(p) \
+  ((struct elf_s390_link_hash_table *) ((p)->hash))
+
+/* Create an entry in an s390 ELF linker hash table.  */
+
+static struct bfd_hash_entry *
+elf_s390_link_hash_newfunc (entry, table, string)
+     struct bfd_hash_entry *entry;
+     struct bfd_hash_table *table;
+     const char *string;
+{
+  struct elf_s390_link_hash_entry *ret =
+    (struct elf_s390_link_hash_entry *) entry;
+
+  /* Allocate the structure if it has not already been allocated by a
+     subclass.  */
+  if (ret == (struct elf_s390_link_hash_entry *) NULL)
+    ret = ((struct elf_s390_link_hash_entry *)
+	   bfd_hash_allocate (table,
+			      sizeof (struct elf_s390_link_hash_entry)));
+  if (ret == (struct elf_s390_link_hash_entry *) NULL)
+    return (struct bfd_hash_entry *) ret;
+
+  /* Call the allocation method of the superclass.  */
+  ret = ((struct elf_s390_link_hash_entry *)
+	 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
+				     table, string));
+  if (ret != (struct elf_s390_link_hash_entry *) NULL)
+    {
+      ret->pcrel_relocs_copied = NULL;
+    }
+
+  return (struct bfd_hash_entry *) ret;
+}
+
+/* Create an s390 ELF linker hash table.  */
+
+static struct bfd_link_hash_table *
+elf_s390_link_hash_table_create (abfd)
+     bfd *abfd;
+{
+  struct elf_s390_link_hash_table *ret;
+
+  ret = ((struct elf_s390_link_hash_table *)
+	 bfd_alloc (abfd, sizeof (struct elf_s390_link_hash_table)));
+  if (ret == (struct elf_s390_link_hash_table *) NULL)
+    return NULL;
+
+  if (! _bfd_elf_link_hash_table_init (&ret->root, abfd,
+				       elf_s390_link_hash_newfunc))
+    {
+      bfd_release (abfd, ret);
+      return NULL;
+    }
+
+  return &ret->root.root;
+}
+
+
+/* Look through the relocs for a section during the first phase, and
+   allocate space in the global offset table or procedure linkage
+   table.  */
+
+static boolean
+elf_s390_check_relocs (abfd, info, sec, relocs)
+     bfd *abfd;
+     struct bfd_link_info *info;
+     asection *sec;
+     const Elf_Internal_Rela *relocs;
+{
+  bfd *dynobj;
+  Elf_Internal_Shdr *symtab_hdr;
+  struct elf_link_hash_entry **sym_hashes;
+  bfd_signed_vma *local_got_refcounts;
+  const Elf_Internal_Rela *rel;
+  const Elf_Internal_Rela *rel_end;
+  asection *sgot;
+  asection *srelgot;
+  asection *sreloc;
+
+  if (info->relocateable)
+    return true;
+
+  dynobj = elf_hash_table (info)->dynobj;
+  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+  sym_hashes = elf_sym_hashes (abfd);
+  local_got_refcounts = elf_local_got_offsets (abfd);
+
+  sgot = NULL;
+  srelgot = NULL;
+  sreloc = NULL;
+
+  rel_end = relocs + sec->reloc_count;
+  for (rel = relocs; rel < rel_end; rel++)
+    {
+      unsigned long r_symndx;
+      struct elf_link_hash_entry *h;
+
+      r_symndx = ELF64_R_SYM (rel->r_info);
+
+      if (r_symndx < symtab_hdr->sh_info)
+	h = NULL;
+      else
+	h = sym_hashes[r_symndx - symtab_hdr->sh_info];      
+
+      /* Some relocs require a global offset table.  */
+      if (dynobj == NULL)
+	{
+	  switch (ELF64_R_TYPE (rel->r_info))
+	    {
+	    case R_390_GOT12:
+            case R_390_GOT16:
+	    case R_390_GOT32:
+	    case R_390_GOT64:
+	    case R_390_GOTOFF:
+	    case R_390_GOTPC:
+	    case R_390_GOTPCDBL:
+	    case R_390_GOTENT:
+	      elf_hash_table (info)->dynobj = dynobj = abfd;
+	      if (! _bfd_elf_create_got_section (dynobj, info))
+		return false;
+	      break;
+
+	    default:
+	      break;
+	    }
+	}
+
+
+      switch (ELF64_R_TYPE (rel->r_info))
+	{
+	case R_390_GOT12:
+        case R_390_GOT16:
+	case R_390_GOT32:
+	case R_390_GOT64:
+	case R_390_GOTENT:
+	  /* This symbol requires a global offset table entry.  */
+
+	  if (sgot == NULL)
+	    {
+	      sgot = bfd_get_section_by_name (dynobj, ".got");
+	      BFD_ASSERT (sgot != NULL);
+	    }
+
+
+	  if (srelgot == NULL
+	      && (h != NULL || info->shared))
+	    {
+	      srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+	      if (srelgot == NULL)
+		{
+		  srelgot = bfd_make_section (dynobj, ".rela.got");
+		  if (srelgot == NULL
+		      || ! bfd_set_section_flags (dynobj, srelgot,
+						  (SEC_ALLOC
+						   | SEC_LOAD
+						   | SEC_HAS_CONTENTS
+						   | SEC_IN_MEMORY
+						   | SEC_LINKER_CREATED
+						   | SEC_READONLY))
+		      || ! bfd_set_section_alignment (dynobj, srelgot, 2))
+		    return false;
+		}
+	    }
+
+	  if (h != NULL)
+	    {
+	      if (h->got.refcount == -1)
+		{
+		  h->got.refcount = 1;
+
+		  /* Make sure this symbol is output as a dynamic symbol.  */
+		  if (h->dynindx == -1)
+		    {
+		      if (! bfd_elf64_link_record_dynamic_symbol (info, h))
+			return false;
+		    }
+		  
+		  sgot->_raw_size += 8;
+		  srelgot->_raw_size += sizeof (Elf64_External_Rela);
+		}
+	      else
+		h->got.refcount += 1;
+	    }
+	  else
+	    {
+     	      /* This is a global offset table entry for a local symbol.  */
+	      if (local_got_refcounts == NULL)
+		{
+		  size_t size;
+
+		  size = symtab_hdr->sh_info * sizeof (bfd_vma);
+		  local_got_refcounts = (bfd_signed_vma *)
+		                         bfd_alloc (abfd, size);
+		  if (local_got_refcounts == NULL)
+		    return false;
+		  elf_local_got_refcounts (abfd) = local_got_refcounts;
+		  memset (local_got_refcounts, -1, size);
+		}
+	      if (local_got_refcounts[r_symndx] == -1)
+		{
+		  local_got_refcounts[r_symndx] = 1;
+
+		  sgot->_raw_size += 8;
+		  if (info->shared)
+		    {
+		      /* If we are generating a shared object, we need to
+			 output a R_390_RELATIVE reloc so that the dynamic
+			 linker can adjust this GOT entry.  */
+		      srelgot->_raw_size += sizeof (Elf64_External_Rela);
+		    }
+		}
+	      else
+		local_got_refcounts[r_symndx] += 1;
+
+	    }
+	  break;
+
+        case R_390_PLT16DBL:
+	case R_390_PLT32:
+	case R_390_PLT32DBL:
+	case R_390_PLT64:
+	  /* This symbol requires a procedure linkage table entry.  We
+             actually build the entry in adjust_dynamic_symbol,
+             because this might be a case of linking PIC code which is
+             never referenced by a dynamic object, in which case we
+             don't need to generate a procedure linkage table entry
+             after all.  */
+
+	  /* If this is a local symbol, we resolve it directly without
+             creating a procedure linkage table entry.  */
+	  if (h == NULL)
+	    continue;
+
+	  if (h->plt.refcount == -1)
+	    {
+	      h->plt.refcount = 1;
+	      h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_PLT;
+	    }
+	  else
+	    h->plt.refcount += 1;
+	  break;
+
+        case R_390_8:
+        case R_390_16:
+	case R_390_32:
+	case R_390_64:
+        case R_390_PC16:
+        case R_390_PC16DBL:
+	case R_390_PC32:
+	case R_390_PC32DBL:
+	case R_390_PC64:
+	  if (h != NULL)
+	    h->elf_link_hash_flags |= ELF_LINK_NON_GOT_REF;
+
+	  /* If we are creating a shared library, and this is a reloc
+             against a global symbol, or a non PC relative reloc
+             against a local symbol, then we need to copy the reloc
+             into the shared library.  However, if we are linking with
+             -Bsymbolic, we do not need to copy a reloc against a
+             global symbol which is defined in an object we are
+             including in the link (i.e., DEF_REGULAR is set).  At
+             this point we have not seen all the input files, so it is
+             possible that DEF_REGULAR is not set now but will be set
+             later (it is never cleared).  We account for that
+             possibility below by storing information in the
+             pcrel_relocs_copied field of the hash table entry.  */
+	  if (info->shared
+              && (sec->flags & SEC_ALLOC) != 0
+	      && (ELF64_R_TYPE (rel->r_info) == R_390_8
+		  || ELF64_R_TYPE (rel->r_info) == R_390_16 
+		  || ELF64_R_TYPE (rel->r_info) == R_390_32
+		  || ELF64_R_TYPE (rel->r_info) == R_390_64
+		  || (h != NULL
+		      && h->dynindx != -1
+		      && (! info->symbolic
+			  || (h->elf_link_hash_flags
+			      & ELF_LINK_HASH_DEF_REGULAR) == 0))))
+	    {
+	      /* When creating a shared object, we must copy these
+                 reloc types into the output file.  We create a reloc
+                 section in dynobj and make room for this reloc.  */
+	      if (sreloc == NULL)
+		{
+		  const char *name;
+
+		  name = (bfd_elf_string_from_elf_section
+			  (abfd,
+			   elf_elfheader (abfd)->e_shstrndx,
+			   elf_section_data (sec)->rel_hdr.sh_name));
+		  if (name == NULL)
+		    return false;
+
+		  BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+			      && strcmp (bfd_get_section_name (abfd, sec),
+					 name + 5) == 0);
+
+		  sreloc = bfd_get_section_by_name (dynobj, name);
+		  if (sreloc == NULL)
+		    {
+		      flagword flags;
+
+		      sreloc = bfd_make_section (dynobj, name);
+		      flags = (SEC_HAS_CONTENTS | SEC_READONLY
+			       | SEC_IN_MEMORY | SEC_LINKER_CREATED);
+		      if ((sec->flags & SEC_ALLOC) != 0)
+			flags |= SEC_ALLOC | SEC_LOAD;
+		      if (sreloc == NULL
+			  || ! bfd_set_section_flags (dynobj, sreloc, flags)
+			  || ! bfd_set_section_alignment (dynobj, sreloc, 2))
+			return false;
+		    }
+		}
+
+	      sreloc->_raw_size += sizeof (Elf64_External_Rela);
+
+	      /* If we are linking with -Bsymbolic, and this is a
+                 global symbol, we count the number of PC relative
+                 relocations we have entered for this symbol, so that
+                 we can discard them again if the symbol is later
+                 defined by a regular object.  Note that this function
+                 is only called if we are using an elf64_s390 linker
+                 hash table, which means that h is really a pointer to
+                 an elf64_s390_link_hash_entry.  */
+	      if (h != NULL
+		  && (ELF64_R_TYPE (rel->r_info) == R_390_PC16 ||
+		      ELF64_R_TYPE (rel->r_info) == R_390_PC16DBL ||
+		      ELF64_R_TYPE (rel->r_info) == R_390_PC32 ||
+		      ELF64_R_TYPE (rel->r_info) == R_390_PC32DBL ||
+		      ELF64_R_TYPE (rel->r_info) == R_390_PC64))
+		{
+		  struct elf_s390_link_hash_entry *eh;
+		  struct elf_s390_pcrel_relocs_copied *p;
+
+		  eh = (struct elf_s390_link_hash_entry *) h;
+
+		  for (p = eh->pcrel_relocs_copied; p != NULL; p = p->next)
+		    if (p->section == sreloc)
+		      break;
+
+		  if (p == NULL)
+		    {
+		      p = ((struct elf_s390_pcrel_relocs_copied *)
+			   bfd_alloc (dynobj, sizeof *p));
+		      if (p == NULL)
+			return false;
+		      p->next = eh->pcrel_relocs_copied;
+		      eh->pcrel_relocs_copied = p;
+		      p->section = sreloc;
+		      p->count = 0;
+		    }
+
+		  ++p->count;
+		}
+	    }
+
+	  break;
+
+	  /* This relocation describes the C++ object vtable hierarchy.
+	     Reconstruct it for later use during GC.  */
+        case R_390_GNU_VTINHERIT:
+          if (!_bfd_elf64_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
+            return false;
+          break;
+
+	  /* This relocation describes which C++ vtable entries are actually
+	     used.  Record for later use during GC.  */
+        case R_390_GNU_VTENTRY:
+          if (!_bfd_elf64_gc_record_vtentry (abfd, sec, h, rel->r_addend))
+            return false;
+          break;
+                   
+	default:
+	  break;
+	}
+    }
+
+  return true;
+}
+
+/* Return the section that should be marked against GC for a given
+   relocation.  */
+
+static asection *
+elf_s390_gc_mark_hook (abfd, info, rel, h, sym)
+     bfd *abfd;
+     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 (ELF64_R_TYPE (rel->r_info))
+	{
+	case R_390_GNU_VTINHERIT:
+	case R_390_GNU_VTENTRY:
+	  break;
+
+	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
+    {
+      if (!(elf_bad_symtab (abfd)
+	    && ELF_ST_BIND (sym->st_info) != STB_LOCAL)
+	  && ! ((sym->st_shndx <= 0 || sym->st_shndx >= SHN_LORESERVE)
+		&& sym->st_shndx != SHN_COMMON))
+	{
+	  return bfd_section_from_elf_index (abfd, sym->st_shndx);
+	}
+    }
+
+  return NULL;
+}
+
+/* Update the got entry reference counts for the section being removed.  */
+
+static boolean
+elf_s390_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;
+{
+  Elf_Internal_Shdr *symtab_hdr;
+  struct elf_link_hash_entry **sym_hashes;
+  bfd_signed_vma *local_got_refcounts;
+  const Elf_Internal_Rela *rel, *relend;
+  unsigned long r_symndx;
+  struct elf_link_hash_entry *h;
+  bfd *dynobj;
+  asection *sgot;
+  asection *srelgot;
+
+  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+  sym_hashes = elf_sym_hashes (abfd);
+  local_got_refcounts = elf_local_got_refcounts (abfd);
+
+  dynobj = elf_hash_table (info)->dynobj;
+  if (dynobj == NULL)
+    return true;
+
+  sgot = bfd_get_section_by_name (dynobj, ".got");
+  srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+
+  relend = relocs + sec->reloc_count;
+  for (rel = relocs; rel < relend; rel++)
+    switch (ELF64_R_TYPE (rel->r_info))
+      {
+      case R_390_GOT12:
+      case R_390_GOT16:
+      case R_390_GOT32:
+      case R_390_GOT64:
+      case R_390_GOTOFF:
+      case R_390_GOTPC:
+      case R_390_GOTPCDBL:
+      case R_390_GOTENT:
+	r_symndx = ELF64_R_SYM (rel->r_info);
+	if (r_symndx >= symtab_hdr->sh_info)
+	  {
+	    h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+	    if (h->got.refcount > 0)
+	      {
+		h->got.refcount -= 1;
+		if (h->got.refcount == 0)
+		  {
+		    sgot->_raw_size -= 8;
+		    srelgot->_raw_size -= sizeof (Elf64_External_Rela);
+		  }
+	      }
+	  }
+	else if (local_got_refcounts != NULL)
+	  {
+	    if (local_got_refcounts[r_symndx] > 0)
+	      {
+		local_got_refcounts[r_symndx] -= 1;
+		if (local_got_refcounts[r_symndx] == 0)
+		  {
+		    sgot->_raw_size -= 8;
+		    if (info->shared)
+		      srelgot->_raw_size -= sizeof (Elf64_External_Rela);
+		  }
+	      }
+	  }
+	break;
+
+      case R_390_PLT16DBL:
+      case R_390_PLT32:
+      case R_390_PLT32DBL:
+      case R_390_PLT64:
+	r_symndx = ELF64_R_SYM (rel->r_info);
+	if (r_symndx >= symtab_hdr->sh_info)
+	  {
+	    h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+	    if (h->plt.refcount > 0)
+	      h->plt.refcount -= 1;
+	  }
+	break;
+
+      default:
+	break;
+      }
+
+  return true;
+}
+
+/* Adjust a symbol defined by a dynamic object and referenced by a
+   regular object.  The current definition is in some section of the
+   dynamic object, but we're not including those sections.  We have to
+   change the definition to something the rest of the link can
+   understand.  */
+
+static boolean
+elf_s390_adjust_dynamic_symbol (info, h)
+     struct bfd_link_info *info;
+     struct elf_link_hash_entry *h;
+{
+  bfd *dynobj;
+  asection *s;
+  unsigned int power_of_two;
+
+  dynobj = elf_hash_table (info)->dynobj;
+
+  /* Make sure we know what is going on here.  */
+  BFD_ASSERT (dynobj != NULL
+	      && ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
+		  || h->weakdef != NULL
+		  || ((h->elf_link_hash_flags
+		       & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+		      && (h->elf_link_hash_flags
+			  & ELF_LINK_HASH_REF_REGULAR) != 0
+		      && (h->elf_link_hash_flags
+			  & ELF_LINK_HASH_DEF_REGULAR) == 0)));
+
+  /* If this is a function, put it in the procedure linkage table.  We
+     will fill in the contents of the procedure linkage table later
+     (although we could actually do it here). */
+  if (h->type == STT_FUNC
+      || (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
+    {
+      if ((! info->shared
+	   && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
+	   && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) == 0)
+	  || (info->shared && h->plt.refcount <= 0))
+	{
+	  /* This case can occur if we saw a PLT32 reloc in an input
+             file, but the symbol was never referred to by a dynamic
+             object.  In such a case, we don't actually need to build
+             a procedure linkage table, and we can just do a PC32
+             reloc instead.  */
+	  h->plt.offset = (bfd_vma) -1;
+	  h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
+	  return true;
+	}
+
+      /* Make sure this symbol is output as a dynamic symbol.  */
+      if (h->dynindx == -1)
+	{
+	  if (! bfd_elf64_link_record_dynamic_symbol (info, h))
+	    return false;
+	}
+
+      s = bfd_get_section_by_name (dynobj, ".plt");
+      BFD_ASSERT (s != NULL);
+
+
+      /* The first  entry in .plt is reserved.  */
+      if (s->_raw_size == 0)
+	s->_raw_size = PLT_FIRST_ENTRY_SIZE;
+
+     /* If this symbol is not defined in a regular file, and we are
+       not generating a shared library, then set the symbol to this
+       location in the .plt.  This is required to make function
+       pointers compare as equal between the normal executable and
+       the shared library.  */
+     if (! info->shared
+	&& (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
+      {
+	h->root.u.def.section = s;
+	h->root.u.def.value = s->_raw_size;
+      }
+
+      h->plt.offset = s->_raw_size;
+
+      /* Make room for this entry.  */
+      s->_raw_size += PLT_ENTRY_SIZE;
+
+      /* We also need to make an entry in the .got.plt section, which
+	 will be placed in the .got section by the linker script.  */
+      s = bfd_get_section_by_name (dynobj, ".got.plt");
+      BFD_ASSERT (s != NULL);
+      s->_raw_size += GOT_ENTRY_SIZE;
+
+      /* We also need to make an entry in the .rela.plt section.  */
+      s = bfd_get_section_by_name (dynobj, ".rela.plt");
+      BFD_ASSERT (s != NULL);
+      s->_raw_size += sizeof (Elf64_External_Rela);
+
+      return true;
+    }
+
+  /* If this is a weak symbol, and there is a real definition, the
+     processor independent code will have arranged for us to see the
+     real definition first, and we can just use the same value.  */
+  if (h->weakdef != NULL)
+    {
+      BFD_ASSERT (h->weakdef->root.type == bfd_link_hash_defined
+		  || h->weakdef->root.type == bfd_link_hash_defweak);
+      h->root.u.def.section = h->weakdef->root.u.def.section;
+      h->root.u.def.value = h->weakdef->root.u.def.value;
+      return true;
+    }
+
+  /* This is a reference to a symbol defined by a dynamic object which
+     is not a function.  */
+
+  /* If we are creating a shared library, we must presume that the
+     only references to the symbol are via the global offset table.
+     For such cases we need not do anything here; the relocations will
+     be handled correctly by relocate_section.  */
+  if (info->shared)
+    return true;
+
+  /* If there are no references to this symbol that do not use the
+     GOT, we don't need to generate a copy reloc.  */
+  if ((h->elf_link_hash_flags & ELF_LINK_NON_GOT_REF) == 0)
+    return true;
+
+  /* We must allocate the symbol in our .dynbss section, which will
+     become part of the .bss section of the executable.  There will be
+     an entry for this symbol in the .dynsym section.  The dynamic
+     object will contain position independent code, so all references
+     from the dynamic object to this symbol will go through the global
+     offset table.  The dynamic linker will use the .dynsym entry to
+     determine the address it must put in the global offset table, so
+     both the dynamic object and the regular object will refer to the
+     same memory location for the variable.  */
+
+  s = bfd_get_section_by_name (dynobj, ".dynbss");
+  BFD_ASSERT (s != NULL);
+
+  /* We must generate a R_390_COPY reloc to tell the dynamic linker
+     to copy the initial value out of the dynamic object and into the
+     runtime process image.  We need to remember the offset into the
+     .rel.bss section we are going to use.  */
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+    {
+      asection *srel;
+
+      srel = bfd_get_section_by_name (dynobj, ".rela.bss");
+      BFD_ASSERT (srel != NULL);
+      srel->_raw_size += sizeof (Elf64_External_Rela);
+      h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_COPY;
+    }
+
+  /* We need to figure out the alignment required for this symbol.  I
+     have no idea how ELF linkers handle this.  */
+  power_of_two = bfd_log2 (h->size);
+  if (power_of_two > 3)
+    power_of_two = 3;
+
+  /* Apply the required alignment.  */
+  s->_raw_size = BFD_ALIGN (s->_raw_size,
+			    (bfd_size_type) (1 << power_of_two));
+  if (power_of_two > bfd_get_section_alignment (dynobj, s))
+    {
+      if (! bfd_set_section_alignment (dynobj, s, power_of_two))
+	return false;
+    }
+
+  /* Define the symbol as being at this point in the section.  */
+  h->root.u.def.section = s;
+  h->root.u.def.value = s->_raw_size;
+
+  /* Increment the section size to make room for the symbol.  */
+  s->_raw_size += h->size;
+
+  return true;
+}
+
+/* Set the sizes of the dynamic sections.  */
+
+static boolean
+elf_s390_size_dynamic_sections (output_bfd, info)
+     bfd *output_bfd;
+     struct bfd_link_info *info;
+{
+  bfd *dynobj;
+  asection *s;
+  boolean reltext;
+  boolean relocs;
+  boolean plt;
+
+  dynobj = elf_hash_table (info)->dynobj;
+  BFD_ASSERT (dynobj != NULL);
+
+  if (elf_hash_table (info)->dynamic_sections_created)
+    {
+      /* Set the contents of the .interp section to the interpreter.  */
+      if (! info->shared)
+	{
+	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  BFD_ASSERT (s != NULL);
+	  s->_raw_size = sizeof ELF_DYNAMIC_INTERPRETER;
+	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
+	}
+    }
+  else
+    {
+      /* We may have created entries in the .rela.got section.
+         However, if we are not creating the dynamic sections, we will
+         not actually use these entries.  Reset the size of .rela.got,
+         which will cause it to get stripped from the output file
+         below.  */
+      s = bfd_get_section_by_name (dynobj, ".rela.got");
+      if (s != NULL)
+	s->_raw_size = 0;
+    }
+
+  /* If this is a -Bsymbolic shared link, then we need to discard all
+     PC relative relocs against symbols defined in a regular object.
+     We allocated space for them in the check_relocs routine, but we
+     will not fill them in in the relocate_section routine.  */
+  if (info->shared)
+    elf_s390_link_hash_traverse (elf_s390_hash_table (info),
+			         elf_s390_discard_copies,
+				 (PTR) info);
+
+  /* The check_relocs and adjust_dynamic_symbol entry points have
+     determined the sizes of the various dynamic sections.  Allocate
+     memory for them.  */
+  plt = false;
+  reltext = false;
+  relocs = false;
+  for (s = dynobj->sections; s != NULL; s = s->next)
+    {
+      const char *name;
+      boolean strip;
+
+      if ((s->flags & SEC_LINKER_CREATED) == 0)
+	continue;
+
+      /* It's OK to base decisions on the section name, because none
+	 of the dynobj section names depend upon the input files.  */
+      name = bfd_get_section_name (dynobj, s);
+
+      strip = false;
+
+      if (strcmp (name, ".plt") == 0)
+	{
+	  if (s->_raw_size == 0)
+	    {
+	      /* Strip this section if we don't need it; see the
+                 comment below.  */
+	      strip = true;
+	    }
+	  else
+	    {
+	      /* Remember whether there is a PLT.  */
+	      plt = true;
+	    }
+	}
+      else if (strncmp (name, ".rela", 5) == 0)
+	{
+	  if (s->_raw_size == 0)
+	    {
+	      /* If we don't need this section, strip it from the
+		 output file.  This is to handle .rela.bss and
+		 .rel.plt.  We must create it in
+		 create_dynamic_sections, because it must be created
+		 before the linker maps input sections to output
+		 sections.  The linker does that before
+		 adjust_dynamic_symbol is called, and it is that
+		 function which decides whether anything needs to go
+		 into these sections.  */
+	      strip = true;
+	    }
+	  else
+	    {
+	      asection *target;
+
+	      /* Remember whether there are any reloc sections other
+                 than .rela.plt.  */
+	      if (strcmp (name, ".rela.plt") != 0)
+		{
+		  const char *outname;
+
+		  relocs = true;
+
+		  /* If this relocation section applies to a read only
+		     section, then we probably need a DT_TEXTREL
+		     entry.  The entries in the .rela.plt section
+		     really apply to the .got section, which we
+		     created ourselves and so know is not readonly.  */
+		  outname = bfd_get_section_name (output_bfd,
+						  s->output_section);
+		  target = bfd_get_section_by_name (output_bfd, outname + 5);
+		  if (target != NULL
+		      && (target->flags & SEC_READONLY) != 0
+		      && (target->flags & SEC_ALLOC) != 0)
+		    reltext = true;
+		}
+
+	      /* We use the reloc_count field as a counter if we need
+		 to copy relocs into the output file.  */
+	      s->reloc_count = 0;
+	    }
+	}
+      else if (strncmp (name, ".got", 4) != 0)
+	{
+	  /* It's not one of our sections, so don't allocate space.  */
+	  continue;
+	}
+
+      if (strip)
+	{
+	  _bfd_strip_section_from_output (info, s);
+	  continue;
+	}
+
+      /* Allocate memory for the section contents.  */
+      s->contents = (bfd_byte *) bfd_alloc (dynobj, s->_raw_size);
+      if (s->contents == NULL && s->_raw_size != 0)
+	return false;
+    }
+
+  if (elf_hash_table (info)->dynamic_sections_created)
+    {
+      /* Add some entries to the .dynamic section.  We fill in the
+	 values later, in elf_s390_finish_dynamic_sections, but we
+	 must add the entries now so that we get the correct size for
+	 the .dynamic section.  The DT_DEBUG entry is filled in by the
+	 dynamic linker and used by the debugger.  */
+      if (! info->shared)
+	{
+	  if (! bfd_elf64_add_dynamic_entry (info, DT_DEBUG, 0))
+	    return false;
+	}
+
+      if (plt)
+	{
+	  if (! bfd_elf64_add_dynamic_entry (info, DT_PLTGOT, 0)
+	      || ! bfd_elf64_add_dynamic_entry (info, DT_PLTRELSZ, 0)
+	      || ! bfd_elf64_add_dynamic_entry (info, DT_PLTREL, DT_RELA)
+	      || ! bfd_elf64_add_dynamic_entry (info, DT_JMPREL, 0))
+	    return false;
+	}
+
+      if (relocs)
+        {
+          if (! bfd_elf64_add_dynamic_entry (info, DT_RELA, 0)
+              || ! bfd_elf64_add_dynamic_entry (info, DT_RELASZ, 0)
+              || ! bfd_elf64_add_dynamic_entry (info, DT_RELAENT,
+					    sizeof (Elf64_External_Rela)))
+	    return false;
+         }
+
+      if (reltext)
+	{
+	  if (! bfd_elf64_add_dynamic_entry (info, DT_TEXTREL, 0))
+	    return false;
+	  info->flags |= DF_TEXTREL;
+	}
+    }
+
+  return true;
+}
+
+/* This function is called via elf64_s390_link_hash_traverse if we are
+   creating a shared object with -Bsymbolic.  It discards the space
+   allocated to copy PC relative relocs against symbols which are
+   defined in regular objects.  We allocated space for them in the
+   check_relocs routine, but we won't fill them in in the
+   relocate_section routine.  */
+
+/*ARGSUSED*/
+static boolean
+elf_s390_discard_copies (h, inf)
+     struct elf_s390_link_hash_entry *h;
+     PTR inf;
+{
+  struct elf_s390_pcrel_relocs_copied *s;
+  struct bfd_link_info *info = (struct bfd_link_info *) inf;
+
+  /* If a symbol has been forced local or we have found a regular
+     definition for the symbolic link case, then we won't be needing
+     any relocs.  */
+  if ((h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
+      && ((h->root.elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0
+	  || info->symbolic))
+    {
+      for (s = h->pcrel_relocs_copied; s != NULL; s = s->next)
+	s->section->_raw_size -= s->count * sizeof (Elf64_External_Rela);
+    }
+
+  return true;
+}
+/* Relocate a 390 ELF section.  */
+
+static boolean
+elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
+			      contents, relocs, local_syms, local_sections)
+     bfd *output_bfd;
+     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;
+{
+  bfd *dynobj;
+  Elf_Internal_Shdr *symtab_hdr;
+  struct elf_link_hash_entry **sym_hashes;
+  bfd_vma *local_got_offsets;
+  asection *sgot;
+  asection *splt;
+  asection *sreloc;
+  Elf_Internal_Rela *rel;
+  Elf_Internal_Rela *relend;
+
+  dynobj = elf_hash_table (info)->dynobj;
+  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
+  sym_hashes = elf_sym_hashes (input_bfd);
+  local_got_offsets = elf_local_got_offsets (input_bfd);
+
+  sgot = NULL;
+  splt = NULL;
+  sreloc = NULL;
+  if (dynobj != NULL)
+    {
+      splt = bfd_get_section_by_name (dynobj, ".plt");
+      sgot = bfd_get_section_by_name (dynobj, ".got");
+    }
+
+  rel = relocs;
+  relend = relocs + input_section->reloc_count;
+  for (; rel < relend; rel++)
+    {
+      int r_type;
+      reloc_howto_type *howto;
+      unsigned long r_symndx;
+      struct elf_link_hash_entry *h;
+      Elf_Internal_Sym *sym;
+      asection *sec;
+      bfd_vma relocation;
+      bfd_reloc_status_type r;
+
+      r_type = ELF64_R_TYPE (rel->r_info);
+      if (r_type == R_390_GNU_VTINHERIT
+          || r_type == R_390_GNU_VTENTRY)
+        continue;
+      if (r_type < 0 || r_type >= (int) R_390_max)
+	{
+	  bfd_set_error (bfd_error_bad_value);
+	  return false;
+	}
+      howto = elf_howto_table + r_type;
+
+      r_symndx = ELF64_R_SYM (rel->r_info);
+
+      if (info->relocateable)
+	{
+	  /* This is a relocateable link.  We don't have to change
+	     anything, unless the reloc is against a section symbol,
+	     in which case we have to adjust according to where the
+	     section symbol winds up in the output section.  */
+	  if (r_symndx < symtab_hdr->sh_info)
+	    {
+	      sym = local_syms + r_symndx;
+	      if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+		{
+		  sec = local_sections[r_symndx];
+		  rel->r_addend += sec->output_offset + sym->st_value;
+		}
+	    }
+
+	  continue;
+	}
+
+      /* This is a final link.  */
+      h = NULL;
+      sym = NULL;
+      sec = NULL;
+      if (r_symndx < symtab_hdr->sh_info)
+	{
+	  sym = local_syms + r_symndx;
+	  sec = local_sections[r_symndx];
+	  relocation = (sec->output_section->vma
+			+ sec->output_offset
+			+ sym->st_value);
+	}
+      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;
+	  if (h->root.type == bfd_link_hash_defined
+	      || h->root.type == bfd_link_hash_defweak)
+	    {
+	      sec = h->root.u.def.section;
+	      if ((r_type == R_390_GOTPC
+		   || r_type == R_390_GOTPCDBL)
+		  || ((r_type == R_390_PLT16DBL ||
+		       r_type == R_390_PLT32 ||
+		       r_type == R_390_PLT32DBL ||
+		       r_type == R_390_PLT64)
+                      && splt != NULL
+		      && h->plt.offset != (bfd_vma) -1)
+		  || ((r_type == R_390_GOT12 ||
+                       r_type == R_390_GOT16 ||
+		       r_type == R_390_GOT32 ||
+		       r_type == R_390_GOT64 ||
+		       r_type == R_390_GOTENT)
+		      && elf_hash_table (info)->dynamic_sections_created
+		      && (! info->shared
+			  || (! info->symbolic && h->dynindx != -1)
+			  || (h->elf_link_hash_flags
+			      & ELF_LINK_HASH_DEF_REGULAR) == 0))
+		  || (info->shared
+		      && ((! info->symbolic && h->dynindx != -1)
+			  || (h->elf_link_hash_flags
+			      & ELF_LINK_HASH_DEF_REGULAR) == 0)
+		      && ( r_type == R_390_8 ||
+			   r_type == R_390_16 ||
+                           r_type == R_390_32 ||
+			   r_type == R_390_64 ||
+                           r_type == R_390_PC16 ||
+                           r_type == R_390_PC16DBL ||
+			   r_type == R_390_PC32 ||
+			   r_type == R_390_PC32DBL ||
+			   r_type == R_390_PC64)
+                      && ((input_section->flags & SEC_ALLOC) != 0
+                          /* DWARF will emit R_386_32 relocations in its
+                             sections against symbols defined externally
+                             in shared libraries.  We can't do anything
+                             with them here.  */
+                          || ((input_section->flags & SEC_DEBUGGING) != 0
+			      && (h->elf_link_hash_flags
+				  & ELF_LINK_HASH_DEF_DYNAMIC) != 0))))
+		{
+		  /* In these cases, we don't need the relocation
+                     value.  We check specially because in some
+                     obscure cases sec->output_section will be NULL.  */
+		  relocation = 0;
+		}
+	      else if (sec->output_section == NULL)
+		{
+		  (*_bfd_error_handler)
+		    (_("%s: warning: unresolvable relocation against symbol `%s' from %s section"),
+		     bfd_get_filename (input_bfd), h->root.root.string,
+		     bfd_get_section_name (input_bfd, input_section));
+		  relocation = 0;
+		}
+	      else
+		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->shared && !info->symbolic
+		   && !info->no_undefined
+		   && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
+	    relocation = 0;
+	  else
+	    {
+	      if (! ((*info->callbacks->undefined_symbol)
+		     (info, h->root.root.string, input_bfd,
+          	      input_section, rel->r_offset,
+	 	     (!info->shared || info->no_undefined
+		      || ELF_ST_VISIBILITY (h->other)))))
+		return false;
+	      relocation = 0;
+	    }
+	}
+
+      switch (r_type)
+	{
+        case R_390_GOT12:
+        case R_390_GOT16:
+        case R_390_GOT32:
+        case R_390_GOT64:
+        case R_390_GOTENT:
+          /* Relocation is to the entry for this symbol in the global
+             offset table.  */
+	  BFD_ASSERT (sgot != NULL);
+
+          if (h != NULL)
+            {
+              bfd_vma off;
+
+              off = h->got.offset;
+              BFD_ASSERT (off != (bfd_vma) -1);
+
+              if (! elf_hash_table (info)->dynamic_sections_created
+                  || (info->shared
+                      && (info->symbolic || h->dynindx == -1)
+                      && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
+                {
+                  /* This is actually a static link, or it is a
+                     -Bsymbolic link and the symbol is defined
+                     locally, or the symbol was forced to be local
+                     because of a version file.  We must initialize
+                     this entry in the global offset table.  Since the
+                     offset must always be a multiple of 2, we use the
+                     least significant bit to record whether we have
+                     initialized it already.
+
+                     When doing a dynamic link, we create a .rel.got
+                     relocation entry to initialize the value.  This
+                     is done in the finish_dynamic_symbol routine.  */
+                  if ((off & 1) != 0)
+                    off &= ~1;
+                  else
+                    {
+		      bfd_put_64 (output_bfd, relocation,
+				  sgot->contents + off);
+                      h->got.offset |= 1;
+                    }
+                }
+	      relocation = sgot->output_offset + off;
+            }
+          else
+            {
+              bfd_vma off;
+
+              BFD_ASSERT (local_got_offsets != NULL
+                          && local_got_offsets[r_symndx] != (bfd_vma) -1);
+
+              off = local_got_offsets[r_symndx];
+
+              /* The offset must always be a multiple of 8.  We use
+                 the least significant bit to record whether we have
+                 already generated the necessary reloc.  */
+              if ((off & 1) != 0)
+                off &= ~1;
+              else
+                {
+                  bfd_put_64 (output_bfd, relocation, sgot->contents + off);
+
+                  if (info->shared)
+                    {
+                      asection *srelgot;
+                      Elf_Internal_Rela outrel;
+
+                      srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+                      BFD_ASSERT (srelgot != NULL);
+
+                      outrel.r_offset = (sgot->output_section->vma
+                                         + sgot->output_offset
+                                         + off);
+                      outrel.r_info = ELF64_R_INFO (0, R_390_RELATIVE);
+		      outrel.r_addend = relocation;
+                      bfd_elf64_swap_reloca_out (output_bfd, &outrel,
+                                                (((Elf64_External_Rela *)
+                                                  srelgot->contents)
+                                                 + srelgot->reloc_count));
+                      ++srelgot->reloc_count;
+                    }
+
+                  local_got_offsets[r_symndx] |= 1;
+                }
+
+	      relocation = sgot->output_offset + off;
+            }
+
+	  /*
+	   * For @GOTENT the relocation is against the offset between
+	   * the instruction and the symbols entry in the GOT and not
+	   * between the start of the GOT and the symbols entry. We
+	   * add the vma of the GOT to get the correct value.
+	   */
+	  if (r_type == R_390_GOTENT)
+	    relocation += sgot->output_section->vma;
+
+          break;
+ 
+        case R_390_GOTOFF:
+          /* Relocation is relative to the start of the global offset
+             table.  */
+
+          if (sgot == NULL)
+            {
+              sgot = bfd_get_section_by_name (dynobj, ".got");
+              BFD_ASSERT (sgot != NULL);
+            }
+
+          /* Note that sgot->output_offset is not involved in this
+             calculation.  We always want the start of .got.  If we
+             defined _GLOBAL_OFFSET_TABLE in a different way, as is
+             permitted by the ABI, we might have to change this
+             calculation.  */
+          relocation -= sgot->output_section->vma;
+
+          break;
+
+        case R_390_GOTPC:
+	case R_390_GOTPCDBL:
+          /* Use global offset table as symbol value.  */
+
+          if (sgot == NULL)
+            {
+              sgot = bfd_get_section_by_name (dynobj, ".got");
+              BFD_ASSERT (sgot != NULL);
+            }
+
+          relocation = sgot->output_section->vma;
+
+          break;
+
+        case R_390_PLT16DBL:
+        case R_390_PLT32:
+        case R_390_PLT32DBL:
+        case R_390_PLT64:
+          /* Relocation is to the entry for this symbol in the
+             procedure linkage table.  */
+
+          /* Resolve a PLT32 reloc against a local symbol directly,
+             without using the procedure linkage table.  */
+          if (h == NULL)
+            break;
+
+          if (h->plt.offset == (bfd_vma) -1 || splt == NULL)
+            {
+              /* We didn't make a PLT entry for this symbol.  This
+                 happens when statically linking PIC code, or when
+                 using -Bsymbolic.  */
+              break;
+            }
+
+          relocation = (splt->output_section->vma
+                        + splt->output_offset
+                        + h->plt.offset);
+
+          break;
+
+        case R_390_8:
+        case R_390_16:
+        case R_390_32:
+        case R_390_64:
+        case R_390_PC16:
+        case R_390_PC16DBL:
+        case R_390_PC32:
+	case R_390_PC32DBL:
+        case R_390_PC64:
+          if (info->shared
+              && (input_section->flags & SEC_ALLOC) != 0
+              && (r_type == R_390_8
+                  || r_type == R_390_16
+		  || r_type == R_390_32
+		  || r_type == R_390_64
+                  || (h != NULL
+                      && h->dynindx != -1
+                      && (! info->symbolic
+                          || (h->elf_link_hash_flags
+                              & ELF_LINK_HASH_DEF_REGULAR) == 0))))
+            {
+              Elf_Internal_Rela outrel;
+              boolean skip, relocate;
+
+              /* When generating a shared object, these relocations
+                 are copied into the output file to be resolved at run
+                 time.  */
+
+              if (sreloc == NULL)
+                {
+                  const char *name;
+
+                  name = (bfd_elf_string_from_elf_section
+                          (input_bfd,
+                           elf_elfheader (input_bfd)->e_shstrndx,
+                           elf_section_data (input_section)->rel_hdr.sh_name));
+                  if (name == NULL)
+                    return false;
+
+                  BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+                              && strcmp (bfd_get_section_name (input_bfd,
+                                                               input_section),
+                                         name + 5) == 0);
+
+                  sreloc = bfd_get_section_by_name (dynobj, name);
+                  BFD_ASSERT (sreloc != NULL);
+                }
+
+              skip = false;
+
+              if (elf_section_data (input_section)->stab_info == NULL)
+                outrel.r_offset = rel->r_offset;
+              else
+                {
+                  bfd_vma off;
+
+                  off = (_bfd_stab_section_offset
+                         (output_bfd, &elf_hash_table (info)->stab_info,
+                          input_section,
+                          &elf_section_data (input_section)->stab_info,
+                          rel->r_offset));
+                  if (off == (bfd_vma) -1)
+                    skip = true;
+                  outrel.r_offset = off;
+                }
+
+              outrel.r_offset += (input_section->output_section->vma
+                                  + input_section->output_offset);
+
+              if (skip)
+                {
+                  memset (&outrel, 0, sizeof outrel);
+                  relocate = false;
+                }
+              else if (r_type == R_390_PC16 ||
+                       r_type == R_390_PC16DBL ||
+		       r_type == R_390_PC32 || 
+		       r_type == R_390_PC32DBL ||
+		       r_type == R_390_PC64)
+                {
+                  BFD_ASSERT (h != NULL && h->dynindx != -1);
+		  relocate = false;
+                  outrel.r_info = ELF64_R_INFO (h->dynindx, r_type);
+		  outrel.r_addend = relocation + rel->r_addend;
+                }
+              else
+                {
+                  /* h->dynindx may be -1 if this symbol was marked to
+                     become local.  */
+                  if (h == NULL
+                      || ((info->symbolic || h->dynindx == -1)
+                          && (h->elf_link_hash_flags
+                              & ELF_LINK_HASH_DEF_REGULAR) != 0))
+                    {
+                      relocate = true;
+                      outrel.r_info = ELF64_R_INFO (0, R_390_RELATIVE);
+		      outrel.r_addend = relocation + rel->r_addend;
+                    }
+		  else
+		    {
+		      BFD_ASSERT (h->dynindx != -1);
+		      relocate = false;
+		      outrel.r_info = ELF64_R_INFO (h->dynindx, R_390_64);
+		      outrel.r_addend = relocation + rel->r_addend;
+		    }
+                }
+
+              bfd_elf64_swap_reloca_out (output_bfd, &outrel,
+                                        (((Elf64_External_Rela *)
+                                          sreloc->contents)
+                                         + sreloc->reloc_count));
+              ++sreloc->reloc_count;
+
+              /* If this reloc is against an external symbol, we do
+                 not want to fiddle with the addend.  Otherwise, we
+                 need to include the symbol value so that it becomes
+                 an addend for the dynamic reloc.  */
+              if (! relocate)
+                continue;
+            }
+
+          break;
+
+        default:
+          break;
+        }
+
+      r = _bfd_final_link_relocate (howto, input_bfd, input_section,
+				      contents, rel->r_offset,
+				      relocation, rel->r_addend);
+
+      if (r != bfd_reloc_ok)
+	{
+	  switch (r)
+	    {
+	    default:
+	    case bfd_reloc_outofrange:
+	      abort ();
+	    case bfd_reloc_overflow:
+	      {
+		const char *name;
+
+		if (h != NULL)
+		  name = h->root.root.string;
+		else
+		  {
+		    name = bfd_elf_string_from_elf_section (input_bfd,
+							    symtab_hdr->sh_link,
+							    sym->st_name);
+		    if (name == NULL)
+		      return false;
+		    if (*name == '\0')
+		      name = bfd_section_name (input_bfd, sec);
+		  }
+		if (! ((*info->callbacks->reloc_overflow)
+		       (info, name, howto->name, (bfd_vma) 0,
+			input_bfd, input_section, rel->r_offset)))
+		  return false;
+	      }
+	      break;
+	    }
+	}
+    }
+
+  return true;
+}
+
+/* Finish up dynamic symbol handling.  We set the contents of various
+   dynamic sections here.  */
+
+static boolean
+elf_s390_finish_dynamic_symbol (output_bfd, info, h, sym)
+     bfd *output_bfd;
+     struct bfd_link_info *info;
+     struct elf_link_hash_entry *h;
+     Elf_Internal_Sym *sym;
+{
+  bfd *dynobj;
+
+  dynobj = elf_hash_table (info)->dynobj;
+
+  if (h->plt.offset != (bfd_vma) -1)
+    {
+      asection *splt;
+      asection *srela;
+      Elf_Internal_Rela rela;
+      bfd_vma got_offset;
+      bfd_vma plt_index;
+      asection *sgot;
+
+      /* This symbol has an entry in the procedure linkage table.  Set
+         it up.  */
+
+      BFD_ASSERT (h->dynindx != -1);
+
+      splt = bfd_get_section_by_name (dynobj, ".plt");
+      sgot = bfd_get_section_by_name (dynobj, ".got.plt");
+      srela = bfd_get_section_by_name (dynobj, ".rela.plt");
+      BFD_ASSERT (splt != NULL && sgot != NULL && srela != NULL);
+
+      /* Calc. index no. 
+         Current offset - size first entry / entry size.  */
+      plt_index = (h->plt.offset - PLT_FIRST_ENTRY_SIZE) / PLT_ENTRY_SIZE;
+
+      /* Offset in GOT is PLT index plus GOT headers(3) times 8,
+         addr & GOT addr.  */
+      got_offset = (plt_index + 3) * GOT_ENTRY_SIZE;
+
+      /* Fill in the blueprint of a PLT.  */
+      bfd_put_32 (output_bfd, PLT_ENTRY_WORD0,
+		  splt->contents + h->plt.offset);
+      bfd_put_32 (output_bfd, PLT_ENTRY_WORD1,
+		  splt->contents + h->plt.offset + 4);
+      bfd_put_32 (output_bfd, PLT_ENTRY_WORD2,
+		  splt->contents + h->plt.offset + 8);
+      bfd_put_32 (output_bfd, PLT_ENTRY_WORD3,
+		  splt->contents + h->plt.offset + 12);
+      bfd_put_32 (output_bfd, PLT_ENTRY_WORD4,
+		  splt->contents + h->plt.offset + 16);
+      bfd_put_32 (output_bfd, PLT_ENTRY_WORD5,
+		  splt->contents + h->plt.offset + 20);
+      bfd_put_32 (output_bfd, PLT_ENTRY_WORD6,
+		  splt->contents + h->plt.offset + 24);
+      bfd_put_32 (output_bfd, PLT_ENTRY_WORD7,
+		  splt->contents + h->plt.offset + 28);
+      /* Fixup the relative address to the GOT entry */
+      bfd_put_32 (output_bfd,
+		  (sgot->output_section->vma + sgot->output_offset + got_offset
+		   - (splt->output_section->vma + h->plt.offset))/2,
+		  splt->contents + h->plt.offset + 2);
+      /* Fixup the relative branch to PLT 0 */
+      bfd_put_32 (output_bfd, - (PLT_FIRST_ENTRY_SIZE +
+				 (PLT_ENTRY_SIZE * plt_index) + 22)/2,
+		  splt->contents + h->plt.offset + 24);
+      /* Fixup offset into symbol table */
+      bfd_put_32 (output_bfd, plt_index * sizeof (Elf64_External_Rela),
+		  splt->contents + h->plt.offset + 28);
+
+      /* Fill in the entry in the .rela.plt section.  */
+      rela.r_offset = (sgot->output_section->vma
+		       + sgot->output_offset
+		       + got_offset);
+      rela.r_info = ELF64_R_INFO (h->dynindx, R_390_JMP_SLOT);
+      rela.r_addend = 0;
+      bfd_elf64_swap_reloca_out (output_bfd, &rela,
+				 ((Elf64_External_Rela *) srela->contents
+				  + plt_index ));
+
+      /* Fill in the entry in the global offset table.
+         Points to instruction after GOT offset.  */
+      bfd_put_64 (output_bfd,
+		  (splt->output_section->vma
+		   + splt->output_offset
+		   + h->plt.offset
+		   + 14),
+		  sgot->contents + got_offset);
+
+
+      if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
+	{
+	  /* Mark the symbol as undefined, rather than as defined in
+	     the .plt section.  Leave the value alone.  */
+	  sym->st_shndx = SHN_UNDEF;
+	}
+    }
+
+  if (h->got.offset != (bfd_vma) -1)
+    {
+      asection *sgot;
+      asection *srela;
+      Elf_Internal_Rela rela;
+
+      /* This symbol has an entry in the global offset table.  Set it
+         up.  */
+
+      sgot = bfd_get_section_by_name (dynobj, ".got");
+      srela = bfd_get_section_by_name (dynobj, ".rela.got");
+      BFD_ASSERT (sgot != NULL && srela != NULL);
+
+      rela.r_offset = (sgot->output_section->vma
+		       + sgot->output_offset
+		       + (h->got.offset &~ 1));
+
+      /* If this is a static link, or it is a -Bsymbolic link and the
+	 symbol is defined locally or was forced to be local because
+	 of a version file, we just want to emit a RELATIVE reloc.
+	 The entry in the global offset table will already have been
+	 initialized in the relocate_section function.  */
+      if (! elf_hash_table (info)->dynamic_sections_created
+	  || (info->shared
+	      && (info->symbolic || h->dynindx == -1)
+	      && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
+        {
+          rela.r_info = ELF64_R_INFO (0, R_390_RELATIVE);
+          rela.r_addend = (h->root.u.def.value
+                           + h->root.u.def.section->output_section->vma
+                           + h->root.u.def.section->output_offset);
+        }
+      else
+	{
+	  BFD_ASSERT((h->got.offset & 1) == 0);
+	  bfd_put_64 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
+	  rela.r_info = ELF64_R_INFO (h->dynindx, R_390_GLOB_DAT);
+          rela.r_addend = 0;
+        }
+
+      bfd_elf64_swap_reloca_out (output_bfd, &rela,
+				 ((Elf64_External_Rela *) srela->contents
+				  + srela->reloc_count));
+      ++srela->reloc_count;
+    }
+
+  if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_COPY) != 0)
+    {
+      asection *s;
+      Elf_Internal_Rela rela;
+
+      /* This symbols needs a copy reloc.  Set it up.  */
+
+      BFD_ASSERT (h->dynindx != -1
+		  && (h->root.type == bfd_link_hash_defined
+		      || h->root.type == bfd_link_hash_defweak));
+
+
+      s = bfd_get_section_by_name (h->root.u.def.section->owner,
+				   ".rela.bss");
+      BFD_ASSERT (s != NULL);
+
+      rela.r_offset = (h->root.u.def.value
+		       + h->root.u.def.section->output_section->vma
+		       + h->root.u.def.section->output_offset);
+      rela.r_info = ELF64_R_INFO (h->dynindx, R_390_COPY);
+      rela.r_addend = 0;
+      bfd_elf64_swap_reloca_out (output_bfd, &rela,
+				 ((Elf64_External_Rela *) s->contents
+				  + s->reloc_count));
+      ++s->reloc_count;
+    }
+
+  /* Mark some specially defined symbols as absolute.  */
+  if (strcmp (h->root.root.string, "_DYNAMIC") == 0
+      || strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0
+      || strcmp (h->root.root.string, "_PROCEDURE_LINKAGE_TABLE_") == 0)
+    sym->st_shndx = SHN_ABS;
+
+  return true;
+}
+
+/* Finish up the dynamic sections.  */
+
+static boolean
+elf_s390_finish_dynamic_sections (output_bfd, info)
+     bfd *output_bfd;
+     struct bfd_link_info *info;
+{
+  bfd *dynobj;
+  asection *sdyn;
+  asection *sgot;
+
+  dynobj = elf_hash_table (info)->dynobj;
+
+  sgot = bfd_get_section_by_name (dynobj, ".got.plt");
+  BFD_ASSERT (sgot != NULL);
+  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+
+  if (elf_hash_table (info)->dynamic_sections_created)
+    {
+      asection *splt;
+      Elf64_External_Dyn *dyncon, *dynconend;
+
+      BFD_ASSERT (sdyn != NULL);
+
+      dyncon = (Elf64_External_Dyn *) sdyn->contents;
+      dynconend = (Elf64_External_Dyn *) (sdyn->contents + sdyn->_raw_size);
+      for (; dyncon < dynconend; dyncon++)
+	{
+	  Elf_Internal_Dyn dyn;
+	  const char *name;
+	  asection *s;
+
+	  bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);
+
+	  switch (dyn.d_tag)
+	    {
+	    default:
+	      break;
+
+	    case DT_PLTGOT:
+	      name = ".got";
+	      goto get_vma;
+	    case DT_JMPREL:
+	      name = ".rela.plt";
+	    get_vma:
+	      s = bfd_get_section_by_name(output_bfd, name);
+	      BFD_ASSERT (s != NULL);
+	      dyn.d_un.d_ptr = s->vma;
+	      bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
+	      break;
+
+	    case DT_PLTRELSZ:
+	      s = bfd_get_section_by_name (output_bfd, ".rela.plt");
+	      BFD_ASSERT (s != NULL);
+	      if (s->_cooked_size != 0)
+		dyn.d_un.d_val = s->_cooked_size;
+	      else
+		dyn.d_un.d_val = s->_raw_size;
+	      bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
+	      break;
+
+	    case DT_RELASZ:
+	      /* The procedure linkage table relocs (DT_JMPREL) should
+		 not be included in the overall relocs (DT_RELA).
+		 Therefore, we override the DT_RELASZ entry here to
+		 make it not include the JMPREL relocs.  Since the
+		 linker script arranges for .rela.plt to follow all
+		 other relocation sections, we don't have to worry
+		 about changing the DT_RELA entry.  */
+	      s = bfd_get_section_by_name (output_bfd, ".rela.plt");
+	      if (s != NULL)
+		{
+		  if (s->_cooked_size != 0)
+		    dyn.d_un.d_val -= s->_cooked_size;
+		  else
+		    dyn.d_un.d_val -= s->_raw_size;
+		}
+	      bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon);
+	      break;
+	    }
+	}
+
+      /* Fill in the special first entry in the procedure linkage table.  */
+      splt = bfd_get_section_by_name (dynobj, ".plt");
+      if (splt && splt->_raw_size > 0)
+	{
+	  /* fill in blueprint for plt 0 entry */
+	  bfd_put_32 (output_bfd, PLT_FIRST_ENTRY_WORD0,
+		      splt->contents );
+	  bfd_put_32 (output_bfd, PLT_FIRST_ENTRY_WORD1,
+		      splt->contents +4 );
+	  bfd_put_32 (output_bfd, PLT_FIRST_ENTRY_WORD3,
+		      splt->contents +12 );
+	  bfd_put_32 (output_bfd, PLT_FIRST_ENTRY_WORD4,
+		      splt->contents +16 );
+	  bfd_put_32 (output_bfd, PLT_FIRST_ENTRY_WORD5,
+		      splt->contents +20 );
+	  bfd_put_32 (output_bfd, PLT_FIRST_ENTRY_WORD6,
+		      splt->contents + 24);
+	  bfd_put_32 (output_bfd, PLT_FIRST_ENTRY_WORD7,
+		      splt->contents + 28 );
+	  /* Fixup relative address to start of GOT */
+	  bfd_put_32 (output_bfd,
+		      (sgot->output_section->vma + sgot->output_offset
+		       - splt->output_section->vma - 6)/2,
+		      splt->contents + 8);
+	}
+
+      elf_section_data (splt->output_section)->this_hdr.sh_entsize = 
+	PLT_ENTRY_SIZE;
+    }
+
+  /* Set the first entry in the global offset table to the address of
+     the dynamic section.  */
+  if (sgot->_raw_size > 0)
+    {
+      if (sdyn == NULL)
+	bfd_put_64 (output_bfd, (bfd_vma) 0, sgot->contents);
+      else
+	bfd_put_64 (output_bfd,
+		    sdyn->output_section->vma + sdyn->output_offset,
+		    sgot->contents);
+
+      /* One entry for shared object struct ptr.  */
+      bfd_put_64 (output_bfd, (bfd_vma) 0, sgot->contents + 8);
+      /* One entry for _dl_runtime_resolve.  */
+      bfd_put_64 (output_bfd, (bfd_vma) 0, sgot->contents + 12);
+    }
+
+  elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 8;
+
+  return true;
+}
+
+static boolean
+elf_s390_object_p (abfd)
+     bfd *abfd;
+{
+  return bfd_default_set_arch_mach (abfd, bfd_arch_s390, bfd_mach_s390_esame);
+}
+
+/*
+ * Why was the hash table entry size definition changed from
+ * ARCH_SIZE/8 to 4? This breaks the 64 bit dynamic linker and
+ * this is the only reason for the s390_elf64_size_info structure.
+ */
+
+const struct elf_size_info s390_elf64_size_info =
+{
+  sizeof (Elf64_External_Ehdr),
+  sizeof (Elf64_External_Phdr),
+  sizeof (Elf64_External_Shdr),
+  sizeof (Elf64_External_Rel),
+  sizeof (Elf64_External_Rela),
+  sizeof (Elf64_External_Sym),
+  sizeof (Elf64_External_Dyn),
+  sizeof (Elf_External_Note),
+  8,            /* hash-table entry size */
+  1,            /* internal relocations per external relocations */
+  64,		/* arch_size */
+  8,		/* file_align */
+  ELFCLASS64, EV_CURRENT,
+  bfd_elf64_write_out_phdrs,
+  bfd_elf64_write_shdrs_and_ehdr,
+  bfd_elf64_write_relocs,
+  bfd_elf64_swap_symbol_out,
+  bfd_elf64_slurp_reloc_table,
+  bfd_elf64_slurp_symbol_table,
+  bfd_elf64_swap_dyn_in,
+  bfd_elf64_swap_dyn_out,
+  NULL,
+  NULL,
+  NULL,
+  NULL
+};
+
+#define TARGET_BIG_SYM	bfd_elf64_s390_vec
+#define TARGET_BIG_NAME	"elf64-s390"
+#define ELF_ARCH	bfd_arch_s390
+#define ELF_MACHINE_CODE EM_S390
+#define ELF_MACHINE_ALT1 EM_S390_OLD
+#define ELF_MAXPAGESIZE 0x1000
+
+#define elf_backend_size_info		s390_elf64_size_info
+
+#define elf_backend_can_gc_sections	1
+#define elf_backend_want_got_plt	1
+#define elf_backend_plt_readonly	1
+#define elf_backend_want_plt_sym	0
+#define elf_backend_got_header_size	24
+#define elf_backend_plt_header_size	PLT_ENTRY_SIZE
+
+#define elf_info_to_howto		elf_s390_info_to_howto
+
+#define bfd_elf64_bfd_final_link	      _bfd_elf64_gc_common_final_link
+#define bfd_elf64_bfd_is_local_label_name     elf_s390_is_local_label_name
+#define bfd_elf64_bfd_link_hash_table_create  elf_s390_link_hash_table_create
+#define bfd_elf64_bfd_reloc_type_lookup	      elf_s390_reloc_type_lookup
+
+#define elf_backend_adjust_dynamic_symbol     elf_s390_adjust_dynamic_symbol
+#define elf_backend_check_relocs	      elf_s390_check_relocs
+#define elf_backend_create_dynamic_sections   _bfd_elf_create_dynamic_sections
+#define elf_backend_finish_dynamic_sections   elf_s390_finish_dynamic_sections
+#define elf_backend_finish_dynamic_symbol     elf_s390_finish_dynamic_symbol
+#define elf_backend_gc_mark_hook	      elf_s390_gc_mark_hook
+#define elf_backend_gc_sweep_hook	      elf_s390_gc_sweep_hook
+#define elf_backend_relocate_section	      elf_s390_relocate_section
+#define elf_backend_size_dynamic_sections     elf_s390_size_dynamic_sections
+
+#define elf_backend_object_p                  elf_s390_object_p
+
+#include "elf64-target.h"
diff --git a/bfd/elf64-sparc.c b/bfd/elf64-sparc.c
index 0627913..18b6b75 100644
--- a/bfd/elf64-sparc.c
+++ b/bfd/elf64-sparc.c
@@ -1,5 +1,5 @@
 /* SPARC-specific support for 64-bit ELF
-   Copyright (C) 1993, 95, 96, 97, 98, 99, 2000
+   Copyright (C) 1993, 95, 96, 97, 98, 99, 2000, 2001
    Free Software Foundation, Inc.
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -63,6 +63,8 @@
 static void sparc64_elf_symbol_processing
   PARAMS ((bfd *, asymbol *));
 
+static boolean sparc64_elf_copy_private_bfd_data
+  PARAMS ((bfd *, bfd *));
 static boolean sparc64_elf_merge_private_bfd_data
   PARAMS ((bfd *, bfd *));
 
@@ -118,7 +120,7 @@
   HOWTO(R_SPARC_GLOB_DAT,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_GLOB_DAT",false,0,0x00000000,true),
   HOWTO(R_SPARC_JMP_SLOT,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_JMP_SLOT",false,0,0x00000000,true),
   HOWTO(R_SPARC_RELATIVE,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_RELATIVE",false,0,0x00000000,true),
-  HOWTO(R_SPARC_UA32,      0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_UA32",    false,0,0x00000000,true),
+  HOWTO(R_SPARC_UA32,      0,2,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_UA32",    false,0,0xffffffff,true),
 #ifndef SPARC64_OLD_RELOCS
   /* These aren't implemented yet.  */
   HOWTO(R_SPARC_PLT32,     0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsup_reloc, "R_SPARC_PLT32",    false,0,0x00000000,true),
@@ -994,7 +996,8 @@
   srelgot = NULL;
   sreloc = NULL;
 
-  rel_end = relocs + sec->reloc_count;
+  rel_end = relocs + elf_section_data (sec)->rel_hdr.sh_size
+		     / elf_section_data (sec)->rel_hdr.sh_entsize;
   for (rel = relocs; rel < rel_end; rel++)
     {
       unsigned long r_symndx;
@@ -1900,7 +1903,8 @@
   sgot = splt = sreloc = NULL;
 
   rel = relocs;
-  relend = relocs + input_section->reloc_count;
+  relend = relocs + elf_section_data (input_section)->rel_hdr.sh_size
+		    / elf_section_data (input_section)->rel_hdr.sh_entsize;
   for (; rel < relend; rel++)
     {
       int r_type;
@@ -2705,6 +2709,13 @@
 	  /* Mark the symbol as undefined, rather than as defined in
 	     the .plt section.  Leave the value alone.  */
 	  sym->st_shndx = SHN_UNDEF;
+	  /* If the symbol is weak, we do need to clear the value.
+	     Otherwise, the PLT entry would provide a definition for
+	     the symbol even if the symbol wasn't defined anywhere,
+	     and so the symbol would never be NULL.  */
+	  if ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR_NONWEAK)
+	      == 0)
+	    sym->st_value = 0;
 	}
     }
 
@@ -2893,6 +2904,24 @@
 
 /* Functions for dealing with the e_flags field.  */
 
+/* Copy backend specific data from one object module to another */
+static boolean
+sparc64_elf_copy_private_bfd_data (ibfd, obfd)
+     bfd *ibfd, *obfd;
+{
+  if (   bfd_get_flavour (ibfd) != bfd_target_elf_flavour
+      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
+    return true;
+
+  BFD_ASSERT (!elf_flags_init (obfd)
+              || (elf_elfheader (obfd)->e_flags
+                  == elf_elfheader (ibfd)->e_flags));
+
+  elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
+  elf_flags_init (obfd) = true;
+  return true;
+}
+
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 
@@ -3114,7 +3143,8 @@
   sparc64_elf_print_symbol_all
 #define elf_backend_output_arch_syms \
   sparc64_elf_output_arch_syms
-
+#define bfd_elf64_bfd_copy_private_bfd_data \
+  sparc64_elf_copy_private_bfd_data
 #define bfd_elf64_bfd_merge_private_bfd_data \
   sparc64_elf_merge_private_bfd_data
 
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 27a97a2..aedd2b8 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -32,26 +32,42 @@
 #define MINUS_ONE (~ (bfd_vma) 0)
 
 /* The relocation "howto" table.  Order of fields:
-   type, size, bitsize, pc_relative, complain_on_overflow, special_function,
-   name, partial_inplace, src_mask, dst_pack, pcrel_offset  */
+   type, size, bitsize, pc_relative, complain_on_overflow,
+   special_function, name, partial_inplace, src_mask, dst_pack, pcrel_offset.  */
 static reloc_howto_type x86_64_elf_howto_table[] =
 {
-  HOWTO(R_X86_64_NONE,          0,0, 0,false,0,complain_overflow_dont,    0, "R_X86_64_NONE",   false,0x00000000,0x00000000,false),
-  HOWTO(R_X86_64_64,    0,4,64,false,0,complain_overflow_bitfield,0, "R_X86_64_64",     false,MINUS_ONE ,MINUS_ONE ,false),
-  HOWTO(R_X86_64_PC32,          0,4,32,true ,0,complain_overflow_signed  ,0, "R_X86_64_PC32",   false,0xffffffff,0xffffffff,true),
-  HOWTO(R_X86_64_GOT32,         0,4,32,false,0,complain_overflow_signed  ,0, "R_X86_64_GOT32",  false,0xffffffff,0xffffffff,false),
-  HOWTO(R_X86_64_PLT32,         0,4,32,true ,0,complain_overflow_signed  ,0, "R_X86_64_PLT32",  false,0xffffffff,0xffffffff,true),
-  HOWTO(R_X86_64_COPY,     0,4,32,false,0,complain_overflow_bitfield,0, "R_X86_64_COPY",   false,0xffffffff,0xffffffff,false),
-  HOWTO(R_X86_64_GLOB_DAT, 0,4,64,false,0,complain_overflow_bitfield,0,"R_X86_64_GLOB_DAT",false,MINUS_ONE ,MINUS_ONE ,false),
-  HOWTO(R_X86_64_RELATIVE ,0,4,64,false,0,complain_overflow_bitfield,0,"R_X86_64_RELATIVE",false,MINUS_ONE ,MINUS_ONE ,false),
-  HOWTO(R_X86_64_JUMP_SLOT,0,4,64,false,0,complain_overflow_bitfield,0,"R_X86_64_JUMP_SLOT",false,MINUS_ONE,MINUS_ONE ,false),
-  HOWTO(R_X86_64_GOTPCREL, 0,4,32,true, 0,complain_overflow_signed  ,0, "R_X86_64_PCREL",  false,0xffffffff,0xffffffff,true),
-  HOWTO(R_X86_64_32,    0,4,32,false,0,complain_overflow_unsigned,0, "R_X86_64_32",     false,0xffffffff,0xffffffff,false),
-  HOWTO(R_X86_64_32S,   0,4,32,false,0,complain_overflow_signed,  0, "R_X86_64_32S",    false,0xffffffff,0xffffffff,false),
-  HOWTO(R_X86_64_16,    0,1,16,false,0,complain_overflow_bitfield,0, "R_X86_64_16",     false,0xffff    ,0xffff,    false),
-  HOWTO(R_X86_64_PC16,          0,1,16,true ,0,complain_overflow_bitfield,0, "R_X86_64_PC16",   false,0xffff    ,0xffff,    true),
-  HOWTO(R_X86_64_8,     0,0, 8,false,0,complain_overflow_signed  ,0, "R_X86_64_8",      false,0xff      ,0xff,      false),
-  HOWTO(R_X86_64_PC8,   0,0, 8,true ,0,complain_overflow_signed  ,0, "R_X86_64_PC8",    false,0xff      ,0xff,      true),
+  HOWTO(R_X86_64_NONE, 0, 0, 0, false, 0, complain_overflow_dont,
+	bfd_elf_generic_reloc, "R_X86_64_NONE",	false, 0x00000000, 0x00000000, false),
+  HOWTO(R_X86_64_64, 0, 4, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_X86_64_64", false, MINUS_ONE, MINUS_ONE, false),
+  HOWTO(R_X86_64_PC32, 0, 4, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_PC32", false, 0xffffffff, 0xffffffff, true),
+  HOWTO(R_X86_64_GOT32, 0, 4, 32, false, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_GOT32", false, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_X86_64_PLT32, 0, 4, 32, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_PLT32", false, 0xffffffff, 0xffffffff, true),
+  HOWTO(R_X86_64_COPY, 0, 4, 32, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_X86_64_COPY", false, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_X86_64_GLOB_DAT, 0, 4, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_X86_64_GLOB_DAT", false, MINUS_ONE, MINUS_ONE, false),
+  HOWTO(R_X86_64_JUMP_SLOT, 0, 4, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_X86_64_JUMP_SLOT", false, MINUS_ONE, MINUS_ONE, false),
+  HOWTO(R_X86_64_RELATIVE, 0, 4, 64, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_X86_64_RELATIVE", false, MINUS_ONE, MINUS_ONE, false),
+  HOWTO(R_X86_64_GOTPCREL, 0, 4, 32, true,0 , complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_GOTPCREL", false, 0xffffffff, 0xffffffff, true),
+  HOWTO(R_X86_64_32, 0, 4, 32, false, 0, complain_overflow_unsigned,
+	bfd_elf_generic_reloc, "R_X86_64_32", false, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_X86_64_32S, 0, 4, 32, false, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_32S", false, 0xffffffff, 0xffffffff, false),
+  HOWTO(R_X86_64_16, 0, 1, 16, false, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_X86_64_16", false, 0xffff, 0xffff, false),
+  HOWTO(R_X86_64_PC16,0, 1, 16, true, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_X86_64_PC16", false, 0xffff, 0xffff, true),
+  HOWTO(R_X86_64_8, 0, 0, 8, false, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_8", false, 0xff, 0xff, false),
+  HOWTO(R_X86_64_PC8, 0, 0, 8, true, 0, complain_overflow_signed,
+	bfd_elf_generic_reloc, "R_X86_64_PC8", false, 0xff, 0xff, true)
 };
 
 /* Map BFD relocs to the x86_64 elf relocs.  */
@@ -97,7 +113,7 @@
   PARAMS ((bfd *, struct bfd_link_info *));
 static boolean elf64_x86_64_relocate_section
   PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-         Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
+	 Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
 static boolean elf64_x86_64_finish_dynamic_symbol
   PARAMS ((bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
 	   Elf_Internal_Sym *sym));
@@ -137,12 +153,12 @@
   BFD_ASSERT (r_type == cache_ptr->howto->type);
 }
 
-/* Functions for the x86-64 ELF linker.  */
+/* Functions for the x86-64 ELF linker.	 */
 
-/* The name of the dynamic interpreter.  This is put in the .interp
+/* The name of the dynamic interpreter.	 This is put in the .interp
    section.  */
 
-#define ELF_DYNAMIC_INTERPRETER "/lib/libd64.so.1"
+#define ELF_DYNAMIC_INTERPRETER "/lib/ld64.so.1"
 
 /* The size in bytes of an entry in the global offset table.  */
 
@@ -159,7 +175,7 @@
 {
   0xff, 0xb3, 8, 0, 0, 0,	/* pushq GOT+8(%rip) */
   0xff, 0xa3, 16, 0, 0, 0,	/* jmp GOT+16(%rip) */
-  0, 0, 0, 0			/* pad out to 16 bytes.  */
+  0, 0, 0, 0			/* pad out to 16 bytes.	 */
 };
 
 /* Subsequent entries in a procedure linkage table look like this.  */
@@ -167,7 +183,7 @@
 static const bfd_byte elf64_x86_64_plt_entry[PLT_ENTRY_SIZE] =
 {
   0xff, 0xa3,	/* jmp *name@GOTPC(%rip) */
-  0, 0, 0, 0,	/* replaced with offset to this symbol in .got.  */
+  0, 0, 0, 0,	/* replaced with offset to this symbol in .got.	 */
   0x68,	/* pushq immediate */
   0, 0, 0, 0,	/* replaced with index into relocation table.  */
   0xe9,		/* jmp relative */
@@ -175,10 +191,10 @@
 };
 
 /* The x86-64 linker needs to keep track of the number of relocs that
-   it decides to copy in check_relocs for each symbol.  This is so
+   it decides to copy in check_relocs for each symbol.	This is so
    that it can discard PC relative relocs if it doesn't need them when
    linking with -Bsymbolic.  We store the information in a field
-   extending the regular ELF linker hash table.  */
+   extending the regular ELF linker hash table.	 */
 
 /* This structure keeps track of the number of PC relative relocs we
    have copied for a given symbol.  */
@@ -205,7 +221,8 @@
 
 /* x86-64  ELF linker hash table.  */
 
-struct elf64_x86_64_link_hash_table {
+struct elf64_x86_64_link_hash_table
+{
   struct elf_link_hash_table root;
 };
 
@@ -227,7 +244,7 @@
 #define elf64_x86_64_hash_table(p) \
   ((struct elf64_x86_64_link_hash_table *) ((p)->hash))
 
-/* Create an entry in an x86-64 ELF linker hash table.  */
+/* Create an entry in an x86-64 ELF linker hash table.	*/
 
 static struct bfd_hash_entry *
 elf64_x86_64_link_hash_newfunc (entry, table, string)
@@ -239,7 +256,7 @@
     (struct elf64_x86_64_link_hash_entry *) entry;
 
   /* Allocate the structure if it has not already been allocated by a
-     subclass.  */
+     subclass.	*/
   if (ret == (struct elf64_x86_64_link_hash_entry *) NULL)
     ret = ((struct elf64_x86_64_link_hash_entry *)
 	   bfd_hash_allocate (table,
@@ -349,8 +366,9 @@
 
       switch (ELF64_R_TYPE (rel->r_info))
 	{
+	case R_X86_64_GOTPCREL:
 	case R_X86_64_GOT32:
-	  /* This symbol requires a global offset table entry.  */
+	  /* This symbol requires a global offset table entry.	*/
 
 	  if (sgot == NULL)
 	    {
@@ -372,7 +390,7 @@
 						   | SEC_IN_MEMORY
 						   | SEC_LINKER_CREATED
 						   | SEC_READONLY))
-		      || ! bfd_set_section_alignment (dynobj, srelgot, 2))
+		      || ! bfd_set_section_alignment (dynobj, srelgot, 3))
 		    return false;
 		}
 	    }
@@ -431,14 +449,14 @@
 
 	case R_X86_64_PLT32:
 	  /* This symbol requires a procedure linkage table entry.  We
-             actually build the entry in adjust_dynamic_symbol,
-             because this might be a case of linking PIC code which is
-             never referenced by a dynamic object, in which case we
-             don't need to generate a procedure linkage table entry
-             after all.  */
+	     actually build the entry in adjust_dynamic_symbol,
+	     because this might be a case of linking PIC code which is
+	     never referenced by a dynamic object, in which case we
+	     don't need to generate a procedure linkage table entry
+	     after all.	 */
 
 	  /* If this is a local symbol, we resolve it directly without
-             creating a procedure linkage table entry.  */
+	     creating a procedure linkage table entry.	*/
 	  if (h == NULL)
 	    continue;
 
@@ -463,7 +481,7 @@
 	     into the shared library.  However, if we are linking with
 	     -Bsymbolic, we do not need to copy a reloc against a
 	     global symbol which is defined in an object we are
-	     including in the link (i.e., DEF_REGULAR is set).  At
+	     including in the link (i.e., DEF_REGULAR is set).	At
 	     this point we have not seen all the input files, so it is
 	     possible that DEF_REGULAR is not set now but will be set
 	     later (it is never cleared).  We account for that
@@ -557,7 +575,7 @@
 }
 
 /* Return the section that should be marked against GC for a given
-   relocation.  */
+   relocation.	*/
 
 static asection *
 elf64_x86_64_gc_mark_hook (abfd, info, rel, h, sym)
@@ -596,7 +614,7 @@
   return NULL;
 }
 
-/* Update the got entry reference counts for the section being removed.  */
+/* Update the got entry reference counts for the section being removed.	 */
 
 static boolean
 elf64_x86_64_gc_sweep_hook (abfd, info, sec, relocs)
@@ -682,7 +700,7 @@
    regular object.  The current definition is in some section of the
    dynamic object, but we're not including those sections.  We have to
    change the definition to something the rest of the link can
-   understand.  */
+   understand.	*/
 
 static boolean
 elf64_x86_64_adjust_dynamic_symbol (info, h)
@@ -712,21 +730,16 @@
   if (h->type == STT_FUNC
       || (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
     {
-      if (! elf_hash_table (info)->dynamic_sections_created)
+      if ((! info->shared
+	   && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
+	   && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) == 0)
+	  || (info->shared && h->plt.refcount <= 0))
 	{
-	  /* FIXME: These are the sparc64 comment and then the i386 comment.
-	     How we need to deal with this and why remains to be seen.  */
-	  /* This case can occur if we saw a WPLT30 reloc in an input
-             file, but none of the input files were dynamic objects.
-             In such a case, we don't actually need to build a
-             procedure linkage table, and we can just do a WDISP30
-             reloc instead.  */
 	  /* This case can occur if we saw a PLT32 reloc in an input
 	     file, but the symbol was never referred to by a dynamic
 	     object, or if all references were garbage collected.  In
 	     such a case, we don't actually need to build a procedure
 	     linkage table, and we can just do a PC32 reloc instead.  */
-	  /* i386 code: */
 	  h->plt.offset = (bfd_vma) -1;
 	  h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
 	  return true;
@@ -749,7 +762,7 @@
 
       /* If this symbol is not defined in a regular file, and we are
 	 not generating a shared library, then set the symbol to this
-	 location in the .plt.  This is required to make function
+	 location in the .plt.	This is required to make function
 	 pointers compare as equal between the normal executable and
 	 the shared library.  */
       if (! info->shared
@@ -764,6 +777,12 @@
       /* Make room for this entry.  */
       s->_raw_size += PLT_ENTRY_SIZE;
 
+      /* We also need to make an entry in the .got.plt section, which
+	 will be placed in the .got section by the linker script.  */
+      s = bfd_get_section_by_name (dynobj, ".got.plt");
+      BFD_ASSERT (s != NULL);
+      s->_raw_size += GOT_ENTRY_SIZE;
+
       /* We also need to make an entry in the .rela.plt section.  */
       s = bfd_get_section_by_name (dynobj, ".rela.plt");
       BFD_ASSERT (s != NULL);
@@ -774,7 +793,7 @@
 
   /* If this is a weak symbol, and there is a real definition, the
      processor independent code will have arranged for us to see the
-     real definition first, and we can just use the same value.  */
+     real definition first, and we can just use the same value.	 */
   if (h->weakdef != NULL)
     {
       BFD_ASSERT (h->weakdef->root.type == bfd_link_hash_defined
@@ -785,12 +804,12 @@
     }
 
   /* This is a reference to a symbol defined by a dynamic object which
-     is not a function.  */
+     is not a function.	 */
 
   /* If we are creating a shared library, we must presume that the
      only references to the symbol are via the global offset table.
      For such cases we need not do anything here; the relocations will
-     be handled correctly by relocate_section.  */
+     be handled correctly by relocate_section.	*/
   if (info->shared)
     return true;
 
@@ -800,7 +819,7 @@
     return true;
 
   /* We must allocate the symbol in our .dynbss section, which will
-     become part of the .bss section of the executable.  There will be
+     become part of the .bss section of the executable.	 There will be
      an entry for this symbol in the .dynsym section.  The dynamic
      object will contain position independent code, so all references
      from the dynamic object to this symbol will go through the global
@@ -827,7 +846,7 @@
     }
 
   /* We need to figure out the alignment required for this symbol.  I
-     have no idea how ELF linkers handle this.  16-bytes is the size
+     have no idea how ELF linkers handle this.	16-bytes is the size
      of the largest type that requires hard alignment -- long double.  */
   /* FIXME: This is VERY ugly. Should be fixed for all architectures using
      this construct.  */
@@ -883,10 +902,10 @@
   else
     {
       /* We may have created entries in the .rela.got section.
-         However, if we are not creating the dynamic sections, we will
-         not actually use these entries.  Reset the size of .rela.got,
-         which will cause it to get stripped from the output file
-         below.  */
+	 However, if we are not creating the dynamic sections, we will
+	 not actually use these entries.  Reset the size of .rela.got,
+	 which will cause it to get stripped from the output file
+	 below.	 */
       s = bfd_get_section_by_name (dynobj, ".rela.got");
       if (s != NULL)
 	s->_raw_size = 0;
@@ -923,7 +942,7 @@
 	  if (s->_raw_size == 0)
 	    {
 	      /* Strip this section if we don't need it; see the
-                 comment below.  */
+		 comment below.	 */
 	      strip = true;
 	    }
 	  else
@@ -952,7 +971,7 @@
 	      asection *target;
 
 	      /* Remember whether there are any reloc sections other
-                 than .rela.plt.  */
+		 than .rela.plt.  */
 	      if (strcmp (name, ".rela.plt") != 0)
 		{
 		  const char *outname;
@@ -1005,7 +1024,7 @@
       /* Add some entries to the .dynamic section.  We fill in the
 	 values later, in elf64_x86_64_finish_dynamic_sections, but we
 	 must add the entries now so that we get the correct size for
-	 the .dynamic section.  The DT_DEBUG entry is filled in by the
+	 the .dynamic section.	The DT_DEBUG entry is filled in by the
 	 dynamic linker and used by the debugger.  */
       if (! info->shared)
 	{
@@ -1015,10 +1034,9 @@
 
       if (plt)
 	{
-	  /* FIXME: Are all these needed?  */
 	  if (! bfd_elf64_add_dynamic_entry (info, DT_PLTGOT, 0)
 	      || ! bfd_elf64_add_dynamic_entry (info, DT_PLTRELSZ, 0)
-	      || ! bfd_elf64_add_dynamic_entry (info, DT_PLTREL, DT_REL)
+	      || ! bfd_elf64_add_dynamic_entry (info, DT_PLTREL, DT_RELA)
 	      || ! bfd_elf64_add_dynamic_entry (info, DT_JMPREL, 0))
 	    return false;
 	}
@@ -1078,7 +1096,7 @@
 
 static boolean
 elf64_x86_64_relocate_section (output_bfd, info, input_bfd, input_section,
-                             contents, relocs, local_syms, local_sections)
+			     contents, relocs, local_syms, local_sections)
      bfd *output_bfd;
      struct bfd_link_info *info;
      bfd *input_bfd;
@@ -1154,7 +1172,7 @@
 	  continue;
 	}
 
-      /* This is a final link.  */
+      /* This is a final link.	*/
       h = NULL;
       sym = NULL;
       sec = NULL;
@@ -1227,15 +1245,15 @@
 		{
 		  /* This is actually a static link, or it is a -Bsymbolic
 		     link and the symbol is defined locally, or the symbol
-		     was forced to be local because of a version file.  We
+		     was forced to be local because of a version file.	We
 		     must initialize this entry in the global offset table.
 		     Since the offset must always be a multiple of 8, we
 		     use the least significant bit to record whether we
 		     have initialized it already.
 
 		     When doing a dynamic link, we create a .rela.got
-		     relocation entry to initialize the value.  This is
-		     done in the finish_dynamic_symbol routine.  */
+		     relocation entry to initialize the value.	This is
+		     done in the finish_dynamic_symbol routine.	 */
 		  if ((off & 1) != 0)
 		    off &= ~1;
 		  else
@@ -1257,15 +1275,15 @@
 	      off = local_got_offsets[r_symndx];
 
 	      /* The offset must always be a multiple of 8.  We use
-                 the least significant bit to record whether we have
-                 already generated the necessary reloc.  */
+		 the least significant bit to record whether we have
+		 already generated the necessary reloc.	 */
 	      if ((off & 1) != 0)
 		off &= ~1;
 	      else
 		{
 		  bfd_put_64 (output_bfd, relocation, sgot->contents + off);
 
-      if (info->shared)
+		  if (info->shared)
 		    {
 		      asection *srelgot;
 		      Elf_Internal_Rela outrel;
@@ -1298,14 +1316,84 @@
 	case R_X86_64_GOTPCREL:
 	  /* Use global offset table as symbol value.  */
 
-	  if (sgot == NULL)
+	  BFD_ASSERT (sgot != NULL);
+	  if (h != NULL)
 	    {
-	      sgot = bfd_get_section_by_name (dynobj, ".got");
-	      BFD_ASSERT (sgot != NULL);
+	      bfd_vma off = h->got.offset;
+	      BFD_ASSERT (off != (bfd_vma) -1);
+
+	      if (! elf_hash_table (info)->dynamic_sections_created
+		  || (info->shared
+		      && (info->symbolic || h->dynindx == -1)
+		      && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
+		{
+		  /* This is actually a static link, or it is a -Bsymbolic
+		     link and the symbol is defined locally, or the symbol
+		     was forced to be local because of a version file.	We
+		     must initialize this entry in the global offset table.
+		     Since the offset must always be a multiple of 8, we
+		     use the least significant bit to record whether we
+		     have initialized it already.
+
+		     When doing a dynamic link, we create a .rela.got
+		     relocation entry to initialize the value.	This is
+		     done in the finish_dynamic_symbol routine.	 */
+		  if ((off & 1) != 0)
+		    off &= ~1;
+		  else
+		    {
+		      bfd_put_64 (output_bfd, relocation,
+				  sgot->contents + off);
+		      h->got.offset |= 1;
+		    }
+		}
+	      relocation = sgot->output_offset + off;
 	    }
+	  else
+	    {
+	      bfd_vma off;
 
-	  relocation = sgot->output_section->vma + (h->got.offset & ~1);
+	      BFD_ASSERT (local_got_offsets != NULL
+			  && local_got_offsets[r_symndx] != (bfd_vma) -1);
 
+	      off = local_got_offsets[r_symndx];
+
+	      /* The offset must always be a multiple of 8.  We use
+		 the least significant bit to record whether we have
+		 already generated the necessary reloc.	 */
+	      if ((off & 1) != 0)
+		off &= ~1;
+	      else
+		{
+		  bfd_put_64 (output_bfd, relocation, sgot->contents + off);
+
+		  if (info->shared)
+		    {
+		      asection *srelgot;
+		      Elf_Internal_Rela outrel;
+
+		      /* We need to generate a R_X86_64_RELATIVE reloc
+			 for the dynamic linker.  */
+		      srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+		      BFD_ASSERT (srelgot != NULL);
+
+		      outrel.r_offset = (sgot->output_section->vma
+					 + sgot->output_offset
+					 + off);
+		      outrel.r_info = ELF64_R_INFO (0, R_X86_64_RELATIVE);
+		      outrel.r_addend = relocation;
+		      bfd_elf64_swap_reloca_out (output_bfd, &outrel,
+						 (((Elf64_External_Rela *)
+						   srelgot->contents)
+						  + srelgot->reloc_count));
+		      ++srelgot->reloc_count;
+		    }
+
+		  local_got_offsets[r_symndx] |= 1;
+		}
+
+	      relocation = sgot->output_section->vma + off;
+	    }
 	  break;
 
 	case R_X86_64_PLT32:
@@ -1313,15 +1401,15 @@
 	     procedure linkage table.  */
 
 	  /* Resolve a PLT32 reloc against a local symbol directly,
-             without using the procedure linkage table.  */
+	     without using the procedure linkage table.	 */
 	  if (h == NULL)
 	    break;
 
 	  if (h->plt.offset == (bfd_vma) -1 || splt == NULL)
 	    {
 	      /* We didn't make a PLT entry for this symbol.  This
-                 happens when statically linking PIC code, or when
-                 using -Bsymbolic.  */
+		 happens when statically linking PIC code, or when
+		 using -Bsymbolic.  */
 	      break;
 	    }
 
@@ -1337,7 +1425,7 @@
 	case R_X86_64_PC16:
 	case R_X86_64_PC32:
 	  /* FIXME: The abi says the linker should make sure the value is
-	     the same when it's zeroextended to 64 bit.  */
+	     the same when it's zeroextended to 64 bit.	 */
 	  if (info->shared
 	      && (input_section->flags & SEC_ALLOC) != 0
 	      && ((r_type != R_X86_64_PC8 && r_type != R_X86_64_PC16
@@ -1353,7 +1441,7 @@
 
 	      /* When generating a shared object, these relocations
 		 are copied into the output file to be resolved at run
-		 time.  */
+		 time.	*/
 
 	      if (sreloc == NULL)
 		{
@@ -1412,7 +1500,7 @@
 	      else
 		{
 		  /* h->dynindx may be -1 if this symbol was marked to
-                     become local.  */
+		     become local.  */
 		  if (h == NULL
 		      || ((info->symbolic || h->dynindx == -1)
 			  && (h->elf_link_hash_flags
@@ -1515,7 +1603,7 @@
       Elf_Internal_Rela rela;
 
       /* This symbol has an entry in the procedure linkage table.  Set
-	 it up.  */
+	 it up.	 */
 
       BFD_ASSERT (h->dynindx != -1);
 
@@ -1531,7 +1619,7 @@
       plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1;
 
       /* Get the offset into the .got table of the entry that
-	 corresponds to this function.  Each .got entry is GOT_ENTRY_SIZE
+	 corresponds to this function.	Each .got entry is GOT_ENTRY_SIZE
 	 bytes. The first three are reserved.  */
       got_offset = (plt_index + 3) * GOT_ENTRY_SIZE;
 
@@ -1548,7 +1636,7 @@
       bfd_put_64 (output_bfd, - (h->plt.offset + PLT_ENTRY_SIZE),
 		  splt->contents + h->plt.offset + 12);
 
-      /* Fill in the entry in the global offset table.  */
+      /* Fill in the entry in the global offset table.	*/
       bfd_put_64 (output_bfd, (splt->output_section->vma + splt->output_offset
 			       + h->plt.offset + 6),
 		  sgot->contents + got_offset);
@@ -1566,8 +1654,15 @@
       if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
 	{
 	  /* Mark the symbol as undefined, rather than as defined in
-	     the .plt section.  Leave the value alone.  */
+	     the .plt section.	Leave the value alone.	*/
 	  sym->st_shndx = SHN_UNDEF;
+	  /* If the symbol is weak, we do need to clear the value.
+	     Otherwise, the PLT entry would provide a definition for
+	     the symbol even if the symbol wasn't defined anywhere,
+	     and so the symbol would never be NULL.  */
+	  if ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR_NONWEAK)
+	      == 0)
+	    sym->st_value = 0;
 	}
     }
 
@@ -1625,8 +1720,7 @@
       asection *splt;
       Elf64_External_Dyn *dyncon, *dynconend;
 
-      splt = bfd_get_section_by_name (dynobj, ".plt");
-      BFD_ASSERT (splt != NULL && sdyn != NULL);
+      BFD_ASSERT (sdyn != NULL);
 
       dyncon = (Elf64_External_Dyn *) sdyn->contents;
       dynconend = (Elf64_External_Dyn *) (sdyn->contents + sdyn->_raw_size);
@@ -1659,14 +1753,14 @@
 	    case DT_RELASZ:
 	      /* FIXME: This comment and code is from elf64-alpha.c:  */
 	      /* My interpretation of the TIS v1.1 ELF document indicates
-		 that RELASZ should not include JMPREL.  This is not what
+		 that RELASZ should not include JMPREL.	 This is not what
 		 the rest of the BFD does.  It is, however, what the
 		 glibc ld.so wants.  Do this fixup here until we found
 		 out who is right.  */
 	      s = bfd_get_section_by_name (output_bfd, ".rela.plt");
 	      if (s)
 		{
-		  /* Subtract JMPREL size from RELASZ.  */
+		  /* Subtract JMPREL size from RELASZ.	*/
 		  dyn.d_un.d_val -=
 		    (s->_cooked_size ? s->_cooked_size : s->_raw_size);
 		}
@@ -1684,9 +1778,11 @@
 	}
 
       /* Initialize the contents of the .plt section.  */
+      splt = bfd_get_section_by_name (dynobj, ".plt");
+      BFD_ASSERT (splt != NULL);
       if (splt->_raw_size > 0)
 	{
-	    memcpy (splt->contents, elf64_x86_64_plt0_entry, PLT_ENTRY_SIZE);
+	  memcpy (splt->contents, elf64_x86_64_plt0_entry, PLT_ENTRY_SIZE);
 	}
 
       elf_section_data (splt->output_section)->this_hdr.sh_entsize =
@@ -1695,7 +1791,7 @@
 
   /* Set the first entry in the global offset table to the address of
      the dynamic section.  */
-  sgot = bfd_get_section_by_name (dynobj, ".got");
+  sgot = bfd_get_section_by_name (dynobj, ".got.plt");
   BFD_ASSERT (sgot != NULL);
   if (sgot->_raw_size > 0)
     {
@@ -1716,12 +1812,49 @@
   return true;
 }
 
+/*
+ * Why was the hash table entry size definition changed from
+ * ARCH_SIZE/8 to 4? This breaks the 64 bit dynamic linker and
+ * this is the only reason for the elf64_x86_64_size_info structure.
+ */
+
+const struct elf_size_info elf64_86_64_size_info =
+{
+  sizeof (Elf64_External_Ehdr),
+  sizeof (Elf64_External_Phdr),
+  sizeof (Elf64_External_Shdr),
+  sizeof (Elf64_External_Rel),
+  sizeof (Elf64_External_Rela),
+  sizeof (Elf64_External_Sym),
+  sizeof (Elf64_External_Dyn),
+  sizeof (Elf_External_Note),
+  8,		/* hash-table entry size */
+  1,		/* internal relocations per external relocations */
+  64,		/* arch_size */
+  8,		/* file_align */
+  ELFCLASS64, EV_CURRENT,
+  bfd_elf64_write_out_phdrs,
+  bfd_elf64_write_shdrs_and_ehdr,
+  bfd_elf64_write_relocs,
+  bfd_elf64_swap_symbol_out,
+  bfd_elf64_slurp_reloc_table,
+  bfd_elf64_slurp_symbol_table,
+  bfd_elf64_swap_dyn_in,
+  bfd_elf64_swap_dyn_out,
+  NULL,
+  NULL,
+  NULL,
+  NULL
+};
+
 #define TARGET_LITTLE_SYM		    bfd_elf64_x86_64_vec
 #define TARGET_LITTLE_NAME		    "elf64-x86-64"
 #define ELF_ARCH			    bfd_arch_i386
 #define ELF_MACHINE_CODE		    EM_X86_64
 #define ELF_MAXPAGESIZE			    0x100000
 
+#define elf_backend_size_info		    elf64_86_64_size_info
+
 #define elf_backend_can_gc_sections	    1
 #define elf_backend_want_got_plt	    1
 #define elf_backend_plt_readonly	    1
@@ -1730,13 +1863,11 @@
 #define elf_backend_plt_header_size	    PLT_ENTRY_SIZE
 
 #define elf_info_to_howto		    elf64_x86_64_info_to_howto
-#define elf_backend_object_p		    elf64_x86_64_elf_object_p
-#define elf_backend_relocate_section	    elf64_x86_64_relocate_section
 
 #define bfd_elf64_bfd_final_link	    _bfd_elf64_gc_common_final_link
 #define bfd_elf64_bfd_link_hash_table_create \
   elf64_x86_64_link_hash_table_create
-#define bfd_elf64_bfd_reloc_type_lookup     elf64_x86_64_reloc_type_lookup
+#define bfd_elf64_bfd_reloc_type_lookup	    elf64_x86_64_reloc_type_lookup
 
 #define elf_backend_adjust_dynamic_symbol   elf64_x86_64_adjust_dynamic_symbol
 #define elf_backend_check_relocs	    elf64_x86_64_check_relocs
@@ -1748,5 +1879,6 @@
 #define elf_backend_gc_sweep_hook	    elf64_x86_64_gc_sweep_hook
 #define elf_backend_relocate_section	    elf64_x86_64_relocate_section
 #define elf_backend_size_dynamic_sections   elf64_x86_64_size_dynamic_sections
+#define elf_backend_object_p		    elf64_x86_64_elf_object_p
 
 #include "elf64-target.h"
diff --git a/bfd/elflink.h b/bfd/elflink.h
index d3b44e8..8605c73 100644
--- a/bfd/elflink.h
+++ b/bfd/elflink.h
@@ -80,9 +80,9 @@
     }
 }
 
-/* Return true iff this is a non-common definition of a symbol.  */
+/* Return true iff this is a non-common, definition of a non-function symbol.  */
 static boolean
-is_global_symbol_definition (abfd, sym)
+is_global_data_symbol_definition (abfd, sym)
      bfd * abfd ATTRIBUTE_UNUSED;
      Elf_Internal_Sym * sym;
 {
@@ -91,6 +91,10 @@
       && ELF_ST_BIND (sym->st_info) < STB_LOOS)
     return false;
 
+  /* Function symbols do not count.  */
+  if (ELF_ST_TYPE (sym->st_info) == STT_FUNC)
+    return false;
+
   /* If the section is undefined, then so is the symbol.  */
   if (sym->st_shndx == SHN_UNDEF)
     return false;
@@ -116,7 +120,7 @@
 }
 
 /* Search the symbol table of the archive element of the archive ABFD
-   whoes archove map contains a mention of SYMDEF, and determine if
+   whoes archive map contains a mention of SYMDEF, and determine if
    the symbol is defined in this element.  */
 static boolean
 elf_link_is_defined_archive_symbol (abfd, symdef)
@@ -201,7 +205,7 @@
 
       if (strcmp (name, symdef->name) == 0)
 	{
-	  result = is_global_symbol_definition (abfd, & sym);
+	  result = is_global_data_symbol_definition (abfd, & sym);
 	  break;
 	}
     }
@@ -4431,7 +4435,7 @@
   /* sh_link is set in assign_section_numbers.  */
   /* sh_info is set below.  */
   /* sh_offset is set just below.  */
-  symtab_hdr->sh_addralign = 4;  /* FIXME: system dependent?  */
+  symtab_hdr->sh_addralign = bed->s->file_align;
 
   off = elf_tdata (abfd)->next_file_pos;
   off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, true);
@@ -5511,14 +5515,24 @@
 	    }
 	}
 
+      name = NULL;
       if (isym->st_shndx == SHN_UNDEF)
-	isec = bfd_und_section_ptr;
+        {
+	  isec = bfd_und_section_ptr;
+	  name = isec->name;
+	}
       else if (isym->st_shndx > 0 && isym->st_shndx < SHN_LORESERVE)
 	isec = section_from_elf_index (input_bfd, isym->st_shndx);
       else if (isym->st_shndx == SHN_ABS)
-	isec = bfd_abs_section_ptr;
+	{
+	  isec = bfd_abs_section_ptr;
+	  name = isec->name;
+	}
       else if (isym->st_shndx == SHN_COMMON)
-	isec = bfd_com_section_ptr;
+	{
+	  isec = bfd_com_section_ptr;
+	  name = isec->name;
+	}
       else
 	{
 	  /* Who knows?  */
@@ -5537,7 +5551,18 @@
 
 	  /* Save away all section symbol values.  */
 	  if (isec != NULL)
-	    isec->symbol->value = isym->st_value;
+	    {
+	      if (name)
+		{
+		  if (isec->symbol->value != isym->st_value)
+		    (*_bfd_error_handler)
+		      (_("%s: invalid section symbol index 0x%x (%s) ingored"),
+		       bfd_get_filename (input_bfd), isym->st_shndx,
+		       name);
+		  continue;
+		}
+	      isec->symbol->value = isym->st_value;
+	    }
 
 	  /* If this is a discarded link-once section symbol, update
 	     it's value to that of the kept section symbol.  The
diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c
index 6751e4a..77d2022 100644
--- a/bfd/elfxx-ia64.c
+++ b/bfd/elfxx-ia64.c
@@ -1,5 +1,5 @@
 /* IA-64 support for 64-bit ELF
-   Copyright 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
    Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -157,14 +157,26 @@
 static boolean elfNN_ia64_relax_section
   PARAMS((bfd *abfd, asection *sec, struct bfd_link_info *link_info,
 	  boolean *again));
+static boolean is_unwind_section_name
+  PARAMS ((const char *));
 static boolean elfNN_ia64_section_from_shdr
   PARAMS ((bfd *, ElfNN_Internal_Shdr *, char *));
 static boolean elfNN_ia64_fake_sections
   PARAMS ((bfd *abfd, ElfNN_Internal_Shdr *hdr, asection *sec));
+static void elfNN_ia64_final_write_processing
+  PARAMS ((bfd *abfd, boolean linker));
 static boolean elfNN_ia64_add_symbol_hook
   PARAMS ((bfd *abfd, struct bfd_link_info *info, const Elf_Internal_Sym *sym,
 	   const char **namep, flagword *flagsp, asection **secp,
 	   bfd_vma *valp));
+static boolean elfNN_ia64_aix_vec 
+  PARAMS ((const bfd_target *vec));
+static boolean elfNN_ia64_aix_add_symbol_hook
+  PARAMS ((bfd *abfd, struct bfd_link_info *info, const Elf_Internal_Sym *sym,
+	   const char **namep, flagword *flagsp, asection **secp,
+	   bfd_vma *valp));
+static boolean elfNN_ia64_aix_link_add_symbols
+  PARAMS ((bfd *abfd, struct bfd_link_info *info));
 static int elfNN_ia64_additional_program_headers
   PARAMS ((bfd *abfd));
 static boolean elfNN_ia64_is_local_label_name
@@ -554,6 +566,9 @@
 };
 
 #define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
+#define AIX_DYNAMIC_INTERPRETER "/usr/lib/ia64l64/libc.so.1"
+#define DYNAMIC_INTERPRETER(abfd) \
+  (elfNN_ia64_aix_vec (abfd->xvec) ? AIX_DYNAMIC_INTERPRETER : ELF_DYNAMIC_INTERPRETER)
 
 /* Select out of range branch fixup type.  Note that Itanium does
    not support brl, and so it gets emulated by the kernel.  */
@@ -900,6 +915,20 @@
   return false;
 }
 
+/* Return true if NAME is an unwind table section name.  */
+
+static inline boolean
+is_unwind_section_name (name)
+	const char *name;
+{
+  size_t len1, len2;
+
+  len1 = sizeof (ELF_STRING_ia64_unwind) - 1;
+  len2 = sizeof (ELF_STRING_ia64_unwind_info) - 1;
+  return (strncmp (name, ELF_STRING_ia64_unwind, len1) == 0
+	  && strncmp (name, ELF_STRING_ia64_unwind_info, len2) != 0);
+}
+
 /* Handle an IA-64 specific section when reading an object file.  This
    is called when elfcode.h finds a section with an unknown type.  */
 
@@ -919,8 +948,6 @@
   switch (hdr->sh_type)
     {
     case SHT_IA_64_UNWIND:
-      if (strcmp (name, ELF_STRING_ia64_unwind) != 0)
-	return false;
       break;
 
     case SHT_IA_64_EXT:
@@ -968,8 +995,13 @@
 
   name = bfd_get_section_name (abfd, sec);
 
-  if (strcmp (name, ELF_STRING_ia64_unwind) == 0)
-    hdr->sh_type = SHT_IA_64_UNWIND;
+  if (is_unwind_section_name (name))
+    {
+      /* We don't have the sections numbered at this point, so sh_info
+	 is set later, in elfNN_ia64_final_write_processing.  */
+      hdr->sh_type = SHT_IA_64_UNWIND;
+      hdr->sh_flags |= SHF_LINK_ORDER;
+    }
   else if (strcmp (name, ELF_STRING_ia64_archext) == 0)
     hdr->sh_type = SHT_IA_64_EXT;
   else if (strcmp (name, ".reloc") == 0)
@@ -999,6 +1031,58 @@
   return true;
 }
 
+/* The final processing done just before writing out an IA-64 ELF
+   object file.  */
+
+static void
+elfNN_ia64_final_write_processing (abfd, linker)
+     bfd *abfd;
+     boolean linker ATTRIBUTE_UNUSED;
+{
+  Elf_Internal_Shdr *hdr;
+  const char *sname;
+  asection *text_sect, *s;
+  size_t len;
+
+  for (s = abfd->sections; s; s = s->next)
+    {
+      hdr = &elf_section_data (s)->this_hdr;
+      switch (hdr->sh_type)
+	{
+	case SHT_IA_64_UNWIND:
+	  /* See comments in gas/config/tc-ia64.c:dot_endp on why we
+	     have to do this.  */
+	  sname = bfd_get_section_name (abfd, s);
+	  len = sizeof (ELF_STRING_ia64_unwind) - 1;
+	  if (sname && strncmp (sname, ELF_STRING_ia64_unwind, len) == 0)
+	    {
+	      sname += len;
+
+	      if (sname[0] == '\0')
+		/* .IA_64.unwind -> .text */
+		text_sect = bfd_get_section_by_name (abfd, ".text");
+	      else
+		/* .IA_64.unwindFOO -> FOO */
+		text_sect = bfd_get_section_by_name (abfd, sname);
+	    }
+	  else
+	    /* last resort: fall back on .text */
+	    text_sect = bfd_get_section_by_name (abfd, ".text");
+
+	  if (text_sect)
+	    {
+	      /* The IA-64 processor-specific ABI requires setting
+		 sh_link to the unwind section, whereas HP-UX requires
+		 sh_info to do so.  For maximum compatibility, we'll
+		 set both for now... */
+	      hdr->sh_link = elf_section_data (text_sect)->this_idx;
+	      hdr->sh_info = elf_section_data (text_sect)->this_idx;
+	    }
+	  break;
+	}
+    }
+}
+
 /* Hook called by the linker routine which adds symbols from an object
    file.  We use it to put .comm items in .sbss, and not .bss.  */
 
@@ -1038,6 +1122,113 @@
   return true;
 }
 
+static boolean
+elfNN_ia64_aix_vec (const bfd_target *vec)
+{
+  extern const bfd_target bfd_elfNN_ia64_aix_little_vec;
+  extern const bfd_target bfd_elfNN_ia64_aix_big_vec;
+
+  return (/**/vec == & bfd_elfNN_ia64_aix_little_vec 
+	  ||  vec == & bfd_elfNN_ia64_aix_big_vec);
+}
+
+/* Hook called by the linker routine which adds symbols from an object
+   file.  We use it to handle OS-specific symbols.  */
+
+static boolean
+elfNN_ia64_aix_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
+     bfd *abfd;
+     struct bfd_link_info *info;
+     const Elf_Internal_Sym *sym;
+     const char **namep;
+     flagword *flagsp;
+     asection **secp;
+     bfd_vma *valp;
+{
+  if (strcmp (*namep, "__GLOB_DATA_PTR") == 0)
+    {
+      /* Define __GLOB_DATA_PTR.  This is expected to be a linker-defined
+	 symbol by the Aix C runtime startup code.  Define the symbol
+	 when it is encountered.  IBM sez no one else should use it b/c it is
+	 undocumented.  */
+      struct elf_link_hash_entry *h;
+
+      h = (struct elf_link_hash_entry *) bfd_link_hash_lookup (info->hash, *namep, false, false, false);
+      if (h == NULL) 
+	{
+	  struct elf_backend_data *bed;
+	  struct elfNN_ia64_link_hash_table *ia64_info;
+
+	  bed = get_elf_backend_data (abfd);
+	  ia64_info = elfNN_ia64_hash_table (info);
+	  
+	  if (!(_bfd_generic_link_add_one_symbol
+		(info, abfd, *namep, BSF_GLOBAL, ia64_info->got_sec,
+		 bed->got_symbol_offset, (const char *) NULL, false,
+		 bed->collect, (struct bfd_link_hash_entry **) &h)))
+	    return false;
+	  
+	  h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
+	  h->type = STT_OBJECT;
+	  
+	  if (info->shared
+	      && ! _bfd_elf_link_record_dynamic_symbol (info, h))
+	    return false;
+	}
+
+      return true;
+    }
+  else if (sym->st_shndx == SHN_LOOS)
+    {
+      int i;
+      
+      /* SHN_AIX_SYSCALL: Treat this as any other symbol.  The special symbol
+	 is only relevant when compiling code for extended system calls.
+	 Replace the "special" section with .text, if possible. */
+      /* FIXME need to determine the proper section instead of defaulting to
+	 .text.  */
+      for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
+	{
+	  asection * sec = bfd_section_from_elf_index (abfd, i);
+	  
+	  if (sec && strcmp (sec->name, ".text") == 0)
+	    {
+	      *secp = sec;
+	      break;
+	    }
+	}
+
+      if (*secp == NULL)
+	*secp = bfd_abs_section_ptr;
+      
+      *valp = sym->st_size;
+      
+      return true;
+    }
+  else 
+    {
+      return elfNN_ia64_add_symbol_hook (abfd, info, sym, 
+					 namep, flagsp, secp, valp);
+    }
+}
+
+boolean
+elfNN_ia64_aix_link_add_symbols (abfd, info)
+     bfd *abfd;
+     struct bfd_link_info *info;
+{
+  /* Make sure dynamic sections are always created.  */
+  if (! elf_hash_table (info)->dynamic_sections_created
+      && abfd->xvec == info->hash->creator)
+    {
+      if (! bfd_elfNN_link_create_dynamic_sections (abfd, info))
+	return false;
+    }
+
+  /* Now do the standard call.  */
+  return bfd_elfNN_bfd_link_add_symbols (abfd, info);
+}
+
 /* Return the number of additional phdrs we will need.  */
 
 static int
@@ -1052,10 +1243,10 @@
   if (s && (s->flags & SEC_LOAD))
     ++ret;
 
-  /* See if we need a PT_IA_64_UNWIND segment.  */
-  s = bfd_get_section_by_name (abfd, ELF_STRING_ia64_unwind);
-  if (s && (s->flags & SEC_LOAD))
-    ++ret;
+  /* Count how many PT_IA_64_UNWIND segments we need.  */
+  for (s = abfd->sections; s; s = s->next)
+    if (is_unwind_section_name(s->name) && (s->flags & SEC_LOAD))
+      ++ret;
 
   return ret;
 }
@@ -1065,6 +1256,7 @@
      bfd *abfd;
 {
   struct elf_segment_map *m, **pm;
+  Elf_Internal_Shdr *hdr;
   asection *s;
 
   /* If we need a PT_IA_64_ARCHEXT segment, it must come before
@@ -1097,29 +1289,36 @@
 	}
     }
 
-  /* Install the PT_IA_64_UNWIND segment, if needed.  */
-  s = bfd_get_section_by_name (abfd, ELF_STRING_ia64_unwind);
-  if (s && (s->flags & SEC_LOAD))
+  /* Install PT_IA_64_UNWIND segments, if needed.  */
+  for (s = abfd->sections; s; s = s->next)
     {
-      for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
-	if (m->p_type == PT_IA_64_UNWIND)
-	  break;
-      if (m == NULL)
+      hdr = &elf_section_data (s)->this_hdr;
+      if (hdr->sh_type != SHT_IA_64_UNWIND)
+	continue;
+
+      if (s && (s->flags & SEC_LOAD))
 	{
-	  m = (struct elf_segment_map *) bfd_zalloc (abfd, sizeof *m);
+	  for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
+	    if (m->p_type == PT_IA_64_UNWIND && m->sections[0] == s)
+	      break;
+
 	  if (m == NULL)
-	    return false;
+	    {
+	      m = (struct elf_segment_map *) bfd_zalloc (abfd, sizeof *m);
+	      if (m == NULL)
+		return false;
 
-	  m->p_type = PT_IA_64_UNWIND;
-	  m->count = 1;
-	  m->sections[0] = s;
-	  m->next = NULL;
+	      m->p_type = PT_IA_64_UNWIND;
+	      m->count = 1;
+	      m->sections[0] = s;
+	      m->next = NULL;
 
-	  /* We want to put it last.  */
-	  pm = &elf_tdata (abfd)->segment_map;
-	  while (*pm != NULL)
-	    pm = &(*pm)->next;
-	  *pm = m;
+	      /* We want to put it last.  */
+	      pm = &elf_tdata (abfd)->segment_map;
+	      while (*pm != NULL)
+		pm = &(*pm)->next;
+	      *pm = m;
+	    }
 	}
     }
 
@@ -1181,8 +1380,12 @@
 
   if (h->dynindx == -1)
     return false;
-  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
-    return false;
+  switch (ELF_ST_VISIBILITY (h->other))
+    {
+    case STV_INTERNAL:
+    case STV_HIDDEN:
+      return false;
+    }
 
   if (h->root.type == bfd_link_hash_undefweak
       || h->root.type == bfd_link_hash_defweak)
@@ -1776,7 +1979,8 @@
       maybe_dynamic = false;
       if (h && ((info->shared && ! info->symbolic)
 		|| ! (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)
-		|| h->root.type == bfd_link_hash_defweak))
+		|| h->root.type == bfd_link_hash_defweak
+		|| elfNN_ia64_aix_vec (abfd->xvec)))
 	maybe_dynamic = true;
 
       need_entry = 0;
@@ -1800,7 +2004,9 @@
 	case R_IA64_FPTR32LSB:
 	case R_IA64_FPTR64MSB:
 	case R_IA64_FPTR64LSB:
-	  if (info->shared || h)
+	  if (elfNN_ia64_aix_vec (abfd->xvec))
+	    need_entry = NEED_FPTR | NEED_DYNREL;
+	  else if (info->shared || h)
 	    need_entry = NEED_FPTR | NEED_DYNREL;
 	  else
 	    need_entry = NEED_FPTR;
@@ -1849,7 +2055,12 @@
 	case R_IA64_DIR64MSB:
 	case R_IA64_DIR64LSB:
 	  /* Shared objects will always need at least a REL relocation.  */
-	  if (info->shared || maybe_dynamic)
+	  if (info->shared || maybe_dynamic
+	      /* On AIX, we always need a relocation, but make sure
+		 __GLOB_DATA_PTR doesn't get an entry.  */ 
+	      || (elfNN_ia64_aix_vec (abfd->xvec)
+		  && (!h || strcmp (h->root.root.string, 
+				    "__GLOB_DATA_PTR") != 0)))
 	    need_entry = NEED_DYNREL;
 	  dynrel_type = R_IA64_DIR64LSB;
 	  break;
@@ -1913,7 +2124,9 @@
 	  /* FPTRs for shared libraries are allocated by the dynamic
 	     linker.  Make sure this local symbol will appear in the
 	     dynamic symbol table.  */
-	  if (!h && info->shared)
+	  if (!h && (info->shared
+		     /* AIX also needs one */
+		     || elfNN_ia64_aix_vec (abfd->xvec)))
 	    {
 	      if (! (_bfd_elfNN_link_record_local_dynamic_symbol
 		     (info, abfd, r_symndx)))
@@ -1969,7 +2182,8 @@
 
   if (dyn_i->want_got
       && ! dyn_i->want_fptr
-      && elfNN_ia64_dynamic_symbol_p (dyn_i->h, x->info))
+      && (elfNN_ia64_dynamic_symbol_p (dyn_i->h, x->info)
+	  || elfNN_ia64_aix_vec (x->info->hash->creator)))
      {
        dyn_i->got_offset = x->ofs;
        x->ofs += 8;
@@ -1988,7 +2202,8 @@
 
   if (dyn_i->want_got
       && dyn_i->want_fptr
-      && elfNN_ia64_dynamic_symbol_p (dyn_i->h, x->info))
+      && (elfNN_ia64_dynamic_symbol_p (dyn_i->h, x->info)
+	  || elfNN_ia64_aix_vec (x->info->hash->creator)))
     {
       dyn_i->got_offset = x->ofs;
       x->ofs += 8;
@@ -2006,7 +2221,8 @@
   struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
 
   if (dyn_i->want_got
-      && ! elfNN_ia64_dynamic_symbol_p (dyn_i->h, x->info))
+      && ! (elfNN_ia64_dynamic_symbol_p (dyn_i->h, x->info)
+	    || elfNN_ia64_aix_vec (x->info->hash->creator)))
     {
       dyn_i->got_offset = x->ofs;
       x->ofs += 8;
@@ -2052,7 +2268,12 @@
 	       || h->root.type == bfd_link_hash_warning)
 	  h = (struct elf_link_hash_entry *) h->root.u.i.link;
 
-      if (x->info->shared)
+      if (x->info->shared
+	  /* AIX needs an FPTR in this case. */
+	  || (elfNN_ia64_aix_vec (x->info->hash->creator)
+	      && (!h
+		  || h->root.type == bfd_link_hash_defined
+		  || h->root.type == bfd_link_hash_defweak)))
 	{
 	  if (h && h->dynindx == -1)
 	    {
@@ -2175,7 +2396,8 @@
   boolean dynamic_symbol, shared;
 
   ia64_info = elfNN_ia64_hash_table (x->info);
-  dynamic_symbol = elfNN_ia64_dynamic_symbol_p (dyn_i->h, x->info);
+  dynamic_symbol = elfNN_ia64_dynamic_symbol_p (dyn_i->h, x->info)
+    || elfNN_ia64_aix_vec (x->info->hash->creator);
   shared = x->info->shared;
 
   /* Take care of the normal data relocations.  */
@@ -2292,8 +2514,8 @@
     {
       sec = bfd_get_section_by_name (dynobj, ".interp");
       BFD_ASSERT (sec != NULL);
-      sec->contents = (bfd_byte *) ELF_DYNAMIC_INTERPRETER;
-      sec->_raw_size = strlen (ELF_DYNAMIC_INTERPRETER) + 1;
+      sec->contents = (bfd_byte *) DYNAMIC_INTERPRETER (output_bfd);
+      sec->_raw_size = strlen (DYNAMIC_INTERPRETER (output_bfd)) + 1;
     }
 
   /* Allocate the GOT entries.  */
@@ -2799,6 +3021,7 @@
       /* Install a dynamic relocation if needed.  */
       if (info->shared
           || elfNN_ia64_dynamic_symbol_p (dyn_i->h, info)
+	  || elfNN_ia64_aix_vec (abfd->xvec)
 	  || (dynindx != -1 && dyn_r_type == R_IA64_FPTR64LSB))
 	{
 	  if (dynindx == -1)
@@ -3072,6 +3295,13 @@
 	}
 
       _bfd_set_gp_value (abfd, gp_val);
+
+      if (gp)
+	{
+	  gp->root.type = bfd_link_hash_defined;
+	  gp->root.u.def.value = gp_val;
+	  gp->root.u.def.section = bfd_abs_section_ptr;
+	}
     }
 
   /* If we're producing a final executable, we need to sort the contents
@@ -3281,7 +3511,13 @@
 	case R_IA64_DIR64MSB:
 	case R_IA64_DIR64LSB:
 	  /* Install a dynamic relocation for this reloc.  */
-	  if ((dynamic_symbol_p || info->shared)
+	  if ((dynamic_symbol_p || info->shared
+	       || (elfNN_ia64_aix_vec (info->hash->creator)
+		   /* We want REL relocation for _GLOB_DATA_PTR, which would
+		      otherwise be an IMM64, which isn't handled below.  The
+		      symbol comes from the C runtime.  */
+		   && (!h || 
+		       strcmp (h->root.root.string, "__GLOB_DATA_PTR") != 0)))
 	      && (input_section->flags & SEC_ALLOC) != 0)
 	    {
 	      unsigned int dyn_r_type;
@@ -3333,6 +3569,8 @@
 		  addend = value;
 		}
 
+	      if (elfNN_ia64_aix_vec (info->hash->creator))
+		rel->r_addend = value;
 	      elfNN_ia64_install_dyn_reloc (output_bfd, info, input_section,
 					    srel, rel->r_offset, dyn_r_type,
 					    dynindx, addend);
@@ -3472,7 +3710,8 @@
 	case R_IA64_PCREL64MSB:
 	case R_IA64_PCREL64LSB:
 	  /* Install a dynamic relocation for this reloc.  */
-	  if (dynamic_symbol_p)
+	  if (dynamic_symbol_p
+	      || elfNN_ia64_aix_vec (info->hash->creator))
 	    {
 	      BFD_ASSERT (srel != NULL);
 
@@ -4065,6 +4304,8 @@
 	elfNN_ia64_section_flags
 #define elf_backend_fake_sections \
 	elfNN_ia64_fake_sections
+#define elf_backend_final_write_processing \
+	elfNN_ia64_final_write_processing
 #define elf_backend_add_symbol_hook \
 	elfNN_ia64_add_symbol_hook
 #define elf_backend_additional_program_headers \
@@ -4124,3 +4365,24 @@
 #define elf_backend_hide_symbol		elfNN_ia64_hash_hide_symbol
 
 #include "elfNN-target.h"
+
+/* AIX-specific vectors.  */
+
+#undef  TARGET_LITTLE_SYM
+#define TARGET_LITTLE_SYM		bfd_elfNN_ia64_aix_little_vec
+#undef  TARGET_LITTLE_NAME
+#define TARGET_LITTLE_NAME		"elfNN-ia64-aix-little"
+#undef  TARGET_BIG_SYM
+#define TARGET_BIG_SYM			bfd_elfNN_ia64_aix_big_vec
+#undef  TARGET_BIG_NAME
+#define TARGET_BIG_NAME			"elfNN-ia64-aix-big"
+
+#undef  elf_backend_add_symbol_hook
+#define elf_backend_add_symbol_hook 	elfNN_ia64_aix_add_symbol_hook
+
+#undef  bfd_elfNN_bfd_link_add_symbols
+#define bfd_elfNN_bfd_link_add_symbols 	elfNN_ia64_aix_link_add_symbols
+
+#define elfNN_bed elfNN_ia64_aix_bed
+
+#include "elfNN-target.h"
diff --git a/bfd/irix-core.c b/bfd/irix-core.c
index 006e6a7..026e1e0 100644
--- a/bfd/irix-core.c
+++ b/bfd/irix-core.c
@@ -165,8 +165,9 @@
 		     idg->i_len + idf->i_len + ids->i_len,
 		     0,
 		     idg->i_offset);
-
+ 
   /* OK, we believe you.  You're a core file (sure, sure).  */
+  bfd_default_set_arch_mach (abfd, bfd_arch_mips, 0);
 
   return abfd->xvec;
 }
diff --git a/bfd/libaout.h b/bfd/libaout.h
index 1682428..818b10c 100644
--- a/bfd/libaout.h
+++ b/bfd/libaout.h
@@ -33,22 +33,39 @@
 #if ARCH_SIZE==64
 #define GET_WORD bfd_h_get_64
 #define GET_SWORD bfd_h_get_signed_64
+#define GET_MAGIC bfd_h_get_32
 #define PUT_WORD bfd_h_put_64
+#define PUT_MAGIC bfd_h_put_32
 #ifndef NAME
 #define NAME(x,y) CAT3(x,_64_,y)
 #endif
 #define JNAME(x) CAT(x,_64)
 #define BYTES_IN_WORD 8
+#else
+#if ARCH_SIZE==16
+#define GET_WORD bfd_h_get_16
+#define GET_SWORD bfd_h_get_signed_16
+#define GET_MAGIC bfd_h_get_16
+#define PUT_WORD bfd_h_put_16
+#define PUT_MAGIC bfd_h_put_16
+#ifndef NAME
+#define NAME(x,y) CAT3(x,_16_,y)
+#endif
+#define JNAME(x) CAT(x,_16)
+#define BYTES_IN_WORD 2
 #else /* ARCH_SIZE == 32 */
 #define GET_WORD bfd_h_get_32
 #define GET_SWORD bfd_h_get_signed_32
+#define GET_MAGIC bfd_h_get_32
 #define PUT_WORD bfd_h_put_32
+#define PUT_MAGIC bfd_h_put_32
 #ifndef NAME
 #define NAME(x,y) CAT3(x,_32_,y)
 #endif
 #define JNAME(x) CAT(x,_32)
 #define BYTES_IN_WORD 4
 #endif /* ARCH_SIZE==32 */
+#endif /* ARCH_SIZE==64 */
 
 /* Declare at file level, since used in parameter lists, which have
    weird scope.  */
@@ -567,6 +584,8 @@
 
 /* A.out uses the generic versions of these routines... */
 
+#define	aout_16_get_section_contents	_bfd_generic_get_section_contents
+
 #define	aout_32_get_section_contents	_bfd_generic_get_section_contents
 
 #define	aout_64_get_section_contents	_bfd_generic_get_section_contents
diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
index fb5f210..28ade8c 100644
--- a/bfd/libbfd-in.h
+++ b/bfd/libbfd-in.h
@@ -521,7 +521,7 @@
 
 /* List of supported target vectors, and the default vector (if
    bfd_default_vector[0] is NULL, there is no default).  */
-extern const bfd_target * const bfd_target_vector[];
+extern const bfd_target * const *bfd_target_vector;
 extern const bfd_target *bfd_default_vector[];
 
 /* Functions shared by the ECOFF and MIPS ELF backends, which have no
diff --git a/bfd/libbfd.c b/bfd/libbfd.c
index 8b846f0..6a9d466 100644
--- a/bfd/libbfd.c
+++ b/bfd/libbfd.c
@@ -959,7 +959,7 @@
      register bfd_byte *addr;
 {
   addr[0] = (bfd_byte) (data >> 8);
-  addr[1] = (bfd_byte )data;
+  addr[1] = (bfd_byte) data;
 }
 
 void
@@ -967,7 +967,7 @@
      bfd_vma data;
      register bfd_byte *addr;
 {
-  addr[0] = (bfd_byte )data;
+  addr[0] = (bfd_byte) data;
   addr[1] = (bfd_byte) (data >> 8);
 }
 
@@ -1126,7 +1126,7 @@
         addr[0] = (bfd_byte) (data >> 24);
         addr[1] = (bfd_byte) (data >> 16);
         addr[2] = (bfd_byte) (data >>  8);
-        addr[3] = (bfd_byte)data;
+        addr[3] = (bfd_byte) data;
 }
 
 void
@@ -1134,7 +1134,7 @@
      bfd_vma data;
      register bfd_byte *addr;
 {
-        addr[0] = (bfd_byte)data;
+        addr[0] = (bfd_byte) data;
         addr[1] = (bfd_byte) (data >>  8);
         addr[2] = (bfd_byte) (data >> 16);
         addr[3] = (bfd_byte) (data >> 24);
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index d6e3939..4ed1e76 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -521,7 +521,7 @@
 
 /* List of supported target vectors, and the default vector (if
    bfd_default_vector[0] is NULL, there is no default).  */
-extern const bfd_target * const bfd_target_vector[];
+extern const bfd_target * const *bfd_target_vector;
 extern const bfd_target *bfd_default_vector[];
 
 /* Functions shared by the ECOFF and MIPS ELF backends, which have no
@@ -735,6 +735,8 @@
   "BFD_RELOC_NS32K_DISP_8_PCREL",
   "BFD_RELOC_NS32K_DISP_16_PCREL",
   "BFD_RELOC_NS32K_DISP_32_PCREL",
+  "BFD_RELOC_PDP11_DISP_8_PCREL",
+  "BFD_RELOC_PDP11_DISP_6_PCREL",
   "BFD_RELOC_PJ_CODE_HI16",
   "BFD_RELOC_PJ_CODE_LO16",
   "BFD_RELOC_PJ_CODE_DIR16",
@@ -910,6 +912,23 @@
   "BFD_RELOC_AVR_HI8_LDI_PM_NEG",
   "BFD_RELOC_AVR_HH8_LDI_PM_NEG",
   "BFD_RELOC_AVR_CALL",
+  "BFD_RELOC_390_12",
+  "BFD_RELOC_390_GOT12",
+  "BFD_RELOC_390_PLT32",
+  "BFD_RELOC_390_COPY",
+  "BFD_RELOC_390_GLOB_DAT",
+  "BFD_RELOC_390_JMP_SLOT",
+  "BFD_RELOC_390_RELATIVE",
+  "BFD_RELOC_390_GOTPC",
+  "BFD_RELOC_390_GOT16",
+  "BFD_RELOC_390_PC16DBL",
+  "BFD_RELOC_390_PLT16DBL",
+  "BFD_RELOC_390_PC32DBL",
+  "BFD_RELOC_390_PLT32DBL",
+  "BFD_RELOC_390_GOTPCDBL",
+  "BFD_RELOC_390_GOT64",
+  "BFD_RELOC_390_PLT64",
+  "BFD_RELOC_390_GOTENT",
   "BFD_RELOC_VTABLE_INHERIT",
   "BFD_RELOC_VTABLE_ENTRY",
   "BFD_RELOC_IA64_IMM14",
diff --git a/bfd/libcoff-in.h b/bfd/libcoff-in.h
index e5f5f9e..fe48bbe 100644
--- a/bfd/libcoff-in.h
+++ b/bfd/libcoff-in.h
@@ -1,5 +1,5 @@
 /* BFD COFF object file private structure.
-   Copyright (C) 1990, 91, 92, 93, 94, 95, 96, 97, 98, 1999
+   Copyright (C) 1990, 91, 92, 93, 94, 95, 96, 97, 98, 1999, 2001
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -121,6 +121,8 @@
   int has_reloc_section;
   boolean (*in_reloc_p) PARAMS((bfd *, reloc_howto_type *));
   flagword real_flags;
+  int target_subsystem;
+  boolean force_minimum_alignment;
 } pe_data_type;
 
 #define pe_data(bfd)		((bfd)->tdata.pe_obj_data)
diff --git a/bfd/libcoff.h b/bfd/libcoff.h
index 5115538..dcbbbcf 100644
--- a/bfd/libcoff.h
+++ b/bfd/libcoff.h
@@ -1,5 +1,5 @@
 /* BFD COFF object file private structure.
-   Copyright (C) 1990, 91, 92, 93, 94, 95, 96, 97, 98, 1999
+   Copyright (C) 1990, 91, 92, 93, 94, 95, 96, 97, 98, 1999, 2001
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -121,6 +121,8 @@
   int has_reloc_section;
   boolean (*in_reloc_p) PARAMS((bfd *, reloc_howto_type *));
   flagword real_flags;
+  int target_subsystem;
+  boolean force_minimum_alignment;
 } pe_data_type;
 
 #define pe_data(bfd)		((bfd)->tdata.pe_obj_data)
diff --git a/bfd/libpei.h b/bfd/libpei.h
index db47e37..e112441 100644
--- a/bfd/libpei.h
+++ b/bfd/libpei.h
@@ -1,5 +1,5 @@
 /* Support for the generic parts of PE/PEI; common header information.
-   Copyright 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+   Copyright 1995, 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
    Written by Cygnus Solutions.
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -192,7 +192,7 @@
 #define PUT_SCNHDR_LNNOPTR bfd_h_put_32
 #endif
 
-#ifdef COFF_WITH_PEP64
+#ifdef COFF_WITH_pep
 
 #define GET_OPTHDR_IMAGE_BASE bfd_h_get_64
 #define PUT_OPTHDR_IMAGE_BASE bfd_h_put_64
@@ -206,7 +206,25 @@
 #define PUT_OPTHDR_SIZE_OF_HEAP_COMMIT bfd_h_put_64
 #define GET_PDATA_ENTRY bfd_get_64
 
-#else /* !COFF_WITH_PEP64 */
+#define _bfd_XX_bfd_copy_private_bfd_data_common	_bfd_pep_bfd_copy_private_bfd_data_common
+#define _bfd_XX_bfd_copy_private_section_data		_bfd_pep_bfd_copy_private_section_data
+#define _bfd_XX_get_symbol_info				_bfd_pep_get_symbol_info
+#define _bfd_XX_only_swap_filehdr_out			_bfd_pep_only_swap_filehdr_out
+#define _bfd_XX_print_private_bfd_data_common		_bfd_pep_print_private_bfd_data_common
+#define _bfd_XXi_final_link_postscript			_bfd_pepi_final_link_postscript
+#define _bfd_XXi_final_link_postscript			_bfd_pepi_final_link_postscript
+#define _bfd_XXi_only_swap_filehdr_out			_bfd_pepi_only_swap_filehdr_out
+#define _bfd_XXi_swap_aouthdr_in			_bfd_pepi_swap_aouthdr_in
+#define _bfd_XXi_swap_aouthdr_out			_bfd_pepi_swap_aouthdr_out
+#define _bfd_XXi_swap_aux_in				_bfd_pepi_swap_aux_in
+#define _bfd_XXi_swap_aux_out				_bfd_pepi_swap_aux_out
+#define _bfd_XXi_swap_lineno_in				_bfd_pepi_swap_lineno_in
+#define _bfd_XXi_swap_lineno_out			_bfd_pepi_swap_lineno_out
+#define _bfd_XXi_swap_scnhdr_out			_bfd_pepi_swap_scnhdr_out
+#define _bfd_XXi_swap_sym_in				_bfd_pepi_swap_sym_in
+#define _bfd_XXi_swap_sym_out				_bfd_pepi_swap_sym_out
+
+#else /* !COFF_WITH_pep */
 
 #define GET_OPTHDR_IMAGE_BASE bfd_h_get_32
 #define PUT_OPTHDR_IMAGE_BASE bfd_h_put_32
@@ -220,7 +238,25 @@
 #define PUT_OPTHDR_SIZE_OF_HEAP_COMMIT bfd_h_put_32
 #define GET_PDATA_ENTRY bfd_get_32
 
-#endif /* !COFF_WITH_PEP64 */
+#define _bfd_XX_bfd_copy_private_bfd_data_common	_bfd_pe_bfd_copy_private_bfd_data_common
+#define _bfd_XX_bfd_copy_private_section_data		_bfd_pe_bfd_copy_private_section_data
+#define _bfd_XX_get_symbol_info				_bfd_pe_get_symbol_info
+#define _bfd_XX_only_swap_filehdr_out			_bfd_pe_only_swap_filehdr_out
+#define _bfd_XX_print_private_bfd_data_common		_bfd_pe_print_private_bfd_data_common
+#define _bfd_XXi_final_link_postscript			_bfd_pei_final_link_postscript
+#define _bfd_XXi_final_link_postscript			_bfd_pei_final_link_postscript
+#define _bfd_XXi_only_swap_filehdr_out			_bfd_pei_only_swap_filehdr_out
+#define _bfd_XXi_swap_aouthdr_in			_bfd_pei_swap_aouthdr_in
+#define _bfd_XXi_swap_aouthdr_out			_bfd_pei_swap_aouthdr_out
+#define _bfd_XXi_swap_aux_in				_bfd_pei_swap_aux_in
+#define _bfd_XXi_swap_aux_out				_bfd_pei_swap_aux_out
+#define _bfd_XXi_swap_lineno_in				_bfd_pei_swap_lineno_in
+#define _bfd_XXi_swap_lineno_out			_bfd_pei_swap_lineno_out
+#define _bfd_XXi_swap_scnhdr_out			_bfd_pei_swap_scnhdr_out
+#define _bfd_XXi_swap_sym_in				_bfd_pei_swap_sym_in
+#define _bfd_XXi_swap_sym_out				_bfd_pei_swap_sym_out
+
+#endif /* !COFF_WITH_pep */
 
 /* These functions are architecture dependent, and are in peicode.h:
    coff_swap_reloc_in
@@ -234,51 +270,51 @@
    implementations architecture types, and actually appear in
    peigen.c.  */
 
-void _bfd_pei_swap_sym_in PARAMS ((bfd*, PTR, PTR));
-#define coff_swap_sym_in _bfd_pei_swap_sym_in
+void _bfd_XXi_swap_sym_in PARAMS ((bfd*, PTR, PTR));
+#define coff_swap_sym_in _bfd_XXi_swap_sym_in
 
-unsigned int _bfd_pei_swap_sym_out PARAMS ((bfd*, PTR, PTR));
-#define coff_swap_sym_out _bfd_pei_swap_sym_out
+unsigned int _bfd_XXi_swap_sym_out PARAMS ((bfd*, PTR, PTR));
+#define coff_swap_sym_out _bfd_XXi_swap_sym_out
 
-void _bfd_pei_swap_aux_in PARAMS ((bfd *, PTR, int, int, int, int, PTR));
-#define coff_swap_aux_in _bfd_pei_swap_aux_in
+void _bfd_XXi_swap_aux_in PARAMS ((bfd *, PTR, int, int, int, int, PTR));
+#define coff_swap_aux_in _bfd_XXi_swap_aux_in
 
-unsigned int _bfd_pei_swap_aux_out \
+unsigned int _bfd_XXi_swap_aux_out \
   PARAMS ((bfd *, PTR, int, int, int, int, PTR));
-#define coff_swap_aux_out _bfd_pei_swap_aux_out
+#define coff_swap_aux_out _bfd_XXi_swap_aux_out
 
-void _bfd_pei_swap_lineno_in PARAMS ((bfd*, PTR, PTR));
-#define coff_swap_lineno_in _bfd_pei_swap_lineno_in
+void _bfd_XXi_swap_lineno_in PARAMS ((bfd*, PTR, PTR));
+#define coff_swap_lineno_in _bfd_XXi_swap_lineno_in
 
-unsigned int _bfd_pei_swap_lineno_out PARAMS ((bfd*, PTR, PTR));
-#define coff_swap_lineno_out _bfd_pei_swap_lineno_out
+unsigned int _bfd_XXi_swap_lineno_out PARAMS ((bfd*, PTR, PTR));
+#define coff_swap_lineno_out _bfd_XXi_swap_lineno_out
 
-void _bfd_pei_swap_aouthdr_in PARAMS ((bfd*, PTR, PTR));
-#define coff_swap_aouthdr_in _bfd_pei_swap_aouthdr_in
+void _bfd_XXi_swap_aouthdr_in PARAMS ((bfd*, PTR, PTR));
+#define coff_swap_aouthdr_in _bfd_XXi_swap_aouthdr_in
 
-unsigned int _bfd_pei_swap_aouthdr_out PARAMS ((bfd *, PTR, PTR));
-#define coff_swap_aouthdr_out _bfd_pei_swap_aouthdr_out
+unsigned int _bfd_XXi_swap_aouthdr_out PARAMS ((bfd *, PTR, PTR));
+#define coff_swap_aouthdr_out _bfd_XXi_swap_aouthdr_out
 
-unsigned int _bfd_pei_swap_scnhdr_out PARAMS ((bfd *, PTR, PTR));
-#define coff_swap_scnhdr_out _bfd_pei_swap_scnhdr_out
+unsigned int _bfd_XXi_swap_scnhdr_out PARAMS ((bfd *, PTR, PTR));
+#define coff_swap_scnhdr_out _bfd_XXi_swap_scnhdr_out
 
-boolean _bfd_pe_print_private_bfd_data_common PARAMS ((bfd *, PTR));
+boolean _bfd_XX_print_private_bfd_data_common PARAMS ((bfd *, PTR));
 
-boolean _bfd_pe_bfd_copy_private_bfd_data_common PARAMS ((bfd *, bfd *));
+boolean _bfd_XX_bfd_copy_private_bfd_data_common PARAMS ((bfd *, bfd *));
 
-void _bfd_pe_get_symbol_info PARAMS ((bfd *, asymbol *, symbol_info *));
+void _bfd_XX_get_symbol_info PARAMS ((bfd *, asymbol *, symbol_info *));
 
-boolean _bfd_pei_final_link_postscript
+boolean _bfd_XXi_final_link_postscript
   PARAMS ((bfd *, struct coff_final_link_info *));
 
 #ifndef coff_final_link_postscript
-#define coff_final_link_postscript _bfd_pei_final_link_postscript
+#define coff_final_link_postscript _bfd_XXi_final_link_postscript
 #endif
 /* The following are needed only for ONE of pe or pei, but don't
    otherwise vary; peicode.h fixes up ifdefs but we provide the
    prototype.  */
 
-unsigned int _bfd_pe_only_swap_filehdr_out PARAMS ((bfd*, PTR, PTR));
-unsigned int _bfd_pei_only_swap_filehdr_out PARAMS ((bfd*, PTR, PTR));
-boolean _bfd_pe_bfd_copy_private_section_data
+unsigned int _bfd_XX_only_swap_filehdr_out PARAMS ((bfd*, PTR, PTR));
+unsigned int _bfd_XXi_only_swap_filehdr_out PARAMS ((bfd*, PTR, PTR));
+boolean _bfd_XX_bfd_copy_private_section_data
   PARAMS ((bfd *, asection *, bfd *, asection *));
diff --git a/bfd/pdp11.c b/bfd/pdp11.c
new file mode 100644
index 0000000..4f7e460
--- /dev/null
+++ b/bfd/pdp11.c
@@ -0,0 +1,5022 @@
+/* BFD back-end for PDP-11 a.out binaries.
+   Copyright (C) 2001 Free Software Foundation, Inc.
+
+This file is part of BFD, the Binary File Descriptor library.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+/* BFD backend for PDP-11, running 2.11BSD in particular.
+
+   This file was hacked up by looking hard at the existing vaxnetbsd
+   back end and the header files in 2.11BSD.
+
+   TODO
+   * support for V7 file formats
+   * support for overlay object files (see 2.11 a.out(5))
+   * support for old and very old archives
+   (see 2.11 ar(5), historical section)
+   
+   Search for TODO to find other areas needing more work.  */
+
+#define	BYTES_IN_WORD	2
+#define	BYTES_IN_LONG	4
+#define ARCH_SIZE	16
+#undef TARGET_IS_BIG_ENDIAN_P
+
+#define	TARGET_PAGE_SIZE	1024
+#define	SEGMENT__SIZE	TARGET_PAGE_SIZE
+
+#define	DEFAULT_ARCH	bfd_arch_pdp11
+#define	DEFAULT_MID 	M_PDP11
+
+#define MY(OP) CAT(pdp11_aout_,OP)
+/* This needs to start with a.out so GDB knows it is an a.out variant.  */
+#define TARGETNAME "a.out-pdp11"
+
+/* This is the normal load address for executables.  */
+#define TEXT_START_ADDR		0
+
+/* The header is not included in the text segment.  */
+#define N_HEADER_IN_TEXT(x)	0
+
+/* There are no shared libraries.  */
+#define N_SHARED_LIB(x) 	0
+
+/* There is no flags field.  */
+#define N_FLAGS(exec)		0
+
+#define N_SET_FLAGS(exec, flags) do { } while (0)
+#define N_BADMAG(x) (((x).a_info != OMAGIC) && \
+                     ((x).a_info != NMAGIC) && \
+                     ((x).a_info != A_MAGIC3) && \
+                     ((x).a_info != A_MAGIC4) && \
+                     ((x).a_info != A_MAGIC5) && \
+                     ((x).a_info != A_MAGIC6))
+
+#include "bfd.h"
+
+#define external_exec pdp11_external_exec
+struct pdp11_external_exec
+  {
+    bfd_byte e_info[2];	/* magic number				*/
+    bfd_byte e_text[2];	/* length of text section in bytes	*/
+    bfd_byte e_data[2];	/* length of data section in bytes	*/
+    bfd_byte e_bss[2];	/* length of bss area in bytes 		*/
+    bfd_byte e_syms[2];	/* length of symbol table in bytes 	*/
+    bfd_byte e_entry[2];	/* start address 			*/
+    bfd_byte e_unused[2];	/* not used				*/
+    bfd_byte e_flag[2];	/* relocation info stripped		*/
+    bfd_byte e_relocatable; /* ugly hack */
+  };
+
+#define	EXEC_BYTES_SIZE	(8 * 2)
+
+#define	A_MAGIC1	OMAGIC
+#define OMAGIC		0407	/* ...object file or impure executable.  */
+#define	A_MAGIC2	NMAGIC
+#define NMAGIC		0410	/* pure executable.  */
+#define ZMAGIC		0413	/* demand-paged executable.  */
+#define	A_MAGIC3	0411	/* separated I&D */
+#define	A_MAGIC4	0405	/* overlay */
+#define	A_MAGIC5	0430	/* auto-overlay (nonseparate) */
+#define	A_MAGIC6	0431	/* auto-overlay (separate) */
+#define QMAGIC		0
+#define BMAGIC		0
+
+#define A_FLAG_RELOC_STRIPPED	0x0001
+
+#define external_nlist pdp11_external_nlist
+struct pdp11_external_nlist
+  {
+    bfd_byte e_unused[2];	/* unused */
+    bfd_byte e_strx[2];		/* index into string table of name */
+    bfd_byte e_type[1];		/* type of symbol */
+    bfd_byte e_ovly[1];		/* overlay number */
+    bfd_byte e_value[2];	/* value of symbol */
+  };
+
+#define	EXTERNAL_NLIST_SIZE	8
+
+#define N_TXTOFF(x)	(EXEC_BYTES_SIZE)
+#define N_DATOFF(x)	(N_TXTOFF(x) + (x).a_text)
+#define N_TRELOFF(x)	(N_DATOFF(x) + (x).a_data)
+#define N_DRELOFF(x)	(N_TRELOFF(x) + (x).a_trsize)
+#define N_SYMOFF(x)	(N_DRELOFF(x) + (x).a_drsize)
+#define N_STROFF(x)	(N_SYMOFF(x) + (x).a_syms)
+
+#define WRITE_HEADERS(abfd, execp) pdp11_aout_write_headers (abfd, execp)
+
+#include "sysdep.h"
+#include "libbfd.h"
+#include "libaout.h"
+
+#define SWAP_MAGIC(ext) bfd_getl16 (ext)
+
+#define MY_entry_is_text_address 1
+
+#define MY_write_object_contents MY(write_object_contents)
+static boolean MY(write_object_contents) PARAMS ((bfd *abfd));
+#define MY_text_includes_header 1
+
+bfd_vma		bfd_getp32	   PARAMS ((const bfd_byte *));
+bfd_signed_vma	bfd_getp_signed_32 PARAMS ((const bfd_byte *));
+void		bfd_putp32	   PARAMS ((bfd_vma, bfd_byte *));
+
+#define MY_BFD_TARGET
+
+#include "aout-target.h"
+
+const bfd_target MY(vec) =
+{
+  TARGETNAME,		/* name */
+  bfd_target_aout_flavour,
+  BFD_ENDIAN_LITTLE,		/* target byte order (little) */
+  BFD_ENDIAN_LITTLE,		/* target headers byte order (little) */
+  (HAS_RELOC | EXEC_P |		/* object flags */
+   HAS_LINENO | HAS_DEBUG |
+   HAS_SYMS | HAS_LOCALS | WP_TEXT),
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA),
+  MY_symbol_leading_char,
+  AR_PAD_CHAR,			/* ar_pad_char */
+  15,				/* ar_max_namelen */
+  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+     bfd_getp32, bfd_getp_signed_32, bfd_putp32,
+     bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
+  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+     bfd_getp32, bfd_getp_signed_32, bfd_putp32,
+     bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
+    {_bfd_dummy_target, MY_object_p, /* bfd_check_format */
+       bfd_generic_archive_p, MY_core_file_p},
+    {bfd_false, MY_mkobject,	/* bfd_set_format */
+       _bfd_generic_mkarchive, bfd_false},
+    {bfd_false, MY_write_object_contents, /* bfd_write_contents */
+       _bfd_write_archive_contents, bfd_false},
+
+     BFD_JUMP_TABLE_GENERIC (MY),
+     BFD_JUMP_TABLE_COPY (MY),
+     BFD_JUMP_TABLE_CORE (MY),
+     BFD_JUMP_TABLE_ARCHIVE (MY),
+     BFD_JUMP_TABLE_SYMBOLS (MY),
+     BFD_JUMP_TABLE_RELOCS (MY),
+     BFD_JUMP_TABLE_WRITE (MY),
+     BFD_JUMP_TABLE_LINK (MY),
+     BFD_JUMP_TABLE_DYNAMIC (MY),
+
+  /* Alternative_target */
+  NULL,
+  
+  (PTR) MY_backend_data,
+};
+
+/* start of modified aoutx.h */
+/* BFD semi-generic back-end for a.out binaries.
+   Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 1998
+   Free Software Foundation, Inc.
+   Written by Cygnus Support.
+
+This file is part of BFD, the Binary File Descriptor library.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+/*
+SECTION
+	a.out backends
+
+
+DESCRIPTION
+
+	BFD supports a number of different flavours of a.out format,
+	though the major differences are only the sizes of the
+	structures on disk, and the shape of the relocation
+	information.
+
+	The support is split into a basic support file @file{aoutx.h}
+	and other files which derive functions from the base. One
+	derivation file is @file{aoutf1.h} (for a.out flavour 1), and
+	adds to the basic a.out functions support for sun3, sun4, 386
+	and 29k a.out files, to create a target jump vector for a
+	specific target.
+
+	This information is further split out into more specific files
+	for each machine, including @file{sunos.c} for sun3 and sun4,
+	@file{newsos3.c} for the Sony NEWS, and @file{demo64.c} for a
+	demonstration of a 64 bit a.out format.
+
+	The base file @file{aoutx.h} defines general mechanisms for
+	reading and writing records to and from disk and various
+	other methods which BFD requires. It is included by
+	@file{aout32.c} and @file{aout64.c} to form the names
+	<<aout_32_swap_exec_header_in>>, <<aout_64_swap_exec_header_in>>, etc.
+
+	As an example, this is what goes on to make the back end for a
+	sun4, from @file{aout32.c}:
+
+|	#define ARCH_SIZE 32
+|	#include "aoutx.h"
+
+	Which exports names:
+
+|	...
+|	aout_32_canonicalize_reloc
+|	aout_32_find_nearest_line
+|	aout_32_get_lineno
+|	aout_32_get_reloc_upper_bound
+|	...
+
+	from @file{sunos.c}:
+
+|	#define TARGET_NAME "a.out-sunos-big"
+|	#define VECNAME    sunos_big_vec
+|	#include "aoutf1.h"
+
+	requires all the names from @file{aout32.c}, and produces the jump vector
+
+|	sunos_big_vec
+
+	The file @file{host-aout.c} is a special case.  It is for a large set
+	of hosts that use ``more or less standard'' a.out files, and
+	for which cross-debugging is not interesting.  It uses the
+	standard 32-bit a.out support routines, but determines the
+	file offsets and addresses of the text, data, and BSS
+	sections, the machine architecture and machine type, and the
+	entry point address, in a host-dependent manner.  Once these
+	values have been determined, generic code is used to handle
+	the  object file.
+
+	When porting it to run on a new system, you must supply:
+
+|        HOST_PAGE_SIZE
+|        HOST_SEGMENT_SIZE
+|        HOST_MACHINE_ARCH       (optional)
+|        HOST_MACHINE_MACHINE    (optional)
+|        HOST_TEXT_START_ADDR
+|        HOST_STACK_END_ADDR
+
+	in the file @file{../include/sys/h-@var{XXX}.h} (for your host).  These
+	values, plus the structures and macros defined in @file{a.out.h} on
+	your host system, will produce a BFD target that will access
+	ordinary a.out files on your host. To configure a new machine
+	to use @file{host-aout.c}, specify:
+
+|	TDEFAULTS = -DDEFAULT_VECTOR=host_aout_big_vec
+|	TDEPFILES= host-aout.o trad-core.o
+
+	in the @file{config/@var{XXX}.mt} file, and modify @file{configure.in}
+	to use the
+	@file{@var{XXX}.mt} file (by setting "<<bfd_target=XXX>>") when your
+	configuration is selected.
+
+*/
+
+/* Some assumptions:
+   * Any BFD with D_PAGED set is ZMAGIC, and vice versa.
+     Doesn't matter what the setting of WP_TEXT is on output, but it'll
+     get set on input.
+   * Any BFD with D_PAGED clear and WP_TEXT set is NMAGIC.
+   * Any BFD with both flags clear is OMAGIC.
+   (Just want to make these explicit, so the conditions tested in this
+   file make sense if you're more familiar with a.out than with BFD.)  */
+
+#define KEEPIT udata.i
+
+#include <string.h>		/* For strchr and friends */
+#include <ctype.h>
+#include "bfd.h"
+#include "sysdep.h"
+#include "bfdlink.h"
+
+#include "libaout.h"
+/*#include "libbfd.h"*/
+#include "aout/aout64.h"
+#include "aout/stab_gnu.h"
+#include "aout/ar.h"
+
+#undef N_TYPE
+#undef N_UNDF
+#undef N_ABS
+#undef N_TEXT
+#undef N_DATA
+#undef N_BSS
+#undef N_REG
+#undef N_FN
+#undef N_EXT
+#define N_TYPE		0x1f	/* type mask */
+#define N_UNDF		0x00	/* undefined */
+#define N_ABS		0x01	/* absolute */
+#define N_TEXT		0x02	/* text segment */
+#define N_DATA		0x03	/* data segment */
+#define N_BSS		0x04	/* bss segment */
+#define N_REG		0x14	/* register symbol */
+#define N_FN		0x1f	/* file name */
+
+#define N_EXT		0x20	/* external flag */
+
+#define RELOC_SIZE 2
+
+struct pdp11_aout_reloc_external
+{
+  bfd_byte e_reloc_entry[2];
+};
+
+#define RELFLG		0x0001	/* pc-relative flag */
+#define RTYPE		0x000e	/* type mask */
+#define RIDXMASK	0xfff0	/* index mask */
+
+#define RABS		0x00	/* absolute */
+#define RTEXT		0x02	/* text */
+#define RDATA		0x04	/* data */
+#define RBSS		0x06	/* bss */
+#define REXT		0x08	/* external */
+
+#define RINDEX(x)	(((x) & 0xfff0) >> 4)
+
+static boolean aout_get_external_symbols PARAMS ((bfd *));
+static boolean translate_from_native_sym_flags
+  PARAMS ((bfd *, aout_symbol_type *));
+static boolean translate_to_native_sym_flags
+  PARAMS ((bfd *, asymbol *, struct external_nlist *));
+static void adjust_o_magic PARAMS ((bfd *, struct internal_exec *));
+static void adjust_z_magic PARAMS ((bfd *, struct internal_exec *));
+static void adjust_n_magic PARAMS ((bfd *, struct internal_exec *));
+
+/*
+SUBSECTION
+	Relocations
+
+DESCRIPTION
+	The file @file{aoutx.h} provides for both the @emph{standard}
+	and @emph{extended} forms of a.out relocation records.
+
+	The standard records contain only an
+	address, a symbol index, and a type field. The extended records
+	(used on 29ks and sparcs) also have a full integer for an
+	addend.
+
+*/
+
+#ifndef MY_final_link_relocate
+#define MY_final_link_relocate _bfd_final_link_relocate
+#endif
+
+#ifndef MY_relocate_contents
+#define MY_relocate_contents _bfd_relocate_contents
+#endif
+
+reloc_howto_type howto_table_pdp11[] =
+{
+  /* type              rs size bsz  pcrel bitpos ovrf                     sf name     part_inpl readmask  setmask    pcdone */
+HOWTO( 0,	       0,  1,  16,  false, 0, complain_overflow_signed,0,"16",	true, 0x0000ffff,0x0000ffff, false),
+HOWTO( 1,	       0,  1,  16,  true,  0, complain_overflow_signed,0,"DISP16",	true, 0x0000ffff,0x0000ffff, false),
+};
+
+#define TABLE_SIZE(TABLE)	(sizeof(TABLE)/sizeof(TABLE[0]))
+
+reloc_howto_type *
+NAME(aout,reloc_type_lookup) (abfd,code)
+     bfd * abfd ATTRIBUTE_UNUSED;
+     bfd_reloc_code_real_type code;
+{
+  switch (code)
+    {
+    case BFD_RELOC_16:
+      return &howto_table_pdp11[0];
+    case BFD_RELOC_16_PCREL:
+      return &howto_table_pdp11[1];
+    default:
+      return (reloc_howto_type *)NULL;
+    }
+}
+
+static int
+pdp11_aout_write_headers (abfd, execp)
+     bfd *abfd;
+     struct internal_exec *execp;
+{
+  struct external_exec exec_bytes;
+  bfd_size_type text_size;
+  file_ptr text_end;
+
+  if (adata(abfd).magic == undecided_magic)
+    NAME(aout,adjust_sizes_and_vmas) (abfd, &text_size, &text_end);
+
+  execp->a_syms = bfd_get_symcount (abfd) * EXTERNAL_NLIST_SIZE;
+  execp->a_entry = bfd_get_start_address (abfd);
+
+  if (obj_textsec (abfd)->reloc_count > 0 ||
+      obj_datasec (abfd)->reloc_count > 0)
+    {
+      execp->a_trsize = execp->a_text;
+      execp->a_drsize = execp->a_data;
+    }
+  else
+    {
+      execp->a_trsize = 0;
+      execp->a_drsize = 0;
+    }
+
+  NAME(aout,swap_exec_header_out) (abfd, execp, &exec_bytes);
+
+  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
+    return false;
+
+  if (bfd_write ((PTR) &exec_bytes, 1, EXEC_BYTES_SIZE, abfd)
+      != EXEC_BYTES_SIZE)
+    return false;
+
+  /* Now write out reloc info, followed by syms and strings */
+
+  if (bfd_get_outsymbols (abfd) != (asymbol **) NULL
+      && bfd_get_symcount (abfd) != 0)
+    {
+      if (bfd_seek (abfd, (file_ptr)(N_SYMOFF(*execp)), SEEK_SET) != 0)
+	return false;
+
+      if (! NAME(aout,write_syms)(abfd)) return false;
+    }
+
+  if (obj_textsec (abfd)->reloc_count > 0 ||
+      obj_datasec (abfd)->reloc_count > 0)
+    {
+      if (bfd_seek (abfd, (file_ptr)(N_TRELOFF(*execp)), SEEK_SET) != 0)
+	return false;
+      if (!NAME(aout,squirt_out_relocs) (abfd, obj_textsec (abfd)))
+	return false;
+
+      if (bfd_seek (abfd, (file_ptr)(N_DRELOFF(*execp)), SEEK_SET) != 0)
+	return false;
+      if (!NAME(aout,squirt_out_relocs)(abfd, obj_datasec (abfd)))
+	return false;
+    }
+
+  return true;
+}									      
+
+/* Write an object file.
+   Section contents have already been written.  We write the
+   file header, symbols, and relocation.  */
+
+static boolean
+MY(write_object_contents) (abfd)
+     bfd *abfd;
+{
+  struct internal_exec *execp = exec_hdr (abfd);
+
+  /* We must make certain that the magic number has been set.  This
+     will normally have been done by set_section_contents, but only if
+     there actually are some section contents.  */
+  if (! abfd->output_has_begun)
+    {
+      bfd_size_type text_size;
+      file_ptr text_end;
+
+      NAME(aout,adjust_sizes_and_vmas) (abfd, &text_size, &text_end);
+    }
+
+  obj_reloc_entry_size (abfd) = RELOC_SIZE;
+
+  return WRITE_HEADERS(abfd, execp);
+}
+
+/*
+SUBSECTION
+	Internal entry points
+
+DESCRIPTION
+	@file{aoutx.h} exports several routines for accessing the
+	contents of an a.out file, which are gathered and exported in
+	turn by various format specific files (eg sunos.c).
+
+*/
+
+/*
+FUNCTION
+	 aout_@var{size}_swap_exec_header_in
+
+SYNOPSIS
+	void aout_@var{size}_swap_exec_header_in,
+           (bfd *abfd,
+            struct external_exec *raw_bytes,
+            struct internal_exec *execp);
+
+DESCRIPTION
+	Swap the information in an executable header @var{raw_bytes} taken
+	from a raw byte stream memory image into the internal exec header
+	structure @var{execp}.
+*/
+
+#ifndef NAME_swap_exec_header_in
+void
+NAME(aout,swap_exec_header_in) (abfd, raw_bytes, execp)
+     bfd *abfd;
+     struct external_exec *raw_bytes;
+     struct internal_exec *execp;
+{
+  struct external_exec *bytes = (struct external_exec *)raw_bytes;
+
+  /* The internal_exec structure has some fields that are unused in this
+     configuration (IE for i960), so ensure that all such uninitialized
+     fields are zero'd out.  There are places where two of these structs
+     are memcmp'd, and thus the contents do matter. */
+  memset ((PTR) execp, 0, sizeof (struct internal_exec));
+  /* Now fill in fields in the execp, from the bytes in the raw data.  */
+  execp->a_info   = GET_MAGIC (abfd, bytes->e_info);
+  execp->a_text   = GET_WORD (abfd, bytes->e_text);
+  execp->a_data   = GET_WORD (abfd, bytes->e_data);
+  execp->a_bss    = GET_WORD (abfd, bytes->e_bss);
+  execp->a_syms   = GET_WORD (abfd, bytes->e_syms);
+  execp->a_entry  = GET_WORD (abfd, bytes->e_entry);
+
+  if (GET_WORD (abfd, bytes->e_flag) & A_FLAG_RELOC_STRIPPED)
+    {
+      execp->a_trsize = 0;
+      execp->a_drsize = 0;
+    }
+  else
+    {
+      execp->a_trsize = execp->a_text;
+      execp->a_drsize = execp->a_data;
+    }
+}
+#define NAME_swap_exec_header_in NAME(aout,swap_exec_header_in)
+#endif
+
+/*
+FUNCTION
+	aout_@var{size}_swap_exec_header_out
+
+SYNOPSIS
+	void aout_@var{size}_swap_exec_header_out
+	  (bfd *abfd,
+	   struct internal_exec *execp,
+	   struct external_exec *raw_bytes);
+
+DESCRIPTION
+	Swap the information in an internal exec header structure
+	@var{execp} into the buffer @var{raw_bytes} ready for writing to disk.
+*/
+void
+NAME(aout,swap_exec_header_out) (abfd, execp, raw_bytes)
+     bfd *abfd;
+     struct internal_exec *execp;
+     struct external_exec *raw_bytes;
+{
+  struct external_exec *bytes = (struct external_exec *)raw_bytes;
+
+  /* Now fill in fields in the raw data, from the fields in the exec struct. */
+  PUT_MAGIC (abfd, execp->a_info,		bytes->e_info);
+  PUT_WORD (abfd, execp->a_text,		bytes->e_text);
+  PUT_WORD (abfd, execp->a_data,		bytes->e_data);
+  PUT_WORD (abfd, execp->a_bss,			bytes->e_bss);
+  PUT_WORD (abfd, execp->a_syms,		bytes->e_syms);
+  PUT_WORD (abfd, execp->a_entry,		bytes->e_entry);
+  PUT_WORD (abfd, 0,				bytes->e_unused);
+
+  if ((execp->a_trsize == 0 || execp->a_text == 0) &&
+      (execp->a_drsize == 0 || execp->a_data == 0))
+    PUT_WORD (abfd, A_FLAG_RELOC_STRIPPED,	bytes->e_flag);
+  else if (execp->a_trsize == execp->a_text &&
+	   execp->a_drsize == execp->a_data)
+    PUT_WORD (abfd, 0,				bytes->e_flag);
+  else
+    {
+      /* TODO: print a proper warning message */
+      fprintf (stderr, "BFD:%s:%d: internal error\n", __FILE__, __LINE__);
+      PUT_WORD (abfd, 0,			bytes->e_flag);
+    }
+}
+
+/* Make all the section for an a.out file.  */
+
+boolean
+NAME(aout,make_sections) (abfd)
+     bfd *abfd;
+{
+  if (obj_textsec (abfd) == (asection *) NULL
+      && bfd_make_section (abfd, ".text") == (asection *) NULL)
+    return false;
+  if (obj_datasec (abfd) == (asection *) NULL
+      && bfd_make_section (abfd, ".data") == (asection *) NULL)
+    return false;
+  if (obj_bsssec (abfd) == (asection *) NULL
+      && bfd_make_section (abfd, ".bss") == (asection *) NULL)
+    return false;
+  return true;
+}
+
+/*
+FUNCTION
+	aout_@var{size}_some_aout_object_p
+
+SYNOPSIS
+	const bfd_target *aout_@var{size}_some_aout_object_p
+	 (bfd *abfd,
+	  const bfd_target *(*callback_to_real_object_p)());
+
+DESCRIPTION
+	Some a.out variant thinks that the file open in @var{abfd}
+	checking is an a.out file.  Do some more checking, and set up
+	for access if it really is.  Call back to the calling
+	environment's "finish up" function just before returning, to
+	handle any last-minute setup.
+*/
+
+const bfd_target *
+NAME(aout,some_aout_object_p) (abfd, execp, callback_to_real_object_p)
+     bfd *abfd;
+     struct internal_exec *execp;
+     const bfd_target *(*callback_to_real_object_p) PARAMS ((bfd *));
+{
+  struct aout_data_struct *rawptr, *oldrawptr;
+  const bfd_target *result;
+
+  rawptr = (struct aout_data_struct  *) bfd_zalloc (abfd, sizeof (struct aout_data_struct ));
+  if (rawptr == NULL)
+    return 0;
+
+  oldrawptr = abfd->tdata.aout_data;
+  abfd->tdata.aout_data = rawptr;
+
+  /* Copy the contents of the old tdata struct.
+     In particular, we want the subformat, since for hpux it was set in
+     hp300hpux.c:swap_exec_header_in and will be used in
+     hp300hpux.c:callback.  */
+  if (oldrawptr != NULL)
+    *abfd->tdata.aout_data = *oldrawptr;
+
+  abfd->tdata.aout_data->a.hdr = &rawptr->e;
+  *(abfd->tdata.aout_data->a.hdr) = *execp;	/* Copy in the internal_exec struct */
+  execp = abfd->tdata.aout_data->a.hdr;
+
+  /* Set the file flags */
+  abfd->flags = BFD_NO_FLAGS;
+  if (execp->a_drsize || execp->a_trsize)
+    abfd->flags |= HAS_RELOC;
+  /* Setting of EXEC_P has been deferred to the bottom of this function */
+  if (execp->a_syms)
+    abfd->flags |= HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS;
+  if (N_DYNAMIC(*execp))
+    abfd->flags |= DYNAMIC;
+
+  if (N_MAGIC (*execp) == ZMAGIC)
+    {
+      abfd->flags |= D_PAGED | WP_TEXT;
+      adata (abfd).magic = z_magic;
+    }
+  else if (N_MAGIC (*execp) == QMAGIC)
+    {
+      abfd->flags |= D_PAGED | WP_TEXT;
+      adata (abfd).magic = z_magic;
+      adata (abfd).subformat = q_magic_format;
+    }
+  else if (N_MAGIC (*execp) == NMAGIC)
+    {
+      abfd->flags |= WP_TEXT;
+      adata (abfd).magic = n_magic;
+    }
+  else if (N_MAGIC (*execp) == OMAGIC
+	   || N_MAGIC (*execp) == BMAGIC)
+    adata (abfd).magic = o_magic;
+  else
+    {
+      /* Should have been checked with N_BADMAG before this routine
+	 was called.  */
+      abort ();
+    }
+
+  bfd_get_start_address (abfd) = execp->a_entry;
+
+  obj_aout_symbols (abfd) = (aout_symbol_type *)NULL;
+  bfd_get_symcount (abfd) = execp->a_syms / sizeof (struct external_nlist);
+
+  /* The default relocation entry size is that of traditional V7 Unix.  */
+  obj_reloc_entry_size (abfd) = RELOC_SIZE;
+
+  /* The default symbol entry size is that of traditional Unix. */
+  obj_symbol_entry_size (abfd) = EXTERNAL_NLIST_SIZE;
+
+#ifdef USE_MMAP
+  bfd_init_window (&obj_aout_sym_window (abfd));
+  bfd_init_window (&obj_aout_string_window (abfd));
+#endif
+  obj_aout_external_syms (abfd) = NULL;
+  obj_aout_external_strings (abfd) = NULL;
+  obj_aout_sym_hashes (abfd) = NULL;
+
+  if (! NAME(aout,make_sections) (abfd))
+    return NULL;
+
+  obj_datasec (abfd)->_raw_size = execp->a_data;
+  obj_bsssec (abfd)->_raw_size = execp->a_bss;
+
+  obj_textsec (abfd)->flags =
+    (execp->a_trsize != 0
+     ? (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS | SEC_RELOC)
+     : (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS));
+  obj_datasec (abfd)->flags =
+    (execp->a_drsize != 0
+     ? (SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_HAS_CONTENTS | SEC_RELOC)
+     : (SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_HAS_CONTENTS));
+  obj_bsssec (abfd)->flags = SEC_ALLOC;
+
+#ifdef THIS_IS_ONLY_DOCUMENTATION
+  /* The common code can't fill in these things because they depend
+     on either the start address of the text segment, the rounding
+     up of virtual addresses between segments, or the starting file
+     position of the text segment -- all of which varies among different
+     versions of a.out.  */
+
+  /* Call back to the format-dependent code to fill in the rest of the
+     fields and do any further cleanup.  Things that should be filled
+     in by the callback:  */
+
+  struct exec *execp = exec_hdr (abfd);
+
+  obj_textsec (abfd)->size = N_TXTSIZE(*execp);
+  obj_textsec (abfd)->raw_size = N_TXTSIZE(*execp);
+  /* data and bss are already filled in since they're so standard */
+
+  /* The virtual memory addresses of the sections */
+  obj_textsec (abfd)->vma = N_TXTADDR(*execp);
+  obj_datasec (abfd)->vma = N_DATADDR(*execp);
+  obj_bsssec  (abfd)->vma = N_BSSADDR(*execp);
+
+  /* The file offsets of the sections */
+  obj_textsec (abfd)->filepos = N_TXTOFF(*execp);
+  obj_datasec (abfd)->filepos = N_DATOFF(*execp);
+
+  /* The file offsets of the relocation info */
+  obj_textsec (abfd)->rel_filepos = N_TRELOFF(*execp);
+  obj_datasec (abfd)->rel_filepos = N_DRELOFF(*execp);
+
+  /* The file offsets of the string table and symbol table.  */
+  obj_str_filepos (abfd) = N_STROFF (*execp);
+  obj_sym_filepos (abfd) = N_SYMOFF (*execp);
+
+  /* Determine the architecture and machine type of the object file.  */
+  abfd->obj_arch = bfd_arch_obscure;
+
+  adata(abfd)->page_size = TARGET_PAGE_SIZE;
+  adata(abfd)->segment_size = SEGMENT_SIZE;
+  adata(abfd)->exec_bytes_size = EXEC_BYTES_SIZE;
+
+  return abfd->xvec;
+
+  /* The architecture is encoded in various ways in various a.out variants,
+     or is not encoded at all in some of them.  The relocation size depends
+     on the architecture and the a.out variant.  Finally, the return value
+     is the bfd_target vector in use.  If an error occurs, return zero and
+     set bfd_error to the appropriate error code.
+
+     Formats such as b.out, which have additional fields in the a.out
+     header, should cope with them in this callback as well.  */
+#endif				/* DOCUMENTATION */
+
+  result = (*callback_to_real_object_p)(abfd);
+
+  /* Now that the segment addresses have been worked out, take a better
+     guess at whether the file is executable.  If the entry point
+     is within the text segment, assume it is.  (This makes files
+     executable even if their entry point address is 0, as long as
+     their text starts at zero.).
+
+     This test had to be changed to deal with systems where the text segment
+     runs at a different location than the default.  The problem is that the
+     entry address can appear to be outside the text segment, thus causing an
+     erroneous conclusion that the file isn't executable.
+
+     To fix this, we now accept any non-zero entry point as an indication of
+     executability.  This will work most of the time, since only the linker
+     sets the entry point, and that is likely to be non-zero for most systems. */
+
+  if (execp->a_entry != 0
+      || (execp->a_entry >= obj_textsec(abfd)->vma
+	  && execp->a_entry < obj_textsec(abfd)->vma + obj_textsec(abfd)->_raw_size))
+    abfd->flags |= EXEC_P;
+#ifdef STAT_FOR_EXEC
+  else
+    {
+      struct stat stat_buf;
+
+      /* The original heuristic doesn't work in some important cases.
+        The a.out file has no information about the text start
+        address.  For files (like kernels) linked to non-standard
+        addresses (ld -Ttext nnn) the entry point may not be between
+        the default text start (obj_textsec(abfd)->vma) and
+        (obj_textsec(abfd)->vma) + text size.  This is not just a mach
+        issue.  Many kernels are loaded at non standard addresses.  */
+      if (abfd->iostream != NULL
+	  && (abfd->flags & BFD_IN_MEMORY) == 0
+	  && (fstat(fileno((FILE *) (abfd->iostream)), &stat_buf) == 0)
+	  && ((stat_buf.st_mode & 0111) != 0))
+	abfd->flags |= EXEC_P;
+    }
+#endif /* STAT_FOR_EXEC */
+
+  if (result)
+    {
+#if 0 /* These should be set correctly anyways.  */
+      abfd->sections = obj_textsec (abfd);
+      obj_textsec (abfd)->next = obj_datasec (abfd);
+      obj_datasec (abfd)->next = obj_bsssec (abfd);
+#endif
+    }
+  else
+    {
+      free (rawptr);
+      abfd->tdata.aout_data = oldrawptr;
+    }
+  return result;
+}
+
+/*
+FUNCTION
+	aout_@var{size}_mkobject
+
+SYNOPSIS
+	boolean aout_@var{size}_mkobject, (bfd *abfd);
+
+DESCRIPTION
+	Initialize BFD @var{abfd} for use with a.out files.
+*/
+
+boolean
+NAME(aout,mkobject) (abfd)
+     bfd *abfd;
+{
+  struct aout_data_struct  *rawptr;
+
+  bfd_set_error (bfd_error_system_call);
+
+  /* Use an intermediate variable for clarity */
+  rawptr = (struct aout_data_struct *)bfd_zalloc (abfd, sizeof (struct aout_data_struct ));
+
+  if (rawptr == NULL)
+    return false;
+
+  abfd->tdata.aout_data = rawptr;
+  exec_hdr (abfd) = &(rawptr->e);
+
+  obj_textsec (abfd) = (asection *)NULL;
+  obj_datasec (abfd) = (asection *)NULL;
+  obj_bsssec (abfd) = (asection *)NULL;
+
+  return true;
+}
+
+
+/*
+FUNCTION
+	aout_@var{size}_machine_type
+
+SYNOPSIS
+	enum machine_type  aout_@var{size}_machine_type
+	 (enum bfd_architecture arch,
+	  unsigned long machine));
+
+DESCRIPTION
+	Keep track of machine architecture and machine type for
+	a.out's. Return the <<machine_type>> for a particular
+	architecture and machine, or <<M_UNKNOWN>> if that exact architecture
+	and machine can't be represented in a.out format.
+
+	If the architecture is understood, machine type 0 (default)
+	is always understood.
+*/
+
+enum machine_type
+NAME(aout,machine_type) (arch, machine, unknown)
+     enum bfd_architecture arch;
+     unsigned long machine;
+     boolean *unknown;
+{
+  enum machine_type arch_flags;
+
+  arch_flags = M_UNKNOWN;
+  *unknown = true;
+
+  switch (arch)
+    {
+    case bfd_arch_sparc:
+      if (machine == 0
+	  || machine == bfd_mach_sparc
+	  || machine == bfd_mach_sparc_sparclite
+	  || machine == bfd_mach_sparc_v9)
+	arch_flags = M_SPARC;
+      else if (machine == bfd_mach_sparc_sparclet)
+	arch_flags = M_SPARCLET;
+      break;
+
+    case bfd_arch_m68k:
+      switch (machine)
+	{
+	case 0:		      arch_flags = M_68010; break;
+	case bfd_mach_m68000: arch_flags = M_UNKNOWN; *unknown = false; break;
+	case bfd_mach_m68010: arch_flags = M_68010; break;
+	case bfd_mach_m68020: arch_flags = M_68020; break;
+	default:	      arch_flags = M_UNKNOWN; break;
+	}
+      break;
+
+    case bfd_arch_i386:
+      if (machine == 0)	arch_flags = M_386;
+      break;
+
+    case bfd_arch_a29k:
+      if (machine == 0)	arch_flags = M_29K;
+      break;
+
+    case bfd_arch_arm:
+      if (machine == 0)	arch_flags = M_ARM;
+      break;
+
+    case bfd_arch_mips:
+      switch (machine)
+	{
+	case 0:
+	case 2000:
+	case bfd_mach_mips3000:
+          arch_flags = M_MIPS1;
+	  break;
+	case bfd_mach_mips4000: /* mips3 */
+	case bfd_mach_mips4400:
+	case bfd_mach_mips8000: /* mips4 */
+	case bfd_mach_mips6000: /* real mips2: */
+          arch_flags = M_MIPS2;
+	  break;
+	default:
+	  arch_flags = M_UNKNOWN;
+	  break;
+	}
+      break;
+
+    case bfd_arch_ns32k:
+      switch (machine)
+	{
+	case 0:    		arch_flags = M_NS32532; break;
+	case 32032:		arch_flags = M_NS32032; break;
+	case 32532:		arch_flags = M_NS32532; break;
+	default:		arch_flags = M_UNKNOWN; break;
+	}
+      break;
+
+    case bfd_arch_pdp11:
+      /* TODO: arch_flags = M_PDP11; */
+      *unknown = false;
+      break;
+
+    case bfd_arch_vax:
+      *unknown = false;
+      break;
+ 
+    default:
+      arch_flags = M_UNKNOWN;
+    }
+
+  if (arch_flags != M_UNKNOWN)
+    *unknown = false;
+
+  return arch_flags;
+}
+
+
+/*
+FUNCTION
+	aout_@var{size}_set_arch_mach
+
+SYNOPSIS
+	boolean aout_@var{size}_set_arch_mach,
+	 (bfd *,
+	  enum bfd_architecture arch,
+	  unsigned long machine));
+
+DESCRIPTION
+	Set the architecture and the machine of the BFD @var{abfd} to the
+	values @var{arch} and @var{machine}.  Verify that @var{abfd}'s format
+	can support the architecture required.
+*/
+
+boolean
+NAME(aout,set_arch_mach) (abfd, arch, machine)
+     bfd *abfd;
+     enum bfd_architecture arch;
+     unsigned long machine;
+{
+  if (! bfd_default_set_arch_mach (abfd, arch, machine))
+    return false;
+
+  if (arch != bfd_arch_unknown)
+    {
+      boolean unknown;
+
+      NAME(aout,machine_type) (arch, machine, &unknown);
+      if (unknown)
+	return false;
+    }
+
+  obj_reloc_entry_size (abfd) = RELOC_SIZE;
+
+  return (*aout_backend_info(abfd)->set_sizes) (abfd);
+}
+
+static void
+adjust_o_magic (abfd, execp)
+     bfd *abfd;
+     struct internal_exec *execp;
+{
+  file_ptr pos = adata (abfd).exec_bytes_size;
+  bfd_vma vma = 0;
+  int pad = 0;
+
+  /* Text.  */
+  obj_textsec (abfd)->filepos = pos;
+  if (! obj_textsec (abfd)->user_set_vma)
+    obj_textsec (abfd)->vma = vma;
+  else
+    vma = obj_textsec (abfd)->vma;
+
+  pos += obj_textsec (abfd)->_raw_size;
+  vma += obj_textsec (abfd)->_raw_size;
+
+  /* Data.  */
+  if (!obj_datasec (abfd)->user_set_vma)
+    {
+#if 0	    /* ?? Does alignment in the file image really matter? */
+      pad = align_power (vma, obj_datasec (abfd)->alignment_power) - vma;
+#endif
+      obj_textsec (abfd)->_raw_size += pad;
+      pos += pad;
+      vma += pad;
+      obj_datasec (abfd)->vma = vma;
+    }
+  else
+    vma = obj_datasec (abfd)->vma;
+  obj_datasec (abfd)->filepos = pos;
+  pos += obj_datasec (abfd)->_raw_size;
+  vma += obj_datasec (abfd)->_raw_size;
+
+  /* BSS.  */
+  if (! obj_bsssec (abfd)->user_set_vma)
+    {
+#if 0
+      pad = align_power (vma, obj_bsssec (abfd)->alignment_power) - vma;
+#endif
+      obj_datasec (abfd)->_raw_size += pad;
+      pos += pad;
+      vma += pad;
+      obj_bsssec (abfd)->vma = vma;
+    }
+  else
+    {
+      /* The VMA of the .bss section is set by the the VMA of the
+         .data section plus the size of the .data section.  We may
+         need to add padding bytes to make this true.  */
+      pad = obj_bsssec (abfd)->vma - vma;
+      if (pad > 0)
+	{
+	  obj_datasec (abfd)->_raw_size += pad;
+	  pos += pad;
+	}
+    }
+  obj_bsssec (abfd)->filepos = pos;
+
+  /* Fix up the exec header.  */
+  execp->a_text = obj_textsec (abfd)->_raw_size;
+  execp->a_data = obj_datasec (abfd)->_raw_size;
+  execp->a_bss  = obj_bsssec (abfd)->_raw_size;
+  N_SET_MAGIC (*execp, OMAGIC);
+}
+
+static void
+adjust_z_magic (abfd, execp)
+     bfd *abfd;
+     struct internal_exec *execp;
+{
+  bfd_size_type data_pad, text_pad;
+  file_ptr text_end;
+  CONST struct aout_backend_data *abdp;
+  int ztih;			/* Nonzero if text includes exec header.  */
+  
+  abdp = aout_backend_info (abfd);
+
+  /* Text.  */
+  ztih = (abdp != NULL
+	  && (abdp->text_includes_header
+	      || obj_aout_subformat (abfd) == q_magic_format));
+  obj_textsec(abfd)->filepos = (ztih
+				? adata(abfd).exec_bytes_size
+				: adata(abfd).zmagic_disk_block_size);
+  if (! obj_textsec(abfd)->user_set_vma)
+    {
+      /* ?? Do we really need to check for relocs here?  */
+      obj_textsec(abfd)->vma = ((abfd->flags & HAS_RELOC)
+				? 0
+				: (ztih
+				   ? (abdp->default_text_vma
+				      + adata (abfd).exec_bytes_size)
+				   : abdp->default_text_vma));
+      text_pad = 0;
+    }
+  else
+    {
+      /* The .text section is being loaded at an unusual address.  We
+         may need to pad it such that the .data section starts at a page
+         boundary.  */
+      if (ztih)
+	text_pad = ((obj_textsec (abfd)->filepos - obj_textsec (abfd)->vma)
+		    & (adata (abfd).page_size - 1));
+      else
+	text_pad = ((- obj_textsec (abfd)->vma)
+		    & (adata (abfd).page_size - 1));
+    }
+
+  /* Find start of data.  */
+  if (ztih)
+    {
+      text_end = obj_textsec (abfd)->filepos + obj_textsec (abfd)->_raw_size;
+      text_pad += BFD_ALIGN (text_end, adata (abfd).page_size) - text_end;
+    }
+  else
+    {
+      /* Note that if page_size == zmagic_disk_block_size, then
+	 filepos == page_size, and this case is the same as the ztih
+	 case.  */
+      text_end = obj_textsec (abfd)->_raw_size;
+      text_pad += BFD_ALIGN (text_end, adata (abfd).page_size) - text_end;
+      text_end += obj_textsec (abfd)->filepos;
+    }
+
+  obj_textsec (abfd)->_raw_size += text_pad;
+  text_end += text_pad;
+
+  /* Data.  */
+  if (!obj_datasec(abfd)->user_set_vma)
+    {
+      bfd_vma vma;
+      vma = obj_textsec(abfd)->vma + obj_textsec(abfd)->_raw_size;
+      obj_datasec(abfd)->vma = BFD_ALIGN (vma, adata(abfd).segment_size);
+    }
+  if (abdp && abdp->zmagic_mapped_contiguous)
+    {
+      text_pad = (obj_datasec(abfd)->vma
+		  - obj_textsec(abfd)->vma
+		  - obj_textsec(abfd)->_raw_size);
+      obj_textsec(abfd)->_raw_size += text_pad;
+    }
+  obj_datasec (abfd)->filepos = (obj_textsec (abfd)->filepos
+				+ obj_textsec (abfd)->_raw_size);
+  
+  /* Fix up exec header while we're at it.  */
+  execp->a_text = obj_textsec(abfd)->_raw_size;
+  if (ztih && (!abdp || (abdp && !abdp->exec_header_not_counted)))
+    execp->a_text += adata(abfd).exec_bytes_size;
+  if (obj_aout_subformat (abfd) == q_magic_format)
+    N_SET_MAGIC (*execp, QMAGIC);
+  else
+    N_SET_MAGIC (*execp, ZMAGIC);
+
+  /* Spec says data section should be rounded up to page boundary.  */
+  obj_datasec(abfd)->_raw_size
+    = align_power (obj_datasec(abfd)->_raw_size,
+		   obj_bsssec(abfd)->alignment_power);
+  execp->a_data = BFD_ALIGN (obj_datasec(abfd)->_raw_size,
+			     adata(abfd).page_size);
+  data_pad = execp->a_data - obj_datasec(abfd)->_raw_size;
+
+  /* BSS.  */
+  if (!obj_bsssec(abfd)->user_set_vma)
+    obj_bsssec(abfd)->vma = (obj_datasec(abfd)->vma
+			     + obj_datasec(abfd)->_raw_size);
+  /* If the BSS immediately follows the data section and extra space
+     in the page is left after the data section, fudge data
+     in the header so that the bss section looks smaller by that
+     amount.  We'll start the bss section there, and lie to the OS.
+     (Note that a linker script, as well as the above assignment,
+     could have explicitly set the BSS vma to immediately follow
+     the data section.)  */
+  if (align_power (obj_bsssec(abfd)->vma, obj_bsssec(abfd)->alignment_power)
+      == obj_datasec(abfd)->vma + obj_datasec(abfd)->_raw_size)
+    execp->a_bss = (data_pad > obj_bsssec(abfd)->_raw_size) ? 0 :
+      obj_bsssec(abfd)->_raw_size - data_pad;
+  else
+    execp->a_bss = obj_bsssec(abfd)->_raw_size;
+}
+
+static void
+adjust_n_magic (abfd, execp)
+     bfd *abfd;
+     struct internal_exec *execp;
+{
+  file_ptr pos = adata(abfd).exec_bytes_size;
+  bfd_vma vma = 0;
+  int pad;
+  
+  /* Text.  */
+  obj_textsec(abfd)->filepos = pos;
+  if (!obj_textsec(abfd)->user_set_vma)
+    obj_textsec(abfd)->vma = vma;
+  else
+    vma = obj_textsec(abfd)->vma;
+  pos += obj_textsec(abfd)->_raw_size;
+  vma += obj_textsec(abfd)->_raw_size;
+
+  /* Data.  */
+  obj_datasec(abfd)->filepos = pos;
+  if (!obj_datasec(abfd)->user_set_vma)
+    obj_datasec(abfd)->vma = BFD_ALIGN (vma, adata(abfd).segment_size);
+  vma = obj_datasec(abfd)->vma;
+  
+  /* Since BSS follows data immediately, see if it needs alignment.  */
+  vma += obj_datasec(abfd)->_raw_size;
+  pad = align_power (vma, obj_bsssec(abfd)->alignment_power) - vma;
+  obj_datasec(abfd)->_raw_size += pad;
+  pos += obj_datasec(abfd)->_raw_size;
+
+  /* BSS.  */
+  if (!obj_bsssec(abfd)->user_set_vma)
+    obj_bsssec(abfd)->vma = vma;
+  else
+    vma = obj_bsssec(abfd)->vma;
+
+  /* Fix up exec header.  */
+  execp->a_text = obj_textsec(abfd)->_raw_size;
+  execp->a_data = obj_datasec(abfd)->_raw_size;
+  execp->a_bss = obj_bsssec(abfd)->_raw_size;
+  N_SET_MAGIC (*execp, NMAGIC);
+}
+
+boolean
+NAME(aout,adjust_sizes_and_vmas) (abfd, text_size, text_end)
+     bfd *abfd;
+     bfd_size_type *text_size;
+     file_ptr * text_end ATTRIBUTE_UNUSED;
+{
+  struct internal_exec *execp = exec_hdr (abfd);
+
+  if (! NAME(aout,make_sections) (abfd))
+    return false;
+
+  if (adata(abfd).magic != undecided_magic)
+    return true;
+
+  obj_textsec(abfd)->_raw_size =
+    align_power(obj_textsec(abfd)->_raw_size,
+		obj_textsec(abfd)->alignment_power);
+
+  *text_size = obj_textsec (abfd)->_raw_size;
+  /* Rule (heuristic) for when to pad to a new page.  Note that there
+     are (at least) two ways demand-paged (ZMAGIC) files have been
+     handled.  Most Berkeley-based systems start the text segment at
+     (TARGET_PAGE_SIZE).  However, newer versions of SUNOS start the text
+     segment right after the exec header; the latter is counted in the
+     text segment size, and is paged in by the kernel with the rest of
+     the text. */
+
+  /* This perhaps isn't the right way to do this, but made it simpler for me
+     to understand enough to implement it.  Better would probably be to go
+     right from BFD flags to alignment/positioning characteristics.  But the
+     old code was sloppy enough about handling the flags, and had enough
+     other magic, that it was a little hard for me to understand.  I think
+     I understand it better now, but I haven't time to do the cleanup this
+     minute.  */
+
+  if (abfd->flags & WP_TEXT)
+    adata(abfd).magic = n_magic;
+  else
+    adata(abfd).magic = o_magic;
+
+#ifdef BFD_AOUT_DEBUG /* requires gcc2 */
+#if __GNUC__ >= 2
+  fprintf (stderr, "%s text=<%x,%x,%x> data=<%x,%x,%x> bss=<%x,%x,%x>\n",
+	   ({ char *str;
+	      switch (adata(abfd).magic) {
+	      case n_magic: str = "NMAGIC"; break;
+	      case o_magic: str = "OMAGIC"; break;
+	      case z_magic: str = "ZMAGIC"; break;
+	      default: abort ();
+	      }
+	      str;
+	    }),
+	   obj_textsec(abfd)->vma, obj_textsec(abfd)->_raw_size,
+	   	obj_textsec(abfd)->alignment_power,
+	   obj_datasec(abfd)->vma, obj_datasec(abfd)->_raw_size,
+	   	obj_datasec(abfd)->alignment_power,
+	   obj_bsssec(abfd)->vma, obj_bsssec(abfd)->_raw_size,
+	   	obj_bsssec(abfd)->alignment_power);
+#endif
+#endif
+
+  switch (adata(abfd).magic)
+    {
+    case o_magic:
+      adjust_o_magic (abfd, execp);
+      break;
+    case z_magic:
+      adjust_z_magic (abfd, execp);
+      break;
+    case n_magic:
+      adjust_n_magic (abfd, execp);
+      break;
+    default:
+      abort ();
+    }
+
+#ifdef BFD_AOUT_DEBUG
+  fprintf (stderr, "       text=<%x,%x,%x> data=<%x,%x,%x> bss=<%x,%x>\n",
+	   obj_textsec(abfd)->vma, obj_textsec(abfd)->_raw_size,
+	   	obj_textsec(abfd)->filepos,
+	   obj_datasec(abfd)->vma, obj_datasec(abfd)->_raw_size,
+	   	obj_datasec(abfd)->filepos,
+	   obj_bsssec(abfd)->vma, obj_bsssec(abfd)->_raw_size);
+#endif
+
+  return true;
+}
+
+/*
+FUNCTION
+	aout_@var{size}_new_section_hook
+
+SYNOPSIS
+        boolean aout_@var{size}_new_section_hook,
+	   (bfd *abfd,
+	    asection *newsect));
+
+DESCRIPTION
+	Called by the BFD in response to a @code{bfd_make_section}
+	request.
+*/
+boolean
+NAME(aout,new_section_hook) (abfd, newsect)
+     bfd *abfd;
+     asection *newsect;
+{
+  /* align to double at least */
+  newsect->alignment_power = bfd_get_arch_info(abfd)->section_align_power;
+
+
+  if (bfd_get_format (abfd) == bfd_object)
+    {
+      if (obj_textsec (abfd) == NULL
+	  && ! strcmp (newsect->name, ".text"))
+	{
+	  obj_textsec(abfd)= newsect;
+	  newsect->target_index = N_TEXT;
+	  return true;
+	}
+
+    if (obj_datasec (abfd) == NULL
+	&& ! strcmp (newsect->name, ".data"))
+      {
+	obj_datasec (abfd) = newsect;
+	newsect->target_index = N_DATA;
+	return true;
+      }
+
+    if (obj_bsssec (abfd) == NULL
+	&& !strcmp (newsect->name, ".bss"))
+      {
+	obj_bsssec (abfd) = newsect;
+	newsect->target_index = N_BSS;
+	return true;
+      }
+  }
+
+  /* We allow more than three sections internally */
+  return true;
+}
+
+boolean
+NAME(aout,set_section_contents) (abfd, section, location, offset, count)
+     bfd *abfd;
+     sec_ptr section;
+     PTR location;
+     file_ptr offset;
+     bfd_size_type count;
+{
+  file_ptr text_end;
+  bfd_size_type text_size;
+
+  if (! abfd->output_has_begun)
+    {
+      if (! NAME(aout,adjust_sizes_and_vmas) (abfd, &text_size, &text_end))
+	return false;
+    }
+
+  if (section == obj_bsssec (abfd))
+    {
+      bfd_set_error (bfd_error_no_contents);
+      return false;
+    }
+
+  if (section != obj_textsec (abfd)
+      && section != obj_datasec (abfd))
+    {
+      (*_bfd_error_handler)
+	("%s: can not represent section `%s' in a.out object file format",
+	 bfd_get_filename (abfd), bfd_get_section_name (abfd, section));
+      bfd_set_error (bfd_error_nonrepresentable_section);
+      return false;
+    }
+
+  if (count != 0)
+    {
+      if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
+	  || bfd_write (location, 1, count, abfd) != count)
+	return false;
+    }
+
+  return true;
+}
+
+/* Read the external symbols from an a.out file.  */
+
+static boolean
+aout_get_external_symbols (abfd)
+     bfd *abfd;
+{
+  if (obj_aout_external_syms (abfd) == (struct external_nlist *) NULL)
+    {
+      bfd_size_type count;
+      struct external_nlist *syms;
+
+      count = exec_hdr (abfd)->a_syms / EXTERNAL_NLIST_SIZE;
+
+#ifdef USE_MMAP
+      if (bfd_get_file_window (abfd,
+			       obj_sym_filepos (abfd), exec_hdr (abfd)->a_syms,
+			       &obj_aout_sym_window (abfd), true) == false)
+	return false;
+      syms = (struct external_nlist *) obj_aout_sym_window (abfd).data;
+#else
+      /* We allocate using malloc to make the values easy to free
+	 later on.  If we put them on the objalloc it might not be
+	 possible to free them.  */
+      syms = ((struct external_nlist *)
+	      bfd_malloc ((size_t) count * EXTERNAL_NLIST_SIZE));
+      if (syms == (struct external_nlist *) NULL && count != 0)
+	return false;
+
+      if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0
+	  || (bfd_read (syms, 1, exec_hdr (abfd)->a_syms, abfd)
+	      != exec_hdr (abfd)->a_syms))
+	{
+	  free (syms);
+	  return false;
+	}
+#endif
+
+      obj_aout_external_syms (abfd) = syms;
+      obj_aout_external_sym_count (abfd) = count;
+    }
+      
+  if (obj_aout_external_strings (abfd) == NULL
+      && exec_hdr (abfd)->a_syms != 0)
+    {
+      unsigned char string_chars[BYTES_IN_LONG];
+      bfd_size_type stringsize;
+      char *strings;
+
+      /* Get the size of the strings.  */
+      if (bfd_seek (abfd, obj_str_filepos (abfd), SEEK_SET) != 0
+	  || (bfd_read ((PTR) string_chars, BYTES_IN_LONG, 1, abfd) !=
+	      BYTES_IN_LONG))
+	return false;
+      stringsize = bfd_h_get_32 (abfd, string_chars);
+
+#ifdef USE_MMAP
+      if (bfd_get_file_window (abfd, obj_str_filepos (abfd), stringsize,
+			       &obj_aout_string_window (abfd), true) == false)
+	return false;
+      strings = (char *) obj_aout_string_window (abfd).data;
+#else
+      strings = (char *) bfd_malloc ((size_t) stringsize + 1);
+      if (strings == NULL)
+	return false;
+
+      /* Skip space for the string count in the buffer for convenience
+	 when using indexes.  */
+      if (bfd_read (strings + 4, 1, stringsize - 4, abfd) != stringsize - 4)
+	{
+	  free (strings);
+	  return false;
+	}
+#endif
+
+      /* Ensure that a zero index yields an empty string.  */
+      strings[0] = '\0';
+
+      strings[stringsize - 1] = 0;
+
+      obj_aout_external_strings (abfd) = strings;
+      obj_aout_external_string_size (abfd) = stringsize;
+    }
+
+  return true;
+}
+
+/* Translate an a.out symbol into a BFD symbol.  The desc, other, type
+   and symbol->value fields of CACHE_PTR will be set from the a.out
+   nlist structure.  This function is responsible for setting
+   symbol->flags and symbol->section, and adjusting symbol->value.  */
+
+static boolean
+translate_from_native_sym_flags (abfd, cache_ptr)
+     bfd *abfd;
+     aout_symbol_type *cache_ptr;
+{
+  flagword visible;
+
+  if (cache_ptr->type == N_FN)
+    {
+      asection *sec;
+
+      /* This is a debugging symbol.  */
+
+      cache_ptr->symbol.flags = BSF_DEBUGGING;
+
+      /* Work out the symbol section.  */
+      switch (cache_ptr->type & N_TYPE)
+	{
+	case N_TEXT:
+	case N_FN:
+	  sec = obj_textsec (abfd);
+	  break;
+	case N_DATA:
+	  sec = obj_datasec (abfd);
+	  break;
+	case N_BSS:
+	  sec = obj_bsssec (abfd);
+	  break;
+	default:
+	case N_ABS:
+	  sec = bfd_abs_section_ptr;
+	  break;
+	}
+
+      cache_ptr->symbol.section = sec;
+      cache_ptr->symbol.value -= sec->vma;
+
+      return true;
+    }
+
+  /* Get the default visibility.  This does not apply to all types, so
+     we just hold it in a local variable to use if wanted.  */
+  if ((cache_ptr->type & N_EXT) == 0)
+    visible = BSF_LOCAL;
+  else
+    visible = BSF_GLOBAL;
+
+  switch (cache_ptr->type)
+    {
+    default:
+    case N_ABS: case N_ABS | N_EXT:
+      cache_ptr->symbol.section = bfd_abs_section_ptr;
+      cache_ptr->symbol.flags = visible;
+      break;
+
+    case N_UNDF | N_EXT:
+      if (cache_ptr->symbol.value != 0)
+	{
+	  /* This is a common symbol.  */
+	  cache_ptr->symbol.flags = BSF_GLOBAL;
+	  cache_ptr->symbol.section = bfd_com_section_ptr;
+	}
+      else
+	{
+	  cache_ptr->symbol.flags = 0;
+	  cache_ptr->symbol.section = bfd_und_section_ptr;
+	}
+      break;
+
+    case N_TEXT: case N_TEXT | N_EXT:
+      cache_ptr->symbol.section = obj_textsec (abfd);
+      cache_ptr->symbol.value -= cache_ptr->symbol.section->vma;
+      cache_ptr->symbol.flags = visible;
+      break;
+
+    case N_DATA: case N_DATA | N_EXT:
+      cache_ptr->symbol.section = obj_datasec (abfd);
+      cache_ptr->symbol.value -= cache_ptr->symbol.section->vma;
+      cache_ptr->symbol.flags = visible;
+      break;
+
+    case N_BSS: case N_BSS | N_EXT:
+      cache_ptr->symbol.section = obj_bsssec (abfd);
+      cache_ptr->symbol.value -= cache_ptr->symbol.section->vma;
+      cache_ptr->symbol.flags = visible;
+      break;
+    }
+
+  return true;
+}
+
+/* Set the fields of SYM_POINTER according to CACHE_PTR.  */
+
+static boolean
+translate_to_native_sym_flags (abfd, cache_ptr, sym_pointer)
+     bfd *abfd;
+     asymbol *cache_ptr;
+     struct external_nlist *sym_pointer;
+{
+  bfd_vma value = cache_ptr->value;
+  asection *sec;
+  bfd_vma off;
+
+  /* Mask out any existing type bits in case copying from one section
+     to another.  */
+  sym_pointer->e_type[0] &= ~N_TYPE;
+
+  sec = bfd_get_section (cache_ptr);
+  off = 0;
+
+  if (sec == NULL)
+    {
+      /* This case occurs, e.g., for the *DEBUG* section of a COFF
+	 file.  */
+      (*_bfd_error_handler)
+	("%s: can not represent section for symbol `%s' in a.out object file format",
+	 bfd_get_filename (abfd), 
+	 cache_ptr->name != NULL ? cache_ptr->name : "*unknown*");
+      bfd_set_error (bfd_error_nonrepresentable_section);
+      return false;
+    }
+
+  if (sec->output_section != NULL)
+    {
+      off = sec->output_offset;
+      sec = sec->output_section;
+    }
+
+  if (bfd_is_abs_section (sec))
+    sym_pointer->e_type[0] |= N_ABS;
+  else if (sec == obj_textsec (abfd))
+    sym_pointer->e_type[0] |= N_TEXT;
+  else if (sec == obj_datasec (abfd))
+    sym_pointer->e_type[0] |= N_DATA;
+  else if (sec == obj_bsssec (abfd))
+    sym_pointer->e_type[0] |= N_BSS;
+  else if (bfd_is_und_section (sec))
+    sym_pointer->e_type[0] = N_UNDF | N_EXT;
+  else if (bfd_is_com_section (sec))
+    sym_pointer->e_type[0] = N_UNDF | N_EXT;
+  else
+    {
+      (*_bfd_error_handler)
+	("%s: can not represent section `%s' in a.out object file format",
+	 bfd_get_filename (abfd), bfd_get_section_name (abfd, sec));
+      bfd_set_error (bfd_error_nonrepresentable_section);
+      return false;
+    }
+
+  /* Turn the symbol from section relative to absolute again */
+  value += sec->vma + off;
+
+  if ((cache_ptr->flags & BSF_DEBUGGING) != 0)
+    sym_pointer->e_type[0] = ((aout_symbol_type *) cache_ptr)->type;
+  else if ((cache_ptr->flags & BSF_GLOBAL) != 0)
+    sym_pointer->e_type[0] |= N_EXT;
+
+#if 0
+  if ((cache_ptr->flags & BSF_CONSTRUCTOR) != 0)
+    {
+      int type = ((aout_symbol_type *) cache_ptr)->type;
+
+
+      switch (type)
+	{
+	case N_ABS:	type = N_SETA; break;
+	case N_TEXT:	type = N_SETT; break;
+	case N_DATA:	type = N_SETD; break;
+	case N_BSS:	type = N_SETB; break;
+	}
+      sym_pointer->e_type[0] = type;
+    }
+#endif
+
+#if 0
+  if ((cache_ptr->flags & BSF_WEAK) != 0)
+    {
+      int type;
+
+      switch (sym_pointer->e_type[0] & N_TYPE)
+	{
+	default:
+	case N_ABS:	type = N_WEAKA; break;
+	case N_TEXT:	type = N_WEAKT; break;
+	case N_DATA:	type = N_WEAKD; break;
+	case N_BSS:	type = N_WEAKB; break;
+	case N_UNDF:	type = N_WEAKU; break;
+	}
+      sym_pointer->e_type[0] = type;
+    }
+#endif
+
+  PUT_WORD(abfd, value, sym_pointer->e_value);
+
+  return true;
+}
+
+/* Native-level interface to symbols. */
+
+asymbol *
+NAME(aout,make_empty_symbol) (abfd)
+     bfd *abfd;
+{
+  aout_symbol_type  *new =
+    (aout_symbol_type *)bfd_zalloc (abfd, sizeof (aout_symbol_type));
+  if (!new)
+    return NULL;
+  new->symbol.the_bfd = abfd;
+
+  return &new->symbol;
+}
+
+/* Translate a set of internal symbols into external symbols.  */
+
+boolean
+NAME(aout,translate_symbol_table) (abfd, in, ext, count, str, strsize, dynamic)
+     bfd *abfd;
+     aout_symbol_type *in;
+     struct external_nlist *ext;
+     bfd_size_type count;
+     char *str;
+     bfd_size_type strsize;
+     boolean dynamic;
+{
+  struct external_nlist *ext_end;
+
+  ext_end = ext + count;
+  for (; ext < ext_end; ext++, in++)
+    {
+      bfd_vma x;
+
+      x = GET_WORD (abfd, ext->e_strx);
+      in->symbol.the_bfd = abfd;
+
+      /* For the normal symbols, the zero index points at the number
+	 of bytes in the string table but is to be interpreted as the
+	 null string.  For the dynamic symbols, the number of bytes in
+	 the string table is stored in the __DYNAMIC structure and the
+	 zero index points at an actual string.  */
+      if (x == 0 && ! dynamic)
+	in->symbol.name = "";
+      else if (x < strsize)
+	in->symbol.name = str + x;
+      else
+	return false;
+
+      in->symbol.value = GET_SWORD (abfd,  ext->e_value);
+      /* TODO: is 0 a safe value here? */
+      in->desc = 0;
+      in->other = 0;
+      in->type = bfd_h_get_8 (abfd,  ext->e_type);
+      in->symbol.udata.p = NULL;
+
+      if (! translate_from_native_sym_flags (abfd, in))
+	return false;
+
+      if (dynamic)
+	in->symbol.flags |= BSF_DYNAMIC;
+    }
+
+  return true;
+}
+
+/* We read the symbols into a buffer, which is discarded when this
+   function exits.  We read the strings into a buffer large enough to
+   hold them all plus all the cached symbol entries. */
+
+boolean
+NAME(aout,slurp_symbol_table) (abfd)
+     bfd *abfd;
+{
+  struct external_nlist *old_external_syms;
+  aout_symbol_type *cached;
+  size_t cached_size;
+
+  /* If there's no work to be done, don't do any */
+  if (obj_aout_symbols (abfd) != (aout_symbol_type *) NULL)
+    return true;
+
+  old_external_syms = obj_aout_external_syms (abfd);
+
+  if (! aout_get_external_symbols (abfd))
+    return false;
+
+  cached_size = (obj_aout_external_sym_count (abfd)
+		 * sizeof (aout_symbol_type));
+  cached = (aout_symbol_type *) bfd_malloc (cached_size);
+  if (cached == NULL && cached_size != 0)
+    return false;
+  if (cached_size != 0)
+    memset (cached, 0, cached_size);
+
+  /* Convert from external symbol information to internal.  */
+  if (! (NAME(aout,translate_symbol_table)
+	 (abfd, cached,
+	  obj_aout_external_syms (abfd),
+	  obj_aout_external_sym_count (abfd),
+	  obj_aout_external_strings (abfd),
+	  obj_aout_external_string_size (abfd),
+	  false)))
+    {
+      free (cached);
+      return false;
+    }
+
+  bfd_get_symcount (abfd) = obj_aout_external_sym_count (abfd);
+
+  obj_aout_symbols (abfd) = cached;
+
+  /* It is very likely that anybody who calls this function will not
+     want the external symbol information, so if it was allocated
+     because of our call to aout_get_external_symbols, we free it up
+     right away to save space.  */
+  if (old_external_syms == (struct external_nlist *) NULL
+      && obj_aout_external_syms (abfd) != (struct external_nlist *) NULL)
+    {
+#ifdef USE_MMAP
+      bfd_free_window (&obj_aout_sym_window (abfd));
+#else
+      free (obj_aout_external_syms (abfd));
+#endif
+      obj_aout_external_syms (abfd) = NULL;
+    }
+
+  return true;
+}
+
+/* We use a hash table when writing out symbols so that we only write
+   out a particular string once.  This helps particularly when the
+   linker writes out stabs debugging entries, because each different
+   contributing object file tends to have many duplicate stabs
+   strings.
+
+   This hash table code breaks dbx on SunOS 4.1.3, so we don't do it
+   if BFD_TRADITIONAL_FORMAT is set.  */
+
+static bfd_size_type add_to_stringtab
+  PARAMS ((bfd *, struct bfd_strtab_hash *, const char *, boolean));
+static boolean emit_stringtab PARAMS ((bfd *, struct bfd_strtab_hash *));
+
+/* Get the index of a string in a strtab, adding it if it is not
+   already present.  */
+
+static INLINE bfd_size_type
+add_to_stringtab (abfd, tab, str, copy)
+     bfd *abfd;
+     struct bfd_strtab_hash *tab;
+     const char *str;
+     boolean copy;
+{
+  boolean hash;
+  bfd_size_type index;
+
+  /* An index of 0 always means the empty string.  */
+  if (str == 0 || *str == '\0')
+    return 0;
+
+  /* Don't hash if BFD_TRADITIONAL_FORMAT is set, because SunOS dbx
+     doesn't understand a hashed string table.  */
+  hash = true;
+  if ((abfd->flags & BFD_TRADITIONAL_FORMAT) != 0)
+    hash = false;
+
+  index = _bfd_stringtab_add (tab, str, hash, copy);
+
+  if (index != (bfd_size_type) -1)
+    {
+      /* Add BYTES_IN_LONG to the return value to account for the
+	 space taken up by the string table size.  */
+      index += BYTES_IN_LONG;
+    }
+
+  return index;
+}
+
+/* Write out a strtab.  ABFD is already at the right location in the
+   file.  */
+
+static boolean
+emit_stringtab (abfd, tab)
+     register bfd *abfd;
+     struct bfd_strtab_hash *tab;
+{
+  bfd_byte buffer[BYTES_IN_LONG];
+
+  /* The string table starts with the size.  */
+  bfd_h_put_32 (abfd, _bfd_stringtab_size (tab) + BYTES_IN_LONG, buffer);
+  if (bfd_write ((PTR) buffer, 1, BYTES_IN_LONG, abfd) != BYTES_IN_LONG)
+    return false;
+
+  return _bfd_stringtab_emit (abfd, tab);
+}
+
+boolean
+NAME(aout,write_syms) (abfd)
+     bfd *abfd;
+{
+  unsigned int count ;
+  asymbol **generic = bfd_get_outsymbols (abfd);
+  struct bfd_strtab_hash *strtab;
+
+  strtab = _bfd_stringtab_init ();
+  if (strtab == NULL)
+    return false;
+
+  for (count = 0; count < bfd_get_symcount (abfd); count++)
+    {
+      asymbol *g = generic[count];
+      bfd_size_type indx;
+      struct external_nlist nsp;
+
+      PUT_WORD (abfd, 0, (bfd_byte *)nsp.e_unused);
+
+      indx = add_to_stringtab (abfd, strtab, g->name, false);
+      if (indx == (bfd_size_type) -1)
+	goto error_return;
+      PUT_WORD (abfd, indx, (bfd_byte *) nsp.e_strx);
+
+      if (bfd_asymbol_flavour(g) == abfd->xvec->flavour)
+	bfd_h_put_8 (abfd, aout_symbol(g)->type,  nsp.e_type);
+      else
+	bfd_h_put_8 (abfd, 0, nsp.e_type);
+
+      if (! translate_to_native_sym_flags (abfd, g, &nsp))
+	goto error_return;
+
+      bfd_h_put_8 (abfd, 0, nsp.e_ovly);
+
+      if (bfd_write((PTR)&nsp,1,EXTERNAL_NLIST_SIZE, abfd)
+	  != EXTERNAL_NLIST_SIZE)
+	goto error_return;
+
+      /* NB: `KEEPIT' currently overlays `udata.p', so set this only
+	 here, at the end.  */
+      g->KEEPIT = count;
+    }
+
+  if (! emit_stringtab (abfd, strtab))
+    goto error_return;
+
+  _bfd_stringtab_free (strtab);
+
+  return true;
+
+error_return:
+  _bfd_stringtab_free (strtab);
+  return false;
+}
+
+
+long
+NAME(aout,get_symtab) (abfd, location)
+     bfd *abfd;
+     asymbol **location;
+{
+    unsigned int counter = 0;
+    aout_symbol_type *symbase;
+
+    if (!NAME(aout,slurp_symbol_table)(abfd))
+      return -1;
+
+    for (symbase = obj_aout_symbols(abfd); counter++ < bfd_get_symcount (abfd);)
+      *(location++) = (asymbol *)( symbase++);
+    *location++ =0;
+    return bfd_get_symcount (abfd);
+}
+
+
+/* Standard reloc stuff */
+
+/* Extended stuff */
+/* Output extended relocation information to a file in target byte order. */
+
+void
+pdp11_aout_swap_reloc_out (abfd, g, natptr)
+     bfd *abfd;
+     arelent *g;
+     register struct pdp11_aout_reloc_external *natptr;
+{
+  int r_index;
+  int r_pcrel;
+  int reloc_entry;
+  int r_type;
+  asymbol *sym = *(g->sym_ptr_ptr);
+  asection *output_section = sym->section->output_section;
+
+  if (g->addend != 0)
+    fprintf (stderr, "BFD: can't do this reloc addend stuff\n");
+
+  r_pcrel = g->howto->pc_relative;
+
+  if (bfd_is_abs_section (output_section))
+    r_type = RABS;
+  else if (output_section == obj_textsec (abfd))
+    r_type = RTEXT;
+  else if (output_section == obj_datasec (abfd))
+    r_type = RDATA;
+  else if (output_section == obj_bsssec (abfd))
+    r_type = RBSS;
+  else if (bfd_is_und_section (output_section))
+    r_type = REXT;
+  else if (bfd_is_com_section (output_section))
+    r_type = REXT;
+  else
+    r_type = -1;
+
+  BFD_ASSERT (r_type != -1);
+
+  if (r_type == RABS)
+    r_index = 0;
+  else
+    r_index = (*(g->sym_ptr_ptr))->KEEPIT;
+
+#if 0
+  if (bfd_is_abs_section (bfd_get_section (sym)))
+    {
+      r_extern = 0;
+      r_index = N_ABS;
+      r_type = RABS;
+    }
+  else if ((sym->flags & BSF_SECTION_SYM) == 0)
+    {
+      if (bfd_is_und_section (bfd_get_section (sym))
+	  || (sym->flags & BSF_GLOBAL) != 0)
+	r_extern = 1;
+      else
+	r_extern = 0;
+      r_index = (*(g->sym_ptr_ptr))->KEEPIT;
+    }
+  else
+    {
+      /* Just an ordinary section */
+      r_extern = 0;
+      r_index = output_section->target_index;
+    }
+#endif
+
+  reloc_entry = r_index << 4 | r_type | r_pcrel;
+
+  PUT_WORD (abfd, reloc_entry, natptr->e_reloc_entry);
+}
+
+/* BFD deals internally with all things based from the section they're
+   in. so, something in 10 bytes into a text section  with a base of
+   50 would have a symbol (.text+10) and know .text vma was 50.
+
+   Aout keeps all it's symbols based from zero, so the symbol would
+   contain 60. This macro subs the base of each section from the value
+   to give the true offset from the section */
+
+
+#define MOVE_ADDRESS(ad)       						\
+  if (r_extern) 							\
+    {									\
+      /* Undefined symbol.  */						\
+      cache_ptr->sym_ptr_ptr = symbols + r_index;			\
+      cache_ptr->addend = ad;						\
+    }									\
+  else									\
+    {									\
+      /* Defined, section relative. replace symbol with pointer to    	\
+	 symbol which points to section.  */				\
+      switch (r_index)							\
+	{								\
+	case N_TEXT:							\
+	case N_TEXT | N_EXT:						\
+	  cache_ptr->sym_ptr_ptr  = obj_textsec (abfd)->symbol_ptr_ptr;	\
+	  cache_ptr->addend = ad  - su->textsec->vma;			\
+	  break;							\
+	case N_DATA:							\
+	case N_DATA | N_EXT:						\
+	  cache_ptr->sym_ptr_ptr  = obj_datasec (abfd)->symbol_ptr_ptr;	\
+	  cache_ptr->addend = ad - su->datasec->vma;			\
+	  break;							\
+	case N_BSS:							\
+	case N_BSS | N_EXT:						\
+	  cache_ptr->sym_ptr_ptr  = obj_bsssec (abfd)->symbol_ptr_ptr;	\
+	  cache_ptr->addend = ad - su->bsssec->vma;			\
+	  break;							\
+	default:							\
+	case N_ABS:							\
+	case N_ABS | N_EXT:						\
+	  cache_ptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;	\
+	  cache_ptr->addend = ad;					\
+	  break;							\
+	}								\
+    }     								
+
+void
+pdp11_aout_swap_reloc_in (abfd, bytes, cache_ptr, offset,
+			  symbols, symcount)
+     bfd *abfd;
+     struct pdp11_aout_reloc_external *bytes;
+     arelent *cache_ptr;
+     bfd_size_type offset;
+     asymbol **symbols;
+     bfd_size_type symcount;
+{
+  struct aoutdata *su = &(abfd->tdata.aout_data->a);
+  unsigned int r_index;
+  int reloc_entry;
+  int r_extern;
+  int r_pcrel;
+
+  reloc_entry = GET_WORD (abfd, (PTR)bytes);
+
+  r_pcrel = reloc_entry & RELFLG;
+
+  cache_ptr->address = offset;
+  cache_ptr->howto = howto_table_pdp11 + (r_pcrel ? 1 : 0);
+
+  if ((reloc_entry & RTYPE) == RABS)
+    r_index = N_ABS;
+  else
+    r_index = RINDEX (reloc_entry);
+
+  /* r_extern reflects whether the symbol the reloc is against is
+     local or global.  */
+  r_extern = (reloc_entry & RTYPE) == REXT;
+
+  if (r_extern && r_index > symcount)
+    {
+      /* We could arrange to return an error, but it might be useful
+         to see the file even if it is bad.  */
+      r_extern = 0;
+      r_index = N_ABS;
+    }
+
+  MOVE_ADDRESS(0);
+}
+
+/* Read and swap the relocs for a section.  */
+
+boolean
+NAME(aout,slurp_reloc_table) (abfd, asect, symbols)
+     bfd *abfd;
+     sec_ptr asect;
+     asymbol **symbols;
+{
+  struct pdp11_aout_reloc_external *rptr;
+  unsigned int count;
+  bfd_size_type reloc_size;
+  PTR relocs;
+  arelent *reloc_cache;
+  size_t each_size;
+  unsigned int counter = 0;
+  arelent *cache_ptr;
+
+  if (asect->relocation)
+    return true;
+
+  if (asect->flags & SEC_CONSTRUCTOR)
+    return true;
+
+  if (asect == obj_datasec (abfd))
+    reloc_size = exec_hdr(abfd)->a_drsize;
+  else if (asect == obj_textsec (abfd))
+    reloc_size = exec_hdr(abfd)->a_trsize;
+  else if (asect == obj_bsssec (abfd))
+    reloc_size = 0;
+  else
+    {
+      bfd_set_error (bfd_error_invalid_operation);
+      return false;
+    }
+
+  if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0)
+    return false;
+
+  each_size = obj_reloc_entry_size (abfd);
+
+  relocs = bfd_malloc ((size_t) reloc_size);
+  if (relocs == NULL && reloc_size != 0)
+    return false;
+
+  if (bfd_read (relocs, 1, reloc_size, abfd) != reloc_size)
+    {
+      free (relocs);
+      return false;
+    }
+
+  count = reloc_size / each_size;
+
+  /* Count the number of NON-ZERO relocs, this is the count we want. */
+  {
+    unsigned int real_count = 0;
+
+    for (counter = 0; counter < count; counter++)
+      {
+	int x;
+
+	x = GET_WORD (abfd, relocs + each_size * counter);
+	if (x != 0)
+	  real_count++;
+      }
+
+    count = real_count;
+  }
+
+  reloc_cache = (arelent *) bfd_malloc ((size_t) (count * sizeof (arelent)));
+  if (reloc_cache == NULL && count != 0)
+    return false;
+  memset (reloc_cache, 0, count * sizeof (arelent));
+
+  cache_ptr = reloc_cache;
+
+  rptr = (struct pdp11_aout_reloc_external *) relocs;
+  for (counter = 0;
+       counter < count;
+       counter++, ((char *)rptr) += RELOC_SIZE, cache_ptr++)
+    {
+      while (GET_WORD (abfd, (PTR)rptr) == 0)
+	{
+	  rptr =
+	    (struct pdp11_aout_reloc_external *)
+	    ((char *)rptr + RELOC_SIZE);
+	  if ((char *)rptr >= (char *)relocs + reloc_size)
+	    goto done;
+	}
+
+      pdp11_aout_swap_reloc_in (abfd, rptr, cache_ptr,
+				(char *)rptr - (char *)relocs,
+				    symbols, bfd_get_symcount (abfd));
+    }
+ done:
+  /* Just in case, if rptr >= relocs + reloc_size should happen
+     too early. */
+  BFD_ASSERT (counter == count);
+
+  free (relocs);
+
+  asect->relocation = reloc_cache;
+  asect->reloc_count = cache_ptr - reloc_cache;
+
+  return true;
+}
+
+/* Write out a relocation section into an object file.  */
+
+boolean
+NAME(aout,squirt_out_relocs) (abfd, section)
+     bfd *abfd;
+     asection *section;
+{
+  arelent **generic;
+  unsigned char *native;
+  unsigned int count = section->reloc_count;
+  size_t natsize;
+
+#if 0
+  /* If we're writing an .o file, we must write
+     relocation information, even if there is none. */
+  if ((count == 0 || section->orelocation == NULL) &&
+      <writing_executable>)
+    return true;
+#endif
+
+  natsize = bfd_get_section_size_before_reloc (section);
+  native = (unsigned char *) bfd_zalloc (abfd, natsize);
+  if (!native)
+    return false;
+
+  memset ((PTR)native, 0, natsize);
+
+  generic = section->orelocation;
+  if (generic != NULL)
+    {
+      while (count > 0)
+	{
+	  struct pdp11_aout_reloc_external *r;
+
+	  r = (struct pdp11_aout_reloc_external *)
+	    (native + (*generic)->address);
+	  pdp11_aout_swap_reloc_out (abfd, *generic, r);
+	  count--;
+	  generic++;
+	}
+    }
+
+  if (bfd_write ((PTR) native, 1, natsize, abfd) != natsize)
+    {
+      bfd_release(abfd, native);
+      return false;
+    }
+
+  bfd_release (abfd, native);
+
+  return true;
+}
+
+/* This is stupid.  This function should be a boolean predicate */
+long
+NAME(aout,canonicalize_reloc) (abfd, section, relptr, symbols)
+     bfd *abfd;
+     sec_ptr section;
+     arelent **relptr;
+     asymbol **symbols;
+{
+  arelent *tblptr = section->relocation;
+  unsigned int count;
+
+  if (section == obj_bsssec (abfd))
+    {
+      *relptr = NULL;
+      return 0;
+    }
+
+  if (!(tblptr || NAME(aout,slurp_reloc_table)(abfd, section, symbols)))
+    return -1;
+
+  if (section->flags & SEC_CONSTRUCTOR)
+    {
+      arelent_chain *chain = section->constructor_chain;
+
+      for (count = 0; count < section->reloc_count; count ++)
+	{
+	  *relptr ++ = &chain->relent;
+	  chain = chain->next;
+	}
+    }
+  else
+    {
+      tblptr = section->relocation;
+
+      for (count = 0; count++ < section->reloc_count;)
+	*relptr++ = tblptr++;
+    }
+
+  *relptr = 0;
+
+  return section->reloc_count;
+}
+
+long
+NAME(aout,get_reloc_upper_bound) (abfd, asect)
+     bfd *abfd;
+     sec_ptr asect;
+{
+  if (bfd_get_format (abfd) != bfd_object)
+    {
+      bfd_set_error (bfd_error_invalid_operation);
+      return -1;
+    }
+
+  if (asect->flags & SEC_CONSTRUCTOR) 
+    return (sizeof (arelent *) * (asect->reloc_count+1));
+
+  if (asect == obj_datasec (abfd))
+    return (sizeof (arelent *)
+	    * ((exec_hdr(abfd)->a_drsize / obj_reloc_entry_size (abfd))
+	       + 1));
+
+  if (asect == obj_textsec (abfd))
+    return (sizeof (arelent *)
+	    * ((exec_hdr(abfd)->a_trsize / obj_reloc_entry_size (abfd))
+	       + 1));
+
+  /* TODO: why are there two if statements for obj_bsssec()? */
+
+  if (asect == obj_bsssec (abfd))
+    return sizeof (arelent *);
+
+  if (asect == obj_bsssec (abfd))
+    return 0;
+
+  bfd_set_error (bfd_error_invalid_operation);
+  return -1;
+}
+
+
+long
+NAME(aout,get_symtab_upper_bound) (abfd)
+     bfd *abfd;
+{
+  if (!NAME(aout,slurp_symbol_table)(abfd))
+    return -1;
+
+  return (bfd_get_symcount (abfd) + 1) * (sizeof (aout_symbol_type *));
+}
+
+alent *
+NAME(aout,get_lineno) (abfd, symbol)
+     bfd * abfd ATTRIBUTE_UNUSED;
+     asymbol * symbol ATTRIBUTE_UNUSED;
+{
+  return (alent *)NULL;
+}
+
+void
+NAME(aout,get_symbol_info) (abfd, symbol, ret)
+     bfd * abfd ATTRIBUTE_UNUSED;
+     asymbol *symbol;
+     symbol_info *ret;
+{
+  bfd_symbol_info (symbol, ret);
+
+  if (ret->type == '?')
+    {
+      int type_code = aout_symbol(symbol)->type & 0xff;
+      const char *stab_name = bfd_get_stab_name (type_code);
+      static char buf[10];
+
+      if (stab_name == NULL)
+	{
+	  sprintf(buf, "(%d)", type_code);
+	  stab_name = buf;
+	}
+      ret->type = '-';
+      ret->stab_type = type_code;
+      ret->stab_other = (unsigned)(aout_symbol(symbol)->other & 0xff);
+      ret->stab_desc = (unsigned)(aout_symbol(symbol)->desc & 0xffff);
+      ret->stab_name = stab_name;
+    }
+}
+
+/*ARGSUSED*/
+void
+NAME(aout,print_symbol) (abfd, afile, symbol, how)
+     bfd * abfd ATTRIBUTE_UNUSED;
+     PTR afile;
+     asymbol *symbol;
+     bfd_print_symbol_type how;
+{
+  FILE *file = (FILE *)afile;
+
+  switch (how)
+    {
+    case bfd_print_symbol_name:
+      if (symbol->name)
+	fprintf(file,"%s", symbol->name);
+      break;
+    case bfd_print_symbol_more:
+      fprintf(file,"%4x %2x %2x",(unsigned)(aout_symbol(symbol)->desc & 0xffff),
+	      (unsigned)(aout_symbol(symbol)->other & 0xff),
+	      (unsigned)(aout_symbol(symbol)->type));
+      break;
+    case bfd_print_symbol_all:
+      {
+	CONST char *section_name = symbol->section->name;
+
+	bfd_print_symbol_vandf ((PTR)file,symbol);
+
+	fprintf (file," %-5s %04x %02x %02x",
+		 section_name,
+		 (unsigned)(aout_symbol(symbol)->desc & 0xffff),
+		 (unsigned)(aout_symbol(symbol)->other & 0xff),
+		 (unsigned)(aout_symbol(symbol)->type  & 0xff));
+	if (symbol->name)
+	  fprintf(file," %s", symbol->name);
+      }
+      break;
+    }
+}
+
+/* If we don't have to allocate more than 1MB to hold the generic
+   symbols, we use the generic minisymbol method: it's faster, since
+   it only translates the symbols once, not multiple times.  */
+#define MINISYM_THRESHOLD (1000000 / sizeof (asymbol))
+
+/* Read minisymbols.  For minisymbols, we use the unmodified a.out
+   symbols.  The minisymbol_to_symbol function translates these into
+   BFD asymbol structures.  */
+
+long
+NAME(aout,read_minisymbols) (abfd, dynamic, minisymsp, sizep)
+     bfd *abfd;
+     boolean dynamic;
+     PTR *minisymsp;
+     unsigned int *sizep;
+{
+  if (dynamic)
+    {
+      /* We could handle the dynamic symbols here as well, but it's
+         easier to hand them off.  */
+      return _bfd_generic_read_minisymbols (abfd, dynamic, minisymsp, sizep);
+    }
+
+  if (! aout_get_external_symbols (abfd))
+    return -1;
+
+  if (obj_aout_external_sym_count (abfd) < MINISYM_THRESHOLD)
+    return _bfd_generic_read_minisymbols (abfd, dynamic, minisymsp, sizep);
+
+  *minisymsp = (PTR) obj_aout_external_syms (abfd);
+
+  /* By passing the external symbols back from this routine, we are
+     giving up control over the memory block.  Clear
+     obj_aout_external_syms, so that we do not try to free it
+     ourselves.  */
+  obj_aout_external_syms (abfd) = NULL;
+
+  *sizep = EXTERNAL_NLIST_SIZE;
+  return obj_aout_external_sym_count (abfd);
+}
+
+/* Convert a minisymbol to a BFD asymbol.  A minisymbol is just an
+   unmodified a.out symbol.  The SYM argument is a structure returned
+   by bfd_make_empty_symbol, which we fill in here.  */
+
+asymbol *
+NAME(aout,minisymbol_to_symbol) (abfd, dynamic, minisym, sym)
+     bfd *abfd;
+     boolean dynamic;
+     const PTR minisym;
+     asymbol *sym;
+{
+  if (dynamic
+      || obj_aout_external_sym_count (abfd) < MINISYM_THRESHOLD)
+    return _bfd_generic_minisymbol_to_symbol (abfd, dynamic, minisym, sym);
+
+  memset (sym, 0, sizeof (aout_symbol_type));
+
+  /* We call translate_symbol_table to translate a single symbol.  */
+  if (! (NAME(aout,translate_symbol_table)
+	 (abfd,
+	  (aout_symbol_type *) sym,
+	  (struct external_nlist *) minisym,
+	  (bfd_size_type) 1,
+	  obj_aout_external_strings (abfd),
+	  obj_aout_external_string_size (abfd),
+	  false)))
+    return NULL;
+
+  return sym;
+}
+
+/*
+ provided a BFD, a section and an offset into the section, calculate
+ and return the name of the source file and the line nearest to the
+ wanted location.
+*/
+
+boolean
+NAME(aout,find_nearest_line)
+     (abfd, section, symbols, offset, filename_ptr, functionname_ptr, line_ptr)
+     bfd *abfd;
+     asection *section;
+     asymbol **symbols;
+     bfd_vma offset;
+     CONST char **filename_ptr;
+     CONST char **functionname_ptr;
+     unsigned int *line_ptr;
+{
+  /* Run down the file looking for the filename, function and linenumber */
+  asymbol **p;
+  CONST char *directory_name = NULL;
+  CONST char *main_file_name = NULL;
+  CONST char *current_file_name = NULL;
+  CONST char *line_file_name = NULL; /* Value of current_file_name at line number. */
+  bfd_vma low_line_vma = 0;
+  bfd_vma low_func_vma = 0;
+  asymbol *func = 0;
+  size_t filelen, funclen;
+  char *buf;
+
+  *filename_ptr = abfd->filename;
+  *functionname_ptr = 0;
+  *line_ptr = 0;
+
+  if (symbols != (asymbol **)NULL)
+    {
+      for (p = symbols; *p; p++)
+	{
+	  aout_symbol_type  *q = (aout_symbol_type *)(*p);
+	next:
+	  switch (q->type)
+	    {
+	    case N_TEXT:
+	      /* If this looks like a file name symbol, and it comes after
+		 the line number we have found so far, but before the
+		 offset, then we have probably not found the right line
+		 number.  */
+	      if (q->symbol.value <= offset
+		  && ((q->symbol.value > low_line_vma
+		       && (line_file_name != NULL
+			   || *line_ptr != 0))
+		      || (q->symbol.value > low_func_vma
+			  && func != NULL)))
+		{
+		  const char * symname;
+
+		  symname = q->symbol.name;
+		  if (strcmp (symname + strlen (symname) - 2, ".o") == 0)
+		    {
+		      if (q->symbol.value > low_line_vma)
+			{
+			  *line_ptr = 0;
+			  line_file_name = NULL;
+			}
+		      if (q->symbol.value > low_func_vma)
+			func = NULL;
+		    }
+		}
+	      break;
+
+	    case N_SO:
+	      /* If this symbol is less than the offset, but greater than
+		 the line number we have found so far, then we have not
+		 found the right line number.  */
+	      if (q->symbol.value <= offset)
+		{
+		  if (q->symbol.value > low_line_vma)
+		    {
+		      *line_ptr = 0;
+		      line_file_name = NULL;
+		    }
+		  if (q->symbol.value > low_func_vma)
+		    func = NULL;
+		}
+
+	      main_file_name = current_file_name = q->symbol.name;
+	      /* Look ahead to next symbol to check if that too is an N_SO. */
+	      p++;
+	      if (*p == NULL)
+		break;
+	      q = (aout_symbol_type *)(*p);
+	      if (q->type != (int)N_SO)
+		goto next;
+
+	      /* Found a second N_SO  First is directory; second is filename. */
+	      directory_name = current_file_name;
+	      main_file_name = current_file_name = q->symbol.name;
+	      if (obj_textsec(abfd) != section)
+		goto done;
+	      break;
+	    case N_SOL:
+	      current_file_name = q->symbol.name;
+	      break;
+
+	    case N_SLINE:
+	    case N_DSLINE:
+	    case N_BSLINE:
+	      /* We'll keep this if it resolves nearer than the one we have
+		 already.  */
+	      if (q->symbol.value >= low_line_vma
+		  && q->symbol.value <= offset)
+		{
+		  *line_ptr = q->desc;
+		  low_line_vma = q->symbol.value;
+		  line_file_name = current_file_name;
+		}
+	      break;
+
+	    case N_FUN:
+	      {
+		/* We'll keep this if it is nearer than the one we have already */
+		if (q->symbol.value >= low_func_vma &&
+		    q->symbol.value <= offset)
+		  {
+		    low_func_vma = q->symbol.value;
+		    func = (asymbol *)q;
+		  }
+		else if (q->symbol.value > offset)
+		  goto done;
+	      }
+	      break;
+	    }
+	}
+    }
+
+ done:
+  if (*line_ptr != 0)
+    main_file_name = line_file_name;
+
+  if (main_file_name == NULL
+      || main_file_name[0] == '/'
+      || directory_name == NULL)
+    filelen = 0;
+  else
+    filelen = strlen (directory_name) + strlen (main_file_name);
+  if (func == NULL)
+    funclen = 0;
+  else
+    funclen = strlen (bfd_asymbol_name (func));
+
+  if (adata (abfd).line_buf != NULL)
+    free (adata (abfd).line_buf);
+  if (filelen + funclen == 0)
+    adata (abfd).line_buf = buf = NULL;
+  else
+    {
+      buf = (char *) bfd_malloc (filelen + funclen + 3);
+      adata (abfd).line_buf = buf;
+      if (buf == NULL)
+	return false;
+    }
+
+  if (main_file_name != NULL)
+    {
+      if (main_file_name[0] == '/' || directory_name == NULL)
+	*filename_ptr = main_file_name;
+      else
+	{
+	  sprintf (buf, "%s%s", directory_name, main_file_name);
+	  *filename_ptr = buf;
+	  buf += filelen + 1;
+	}
+    }
+
+  if (func)
+    {
+      const char *function = func->name;
+      char *p;
+
+      /* The caller expects a symbol name.  We actually have a
+	 function name, without the leading underscore.  Put the
+	 underscore back in, so that the caller gets a symbol name.  */
+      if (bfd_get_symbol_leading_char (abfd) == '\0')
+	strcpy (buf, function);
+      else
+	{
+	  buf[0] = bfd_get_symbol_leading_char (abfd);
+	  strcpy (buf + 1, function);
+	}
+
+      /* Have to remove : stuff.  */
+      p = strchr (buf, ':');
+      if (p != NULL)
+	*p = '\0';
+      *functionname_ptr = buf;
+    }
+
+  return true;
+}
+
+int
+NAME(aout,sizeof_headers) (abfd, execable)
+     bfd *abfd;
+     boolean execable ATTRIBUTE_UNUSED;
+{
+  return adata(abfd).exec_bytes_size;
+}
+
+/* Free all information we have cached for this BFD.  We can always
+   read it again later if we need it.  */
+
+boolean
+NAME(aout,bfd_free_cached_info) (abfd)
+     bfd *abfd;
+{
+  asection *o;
+
+  if (bfd_get_format (abfd) != bfd_object)
+    return true;
+
+#define BFCI_FREE(x) if (x != NULL) { free (x); x = NULL; }
+  BFCI_FREE (obj_aout_symbols (abfd));
+#ifdef USE_MMAP
+  obj_aout_external_syms (abfd) = 0;
+  bfd_free_window (&obj_aout_sym_window (abfd));
+  bfd_free_window (&obj_aout_string_window (abfd));
+  obj_aout_external_strings (abfd) = 0;
+#else
+  BFCI_FREE (obj_aout_external_syms (abfd));
+  BFCI_FREE (obj_aout_external_strings (abfd));
+#endif
+  for (o = abfd->sections; o != (asection *) NULL; o = o->next)
+    BFCI_FREE (o->relocation);
+#undef BFCI_FREE
+
+  return true;
+}
+
+/* a.out link code.  */
+
+static boolean aout_link_add_object_symbols
+  PARAMS ((bfd *, struct bfd_link_info *));
+static boolean aout_link_check_archive_element
+  PARAMS ((bfd *, struct bfd_link_info *, boolean *));
+static boolean aout_link_free_symbols PARAMS ((bfd *));
+static boolean aout_link_check_ar_symbols
+  PARAMS ((bfd *, struct bfd_link_info *, boolean *pneeded));
+static boolean aout_link_add_symbols
+  PARAMS ((bfd *, struct bfd_link_info *));
+
+/* Routine to create an entry in an a.out link hash table.  */
+
+struct bfd_hash_entry *
+NAME(aout,link_hash_newfunc) (entry, table, string)
+     struct bfd_hash_entry *entry;
+     struct bfd_hash_table *table;
+     const char *string;
+{
+  struct aout_link_hash_entry *ret = (struct aout_link_hash_entry *) entry;
+
+  /* Allocate the structure if it has not already been allocated by a
+     subclass.  */
+  if (ret == (struct aout_link_hash_entry *) NULL)
+    ret = ((struct aout_link_hash_entry *)
+	   bfd_hash_allocate (table, sizeof (struct aout_link_hash_entry)));
+  if (ret == (struct aout_link_hash_entry *) NULL)
+    return (struct bfd_hash_entry *) ret;
+
+  /* Call the allocation method of the superclass.  */
+  ret = ((struct aout_link_hash_entry *)
+	 _bfd_link_hash_newfunc ((struct bfd_hash_entry *) ret,
+				 table, string));
+  if (ret)
+    {
+      /* Set local fields.  */
+      ret->written = false;
+      ret->indx = -1;
+    }
+
+  return (struct bfd_hash_entry *) ret;
+}
+
+/* Initialize an a.out link hash table.  */
+
+boolean
+NAME(aout,link_hash_table_init) (table, abfd, newfunc)
+     struct aout_link_hash_table *table;
+     bfd *abfd;
+     struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
+						struct bfd_hash_table *,
+						const char *));
+{
+  return _bfd_link_hash_table_init (&table->root, abfd, newfunc);
+}
+
+/* Create an a.out link hash table.  */
+
+struct bfd_link_hash_table *
+NAME(aout,link_hash_table_create) (abfd)
+     bfd *abfd;
+{
+  struct aout_link_hash_table *ret;
+
+  ret = ((struct aout_link_hash_table *)
+	 bfd_alloc (abfd, sizeof (struct aout_link_hash_table)));
+  if (ret == NULL)
+    return (struct bfd_link_hash_table *) NULL;
+  if (! NAME(aout,link_hash_table_init) (ret, abfd,
+					 NAME(aout,link_hash_newfunc)))
+    {
+      free (ret);
+      return (struct bfd_link_hash_table *) NULL;
+    }
+  return &ret->root;
+}
+
+/* Given an a.out BFD, add symbols to the global hash table as
+   appropriate.  */
+
+boolean
+NAME(aout,link_add_symbols) (abfd, info)
+     bfd *abfd;
+     struct bfd_link_info *info;
+{
+  switch (bfd_get_format (abfd))
+    {
+    case bfd_object:
+      return aout_link_add_object_symbols (abfd, info);
+    case bfd_archive:
+      return _bfd_generic_link_add_archive_symbols
+	(abfd, info, aout_link_check_archive_element);
+    default:
+      bfd_set_error (bfd_error_wrong_format);
+      return false;
+    }
+}
+
+/* Add symbols from an a.out object file.  */
+
+static boolean
+aout_link_add_object_symbols (abfd, info)
+     bfd *abfd;
+     struct bfd_link_info *info;
+{
+  if (! aout_get_external_symbols (abfd))
+    return false;
+  if (! aout_link_add_symbols (abfd, info))
+    return false;
+  if (! info->keep_memory)
+    {
+      if (! aout_link_free_symbols (abfd))
+	return false;
+    }
+  return true;
+}
+
+/* Check a single archive element to see if we need to include it in
+   the link.  *PNEEDED is set according to whether this element is
+   needed in the link or not.  This is called from
+   _bfd_generic_link_add_archive_symbols.  */
+
+static boolean
+aout_link_check_archive_element (abfd, info, pneeded)
+     bfd *abfd;
+     struct bfd_link_info *info;
+     boolean *pneeded;
+{
+  if (! aout_get_external_symbols (abfd))
+    return false;
+
+  if (! aout_link_check_ar_symbols (abfd, info, pneeded))
+    return false;
+
+  if (*pneeded)
+    {
+      if (! aout_link_add_symbols (abfd, info))
+	return false;
+    }
+
+  if (! info->keep_memory || ! *pneeded)
+    {
+      if (! aout_link_free_symbols (abfd))
+	return false;
+    }
+
+  return true;
+}
+
+/* Free up the internal symbols read from an a.out file.  */
+
+static boolean
+aout_link_free_symbols (abfd)
+     bfd *abfd;
+{
+  if (obj_aout_external_syms (abfd) != (struct external_nlist *) NULL)
+    {
+#ifdef USE_MMAP
+      bfd_free_window (&obj_aout_sym_window (abfd));
+#else
+      free ((PTR) obj_aout_external_syms (abfd));
+#endif
+      obj_aout_external_syms (abfd) = (struct external_nlist *) NULL;
+    }
+  if (obj_aout_external_strings (abfd) != (char *) NULL)
+    {
+#ifdef USE_MMAP
+      bfd_free_window (&obj_aout_string_window (abfd));
+#else
+      free ((PTR) obj_aout_external_strings (abfd));
+#endif
+      obj_aout_external_strings (abfd) = (char *) NULL;
+    }
+  return true;
+}
+
+/* Look through the internal symbols to see if this object file should
+   be included in the link.  We should include this object file if it
+   defines any symbols which are currently undefined.  If this object
+   file defines a common symbol, then we may adjust the size of the
+   known symbol but we do not include the object file in the link
+   (unless there is some other reason to include it).  */
+
+static boolean
+aout_link_check_ar_symbols (abfd, info, pneeded)
+     bfd *abfd;
+     struct bfd_link_info *info;
+     boolean *pneeded;
+{
+  register struct external_nlist *p;
+  struct external_nlist *pend;
+  char *strings;
+
+  *pneeded = false;
+
+  /* Look through all the symbols.  */
+  p = obj_aout_external_syms (abfd);
+  pend = p + obj_aout_external_sym_count (abfd);
+  strings = obj_aout_external_strings (abfd);
+  for (; p < pend; p++)
+    {
+      int type = bfd_h_get_8 (abfd, p->e_type);
+      const char *name;
+      struct bfd_link_hash_entry *h;
+
+      /* Ignore symbols that are not externally visible.  This is an
+	 optimization only, as we check the type more thoroughly
+	 below.  */
+      if ((type & N_EXT) == 0
+	  || type == N_FN)
+	continue;
+
+      name = strings + GET_WORD (abfd, p->e_strx);
+      h = bfd_link_hash_lookup (info->hash, name, false, false, true);
+
+      /* We are only interested in symbols that are currently
+	 undefined or common.  */
+      if (h == (struct bfd_link_hash_entry *) NULL
+	  || (h->type != bfd_link_hash_undefined
+	      && h->type != bfd_link_hash_common))
+	continue;
+
+      if (type == (N_TEXT | N_EXT)
+	  || type == (N_DATA | N_EXT)
+	  || type == (N_BSS | N_EXT)
+	  || type == (N_ABS | N_EXT))
+	{
+	  /* This object file defines this symbol.  We must link it
+	     in.  This is true regardless of whether the current
+	     definition of the symbol is undefined or common.  If the
+	     current definition is common, we have a case in which we
+	     have already seen an object file including
+	         int a;
+	     and this object file from the archive includes
+	         int a = 5;
+	     In such a case we must include this object file.
+
+	     FIXME: The SunOS 4.1.3 linker will pull in the archive
+	     element if the symbol is defined in the .data section,
+	     but not if it is defined in the .text section.  That
+	     seems a bit crazy to me, and I haven't implemented it.
+	     However, it might be correct.  */
+	  if (! (*info->callbacks->add_archive_element) (info, abfd, name))
+	    return false;
+	  *pneeded = true;
+	  return true;
+	}
+
+      if (type == (N_UNDF | N_EXT))
+	{
+	  bfd_vma value;
+
+	  value = GET_WORD (abfd, p->e_value);
+	  if (value != 0)
+	    {
+	      /* This symbol is common in the object from the archive
+		 file.  */
+	      if (h->type == bfd_link_hash_undefined)
+		{
+		  bfd *symbfd;
+		  unsigned int power;
+
+		  symbfd = h->u.undef.abfd;
+		  if (symbfd == (bfd *) NULL)
+		    {
+		      /* This symbol was created as undefined from
+			 outside BFD.  We assume that we should link
+			 in the object file.  This is done for the -u
+			 option in the linker.  */
+		      if (! (*info->callbacks->add_archive_element) (info,
+								     abfd,
+								     name))
+			return false;
+		      *pneeded = true;
+		      return true;
+		    }
+		  /* Turn the current link symbol into a common
+		     symbol.  It is already on the undefs list.  */
+		  h->type = bfd_link_hash_common;
+		  h->u.c.p = ((struct bfd_link_hash_common_entry *)
+			      bfd_hash_allocate (&info->hash->table,
+				  sizeof (struct bfd_link_hash_common_entry)));
+		  if (h->u.c.p == NULL)
+		    return false;
+
+		  h->u.c.size = value;
+
+		  /* FIXME: This isn't quite right.  The maximum
+		     alignment of a common symbol should be set by the
+		     architecture of the output file, not of the input
+		     file.  */
+		  power = bfd_log2 (value);
+		  if (power > bfd_get_arch_info (abfd)->section_align_power)
+		    power = bfd_get_arch_info (abfd)->section_align_power;
+		  h->u.c.p->alignment_power = power;
+
+		  h->u.c.p->section = bfd_make_section_old_way (symbfd,
+								"COMMON");
+		}
+	      else
+		{
+		  /* Adjust the size of the common symbol if
+		     necessary.  */
+		  if (value > h->u.c.size)
+		    h->u.c.size = value;
+		}
+	    }
+	}
+    }
+
+  /* We do not need this object file.  */
+  return true;
+}
+
+/* Add all symbols from an object file to the hash table.  */
+
+static boolean
+aout_link_add_symbols (abfd, info)
+     bfd *abfd;
+     struct bfd_link_info *info;
+{
+  boolean (*add_one_symbol) PARAMS ((struct bfd_link_info *, bfd *,
+				     const char *, flagword, asection *,
+				     bfd_vma, const char *, boolean,
+				     boolean,
+				     struct bfd_link_hash_entry **));
+  struct external_nlist *syms;
+  bfd_size_type sym_count;
+  char *strings;
+  boolean copy;
+  struct aout_link_hash_entry **sym_hash;
+  register struct external_nlist *p;
+  struct external_nlist *pend;
+
+  syms = obj_aout_external_syms (abfd);
+  sym_count = obj_aout_external_sym_count (abfd);
+  strings = obj_aout_external_strings (abfd);
+  if (info->keep_memory)
+    copy = false;
+  else
+    copy = true;
+
+  if (aout_backend_info (abfd)->add_dynamic_symbols != NULL)
+    {
+      if (! ((*aout_backend_info (abfd)->add_dynamic_symbols)
+	     (abfd, info, &syms, &sym_count, &strings)))
+	return false;
+    }
+
+  /* We keep a list of the linker hash table entries that correspond
+     to particular symbols.  We could just look them up in the hash
+     table, but keeping the list is more efficient.  Perhaps this
+     should be conditional on info->keep_memory.  */
+  sym_hash = ((struct aout_link_hash_entry **)
+	      bfd_alloc (abfd,
+			 ((size_t) sym_count
+			  * sizeof (struct aout_link_hash_entry *))));
+  if (sym_hash == NULL && sym_count != 0)
+    return false;
+  obj_aout_sym_hashes (abfd) = sym_hash;
+
+  add_one_symbol = aout_backend_info (abfd)->add_one_symbol;
+  if (add_one_symbol == NULL)
+    add_one_symbol = _bfd_generic_link_add_one_symbol;
+
+  p = syms;
+  pend = p + sym_count;
+  for (; p < pend; p++, sym_hash++)
+    {
+      int type;
+      const char *name;
+      bfd_vma value;
+      asection *section;
+      flagword flags;
+      const char *string;
+
+      *sym_hash = NULL;
+
+      type = bfd_h_get_8 (abfd, p->e_type);
+
+#if 0 /* not supported in PDP-11 a.out */
+      /* Ignore debugging symbols.  */
+      if ((type & N_STAB) != 0)
+	continue;
+#endif
+
+      name = strings + GET_WORD (abfd, p->e_strx);
+      value = GET_WORD (abfd, p->e_value);
+      flags = BSF_GLOBAL;
+      string = NULL;
+      switch (type)
+	{
+	default:
+	  abort ();
+
+	case N_UNDF:
+	case N_ABS:
+	case N_TEXT:
+	case N_DATA:
+	case N_BSS:
+	case N_REG:
+	case N_FN:
+	  /* Ignore symbols that are not externally visible.  */
+	  continue;
+
+	case N_UNDF | N_EXT:
+	  if (value == 0)
+	    {
+	      section = bfd_und_section_ptr;
+	      flags = 0;
+	    }
+	  else
+	    section = bfd_com_section_ptr;
+	  break;
+	case N_ABS | N_EXT:
+	  section = bfd_abs_section_ptr;
+	  break;
+	case N_TEXT | N_EXT:
+	  section = obj_textsec (abfd);
+	  value -= bfd_get_section_vma (abfd, section);
+	  break;
+	case N_DATA | N_EXT:
+	  /* Treat N_SETV symbols as N_DATA symbol; see comment in
+	     translate_from_native_sym_flags.  */
+	  section = obj_datasec (abfd);
+	  value -= bfd_get_section_vma (abfd, section);
+	  break;
+	case N_BSS | N_EXT:
+	  section = obj_bsssec (abfd);
+	  value -= bfd_get_section_vma (abfd, section);
+	  break;
+	}
+
+      if (! ((*add_one_symbol)
+	     (info, abfd, name, flags, section, value, string, copy, false,
+	      (struct bfd_link_hash_entry **) sym_hash)))
+	return false;
+
+      /* Restrict the maximum alignment of a common symbol based on
+	 the architecture, since a.out has no way to represent
+	 alignment requirements of a section in a .o file.  FIXME:
+	 This isn't quite right: it should use the architecture of the
+	 output file, not the input files.  */
+      if ((*sym_hash)->root.type == bfd_link_hash_common
+	  && ((*sym_hash)->root.u.c.p->alignment_power >
+	      bfd_get_arch_info (abfd)->section_align_power))
+	(*sym_hash)->root.u.c.p->alignment_power =
+	  bfd_get_arch_info (abfd)->section_align_power;
+
+      /* If this is a set symbol, and we are not building sets, then
+	 it is possible for the hash entry to not have been set.  In
+	 such a case, treat the symbol as not globally defined.  */
+      if ((*sym_hash)->root.type == bfd_link_hash_new)
+	{
+	  BFD_ASSERT ((flags & BSF_CONSTRUCTOR) != 0);
+	  *sym_hash = NULL;
+	}
+    }
+
+  return true;
+}
+
+/* A hash table used for header files with N_BINCL entries.  */
+
+struct aout_link_includes_table
+{
+  struct bfd_hash_table root;
+};
+
+/* A linked list of totals that we have found for a particular header
+   file.  */
+
+struct aout_link_includes_totals
+{
+  struct aout_link_includes_totals *next;
+  bfd_vma total;
+};
+
+/* An entry in the header file hash table.  */
+
+struct aout_link_includes_entry
+{
+  struct bfd_hash_entry root;
+  /* List of totals we have found for this file.  */
+  struct aout_link_includes_totals *totals;
+};
+
+/* Look up an entry in an the header file hash table.  */
+
+#define aout_link_includes_lookup(table, string, create, copy) \
+  ((struct aout_link_includes_entry *) \
+   bfd_hash_lookup (&(table)->root, (string), (create), (copy)))
+
+/* During the final link step we need to pass around a bunch of
+   information, so we do it in an instance of this structure.  */
+
+struct aout_final_link_info
+{
+  /* General link information.  */
+  struct bfd_link_info *info;
+  /* Output bfd.  */
+  bfd *output_bfd;
+  /* Reloc file positions.  */
+  file_ptr treloff, dreloff;
+  /* File position of symbols.  */
+  file_ptr symoff;
+  /* String table.  */
+  struct bfd_strtab_hash *strtab;
+  /* Header file hash table.  */
+  struct aout_link_includes_table includes;
+  /* A buffer large enough to hold the contents of any section.  */
+  bfd_byte *contents;
+  /* A buffer large enough to hold the relocs of any section.  */
+  PTR relocs;
+  /* A buffer large enough to hold the symbol map of any input BFD.  */
+  int *symbol_map;
+  /* A buffer large enough to hold output symbols of any input BFD.  */
+  struct external_nlist *output_syms;
+};
+
+static struct bfd_hash_entry *aout_link_includes_newfunc
+  PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
+static boolean aout_link_input_bfd
+  PARAMS ((struct aout_final_link_info *, bfd *input_bfd));
+static boolean aout_link_write_symbols
+  PARAMS ((struct aout_final_link_info *, bfd *input_bfd));
+static boolean aout_link_write_other_symbol
+  PARAMS ((struct aout_link_hash_entry *, PTR));
+static boolean aout_link_input_section
+  PARAMS ((struct aout_final_link_info *, bfd *input_bfd,
+	   asection *input_section, file_ptr *reloff_ptr,
+	   bfd_size_type rel_size));
+static INLINE asection *aout_reloc_type_to_section
+  PARAMS ((bfd *, int));
+static boolean aout_link_reloc_link_order
+  PARAMS ((struct aout_final_link_info *, asection *,
+	   struct bfd_link_order *));
+static boolean pdp11_aout_link_input_section
+  PARAMS ((struct aout_final_link_info *finfo,
+	   bfd *input_bfd,
+	   asection *input_section,
+	   struct pdp11_aout_reloc_external *relocs,
+	   bfd_size_type rel_size,
+	   bfd_byte *contents));
+
+/* The function to create a new entry in the header file hash table.  */
+
+static struct bfd_hash_entry *
+aout_link_includes_newfunc (entry, table, string)
+     struct bfd_hash_entry *entry;
+     struct bfd_hash_table *table;
+     const char *string;
+{
+  struct aout_link_includes_entry *ret =
+    (struct aout_link_includes_entry *) entry;
+
+  /* Allocate the structure if it has not already been allocated by a
+     subclass.  */
+  if (ret == (struct aout_link_includes_entry *) NULL)
+    ret = ((struct aout_link_includes_entry *)
+	   bfd_hash_allocate (table,
+			      sizeof (struct aout_link_includes_entry)));
+  if (ret == (struct aout_link_includes_entry *) NULL)
+    return (struct bfd_hash_entry *) ret;
+
+  /* Call the allocation method of the superclass.  */
+  ret = ((struct aout_link_includes_entry *)
+	 bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string));
+  if (ret)
+    {
+      /* Set local fields.  */
+      ret->totals = NULL;
+    }
+
+  return (struct bfd_hash_entry *) ret;
+}
+
+/* Do the final link step.  This is called on the output BFD.  The
+   INFO structure should point to a list of BFDs linked through the
+   link_next field which can be used to find each BFD which takes part
+   in the output.  Also, each section in ABFD should point to a list
+   of bfd_link_order structures which list all the input sections for
+   the output section.  */
+
+boolean
+NAME(aout,final_link) (abfd, info, callback)
+     bfd *abfd;
+     struct bfd_link_info *info;
+     void (*callback) PARAMS ((bfd *, file_ptr *, file_ptr *, file_ptr *));
+{
+  struct aout_final_link_info aout_info;
+  boolean includes_hash_initialized = false;
+  register bfd *sub;
+  bfd_size_type trsize, drsize;
+  size_t max_contents_size;
+  size_t max_relocs_size;
+  size_t max_sym_count;
+  bfd_size_type text_size;
+  file_ptr text_end;
+  register struct bfd_link_order *p;
+  asection *o;
+  boolean have_link_order_relocs;
+
+  if (info->shared)
+    abfd->flags |= DYNAMIC;
+
+  aout_info.info = info;
+  aout_info.output_bfd = abfd;
+  aout_info.contents = NULL;
+  aout_info.relocs = NULL;
+  aout_info.symbol_map = NULL;
+  aout_info.output_syms = NULL;
+
+  if (! bfd_hash_table_init_n (&aout_info.includes.root,
+			       aout_link_includes_newfunc,
+			       251))
+    goto error_return;
+  includes_hash_initialized = true;
+
+  /* Figure out the largest section size.  Also, if generating
+     relocateable output, count the relocs.  */
+  trsize = 0;
+  drsize = 0;
+  max_contents_size = 0;
+  max_relocs_size = 0;
+  max_sym_count = 0;
+  for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
+    {
+      size_t sz;
+
+      if (info->relocateable)
+	{
+	  if (bfd_get_flavour (sub) == bfd_target_aout_flavour)
+	    {
+	      trsize += exec_hdr (sub)->a_trsize;
+	      drsize += exec_hdr (sub)->a_drsize;
+	    }
+	  else
+	    {
+	      /* FIXME: We need to identify the .text and .data sections
+		 and call get_reloc_upper_bound and canonicalize_reloc to
+		 work out the number of relocs needed, and then multiply
+		 by the reloc size.  */
+	      (*_bfd_error_handler)
+		("%s: relocateable link from %s to %s not supported",
+		 bfd_get_filename (abfd),
+		 sub->xvec->name, abfd->xvec->name);
+	      bfd_set_error (bfd_error_invalid_operation);
+	      goto error_return;
+	    }
+	}
+
+      if (bfd_get_flavour (sub) == bfd_target_aout_flavour)
+	{
+	  sz = bfd_section_size (sub, obj_textsec (sub));
+	  if (sz > max_contents_size)
+	    max_contents_size = sz;
+	  sz = bfd_section_size (sub, obj_datasec (sub));
+	  if (sz > max_contents_size)
+	    max_contents_size = sz;
+
+	  sz = exec_hdr (sub)->a_trsize;
+	  if (sz > max_relocs_size)
+	    max_relocs_size = sz;
+	  sz = exec_hdr (sub)->a_drsize;
+	  if (sz > max_relocs_size)
+	    max_relocs_size = sz;
+
+	  sz = obj_aout_external_sym_count (sub);
+	  if (sz > max_sym_count)
+	    max_sym_count = sz;
+	}
+    }
+
+  if (info->relocateable)
+    {
+      if (obj_textsec (abfd) != (asection *) NULL)
+	trsize += (_bfd_count_link_order_relocs (obj_textsec (abfd)
+						 ->link_order_head)
+		   * obj_reloc_entry_size (abfd));
+      if (obj_datasec (abfd) != (asection *) NULL)
+	drsize += (_bfd_count_link_order_relocs (obj_datasec (abfd)
+						 ->link_order_head)
+		   * obj_reloc_entry_size (abfd));
+    }
+
+  exec_hdr (abfd)->a_trsize = trsize;
+  exec_hdr (abfd)->a_drsize = drsize;
+
+  exec_hdr (abfd)->a_entry = bfd_get_start_address (abfd);
+
+  /* Adjust the section sizes and vmas according to the magic number.
+     This sets a_text, a_data and a_bss in the exec_hdr and sets the
+     filepos for each section.  */
+  if (! NAME(aout,adjust_sizes_and_vmas) (abfd, &text_size, &text_end))
+    goto error_return;
+
+  /* The relocation and symbol file positions differ among a.out
+     targets.  We are passed a callback routine from the backend
+     specific code to handle this.
+     FIXME: At this point we do not know how much space the symbol
+     table will require.  This will not work for any (nonstandard)
+     a.out target that needs to know the symbol table size before it
+     can compute the relocation file positions.  This may or may not
+     be the case for the hp300hpux target, for example.  */
+  (*callback) (abfd, &aout_info.treloff, &aout_info.dreloff,
+	       &aout_info.symoff);
+  obj_textsec (abfd)->rel_filepos = aout_info.treloff;
+  obj_datasec (abfd)->rel_filepos = aout_info.dreloff;
+  obj_sym_filepos (abfd) = aout_info.symoff;
+
+  /* We keep a count of the symbols as we output them.  */
+  obj_aout_external_sym_count (abfd) = 0;
+
+  /* We accumulate the string table as we write out the symbols.  */
+  aout_info.strtab = _bfd_stringtab_init ();
+  if (aout_info.strtab == NULL)
+    goto error_return;
+
+  /* Allocate buffers to hold section contents and relocs.  */
+  aout_info.contents = (bfd_byte *) bfd_malloc (max_contents_size);
+  aout_info.relocs = (PTR) bfd_malloc (max_relocs_size);
+  aout_info.symbol_map = (int *) bfd_malloc (max_sym_count * sizeof (int *));
+  aout_info.output_syms = ((struct external_nlist *)
+			   bfd_malloc ((max_sym_count + 1)
+				       * sizeof (struct external_nlist)));
+  if ((aout_info.contents == NULL && max_contents_size != 0)
+      || (aout_info.relocs == NULL && max_relocs_size != 0)
+      || (aout_info.symbol_map == NULL && max_sym_count != 0)
+      || aout_info.output_syms == NULL)
+    goto error_return;
+
+  /* If we have a symbol named __DYNAMIC, force it out now.  This is
+     required by SunOS.  Doing this here rather than in sunos.c is a
+     hack, but it's easier than exporting everything which would be
+     needed.  */
+  {
+    struct aout_link_hash_entry *h;
+
+    h = aout_link_hash_lookup (aout_hash_table (info), "__DYNAMIC",
+			       false, false, false);
+    if (h != NULL)
+      aout_link_write_other_symbol (h, &aout_info);
+  }
+
+  /* The most time efficient way to do the link would be to read all
+     the input object files into memory and then sort out the
+     information into the output file.  Unfortunately, that will
+     probably use too much memory.  Another method would be to step
+     through everything that composes the text section and write it
+     out, and then everything that composes the data section and write
+     it out, and then write out the relocs, and then write out the
+     symbols.  Unfortunately, that requires reading stuff from each
+     input file several times, and we will not be able to keep all the
+     input files open simultaneously, and reopening them will be slow.
+
+     What we do is basically process one input file at a time.  We do
+     everything we need to do with an input file once--copy over the
+     section contents, handle the relocation information, and write
+     out the symbols--and then we throw away the information we read
+     from it.  This approach requires a lot of lseeks of the output
+     file, which is unfortunate but still faster than reopening a lot
+     of files.
+
+     We use the output_has_begun field of the input BFDs to see
+     whether we have already handled it.  */
+  for (sub = info->input_bfds; sub != (bfd *) NULL; sub = sub->link_next)
+    sub->output_has_begun = false;
+
+  /* Mark all sections which are to be included in the link.  This
+     will normally be every section.  We need to do this so that we
+     can identify any sections which the linker has decided to not
+     include.  */
+  for (o = abfd->sections; o != NULL; o = o->next)
+    {
+      for (p = o->link_order_head; p != NULL; p = p->next)
+	{
+	  if (p->type == bfd_indirect_link_order)
+	    p->u.indirect.section->linker_mark = true;
+	}
+    }
+
+  have_link_order_relocs = false;
+  for (o = abfd->sections; o != (asection *) NULL; o = o->next)
+    {
+      for (p = o->link_order_head;
+	   p != (struct bfd_link_order *) NULL;
+	   p = p->next)
+	{
+	  if (p->type == bfd_indirect_link_order
+	      && (bfd_get_flavour (p->u.indirect.section->owner)
+		  == bfd_target_aout_flavour))
+	    {
+	      bfd *input_bfd;
+
+	      input_bfd = p->u.indirect.section->owner;
+	      if (! input_bfd->output_has_begun)
+		{
+		  if (! aout_link_input_bfd (&aout_info, input_bfd))
+		    goto error_return;
+		  input_bfd->output_has_begun = true;
+		}
+	    }
+	  else if (p->type == bfd_section_reloc_link_order
+		   || p->type == bfd_symbol_reloc_link_order)
+	    {
+	      /* These are handled below.  */
+	      have_link_order_relocs = true;
+	    }
+	  else
+	    {
+	      if (! _bfd_default_link_order (abfd, info, o, p))
+		goto error_return;
+	    }
+	}
+    }
+
+  /* Write out any symbols that we have not already written out.  */
+  aout_link_hash_traverse (aout_hash_table (info),
+			   aout_link_write_other_symbol,
+			   (PTR) &aout_info);
+
+  /* Now handle any relocs we were asked to create by the linker.
+     These did not come from any input file.  We must do these after
+     we have written out all the symbols, so that we know the symbol
+     indices to use.  */
+  if (have_link_order_relocs)
+    {
+      for (o = abfd->sections; o != (asection *) NULL; o = o->next)
+	{
+	  for (p = o->link_order_head;
+	       p != (struct bfd_link_order *) NULL;
+	       p = p->next)
+	    {
+	      if (p->type == bfd_section_reloc_link_order
+		  || p->type == bfd_symbol_reloc_link_order)
+		{
+		  if (! aout_link_reloc_link_order (&aout_info, o, p))
+		    goto error_return;
+		}
+	    }
+	}
+    }
+
+  if (aout_info.contents != NULL)
+    {
+      free (aout_info.contents);
+      aout_info.contents = NULL;
+    }
+  if (aout_info.relocs != NULL)
+    {
+      free (aout_info.relocs);
+      aout_info.relocs = NULL;
+    }
+  if (aout_info.symbol_map != NULL)
+    {
+      free (aout_info.symbol_map);
+      aout_info.symbol_map = NULL;
+    }
+  if (aout_info.output_syms != NULL)
+    {
+      free (aout_info.output_syms);
+      aout_info.output_syms = NULL;
+    }
+  if (includes_hash_initialized)
+    {
+      bfd_hash_table_free (&aout_info.includes.root);
+      includes_hash_initialized = false;
+    }
+
+  /* Finish up any dynamic linking we may be doing.  */
+  if (aout_backend_info (abfd)->finish_dynamic_link != NULL)
+    {
+      if (! (*aout_backend_info (abfd)->finish_dynamic_link) (abfd, info))
+	goto error_return;
+    }
+
+  /* Update the header information.  */
+  abfd->symcount = obj_aout_external_sym_count (abfd);
+  exec_hdr (abfd)->a_syms = abfd->symcount * EXTERNAL_NLIST_SIZE;
+  obj_str_filepos (abfd) = obj_sym_filepos (abfd) + exec_hdr (abfd)->a_syms;
+  obj_textsec (abfd)->reloc_count =
+    exec_hdr (abfd)->a_trsize / obj_reloc_entry_size (abfd);
+  obj_datasec (abfd)->reloc_count =
+    exec_hdr (abfd)->a_drsize / obj_reloc_entry_size (abfd);
+
+  /* Write out the string table, unless there are no symbols.  */
+  if (abfd->symcount > 0)
+    {
+      if (bfd_seek (abfd, obj_str_filepos (abfd), SEEK_SET) != 0
+	  || ! emit_stringtab (abfd, aout_info.strtab))
+	goto error_return;
+    }
+  else if (obj_textsec (abfd)->reloc_count == 0
+	   && obj_datasec (abfd)->reloc_count == 0)
+    {
+      bfd_byte b;
+
+      b = 0;
+      if (bfd_seek (abfd,
+		    (obj_datasec (abfd)->filepos
+		     + exec_hdr (abfd)->a_data
+		     - 1),
+		    SEEK_SET) != 0
+	  || bfd_write (&b, 1, 1, abfd) != 1)
+	goto error_return;
+    }
+
+  return true;
+
+ error_return:
+  if (aout_info.contents != NULL)
+    free (aout_info.contents);
+  if (aout_info.relocs != NULL)
+    free (aout_info.relocs);
+  if (aout_info.symbol_map != NULL)
+    free (aout_info.symbol_map);
+  if (aout_info.output_syms != NULL)
+    free (aout_info.output_syms);
+  if (includes_hash_initialized)
+    bfd_hash_table_free (&aout_info.includes.root);
+  return false;
+}
+
+/* Link an a.out input BFD into the output file.  */
+
+static boolean
+aout_link_input_bfd (finfo, input_bfd)
+     struct aout_final_link_info *finfo;
+     bfd *input_bfd;
+{
+  bfd_size_type sym_count;
+
+  BFD_ASSERT (bfd_get_format (input_bfd) == bfd_object);
+
+  /* If this is a dynamic object, it may need special handling.  */
+  if ((input_bfd->flags & DYNAMIC) != 0
+      && aout_backend_info (input_bfd)->link_dynamic_object != NULL)
+    {
+      return ((*aout_backend_info (input_bfd)->link_dynamic_object)
+	      (finfo->info, input_bfd));
+    }
+
+  /* Get the symbols.  We probably have them already, unless
+     finfo->info->keep_memory is false.  */
+  if (! aout_get_external_symbols (input_bfd))
+    return false;
+
+  sym_count = obj_aout_external_sym_count (input_bfd);
+
+  /* Write out the symbols and get a map of the new indices.  The map
+     is placed into finfo->symbol_map.  */
+  if (! aout_link_write_symbols (finfo, input_bfd))
+    return false;
+
+  /* Relocate and write out the sections.  These functions use the
+     symbol map created by aout_link_write_symbols.  The linker_mark
+     field will be set if these sections are to be included in the
+     link, which will normally be the case.  */
+  if (obj_textsec (input_bfd)->linker_mark)
+    {
+      if (! aout_link_input_section (finfo, input_bfd,
+				     obj_textsec (input_bfd),
+				     &finfo->treloff,
+				     exec_hdr (input_bfd)->a_trsize))
+	return false;
+    }
+  if (obj_datasec (input_bfd)->linker_mark)
+    {
+      if (! aout_link_input_section (finfo, input_bfd,
+				     obj_datasec (input_bfd),
+				     &finfo->dreloff,
+				     exec_hdr (input_bfd)->a_drsize))
+	return false;
+    }
+
+  /* If we are not keeping memory, we don't need the symbols any
+     longer.  We still need them if we are keeping memory, because the
+     strings in the hash table point into them.  */
+  if (! finfo->info->keep_memory)
+    {
+      if (! aout_link_free_symbols (input_bfd))
+	return false;
+    }
+
+  return true;
+}
+
+/* Adjust and write out the symbols for an a.out file.  Set the new
+   symbol indices into a symbol_map.  */
+
+static boolean
+aout_link_write_symbols (finfo, input_bfd)
+     struct aout_final_link_info *finfo;
+     bfd *input_bfd;
+{
+  bfd *output_bfd;
+  bfd_size_type sym_count;
+  char *strings;
+  enum bfd_link_strip strip;
+  enum bfd_link_discard discard;
+  struct external_nlist *outsym;
+  bfd_size_type strtab_index;
+  register struct external_nlist *sym;
+  struct external_nlist *sym_end;
+  struct aout_link_hash_entry **sym_hash;
+  int *symbol_map;
+  boolean pass;
+  boolean skip_next;
+
+  output_bfd = finfo->output_bfd;
+  sym_count = obj_aout_external_sym_count (input_bfd);
+  strings = obj_aout_external_strings (input_bfd);
+  strip = finfo->info->strip;
+  discard = finfo->info->discard;
+  outsym = finfo->output_syms;
+
+  /* First write out a symbol for this object file, unless we are
+     discarding such symbols.  */
+  if (strip != strip_all
+      && (strip != strip_some
+	  || bfd_hash_lookup (finfo->info->keep_hash, input_bfd->filename,
+			      false, false) != NULL)
+      && discard != discard_all)
+    {
+      bfd_h_put_8 (output_bfd, N_TEXT, outsym->e_type);
+      strtab_index = add_to_stringtab (output_bfd, finfo->strtab,
+				       input_bfd->filename, false);
+      if (strtab_index == (bfd_size_type) -1)
+	return false;
+      PUT_WORD (output_bfd, strtab_index, outsym->e_strx);
+      PUT_WORD (output_bfd,
+		(bfd_get_section_vma (output_bfd,
+				      obj_textsec (input_bfd)->output_section)
+		 + obj_textsec (input_bfd)->output_offset),
+		outsym->e_value);
+      ++obj_aout_external_sym_count (output_bfd);
+      ++outsym;
+    }
+
+  pass = false;
+  skip_next = false;
+  sym = obj_aout_external_syms (input_bfd);
+  sym_end = sym + sym_count;
+  sym_hash = obj_aout_sym_hashes (input_bfd);
+  symbol_map = finfo->symbol_map;
+  memset (symbol_map, 0, sym_count * sizeof *symbol_map);
+  for (; sym < sym_end; sym++, sym_hash++, symbol_map++)
+    {
+      const char *name;
+      int type;
+      struct aout_link_hash_entry *h;
+      boolean skip;
+      asection *symsec;
+      bfd_vma val = 0;
+      boolean copy;
+
+      /* We set *symbol_map to 0 above for all symbols.  If it has
+         already been set to -1 for this symbol, it means that we are
+         discarding it because it appears in a duplicate header file.
+         See the N_BINCL code below.  */
+      if (*symbol_map == -1)
+	continue;
+
+      /* Initialize *symbol_map to -1, which means that the symbol was
+         not copied into the output file.  We will change it later if
+         we do copy the symbol over.  */
+      *symbol_map = -1;
+
+      type = bfd_h_get_8 (input_bfd, sym->e_type);
+      name = strings + GET_WORD (input_bfd, sym->e_strx);
+
+      h = NULL;
+
+      if (pass)
+	{
+	  /* Pass this symbol through.  It is the target of an
+	     indirect or warning symbol.  */
+	  val = GET_WORD (input_bfd, sym->e_value);
+	  pass = false;
+	}
+      else if (skip_next)
+	{
+	  /* Skip this symbol, which is the target of an indirect
+	     symbol that we have changed to no longer be an indirect
+	     symbol.  */
+	  skip_next = false;
+	  continue;
+	}
+      else
+	{
+	  struct aout_link_hash_entry *hresolve;
+
+	  /* We have saved the hash table entry for this symbol, if
+	     there is one.  Note that we could just look it up again
+	     in the hash table, provided we first check that it is an
+	     external symbol. */
+	  h = *sym_hash;
+
+	  /* Use the name from the hash table, in case the symbol was
+             wrapped.  */
+	  if (h != NULL)
+	    name = h->root.root.string;
+
+	  /* If this is an indirect or warning symbol, then change
+	     hresolve to the base symbol.  We also change *sym_hash so
+	     that the relocation routines relocate against the real
+	     symbol.  */
+	  hresolve = h;
+	  if (h != (struct aout_link_hash_entry *) NULL
+	      && (h->root.type == bfd_link_hash_indirect
+		  || h->root.type == bfd_link_hash_warning))
+	    {
+	      hresolve = (struct aout_link_hash_entry *) h->root.u.i.link;
+	      while (hresolve->root.type == bfd_link_hash_indirect
+		     || hresolve->root.type == bfd_link_hash_warning)
+		hresolve = ((struct aout_link_hash_entry *)
+			    hresolve->root.u.i.link);
+	      *sym_hash = hresolve;
+	    }
+
+	  /* If the symbol has already been written out, skip it.  */
+	  if (h != (struct aout_link_hash_entry *) NULL
+	      && h->root.type != bfd_link_hash_warning
+	      && h->written)
+	    {
+	      if ((type & N_TYPE) == N_INDR
+		  || type == N_WARNING)
+		skip_next = true;
+	      *symbol_map = h->indx;
+	      continue;
+	    }
+
+	  /* See if we are stripping this symbol.  */
+	  skip = false;
+	  switch (strip)
+	    {
+	    case strip_none:
+	      break;
+	    case strip_debugger:
+	      if ((type & N_STAB) != 0)
+		skip = true;
+	      break;
+	    case strip_some:
+	      if (bfd_hash_lookup (finfo->info->keep_hash, name, false, false)
+		  == NULL)
+		skip = true;
+	      break;
+	    case strip_all:
+	      skip = true;
+	      break;
+	    }
+	  if (skip)
+	    {
+	      if (h != (struct aout_link_hash_entry *) NULL)
+		h->written = true;
+	      continue;
+	    }
+
+	  /* Get the value of the symbol.  */
+	  if ((type & N_TYPE) == N_TEXT
+	      || type == N_WEAKT)
+	    symsec = obj_textsec (input_bfd);
+	  else if ((type & N_TYPE) == N_DATA
+		   || type == N_WEAKD)
+	    symsec = obj_datasec (input_bfd);
+	  else if ((type & N_TYPE) == N_BSS
+		   || type == N_WEAKB)
+	    symsec = obj_bsssec (input_bfd);
+	  else if ((type & N_TYPE) == N_ABS
+		   || type == N_WEAKA)
+	    symsec = bfd_abs_section_ptr;
+	  else if (((type & N_TYPE) == N_INDR
+		    && (hresolve == (struct aout_link_hash_entry *) NULL
+			|| (hresolve->root.type != bfd_link_hash_defined
+			    && hresolve->root.type != bfd_link_hash_defweak
+			    && hresolve->root.type != bfd_link_hash_common)))
+		   || type == N_WARNING)
+	    {
+	      /* Pass the next symbol through unchanged.  The
+		 condition above for indirect symbols is so that if
+		 the indirect symbol was defined, we output it with
+		 the correct definition so the debugger will
+		 understand it.  */
+	      pass = true;
+	      val = GET_WORD (input_bfd, sym->e_value);
+	      symsec = NULL;
+	    }
+	  else if ((type & N_STAB) != 0)
+	    {
+	      val = GET_WORD (input_bfd, sym->e_value);
+	      symsec = NULL;
+	    }
+	  else
+	    {
+	      /* If we get here with an indirect symbol, it means that
+		 we are outputting it with a real definition.  In such
+		 a case we do not want to output the next symbol,
+		 which is the target of the indirection.  */
+	      if ((type & N_TYPE) == N_INDR)
+		skip_next = true;
+
+	      symsec = NULL;
+
+	      /* We need to get the value from the hash table.  We use
+		 hresolve so that if we have defined an indirect
+		 symbol we output the final definition.  */
+	      if (h == (struct aout_link_hash_entry *) NULL)
+		{
+		  switch (type & N_TYPE)
+		    {
+		    case N_SETT:
+		      symsec = obj_textsec (input_bfd);
+		      break;
+		    case N_SETD:
+		      symsec = obj_datasec (input_bfd);
+		      break;
+		    case N_SETB:
+		      symsec = obj_bsssec (input_bfd);
+		      break;
+		    case N_SETA:
+		      symsec = bfd_abs_section_ptr;
+		      break;
+		    default:
+		      val = 0;
+		      break;
+		    }
+		}
+	      else if (hresolve->root.type == bfd_link_hash_defined
+		       || hresolve->root.type == bfd_link_hash_defweak)
+		{
+		  asection *input_section;
+		  asection *output_section;
+
+		  /* This case usually means a common symbol which was
+		     turned into a defined symbol.  */
+		  input_section = hresolve->root.u.def.section;
+		  output_section = input_section->output_section;
+		  BFD_ASSERT (bfd_is_abs_section (output_section)
+			      || output_section->owner == output_bfd);
+		  val = (hresolve->root.u.def.value
+			 + bfd_get_section_vma (output_bfd, output_section)
+			 + input_section->output_offset);
+
+		  /* Get the correct type based on the section.  If
+		     this is a constructed set, force it to be
+		     globally visible.  */
+		  if (type == N_SETT
+		      || type == N_SETD
+		      || type == N_SETB
+		      || type == N_SETA)
+		    type |= N_EXT;
+
+		  type &=~ N_TYPE;
+
+		  if (output_section == obj_textsec (output_bfd))
+		    type |= (hresolve->root.type == bfd_link_hash_defined
+			     ? N_TEXT
+			     : N_WEAKT);
+		  else if (output_section == obj_datasec (output_bfd))
+		    type |= (hresolve->root.type == bfd_link_hash_defined
+			     ? N_DATA
+			     : N_WEAKD);
+		  else if (output_section == obj_bsssec (output_bfd))
+		    type |= (hresolve->root.type == bfd_link_hash_defined
+			     ? N_BSS
+			     : N_WEAKB);
+		  else
+		    type |= (hresolve->root.type == bfd_link_hash_defined
+			     ? N_ABS
+			     : N_WEAKA);
+		}
+	      else if (hresolve->root.type == bfd_link_hash_common)
+		val = hresolve->root.u.c.size;
+	      else if (hresolve->root.type == bfd_link_hash_undefweak)
+		{
+		  val = 0;
+		  type = N_WEAKU;
+		}
+	      else
+		val = 0;
+	    }
+	  if (symsec != (asection *) NULL)
+	    val = (symsec->output_section->vma
+		   + symsec->output_offset
+		   + (GET_WORD (input_bfd, sym->e_value)
+		      - symsec->vma));
+
+	  /* If this is a global symbol set the written flag, and if
+	     it is a local symbol see if we should discard it.  */
+	  if (h != (struct aout_link_hash_entry *) NULL)
+	    {
+	      h->written = true;
+	      h->indx = obj_aout_external_sym_count (output_bfd);
+	    }
+	  else if ((type & N_TYPE) != N_SETT
+		   && (type & N_TYPE) != N_SETD
+		   && (type & N_TYPE) != N_SETB
+		   && (type & N_TYPE) != N_SETA)
+	    {
+	      switch (discard)
+		{
+		case discard_none:
+		  break;
+		case discard_l:
+		  if ((type & N_STAB) == 0
+		      && bfd_is_local_label_name (input_bfd, name))
+		    skip = true;
+		  break;
+		case discard_all:
+		  skip = true;
+		  break;
+		}
+	      if (skip)
+		{
+		  pass = false;
+		  continue;
+		}
+	    }
+
+	  /* An N_BINCL symbol indicates the start of the stabs
+	     entries for a header file.  We need to scan ahead to the
+	     next N_EINCL symbol, ignoring nesting, adding up all the
+	     characters in the symbol names, not including the file
+	     numbers in types (the first number after an open
+	     parenthesis).  */
+	  if (type == N_BINCL)
+	    {
+	      struct external_nlist *incl_sym;
+	      int nest;
+	      struct aout_link_includes_entry *incl_entry;
+	      struct aout_link_includes_totals *t;
+
+	      val = 0;
+	      nest = 0;
+	      for (incl_sym = sym + 1; incl_sym < sym_end; incl_sym++)
+		{
+		  int incl_type;
+
+		  incl_type = bfd_h_get_8 (input_bfd, incl_sym->e_type);
+		  if (incl_type == N_EINCL)
+		    {
+		      if (nest == 0)
+			break;
+		      --nest;
+		    }
+		  else if (incl_type == N_BINCL)
+		    ++nest;
+		  else if (nest == 0)
+		    {
+		      const char *s;
+
+		      s = strings + GET_WORD (input_bfd, incl_sym->e_strx);
+		      for (; *s != '\0'; s++)
+			{
+			  val += *s;
+			  if (*s == '(')
+			    {
+			      /* Skip the file number.  */
+			      ++s;
+			      while (isdigit ((unsigned char) *s))
+				++s;
+			      --s;
+			    }
+			}
+		    }
+		}
+
+	      /* If we have already included a header file with the
+                 same value, then replace this one with an N_EXCL
+                 symbol.  */
+	      copy = ! finfo->info->keep_memory;
+	      incl_entry = aout_link_includes_lookup (&finfo->includes,
+						      name, true, copy);
+	      if (incl_entry == NULL)
+		return false;
+	      for (t = incl_entry->totals; t != NULL; t = t->next)
+		if (t->total == val)
+		  break;
+	      if (t == NULL)
+		{
+		  /* This is the first time we have seen this header
+                     file with this set of stabs strings.  */
+		  t = ((struct aout_link_includes_totals *)
+		       bfd_hash_allocate (&finfo->includes.root,
+					  sizeof *t));
+		  if (t == NULL)
+		    return false;
+		  t->total = val;
+		  t->next = incl_entry->totals;
+		  incl_entry->totals = t;
+		}
+	      else
+		{
+		  int *incl_map;
+
+		  /* This is a duplicate header file.  We must change
+                     it to be an N_EXCL entry, and mark all the
+                     included symbols to prevent outputting them.  */
+		  type = N_EXCL;
+
+		  nest = 0;
+		  for (incl_sym = sym + 1, incl_map = symbol_map + 1;
+		       incl_sym < sym_end;
+		       incl_sym++, incl_map++)
+		    {
+		      int incl_type;
+
+		      incl_type = bfd_h_get_8 (input_bfd, incl_sym->e_type);
+		      if (incl_type == N_EINCL)
+			{
+			  if (nest == 0)
+			    {
+			      *incl_map = -1;
+			      break;
+			    }
+			  --nest;
+			}
+		      else if (incl_type == N_BINCL)
+			++nest;
+		      else if (nest == 0)
+			*incl_map = -1;
+		    }
+		}
+	    }
+	}
+
+      /* Copy this symbol into the list of symbols we are going to
+	 write out.  */
+      bfd_h_put_8 (output_bfd, type, outsym->e_type);
+      copy = false;
+      if (! finfo->info->keep_memory)
+	{
+	  /* name points into a string table which we are going to
+	     free.  If there is a hash table entry, use that string.
+	     Otherwise, copy name into memory.  */
+	  if (h != (struct aout_link_hash_entry *) NULL)
+	    name = h->root.root.string;
+	  else
+	    copy = true;
+	}
+      strtab_index = add_to_stringtab (output_bfd, finfo->strtab,
+				       name, copy);
+      if (strtab_index == (bfd_size_type) -1)
+	return false;
+      PUT_WORD (output_bfd, strtab_index, outsym->e_strx);
+      PUT_WORD (output_bfd, val, outsym->e_value);
+      *symbol_map = obj_aout_external_sym_count (output_bfd);
+      ++obj_aout_external_sym_count (output_bfd);
+      ++outsym;
+    }
+
+  /* Write out the output symbols we have just constructed.  */
+  if (outsym > finfo->output_syms)
+    {
+      bfd_size_type outsym_count;
+
+      if (bfd_seek (output_bfd, finfo->symoff, SEEK_SET) != 0)
+	return false;
+      outsym_count = outsym - finfo->output_syms;
+      if (bfd_write ((PTR) finfo->output_syms,
+		     (bfd_size_type) EXTERNAL_NLIST_SIZE,
+		     (bfd_size_type) outsym_count, output_bfd)
+	  != outsym_count * EXTERNAL_NLIST_SIZE)
+	return false;
+      finfo->symoff += outsym_count * EXTERNAL_NLIST_SIZE;
+    }
+
+  return true;
+}
+
+/* Write out a symbol that was not associated with an a.out input
+   object.  */
+
+static boolean
+aout_link_write_other_symbol (h, data)
+     struct aout_link_hash_entry *h;
+     PTR data;
+{
+  struct aout_final_link_info *finfo = (struct aout_final_link_info *) data;
+  bfd *output_bfd;
+  int type;
+  bfd_vma val;
+  struct external_nlist outsym;
+  bfd_size_type indx;
+
+  output_bfd = finfo->output_bfd;
+
+  if (aout_backend_info (output_bfd)->write_dynamic_symbol != NULL)
+    {
+      if (! ((*aout_backend_info (output_bfd)->write_dynamic_symbol)
+	     (output_bfd, finfo->info, h)))
+	{
+	  /* FIXME: No way to handle errors.  */
+	  abort ();
+	}
+    }
+
+  if (h->written)
+    return true;
+
+  h->written = true;
+
+  /* An indx of -2 means the symbol must be written.  */
+  if (h->indx != -2
+      && (finfo->info->strip == strip_all
+	  || (finfo->info->strip == strip_some
+	      && bfd_hash_lookup (finfo->info->keep_hash, h->root.root.string,
+				  false, false) == NULL)))
+    return true;
+
+  switch (h->root.type)
+    {
+    default:
+      abort ();
+      /* Avoid variable not initialized warnings.  */
+      return true;
+    case bfd_link_hash_new:
+      /* This can happen for set symbols when sets are not being
+         built.  */
+      return true;
+    case bfd_link_hash_undefined:
+      type = N_UNDF | N_EXT;
+      val = 0;
+      break;
+    case bfd_link_hash_defined:
+    case bfd_link_hash_defweak:
+      {
+	asection *sec;
+
+	sec = h->root.u.def.section->output_section;
+	BFD_ASSERT (bfd_is_abs_section (sec)
+		    || sec->owner == output_bfd);
+	if (sec == obj_textsec (output_bfd))
+	  type = h->root.type == bfd_link_hash_defined ? N_TEXT : N_WEAKT;
+	else if (sec == obj_datasec (output_bfd))
+	  type = h->root.type == bfd_link_hash_defined ? N_DATA : N_WEAKD;
+	else if (sec == obj_bsssec (output_bfd))
+	  type = h->root.type == bfd_link_hash_defined ? N_BSS : N_WEAKB;
+	else
+	  type = h->root.type == bfd_link_hash_defined ? N_ABS : N_WEAKA;
+	type |= N_EXT;
+	val = (h->root.u.def.value
+	       + sec->vma
+	       + h->root.u.def.section->output_offset);
+      }
+      break;
+    case bfd_link_hash_common:
+      type = N_UNDF | N_EXT;
+      val = h->root.u.c.size;
+      break;
+    case bfd_link_hash_undefweak:
+      type = N_WEAKU;
+      val = 0;
+    case bfd_link_hash_indirect:
+    case bfd_link_hash_warning:
+      /* FIXME: Ignore these for now.  The circumstances under which
+	 they should be written out are not clear to me.  */
+      return true;
+    }
+
+  bfd_h_put_8 (output_bfd, type, outsym.e_type);
+  indx = add_to_stringtab (output_bfd, finfo->strtab, h->root.root.string,
+			   false);
+  if (indx == (bfd_size_type) -1)
+    {
+      /* FIXME: No way to handle errors.  */
+      abort ();
+    }
+  PUT_WORD (output_bfd, indx, outsym.e_strx);
+  PUT_WORD (output_bfd, val, outsym.e_value);
+
+  if (bfd_seek (output_bfd, finfo->symoff, SEEK_SET) != 0
+      || bfd_write ((PTR) &outsym, (bfd_size_type) EXTERNAL_NLIST_SIZE,
+		    (bfd_size_type) 1, output_bfd) != EXTERNAL_NLIST_SIZE)
+    {
+      /* FIXME: No way to handle errors.  */
+      abort ();
+    }
+
+  finfo->symoff += EXTERNAL_NLIST_SIZE;
+  h->indx = obj_aout_external_sym_count (output_bfd);
+  ++obj_aout_external_sym_count (output_bfd);
+
+  return true;
+}
+
+/* Link an a.out section into the output file.  */
+
+static boolean
+aout_link_input_section (finfo, input_bfd, input_section, reloff_ptr,
+			 rel_size)
+     struct aout_final_link_info *finfo;
+     bfd *input_bfd;
+     asection *input_section;
+     file_ptr *reloff_ptr;
+     bfd_size_type rel_size;
+{
+  bfd_size_type input_size;
+  PTR relocs;
+
+  /* Get the section contents.  */
+  input_size = bfd_section_size (input_bfd, input_section);
+  if (! bfd_get_section_contents (input_bfd, input_section,
+				  (PTR) finfo->contents,
+				  (file_ptr) 0, input_size))
+    return false;
+
+  /* Read in the relocs if we haven't already done it.  */
+  if (aout_section_data (input_section) != NULL
+      && aout_section_data (input_section)->relocs != NULL)
+    relocs = aout_section_data (input_section)->relocs;
+  else
+    {
+      relocs = finfo->relocs;
+      if (rel_size > 0)
+	{
+	  if (bfd_seek (input_bfd, input_section->rel_filepos, SEEK_SET) != 0
+	      || bfd_read (relocs, 1, rel_size, input_bfd) != rel_size)
+	    return false;
+	}
+    }
+
+  /* Relocate the section contents.  */
+  if (! pdp11_aout_link_input_section (finfo, input_bfd, input_section,
+				       (struct pdp11_aout_reloc_external *) relocs,
+				       rel_size, finfo->contents))
+    return false;
+
+  /* Write out the section contents.  */
+  if (! bfd_set_section_contents (finfo->output_bfd,
+				  input_section->output_section,
+				  (PTR) finfo->contents,
+				  input_section->output_offset,
+				  input_size))
+    return false;
+
+  /* If we are producing relocateable output, the relocs were
+     modified, and we now write them out.  */
+  if (finfo->info->relocateable && rel_size > 0)
+    {
+      if (bfd_seek (finfo->output_bfd, *reloff_ptr, SEEK_SET) != 0)
+	return false;
+      if (bfd_write (relocs, (bfd_size_type) 1, rel_size, finfo->output_bfd)
+	  != rel_size)
+	return false;
+      *reloff_ptr += rel_size;
+
+      /* Assert that the relocs have not run into the symbols, and
+	 that if these are the text relocs they have not run into the
+	 data relocs.  */
+      BFD_ASSERT (*reloff_ptr <= obj_sym_filepos (finfo->output_bfd)
+		  && (reloff_ptr != &finfo->treloff
+		      || (*reloff_ptr
+			  <= obj_datasec (finfo->output_bfd)->rel_filepos)));
+    }
+
+  return true;
+}
+
+/* Get the section corresponding to a reloc index.  */
+
+static INLINE asection *
+aout_reloc_type_to_section (abfd, type)
+     bfd *abfd;
+     int type;
+{
+  switch (type)
+    {
+    case RTEXT:
+      return obj_textsec (abfd);
+    case RDATA:
+      return obj_datasec (abfd);
+    case RBSS:
+      return obj_bsssec (abfd);
+    case RABS:
+      return bfd_abs_section_ptr;
+    case REXT:
+      return bfd_und_section_ptr;
+    default:
+      abort ();
+    }
+}
+
+static boolean
+pdp11_aout_link_input_section (finfo, input_bfd, input_section, relocs,
+			       rel_size, contents)
+     struct aout_final_link_info *finfo;
+     bfd *input_bfd;
+     asection *input_section;
+     struct pdp11_aout_reloc_external *relocs;
+     bfd_size_type rel_size;
+     bfd_byte *contents;
+{
+  boolean (*check_dynamic_reloc) PARAMS ((struct bfd_link_info *,
+					  bfd *, asection *,
+					  struct aout_link_hash_entry *,
+					  PTR, bfd_byte *, boolean *,
+					  bfd_vma *));
+  bfd *output_bfd;
+  boolean relocateable;
+  struct external_nlist *syms;
+  char *strings;
+  struct aout_link_hash_entry **sym_hashes;
+  int *symbol_map;
+  bfd_size_type reloc_count;
+  register struct pdp11_aout_reloc_external *rel;
+  struct pdp11_aout_reloc_external *rel_end;
+
+  output_bfd = finfo->output_bfd;
+  check_dynamic_reloc = aout_backend_info (output_bfd)->check_dynamic_reloc;
+
+  BFD_ASSERT (obj_reloc_entry_size (input_bfd) == RELOC_SIZE);
+  BFD_ASSERT (input_bfd->xvec->header_byteorder
+	      == output_bfd->xvec->header_byteorder);
+
+  relocateable = finfo->info->relocateable;
+  syms = obj_aout_external_syms (input_bfd);
+  strings = obj_aout_external_strings (input_bfd);
+  sym_hashes = obj_aout_sym_hashes (input_bfd);
+  symbol_map = finfo->symbol_map;
+
+  reloc_count = rel_size / RELOC_SIZE;
+  rel = relocs;
+  rel_end = (struct pdp11_aout_reloc_external *)(((char *)rel) + rel_size);
+  for (; rel < rel_end; ((char *)rel) += RELOC_SIZE)
+    {
+      bfd_vma r_addr;
+      int r_index;
+      int r_type;
+      int r_pcrel;
+      int r_extern;
+      reloc_howto_type *howto;
+      struct aout_link_hash_entry *h = NULL;
+      bfd_vma relocation;
+      bfd_reloc_status_type r;
+      int reloc_entry;
+
+      reloc_entry = GET_WORD (input_bfd, (PTR)rel);
+      if (reloc_entry == 0)
+	continue;
+
+      {
+	unsigned int howto_idx;
+
+	r_index = (reloc_entry & RIDXMASK) >> 4;
+	r_type = reloc_entry & RTYPE;
+	r_pcrel = reloc_entry & RELFLG;
+	r_addr = (char *)rel - (char *)relocs;
+
+	r_extern = (r_type == REXT);
+
+	howto_idx = r_pcrel;
+	BFD_ASSERT (howto_idx < TABLE_SIZE (howto_table_pdp11));
+	howto = howto_table_pdp11 + howto_idx;
+      }
+
+      if (relocateable)
+	{
+	  /* We are generating a relocateable output file, and must
+	     modify the reloc accordingly.  */
+	  if (r_extern)
+	    {
+	      /* If we know the symbol this relocation is against,
+		 convert it into a relocation against a section.  This
+		 is what the native linker does.  */
+	      h = sym_hashes[r_index];
+	      if (h != (struct aout_link_hash_entry *) NULL
+		  && (h->root.type == bfd_link_hash_defined
+		      || h->root.type == bfd_link_hash_defweak))
+		{
+		  asection *output_section;
+
+		  /* Compute a new r_index.  */
+		  output_section = h->root.u.def.section->output_section;
+		  if (output_section == obj_textsec (output_bfd))
+		    r_type = N_TEXT;
+		  else if (output_section == obj_datasec (output_bfd))
+		    r_type = N_DATA;
+		  else if (output_section == obj_bsssec (output_bfd))
+		    r_type = N_BSS;
+		  else
+		    r_type = N_ABS;
+
+		  /* Add the symbol value and the section VMA to the
+		     addend stored in the contents.  */
+		  relocation = (h->root.u.def.value
+				+ output_section->vma
+				+ h->root.u.def.section->output_offset);
+		}
+	      else
+		{
+		  /* We must change r_index according to the symbol
+		     map.  */
+		  r_index = symbol_map[r_index];
+
+		  if (r_index == -1)
+		    {
+		      if (h != NULL)
+			{
+			  /* We decided to strip this symbol, but it
+                             turns out that we can't.  Note that we
+                             lose the other and desc information here.
+                             I don't think that will ever matter for a
+                             global symbol.  */
+			  if (h->indx < 0)
+			    {
+			      h->indx = -2;
+			      h->written = false;
+			      if (! aout_link_write_other_symbol (h,
+								  (PTR) finfo))
+				return false;
+			    }
+			  r_index = h->indx;
+			}
+		      else
+			{
+			  const char *name;
+
+			  name = strings + GET_WORD (input_bfd,
+						     syms[r_index].e_strx);
+			  if (! ((*finfo->info->callbacks->unattached_reloc)
+				 (finfo->info, name, input_bfd, input_section,
+				  r_addr)))
+			    return false;
+			  r_index = 0;
+			}
+		    }
+
+		  relocation = 0;
+		}
+
+	      /* Write out the new r_index value.  */
+	      reloc_entry = GET_WORD (input_bfd, rel->e_reloc_entry);
+	      reloc_entry &= RIDXMASK;
+	      reloc_entry |= r_index << 4;
+	      PUT_WORD (input_bfd, reloc_entry, rel->e_reloc_entry);
+	    }
+	  else
+	    {
+	      asection *section;
+
+	      /* This is a relocation against a section.  We must
+		 adjust by the amount that the section moved.  */
+	      section = aout_reloc_type_to_section (input_bfd, r_type);
+	      relocation = (section->output_section->vma
+			    + section->output_offset
+			    - section->vma);
+	    }
+
+	  /* Change the address of the relocation.  */
+#if 0
+	  PUT_WORD (output_bfd,
+		    r_addr + input_section->output_offset,
+		    rel->r_address);
+#else
+fprintf (stderr, "TODO: change the address of the relocation\n");
+#endif
+
+	  /* Adjust a PC relative relocation by removing the reference
+	     to the original address in the section and including the
+	     reference to the new address.  */
+	  if (r_pcrel)
+	    relocation -= (input_section->output_section->vma
+			   + input_section->output_offset
+			   - input_section->vma);
+
+#ifdef MY_relocatable_reloc
+	  MY_relocatable_reloc (howto, output_bfd, rel, relocation, r_addr);
+#endif
+
+	  if (relocation == 0)
+	    r = bfd_reloc_ok;
+	  else
+	    r = MY_relocate_contents (howto,
+				      input_bfd, relocation,
+				      contents + r_addr);
+	}
+      else
+	{
+	  boolean hundef;
+
+	  /* We are generating an executable, and must do a full
+	     relocation.  */
+	  hundef = false;
+	  if (r_extern)
+	    {
+	      h = sym_hashes[r_index];
+
+	      if (h != (struct aout_link_hash_entry *) NULL
+		  && (h->root.type == bfd_link_hash_defined
+		      || h->root.type == bfd_link_hash_defweak))
+		{
+		  relocation = (h->root.u.def.value
+				+ h->root.u.def.section->output_section->vma
+				+ h->root.u.def.section->output_offset);
+		}
+	      else if (h != (struct aout_link_hash_entry *) NULL
+		       && h->root.type == bfd_link_hash_undefweak)
+		relocation = 0;
+	      else
+		{
+		  hundef = true;
+		  relocation = 0;
+		}
+	    }
+	  else
+	    {
+	      asection *section;
+
+	      section = aout_reloc_type_to_section (input_bfd, r_type);
+	      relocation = (section->output_section->vma
+			    + section->output_offset
+			    - section->vma);
+	      if (r_pcrel)
+		relocation += input_section->vma;
+	    }
+
+	  if (check_dynamic_reloc != NULL)
+	    {
+	      boolean skip;
+
+	      if (! ((*check_dynamic_reloc)
+		     (finfo->info, input_bfd, input_section, h,
+		      (PTR) rel, contents, &skip, &relocation)))
+		return false;
+	      if (skip)
+		continue;
+	    }
+
+	  /* Now warn if a global symbol is undefined.  We could not
+             do this earlier, because check_dynamic_reloc might want
+             to skip this reloc.  */
+	  if (hundef && ! finfo->info->shared)
+	    {
+	      const char *name;
+
+	      if (h != NULL)
+		name = h->root.root.string;
+	      else
+		name = strings + GET_WORD (input_bfd, syms[r_index].e_strx);
+	      if (! ((*finfo->info->callbacks->undefined_symbol)
+		     (finfo->info, name, input_bfd, input_section,
+		      r_addr, true)))
+		return false;
+	    }
+
+	  r = MY_final_link_relocate (howto,
+				      input_bfd, input_section,
+				      contents, r_addr, relocation,
+				      (bfd_vma) 0);
+	}
+
+      if (r != bfd_reloc_ok)
+	{
+	  switch (r)
+	    {
+	    default:
+	    case bfd_reloc_outofrange:
+	      abort ();
+	    case bfd_reloc_overflow:
+	      {
+		const char *name;
+
+		if (h != NULL)
+		  name = h->root.root.string;
+		else if (r_extern)
+		  name = strings + GET_WORD (input_bfd,
+					     syms[r_index].e_strx);
+		else
+		  {
+		    asection *s;
+
+		    s = aout_reloc_type_to_section (input_bfd, r_type);
+		    name = bfd_section_name (input_bfd, s);
+		  }
+		if (! ((*finfo->info->callbacks->reloc_overflow)
+		       (finfo->info, name, howto->name,
+			(bfd_vma) 0, input_bfd, input_section, r_addr)))
+		  return false;
+	      }
+	      break;
+	    }
+	}
+    }
+
+  return true;
+}
+
+/* Handle a link order which is supposed to generate a reloc.  */
+
+static boolean
+aout_link_reloc_link_order (finfo, o, p)
+     struct aout_final_link_info *finfo;
+     asection *o;
+     struct bfd_link_order *p;
+{
+  struct bfd_link_order_reloc *pr;
+  int r_index;
+  int r_extern;
+  reloc_howto_type *howto;
+  file_ptr *reloff_ptr;
+  struct reloc_std_external srel;
+  PTR rel_ptr;
+
+  pr = p->u.reloc.p;
+
+  if (p->type == bfd_section_reloc_link_order)
+    {
+      r_extern = 0;
+      if (bfd_is_abs_section (pr->u.section))
+	r_index = N_ABS | N_EXT;
+      else
+	{
+	  BFD_ASSERT (pr->u.section->owner == finfo->output_bfd);
+	  r_index = pr->u.section->target_index;
+	}
+    }
+  else
+    {
+      struct aout_link_hash_entry *h;
+
+      BFD_ASSERT (p->type == bfd_symbol_reloc_link_order);
+      r_extern = 1;
+      h = ((struct aout_link_hash_entry *)
+	   bfd_wrapped_link_hash_lookup (finfo->output_bfd, finfo->info,
+					 pr->u.name, false, false, true));
+      if (h != (struct aout_link_hash_entry *) NULL
+	  && h->indx >= 0)
+	r_index = h->indx;
+      else if (h != NULL)
+	{
+	  /* We decided to strip this symbol, but it turns out that we
+	     can't.  Note that we lose the other and desc information
+	     here.  I don't think that will ever matter for a global
+	     symbol.  */
+	  h->indx = -2;
+	  h->written = false;
+	  if (! aout_link_write_other_symbol (h, (PTR) finfo))
+	    return false;
+	  r_index = h->indx;
+	}
+      else
+	{
+	  if (! ((*finfo->info->callbacks->unattached_reloc)
+		 (finfo->info, pr->u.name, (bfd *) NULL,
+		  (asection *) NULL, (bfd_vma) 0)))
+	    return false;
+	  r_index = 0;
+	}
+    }
+
+  howto = bfd_reloc_type_lookup (finfo->output_bfd, pr->reloc);
+  if (howto == 0)
+    {
+      bfd_set_error (bfd_error_bad_value);
+      return false;
+    }
+
+  if (o == obj_textsec (finfo->output_bfd))
+    reloff_ptr = &finfo->treloff;
+  else if (o == obj_datasec (finfo->output_bfd))
+    reloff_ptr = &finfo->dreloff;
+  else
+    abort ();
+
+#ifdef MY_put_reloc
+  MY_put_reloc(finfo->output_bfd, r_extern, r_index, p->offset, howto,
+	       &srel);
+#else
+  {
+    int r_pcrel;
+    int r_baserel;
+    int r_jmptable;
+    int r_relative;
+    int r_length;
+
+    fprintf (stderr, "TODO: line %d in bfd/pdp11.c\n", __LINE__);
+
+    r_pcrel = howto->pc_relative;
+    r_baserel = (howto->type & 8) != 0;
+    r_jmptable = (howto->type & 16) != 0;
+    r_relative = (howto->type & 32) != 0;
+    r_length = howto->size;
+
+    PUT_WORD (finfo->output_bfd, p->offset, srel.r_address);
+    if (bfd_header_big_endian (finfo->output_bfd))
+      {
+	srel.r_index[0] = r_index >> 16;
+	srel.r_index[1] = r_index >> 8;
+	srel.r_index[2] = r_index;
+	srel.r_type[0] =
+	  ((r_extern ?     RELOC_STD_BITS_EXTERN_BIG : 0)
+	   | (r_pcrel ?    RELOC_STD_BITS_PCREL_BIG : 0)
+	   | (r_baserel ?  RELOC_STD_BITS_BASEREL_BIG : 0)
+	   | (r_jmptable ? RELOC_STD_BITS_JMPTABLE_BIG : 0)
+	   | (r_relative ? RELOC_STD_BITS_RELATIVE_BIG : 0)
+	   | (r_length <<  RELOC_STD_BITS_LENGTH_SH_BIG));
+      }
+    else
+      {
+	srel.r_index[2] = r_index >> 16;
+	srel.r_index[1] = r_index >> 8;
+	srel.r_index[0] = r_index;
+	srel.r_type[0] =
+	  ((r_extern ?     RELOC_STD_BITS_EXTERN_LITTLE : 0)
+	   | (r_pcrel ?    RELOC_STD_BITS_PCREL_LITTLE : 0)
+	   | (r_baserel ?  RELOC_STD_BITS_BASEREL_LITTLE : 0)
+	   | (r_jmptable ? RELOC_STD_BITS_JMPTABLE_LITTLE : 0)
+	   | (r_relative ? RELOC_STD_BITS_RELATIVE_LITTLE : 0)
+	   | (r_length <<  RELOC_STD_BITS_LENGTH_SH_LITTLE));
+      }
+  }
+#endif
+  rel_ptr = (PTR) &srel;
+
+  /* We have to write the addend into the object file, since
+     standard a.out relocs are in place.  It would be more
+     reliable if we had the current contents of the file here,
+     rather than assuming zeroes, but we can't read the file since
+     it was opened using bfd_openw.  */
+  if (pr->addend != 0)
+    {
+      bfd_size_type size;
+      bfd_reloc_status_type r;
+      bfd_byte *buf;
+      boolean ok;
+
+      size = bfd_get_reloc_size (howto);
+      buf = (bfd_byte *) bfd_zmalloc (size);
+      if (buf == (bfd_byte *) NULL)
+	return false;
+      r = MY_relocate_contents (howto, finfo->output_bfd,
+				pr->addend, buf);
+      switch (r)
+	{
+	case bfd_reloc_ok:
+	  break;
+	default:
+	case bfd_reloc_outofrange:
+	  abort ();
+	case bfd_reloc_overflow:
+	  if (! ((*finfo->info->callbacks->reloc_overflow)
+		 (finfo->info,
+		  (p->type == bfd_section_reloc_link_order
+		   ? bfd_section_name (finfo->output_bfd,
+				       pr->u.section)
+		   : pr->u.name),
+		  howto->name, pr->addend, (bfd *) NULL,
+		  (asection *) NULL, (bfd_vma) 0)))
+	    {
+	      free (buf);
+	      return false;
+	    }
+	  break;
+	}
+      ok = bfd_set_section_contents (finfo->output_bfd, o,
+				     (PTR) buf,
+				     (file_ptr) p->offset,
+				     size);
+      free (buf);
+      if (! ok)
+	return false;
+    }
+
+  if (bfd_seek (finfo->output_bfd, *reloff_ptr, SEEK_SET) != 0
+      || (bfd_write (rel_ptr, (bfd_size_type) 1,
+		     obj_reloc_entry_size (finfo->output_bfd),
+		     finfo->output_bfd)
+	  != obj_reloc_entry_size (finfo->output_bfd)))
+    return false;
+
+  *reloff_ptr += obj_reloc_entry_size (finfo->output_bfd);
+
+  /* Assert that the relocs have not run into the symbols, and that n
+     the text relocs have not run into the data relocs.  */
+  BFD_ASSERT (*reloff_ptr <= obj_sym_filepos (finfo->output_bfd)
+	      && (reloff_ptr != &finfo->treloff
+		  || (*reloff_ptr
+		      <= obj_datasec (finfo->output_bfd)->rel_filepos)));
+
+  return true;
+}
+/* end of modified aoutx.h */
+
+bfd_vma
+bfd_getp32 (addr)
+     const bfd_byte *addr;
+{
+  return (((((bfd_vma)addr[1] << 8) | addr[0]) << 8)
+	  | addr[3]) << 8 | addr[2];
+}
+
+#define COERCE32(x) (((bfd_signed_vma) (x) ^ 0x80000000) - 0x80000000)
+
+bfd_signed_vma
+bfd_getp_signed_32 (addr)
+     const bfd_byte *addr;
+{
+  return COERCE32((((((bfd_vma)addr[1] << 8) | addr[0]) << 8)
+		   | addr[3]) << 8 | addr[2]);
+}
+
+void
+bfd_putp32 (data, addr)
+     bfd_vma data;
+     bfd_byte *addr;
+{
+  addr[0] = (bfd_byte)(data >> 16);
+  addr[1] = (bfd_byte)(data >> 24);
+  addr[2] = (bfd_byte)data;
+  addr[3] = (bfd_byte)(data >>  8);
+}
diff --git a/bfd/peigen.c b/bfd/peXXigen.c
similarity index 96%
rename from bfd/peigen.c
rename to bfd/peXXigen.c
index 094920c..8d819f2 100644
--- a/bfd/peigen.c
+++ b/bfd/peXXigen.c
@@ -1,5 +1,5 @@
 /* Support for the generic parts of PE/PEI; the common executable parts.
-   Copyright 1995, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
+   Copyright 1995, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc.
    Written by Cygnus Solutions.
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -53,6 +53,10 @@
    wasting too much time.
 */
 
+/* This expands into COFF_WITH_pe or COFF_WITH_pep depending on whether
+   we're compiling for straight PE or PE+.  */
+#define COFF_WITH_XX
+
 #include "bfd.h"
 #include "sysdep.h"
 #include "libbfd.h"
@@ -64,12 +68,22 @@
    within PE/PEI, so we get them from there.  FIXME: The lack of
    variance is an assumption which may prove to be incorrect if new
    PE/PEI targets are created.  */
-#include "coff/i386.h"
+#ifdef COFF_WITH_pep
+# include "coff/ia64.h"
+#else
+# include "coff/i386.h"
+#endif
 
 #include "coff/pe.h"
 #include "libcoff.h"
 #include "libpei.h"
 
+#ifdef COFF_WITH_pep
+# undef AOUTSZ
+# define AOUTSZ		PEPAOUTSZ
+# define PEAOUTHDR	PEPAOUTHDR
+#endif
+
 /* FIXME: This file has various tests of POWERPC_LE_PE.  Those tests
    worked when the code was in peicode.h, but no longer work now that
    the code is in peigen.c.  PowerPC NT is said to be dead.  If
@@ -84,7 +98,7 @@
 /**********************************************************************/
 
 void
-_bfd_pei_swap_sym_in (abfd, ext1, in1)
+_bfd_XXi_swap_sym_in (abfd, ext1, in1)
      bfd *abfd;
      PTR ext1;
      PTR in1;
@@ -207,7 +221,7 @@
 }
 
 unsigned int
-_bfd_pei_swap_sym_out (abfd, inp, extp)
+_bfd_XXi_swap_sym_out (abfd, inp, extp)
      bfd       *abfd;
      PTR	inp;
      PTR	extp;
@@ -241,7 +255,7 @@
 }
 
 void
-_bfd_pei_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1)
+_bfd_XXi_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1)
      bfd            *abfd;
      PTR	     ext1;
      int             type;
@@ -320,7 +334,7 @@
 }
 
 unsigned int
-_bfd_pei_swap_aux_out (abfd, inp, type, class, indx, numaux, extp)
+_bfd_XXi_swap_aux_out (abfd, inp, type, class, indx, numaux, extp)
      bfd  *abfd;
      PTR   inp;
      int   type;
@@ -401,7 +415,7 @@
 }
 
 void
-_bfd_pei_swap_lineno_in (abfd, ext1, in1)
+_bfd_XXi_swap_lineno_in (abfd, ext1, in1)
      bfd *abfd;
      PTR ext1;
      PTR in1;
@@ -414,7 +428,7 @@
 }
 
 unsigned int
-_bfd_pei_swap_lineno_out (abfd, inp, outp)
+_bfd_XXi_swap_lineno_out (abfd, inp, outp)
      bfd       *abfd;
      PTR	inp;
      PTR	outp;
@@ -429,7 +443,7 @@
 }
 
 void
-_bfd_pei_swap_aouthdr_in (abfd, aouthdr_ext1, aouthdr_int1)
+_bfd_XXi_swap_aouthdr_in (abfd, aouthdr_ext1, aouthdr_int1)
      bfd *abfd;
      PTR aouthdr_ext1;
      PTR aouthdr_int1;
@@ -451,7 +465,7 @@
     GET_AOUTHDR_ENTRY (abfd, (bfd_byte *) aouthdr_ext->entry);
   aouthdr_int->text_start =
     GET_AOUTHDR_TEXT_START (abfd, (bfd_byte *) aouthdr_ext->text_start);
-#ifndef COFF_WITH_PEP64
+#ifndef COFF_WITH_pep
   /* PE32+ does not have data_start member! */
   aouthdr_int->data_start =
     GET_AOUTHDR_DATA_START (abfd, (bfd_byte *) aouthdr_ext->data_start);
@@ -504,18 +518,18 @@
   if (aouthdr_int->entry)
     {
       aouthdr_int->entry += a->ImageBase;
-#ifndef COFF_WITH_PEP64
+#ifndef COFF_WITH_pep
       aouthdr_int->entry &= 0xffffffff;
 #endif
     }
   if (aouthdr_int->tsize)
     {
       aouthdr_int->text_start += a->ImageBase;
-#ifndef COFF_WITH_PEP64
+#ifndef COFF_WITH_pep
       aouthdr_int->text_start &= 0xffffffff;
 #endif
     }
-#ifndef COFF_WITH_PEP64
+#ifndef COFF_WITH_pep
   /* PE32+ does not have data_start member! */
   if (aouthdr_int->dsize)
     {
@@ -566,32 +580,27 @@
 }
 
 unsigned int
-_bfd_pei_swap_aouthdr_out (abfd, in, out)
+_bfd_XXi_swap_aouthdr_out (abfd, in, out)
      bfd       *abfd;
      PTR	in;
      PTR	out;
 {
   struct internal_aouthdr *aouthdr_in = (struct internal_aouthdr *) in;
-  struct internal_extra_pe_aouthdr *extra = &pe_data (abfd)->pe_opthdr;
+  pe_data_type *pe = pe_data (abfd);
+  struct internal_extra_pe_aouthdr *extra = &pe->pe_opthdr;
   PEAOUTHDR *aouthdr_out = (PEAOUTHDR *) out;
   bfd_vma sa, fa, ib;
 
-  /* The following definitely is required for EFI applications.
-     Perhaps it's needed for other PEI targets as well, but I don't
-     know that for a fact, so we play it safe here and tweak the
-     alignments only if PEI_FORCE_MINIMUM_ALIGNMENT is
-     defined. --davidm */
-#ifdef PEI_FORCE_MINIMUM_ALIGNMENT
-  if (!extra->FileAlignment)
-    extra->FileAlignment = PE_DEF_FILE_ALIGNMENT;
-  if (!extra->SectionAlignment)
-    extra->SectionAlignment = PE_DEF_SECTION_ALIGNMENT;
-#endif
+  if (pe->force_minimum_alignment)
+    {
+      if (!extra->FileAlignment)
+	extra->FileAlignment = PE_DEF_FILE_ALIGNMENT;
+      if (!extra->SectionAlignment)
+	extra->SectionAlignment = PE_DEF_SECTION_ALIGNMENT;
+    }
 
-#ifdef PEI_DEFAULT_TARGET_SUBSYSTEM
   if (extra->Subsystem == IMAGE_SUBSYSTEM_UNKNOWN)
-    extra->Subsystem = PEI_DEFAULT_TARGET_SUBSYSTEM;
-#endif
+    extra->Subsystem = pe->target_subsystem;
 
   sa = extra->SectionAlignment;
   fa = extra->FileAlignment;
@@ -600,17 +609,23 @@
   if (aouthdr_in->tsize)
     {
       aouthdr_in->text_start -= ib;
+#ifndef COFF_WITH_pep
       aouthdr_in->text_start &= 0xffffffff;
+#endif
     }
   if (aouthdr_in->dsize)
     {
       aouthdr_in->data_start -= ib;
+#ifndef COFF_WITH_pep
       aouthdr_in->data_start &= 0xffffffff;
+#endif
     }
   if (aouthdr_in->entry)
     {
       aouthdr_in->entry -= ib;
+#ifndef COFF_WITH_pep
       aouthdr_in->entry &= 0xffffffff;
+#endif
     }
 
 #define FA(x) (((x) + fa -1 ) & (- fa))
@@ -644,7 +659,7 @@
      in this slot by MSVC; it doesn't seem to cause problems (so far),
      but since it's the best we've got, use it.  It does do the right
      thing for .pdata.  */
-  if (pe_data (abfd)->has_reloc_section)
+  if (pe->has_reloc_section)
     add_data_entry (abfd, extra, 5, ".reloc", ib);
 
   {
@@ -692,7 +707,7 @@
   PUT_AOUTHDR_TEXT_START (abfd, aouthdr_in->text_start,
 			  (bfd_byte *) aouthdr_out->standard.text_start);
 
-#ifndef COFF_WITH_PEP64
+#ifndef COFF_WITH_pep
   /* PE32+ does not have data_start member! */
   PUT_AOUTHDR_DATA_START (abfd, aouthdr_in->data_start,
 			  (bfd_byte *) aouthdr_out->standard.data_start);
@@ -755,7 +770,7 @@
 }
 
 unsigned int
-_bfd_pei_only_swap_filehdr_out (abfd, in, out)
+_bfd_XXi_only_swap_filehdr_out (abfd, in, out)
      bfd       *abfd;
      PTR	in;
      PTR	out;
@@ -878,7 +893,7 @@
 }
 
 unsigned int
-_bfd_pe_only_swap_filehdr_out (abfd, in, out)
+_bfd_XX_only_swap_filehdr_out (abfd, in, out)
      bfd       *abfd;
      PTR	in;
      PTR	out;
@@ -899,7 +914,7 @@
 }
 
 unsigned int
-_bfd_pei_swap_scnhdr_out (abfd, in, out)
+_bfd_XXi_swap_scnhdr_out (abfd, in, out)
      bfd       *abfd;
      PTR	in;
      PTR	out;
@@ -1544,7 +1559,7 @@
      bfd *abfd;
      PTR vfile;
 {
-#ifdef COFF_WITH_PEP64
+#ifdef COFF_WITH_pep
 # define PDATA_ROW_SIZE	(3*8)
 #else
 # define PDATA_ROW_SIZE	(5*4)
@@ -1570,7 +1585,7 @@
 
   fprintf (file,
 	   _("\nThe Function Table (interpreted .pdata section contents)\n"));
-#ifdef COFF_WITH_PEP64
+#ifdef COFF_WITH_pep
   fprintf (file,
 	   _(" vma:\t\t\tBegin Address    End Address      Unwind Info\n"));
 #else
@@ -1629,7 +1644,7 @@
       fprintf_vma (file, begin_addr); fputc (' ', file);
       fprintf_vma (file, end_addr); fputc (' ', file);
       fprintf_vma (file, eh_handler);
-#ifndef COFF_WITH_PEP64
+#ifndef COFF_WITH_pep
       fputc (' ', file);
       fprintf_vma (file, eh_data); fputc (' ', file);
       fprintf_vma (file, prolog_end_addr);
@@ -1780,7 +1795,7 @@
 /* Print out the program headers.  */
 
 boolean
-_bfd_pe_print_private_bfd_data_common (abfd, vfile)
+_bfd_XX_print_private_bfd_data_common (abfd, vfile)
      bfd *abfd;
      PTR vfile;
 {
@@ -1892,7 +1907,7 @@
    to the output bfd.  */
 
 boolean
-_bfd_pe_bfd_copy_private_bfd_data_common (ibfd, obfd)
+_bfd_XX_bfd_copy_private_bfd_data_common (ibfd, obfd)
      bfd *ibfd, *obfd;
 {
   /* One day we may try to grok other private data.  */
@@ -1915,7 +1930,7 @@
 
 /* Copy private section data.  */
 boolean
-_bfd_pe_bfd_copy_private_section_data (ibfd, isec, obfd, osec)
+_bfd_XX_bfd_copy_private_section_data (ibfd, isec, obfd, osec)
      bfd *ibfd;
      asection *isec;
      bfd *obfd;
@@ -1952,25 +1967,27 @@
 }
 
 void
-_bfd_pe_get_symbol_info (abfd, symbol, ret)
+_bfd_XX_get_symbol_info (abfd, symbol, ret)
      bfd *abfd;
      asymbol *symbol;
      symbol_info *ret;
 {
   coff_get_symbol_info (abfd, symbol, ret);
-
+#if 0 /* This code no longer appears to be necessary.
+	 ImageBase has already been added in by coff_swap_scnhdr_in.  */
   if (pe_data (abfd) != NULL
       && ((symbol->flags & BSF_DEBUGGING) == 0
 	  || (symbol->flags & BSF_DEBUGGING_RELOC) != 0)
       && ! bfd_is_abs_section (symbol->section))
     ret->value += pe_data (abfd)->pe_opthdr.ImageBase;
+#endif
 }
 
 /* Handle the .idata section and other things that need symbol table
    access.  */
 
 boolean
-_bfd_pei_final_link_postscript (abfd, pfinfo)
+_bfd_XXi_final_link_postscript (abfd, pfinfo)
      bfd *abfd;
      struct coff_final_link_info *pfinfo;
 {
diff --git a/bfd/peicode.h b/bfd/peicode.h
index 4a022f2..a537a7d 100644
--- a/bfd/peicode.h
+++ b/bfd/peicode.h
@@ -1,5 +1,5 @@
 /* Support for the generic parts of PE/PEI, for BFD.
-   Copyright 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
    Written by Cygnus Solutions.
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -208,26 +208,6 @@
   filehdr_dst->f_flags = bfd_h_get_16(abfd, (bfd_byte *)filehdr_src-> f_flags);
   filehdr_dst->f_symptr = bfd_h_get_32 (abfd, (bfd_byte *) filehdr_src->f_symptr);
 
-#ifdef COFF_IMAGE_WITH_PE
-  /* There are really two magic numbers involved; the magic number
-     that says this is a NT executable (PEI) and the magic number that
-     determines the architecture.  The former is DOSMAGIC, stored in
-     the e_magic field.  The latter is stored in the f_magic field.
-     If the NT magic number isn't valid, the architecture magic number
-     could be mimicked by some other field (specifically, the number
-     of relocs in section 3).  Since this routine can only be called
-     correctly for a PEI file, check the e_magic number here, and, if
-     it doesn't match, clobber the f_magic number so that we don't get
-     a false match.  */
-#if 0
-  /* We can't assume that the PE header is at offset 0x80.  When it
-     isn't, the DOS header isn't read correctly, so we can't assume
-     e_magic is set even for valid PE files.  */
-  if (bfd_h_get_16 (abfd, (bfd_byte *) filehdr_src->e_magic) != DOSMAGIC)
-    filehdr_dst->f_magic = -1;
-#endif
-#endif
-
   /* Other people's tools sometimes generate headers with an nsyms but
      a zero symptr.  */
   if (filehdr_dst->f_nsyms != 0 && filehdr_dst->f_symptr == 0)
@@ -241,9 +221,9 @@
 }
 
 #ifdef COFF_IMAGE_WITH_PE
-#define coff_swap_filehdr_out _bfd_pei_only_swap_filehdr_out
+# define coff_swap_filehdr_out _bfd_XXi_only_swap_filehdr_out
 #else
-#define coff_swap_filehdr_out _bfd_pe_only_swap_filehdr_out
+# define coff_swap_filehdr_out _bfd_pe_only_swap_filehdr_out
 #endif
 
 static void
@@ -322,6 +302,14 @@
 
   /* in_reloc_p is architecture dependent.  */
   pe->in_reloc_p = in_reloc_p;
+
+#ifdef PEI_FORCE_MINIMUM_ALIGNMENT
+  pe->force_minimum_alignment = 1;
+#endif
+#ifdef PEI_TARGET_SUBSYSTEM
+  pe->target_subsystem = PEI_TARGET_SUBSYSTEM;
+#endif
+
   return true;
 }
 
@@ -385,7 +373,7 @@
 {
   FILE *file = (FILE *) vfile;
 
-  if (!_bfd_pe_print_private_bfd_data_common (abfd, vfile))
+  if (!_bfd_XX_print_private_bfd_data_common (abfd, vfile))
     return false;
 
   if (pe_saved_coff_bfd_print_private_bfd_data != NULL)
@@ -405,7 +393,7 @@
 pe_bfd_copy_private_bfd_data (ibfd, obfd)
      bfd *ibfd, *obfd;
 {
-  if (!_bfd_pe_bfd_copy_private_bfd_data_common (ibfd, obfd))
+  if (!_bfd_XX_bfd_copy_private_bfd_data_common (ibfd, obfd))
     return false;
 
   if (pe_saved_coff_bfd_copy_private_bfd_data)
@@ -415,9 +403,9 @@
 }
 
 #define coff_bfd_copy_private_section_data \
-  _bfd_pe_bfd_copy_private_section_data
+  _bfd_XX_bfd_copy_private_section_data
 
-#define coff_get_symbol_info _bfd_pe_get_symbol_info
+#define coff_get_symbol_info _bfd_XX_get_symbol_info
 
 #ifdef COFF_IMAGE_WITH_PE
 
@@ -1255,16 +1243,10 @@
 static const bfd_target *
 pe_bfd_object_p (bfd * abfd)
 {
-  /* We need to handle a PE image correctly.  In PE images created by
-     the GNU linker, the offset to the COFF header is always the size.
-     However, this is not the case in images generated by other PE
-     linkers.  The PE format stores a four byte offset to the PE
-     signature just before the COFF header at location 0x3c of the file.
-     We pick up that offset, verify that the PE signature is there, and
-     then set ourselves up to read in the COFF header.  */
   bfd_byte buffer[4];
+  struct external_PEI_DOS_hdr dos_hdr;
+  struct external_PEI_IMAGE_hdr image_hdr;
   file_ptr offset;
-  unsigned long signature;
 
   /* Detect if this a Microsoft Import Library Format element.  */
   if (bfd_seek (abfd, 0x00, SEEK_SET) != 0
@@ -1275,44 +1257,56 @@
       return NULL;
     }
 
-  signature = bfd_h_get_32 (abfd, buffer);
-
-  if (signature == 0xffff0000)
+  if (bfd_h_get_32 (abfd, buffer) == 0xffff0000)
     return pe_ILF_object_p (abfd);
 
-  if (bfd_seek (abfd, 0x3c, SEEK_SET) != 0
-      || bfd_read (buffer, 1, 4, abfd) != 4)
+  if (bfd_seek (abfd, 0x00, SEEK_SET) != 0
+      || bfd_read (&dos_hdr, 1, sizeof (dos_hdr), abfd)
+	 != sizeof (dos_hdr))
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
       return NULL;
     }
 
-  offset = bfd_h_get_32 (abfd, buffer);
+  /* There are really two magic numbers involved; the magic number
+     that says this is a NT executable (PEI) and the magic number that
+     determines the architecture.  The former is DOSMAGIC, stored in
+     the e_magic field.  The latter is stored in the f_magic field.
+     If the NT magic number isn't valid, the architecture magic number
+     could be mimicked by some other field (specifically, the number
+     of relocs in section 3).  Since this routine can only be called
+     correctly for a PEI file, check the e_magic number here, and, if
+     it doesn't match, clobber the f_magic number so that we don't get
+     a false match.  */
+  if (bfd_h_get_16 (abfd, (bfd_byte *) dos_hdr.e_magic) != DOSMAGIC)
+    {
+      bfd_set_error (bfd_error_wrong_format);
+      return NULL;
+    }
 
-  if (bfd_seek (abfd, offset, SEEK_SET) != 0
-      || bfd_read (buffer, 1, 4, abfd) != 4)
+  offset = bfd_h_get_32 (abfd, (bfd_byte *) dos_hdr.e_lfanew);
+  if (bfd_seek (abfd, (file_ptr) offset, SEEK_SET) != 0
+      || bfd_read (&image_hdr, 1, sizeof (image_hdr), abfd)
+	 != sizeof (image_hdr))
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
       return NULL;
     }
 
-  signature = bfd_h_get_32 (abfd, buffer);
-
-  if (signature != 0x4550)
+  if (bfd_h_get_32 (abfd, (bfd_byte *) image_hdr.nt_signature)
+      != 0x4550)
     {
       bfd_set_error (bfd_error_wrong_format);
       return NULL;
     }
 
   /* Here is the hack.  coff_object_p wants to read filhsz bytes to
-     pick up the COFF header.  We adjust so that that will work.  20
-     is the size of the i386 COFF filehdr.  */
+     pick up the COFF header for PE, see "struct external_PEI_filehdr"
+     in include/coff/pe.h.  We adjust so that that will work. */
   if (bfd_seek (abfd,
-		(bfd_tell (abfd)
-		 - bfd_coff_filhsz (abfd)
-		 + 20),
+		(file_ptr) (offset - sizeof (dos_hdr)),
 		SEEK_SET)
       != 0)
     {
diff --git a/bfd/po/POTFILES.in b/bfd/po/POTFILES.in
index f75b4ca..a0d42e6 100644
--- a/bfd/po/POTFILES.in
+++ b/bfd/po/POTFILES.in
@@ -82,9 +82,11 @@
 cpu-mcore.c
 cpu-mips.c
 cpu-ns32k.c
+cpu-pdp11.c
 cpu-pj.c
 cpu-powerpc.c
 cpu-rs6000.c
+cpu-s390.c
 cpu-sh.c
 cpu-sparc.c
 cpu-tic30.c
@@ -127,6 +129,7 @@
 elf32-mips.c
 elf32-pj.c
 elf32-ppc.c
+elf32-s390.c
 elf32-sh.c
 elf32-sh-lin.c
 elf32-sparc.c
@@ -137,6 +140,7 @@
 elf64-hppa.c
 elf64-hppa.h
 elf64-mips.c
+elf64-s390.c
 elf64-sparc.c
 elf64-x86-64.c
 elfarm-nabi.c
@@ -210,11 +214,11 @@
 opncls.c
 osf-core.c
 pc532-mach.c
+pdp11.c
 pe-arm.c
 pe-i386.c
 pei-arm.c
 peicode.h
-peigen.c
 pei-i386.c
 pei-mcore.c
 pei-mips.c
diff --git a/bfd/po/bfd.pot b/bfd/po/bfd.pot
index e77b05d..f7d540f 100644
--- a/bfd/po/bfd.pot
+++ b/bfd/po/bfd.pot
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2001-01-11 11:54-0800\n"
+"POT-Creation-Date: 2001-02-26 17:19-0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -49,7 +49,7 @@
 msgid "*unknown*"
 msgstr ""
 
-#: aoutx.h:3684
+#: aoutx.h:3681
 #, c-format
 msgid "%s: relocateable link from %s to %s not supported"
 msgstr ""
@@ -67,98 +67,98 @@
 msgid "Writing updated armap timestamp"
 msgstr ""
 
-#: bfd.c:273
+#: bfd.c:272
 msgid "No error"
 msgstr ""
 
-#: bfd.c:274
+#: bfd.c:273
 msgid "System call error"
 msgstr ""
 
-#: bfd.c:275
+#: bfd.c:274
 msgid "Invalid bfd target"
 msgstr ""
 
-#: bfd.c:276
+#: bfd.c:275
 msgid "File in wrong format"
 msgstr ""
 
-#: bfd.c:277
+#: bfd.c:276
 msgid "Invalid operation"
 msgstr ""
 
-#: bfd.c:278
+#: bfd.c:277
 msgid "Memory exhausted"
 msgstr ""
 
-#: bfd.c:279
+#: bfd.c:278
 msgid "No symbols"
 msgstr ""
 
-#: bfd.c:280
+#: bfd.c:279
 msgid "Archive has no index; run ranlib to add one"
 msgstr ""
 
-#: bfd.c:281
+#: bfd.c:280
 msgid "No more archived files"
 msgstr ""
 
-#: bfd.c:282
+#: bfd.c:281
 msgid "Malformed archive"
 msgstr ""
 
-#: bfd.c:283
+#: bfd.c:282
 msgid "File format not recognized"
 msgstr ""
 
-#: bfd.c:284
+#: bfd.c:283
 msgid "File format is ambiguous"
 msgstr ""
 
-#: bfd.c:285
+#: bfd.c:284
 msgid "Section has no contents"
 msgstr ""
 
-#: bfd.c:286
+#: bfd.c:285
 msgid "Nonrepresentable section on output"
 msgstr ""
 
-#: bfd.c:287
+#: bfd.c:286
 msgid "Symbol needs debug section which does not exist"
 msgstr ""
 
-#: bfd.c:288
+#: bfd.c:287
 msgid "Bad value"
 msgstr ""
 
-#: bfd.c:289
+#: bfd.c:288
 msgid "File truncated"
 msgstr ""
 
-#: bfd.c:290
+#: bfd.c:289
 msgid "File too big"
 msgstr ""
 
-#: bfd.c:291
+#: bfd.c:290
 msgid "#<Invalid error code>"
 msgstr ""
 
-#: bfd.c:675
+#: bfd.c:674
 #, c-format
 msgid "bfd assertion fail %s:%d"
 msgstr ""
 
-#: bfd.c:693
+#: bfd.c:692
 #, c-format
 msgid "BFD internal error, aborting at %s line %d in %s\n"
 msgstr ""
 
-#: bfd.c:697
+#: bfd.c:696
 #, c-format
 msgid "BFD internal error, aborting at %s line %d\n"
 msgstr ""
 
-#: bfd.c:699
+#: bfd.c:698
 msgid "Please report this bug.\n"
 msgstr ""
 
@@ -167,23 +167,23 @@
 msgid "Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx."
 msgstr ""
 
-#: coff-a29k.c:122
+#: coff-a29k.c:123
 msgid "Missing IHCONST"
 msgstr ""
 
-#: coff-a29k.c:181
+#: coff-a29k.c:183
 msgid "Missing IHIHALF"
 msgstr ""
 
-#: coff-a29k.c:213
+#: coff-a29k.c:215
 msgid "Unrecognized reloc"
 msgstr ""
 
-#: coff-a29k.c:425
+#: coff-a29k.c:427
 msgid "missing IHCONST reloc"
 msgstr ""
 
-#: coff-a29k.c:516
+#: coff-a29k.c:518
 msgid "missing IHIHALF reloc"
 msgstr ""
 
@@ -191,172 +191,177 @@
 msgid "GP relative relocation used when GP not defined"
 msgstr ""
 
-#: coff-alpha.c:1486 elf64-alpha.c:4004
+#: coff-alpha.c:1486 elf64-alpha.c:4044
 msgid "using multiple gp values"
 msgstr ""
 
-#: coff-alpha.c:1992 coff-mips.c:1434
+#: coff-alpha.c:1992 coff-mips.c:1433
 msgid "GP relative relocation when GP not defined"
 msgstr ""
 
-#: coff-arm.c:1018 elf32-arm.h:246
+#: coff-arm.c:1017 elf32-arm.h:246
 #, c-format
 msgid "%s: unable to find THUMB glue '%s' for `%s'"
 msgstr ""
 
-#: coff-arm.c:1047 elf32-arm.h:281
+#: coff-arm.c:1046 elf32-arm.h:281
 #, c-format
 msgid "%s: unable to find ARM glue '%s' for `%s'"
 msgstr ""
 
-#: coff-arm.c:1335 coff-arm.c:1430 elf32-arm.h:841 elf32-arm.h:946
+#: coff-arm.c:1334 coff-arm.c:1429 elf32-arm.h:841 elf32-arm.h:946
 #, c-format
 msgid "%s(%s): warning: interworking not enabled."
 msgstr ""
 
-#: coff-arm.c:1339 elf32-arm.h:949
+#: coff-arm.c:1338 elf32-arm.h:949
 #, c-format
 msgid "  first occurrence: %s: arm call to thumb"
 msgstr ""
 
-#: coff-arm.c:1434 elf32-arm.h:844
+#: coff-arm.c:1433 elf32-arm.h:844
 #, c-format
 msgid "  first occurrence: %s: thumb call to arm"
 msgstr ""
 
-#: coff-arm.c:1437
+#: coff-arm.c:1436
 msgid "  consider relinking with --support-old-code enabled"
 msgstr ""
 
-#: coff-arm.c:1726 coff-tic80.c:682 cofflink.c:2991
+#: coff-arm.c:1725 coff-tic80.c:682 cofflink.c:2991
 #, c-format
 msgid "%s: bad reloc address 0x%lx in section `%s'"
 msgstr ""
 
-#: coff-arm.c:2063
+#: coff-arm.c:2062
 #, c-format
 msgid "%s: illegal symbol index in reloc: %d"
 msgstr ""
 
-#: coff-arm.c:2191
+#: coff-arm.c:2190
 #, c-format
 msgid "%s: ERROR: compiled for APCS-%d whereas target %s uses APCS-%d"
 msgstr ""
 
-#: coff-arm.c:2206
+#: coff-arm.c:2205
 #, c-format
 msgid ""
 "%s: ERROR: passes floats in float registers whereas target %s uses integer "
 "registers"
 msgstr ""
 
-#: coff-arm.c:2209
+#: coff-arm.c:2208
 #, c-format
 msgid ""
 "%s: ERROR: passes floats in integer registers whereas target %s uses float "
 "registers"
 msgstr ""
 
-#: coff-arm.c:2224
+#: coff-arm.c:2223
 #, c-format
 msgid ""
 "%s: ERROR: compiled as position independent code, whereas target %s is "
 "absolute position"
 msgstr ""
 
-#: coff-arm.c:2227
+#: coff-arm.c:2226
 #, c-format
 msgid ""
 "%s: ERROR: compiled as absolute position code, whereas target %s is position "
 "independent"
 msgstr ""
 
-#: coff-arm.c:2256
+#: coff-arm.c:2255
 #, c-format
 msgid "Warning: input file %s supports interworking, whereas %s does not."
 msgstr ""
 
-#: coff-arm.c:2259
+#: coff-arm.c:2258
 #, c-format
 msgid "Warning: input file %s does not support interworking, whereas %s does."
 msgstr ""
 
-#: coff-arm.c:2286
+#: coff-arm.c:2285
 #, c-format
 msgid "private flags = %x:"
 msgstr ""
 
-#: coff-arm.c:2294 elf32-arm.h:2210
+#: coff-arm.c:2293 elf32-arm.h:2210
 msgid " [floats passed in float registers]"
 msgstr ""
 
-#: coff-arm.c:2296
+#: coff-arm.c:2295
 msgid " [floats passed in integer registers]"
 msgstr ""
 
-#: coff-arm.c:2299 elf32-arm.h:2213
+#: coff-arm.c:2298 elf32-arm.h:2213
 msgid " [position independent]"
 msgstr ""
 
-#: coff-arm.c:2301
+#: coff-arm.c:2300
 msgid " [absolute position]"
 msgstr ""
 
-#: coff-arm.c:2305
+#: coff-arm.c:2304
 msgid " [interworking flag not initialised]"
 msgstr ""
 
-#: coff-arm.c:2307
+#: coff-arm.c:2306
 msgid " [interworking supported]"
 msgstr ""
 
-#: coff-arm.c:2309
+#: coff-arm.c:2308
 msgid " [interworking not supported]"
 msgstr ""
 
-#: coff-arm.c:2357
+#: coff-arm.c:2356
 #, c-format
 msgid ""
 "Warning: Not setting interworking flag of %s, since it has already been "
 "specified as non-interworking"
 msgstr ""
 
-#: coff-arm.c:2361
+#: coff-arm.c:2360
 #, c-format
 msgid "Warning: Clearing the interworking flag of %s due to outside request"
 msgstr ""
 
-#: coffcode.h:2136
+#: coffcode.h:1080
+#, c-format
+msgid "%s (%s): Section flag %s (0x%x) ignored"
+msgstr ""
+
+#: coffcode.h:2194
 #, c-format
 msgid "Unrecognized TI COFF target id '0x%x'"
 msgstr ""
 
-#: coffcode.h:4194
+#: coffcode.h:4252
 #, c-format
 msgid "%s: warning: illegal symbol index %ld in line numbers"
 msgstr ""
 
-#: coffcode.h:4208
+#: coffcode.h:4266
 #, c-format
 msgid "%s: warning: duplicate line number information for `%s'"
 msgstr ""
 
-#: coffcode.h:4568
+#: coffcode.h:4626
 #, c-format
 msgid "%s: Unrecognized storage class %d for %s symbol `%s'"
 msgstr ""
 
-#: coffcode.h:4699
+#: coffcode.h:4757
 #, c-format
 msgid "warning: %s: local symbol `%s' has no section"
 msgstr ""
 
-#: coff-tic54x.c:376 coffcode.h:4810
+#: coff-tic54x.c:376 coffcode.h:4868
 #, c-format
 msgid "%s: warning: illegal symbol index %ld in relocs"
 msgstr ""
 
-#: coffcode.h:4848
+#: coffcode.h:4906
 #, c-format
 msgid "%s: illegal relocation type %d at address 0x%lx"
 msgstr ""
@@ -375,7 +380,7 @@
 msgid "uncertain calling convention for non-COFF symbol"
 msgstr ""
 
-#: cofflink.c:526 elflink.h:1648
+#: cofflink.c:526 elflink.h:1651
 #, c-format
 msgid "Warning: type of symbol `%s' changed from %d to %d in %s"
 msgstr ""
@@ -395,21 +400,21 @@
 msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff"
 msgstr ""
 
-#: coff-m68k.c:475 coff-mips.c:2432 elf32-m68k.c:2265
+#: coff-m68k.c:475 coff-mips.c:2431 elf32-m68k.c:2264
 msgid "unsupported reloc type"
 msgstr ""
 
-#: coff-mips.c:875 elf32-mips.c:1417
+#: coff-mips.c:874 elf32-mips.c:1423
 msgid "GP relative relocation when _gp not defined"
 msgstr ""
 
 #. No other sections should appear in -membedded-pic
 #. code.
-#: coff-mips.c:2469
+#: coff-mips.c:2468
 msgid "reloc against unsupported section"
 msgstr ""
 
-#: coff-mips.c:2477
+#: coff-mips.c:2476
 msgid "reloc not properly aligned"
 msgstr ""
 
@@ -478,61 +483,61 @@
 msgid "Dwarf Error: Bad abbrev number: %d."
 msgstr ""
 
-#: ecoff.c:1323
+#: ecoff.c:1329
 #, c-format
 msgid "Unknown basic type %d"
 msgstr ""
 
-#: ecoff.c:1592
+#: ecoff.c:1598
 #, c-format
 msgid ""
 "\n"
 "      End+1 symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1599 ecoff.c:1602
+#: ecoff.c:1605 ecoff.c:1608
 #, c-format
 msgid ""
 "\n"
 "      First symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1614
+#: ecoff.c:1620
 #, c-format
 msgid ""
 "\n"
 "      End+1 symbol: %-7ld   Type:  %s"
 msgstr ""
 
-#: ecoff.c:1621
+#: ecoff.c:1627
 #, c-format
 msgid ""
 "\n"
 "      Local symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1629
+#: ecoff.c:1635
 #, c-format
 msgid ""
 "\n"
 "      struct; End+1 symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1634
+#: ecoff.c:1640
 #, c-format
 msgid ""
 "\n"
 "      union; End+1 symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1639
+#: ecoff.c:1645
 #, c-format
 msgid ""
 "\n"
 "      enum; End+1 symbol: %ld"
 msgstr ""
 
-#: ecoff.c:1645
+#: ecoff.c:1651
 #, c-format
 msgid ""
 "\n"
@@ -549,33 +554,34 @@
 msgid "%s: Warning: Thumb BLX instruction targets thumb function '%s'."
 msgstr ""
 
-#: elf-hppa.h:1369 elf-hppa.h:1402 elf32-arm.h:1853 elf32-i386.c:1428
-#: elf32-ppc.c:3096 elf32-sh.c:2997 elf64-x86-64.c:271
+#: elf-hppa.h:1369 elf-hppa.h:1402 elf32-arm.h:1853 elf32-i386.c:1442
+#: elf32-ppc.c:3092 elf32-s390.c:1442 elf32-sh.c:2996 elf64-s390.c:1431
+#: elf64-x86-64.c:1200
 #, c-format
 msgid ""
 "%s: warning: unresolvable relocation against symbol `%s' from %s section"
 msgstr ""
 
-#: elf-m10200.c:455 elf-m10300.c:669 elf32-arm.h:1927 elf32-avr.c:842
-#: elf32-cris.c:431 elf32-d10v.c:478 elf32-fr30.c:651 elf32-i860.c:1051
-#: elf32-m32r.c:1265 elf32-v850.c:1672
+#: elf-m10200.c:450 elf-m10300.c:663 elf32-arm.h:1927 elf32-avr.c:842
+#: elf32-cris.c:431 elf32-d10v.c:478 elf32-fr30.c:648 elf32-i860.c:1049
+#: elf32-m32r.c:1265 elf32-v850.c:1680
 msgid "internal error: out of range error"
 msgstr ""
 
-#: elf-m10200.c:459 elf-m10300.c:673 elf32-arm.h:1931 elf32-avr.c:846
-#: elf32-cris.c:435 elf32-d10v.c:482 elf32-fr30.c:655 elf32-i860.c:1055
-#: elf32-m32r.c:1269 elf32-v850.c:1676
+#: elf-m10200.c:454 elf-m10300.c:667 elf32-arm.h:1931 elf32-avr.c:846
+#: elf32-cris.c:435 elf32-d10v.c:482 elf32-fr30.c:652 elf32-i860.c:1053
+#: elf32-m32r.c:1269 elf32-v850.c:1684
 msgid "internal error: unsupported relocation error"
 msgstr ""
 
-#: elf-m10200.c:463 elf-m10300.c:677 elf32-arm.h:1935 elf32-d10v.c:486
+#: elf-m10200.c:458 elf-m10300.c:671 elf32-arm.h:1935 elf32-d10v.c:486
 #: elf32-m32r.c:1273
 msgid "internal error: dangerous error"
 msgstr ""
 
-#: elf-m10200.c:467 elf-m10300.c:681 elf32-arm.h:1939 elf32-avr.c:854
-#: elf32-cris.c:443 elf32-d10v.c:490 elf32-fr30.c:663 elf32-i860.c:1063
-#: elf32-m32r.c:1277 elf32-v850.c:1696
+#: elf-m10200.c:462 elf-m10300.c:675 elf32-arm.h:1939 elf32-avr.c:854
+#: elf32-cris.c:443 elf32-d10v.c:490 elf32-fr30.c:660 elf32-i860.c:1061
+#: elf32-m32r.c:1277 elf32-v850.c:1704
 msgid "internal error: unknown error"
 msgstr ""
 
@@ -660,7 +666,7 @@
 
 #. Ignore init flag - it may not be set, despite the flags field
 #. containing valid data.
-#: elf32-arm.h:2193 elf32-cris.c:615 elf32-m68k.c:430 elf32-mips.c:2695
+#: elf32-arm.h:2193 elf32-cris.c:615 elf32-m68k.c:429 elf32-mips.c:2701
 #, c-format
 msgid "private flags = %lx:"
 msgstr ""
@@ -717,8 +723,8 @@
 msgid "<Unrecognised flag bits set>"
 msgstr ""
 
-#: elf32-avr.c:850 elf32-cris.c:439 elf32-fr30.c:659 elf32-i860.c:1059
-#: elf32-v850.c:1680
+#: elf32-avr.c:850 elf32-cris.c:439 elf32-fr30.c:656 elf32-i860.c:1057
+#: elf32-v850.c:1688
 msgid "internal error: dangerous relocation"
 msgstr ""
 
@@ -736,61 +742,61 @@
 msgid "%s: uses non-prefixed symbols, but writing file with _-prefixed symbols"
 msgstr ""
 
-#: elf32-hppa.c:606
+#: elf32-hppa.c:625
 #, c-format
 msgid "%s(%s+0x%lx): cannot find stub entry %s"
 msgstr ""
 
-#: elf32-hppa.c:667
+#: elf32-hppa.c:686
 #, c-format
 msgid "%s: cannot create stub entry %s"
 msgstr ""
 
-#: elf32-hppa.c:859
+#: elf32-hppa.c:878
 #, c-format
 msgid "%s(%s+0x%lx): cannot relocate %s, recompile with -ffunction-sections"
 msgstr ""
 
-#: elf32-hppa.c:872 elf32-hppa.c:1568
+#: elf32-hppa.c:891 elf32-hppa.c:1587
 #, c-format
 msgid "Could not find relocation section for %s"
 msgstr ""
 
-#: elf32-hppa.c:1011 elf32-hppa.c:3362
+#: elf32-hppa.c:1030 elf32-hppa.c:3421
 #, c-format
 msgid "%s(%s+0x%lx): cannot reach %s, recompile with -ffunction-sections"
 msgstr ""
 
-#: elf32-hppa.c:1323
+#: elf32-hppa.c:1342
 #, c-format
 msgid ""
 "%s: relocation %s can not be used when making a shared object; recompile "
 "with -fPIC"
 msgstr ""
 
-#: elf32-hppa.c:1343
+#: elf32-hppa.c:1362
 #, c-format
 msgid ""
 "%s: relocation %s should not be used when making a shared object; recompile "
 "with -fPIC"
 msgstr ""
 
-#: elf32-hppa.c:2755
+#: elf32-hppa.c:2725
 #, c-format
 msgid "%s: duplicate export stub %s"
 msgstr ""
 
-#: elf32-hppa.c:3253
+#: elf32-hppa.c:3305
 #, c-format
 msgid "%s(%s+0x%lx): fixing %s"
 msgstr ""
 
-#: elf32-hppa.c:3856
+#: elf32-hppa.c:3924
 #, c-format
 msgid "%s(%s+0x%lx): cannot handle %s for %s"
 msgstr ""
 
-#: elf32-hppa.c:4173
+#: elf32-hppa.c:4242
 msgid ".got section not immediately after .plt section"
 msgstr ""
 
@@ -799,11 +805,21 @@
 msgid "%s: invalid relocation type %d"
 msgstr ""
 
+#: elf32-i386.c:681 elf32-i386.c:1649
+#, c-format
+msgid "%s(%s): bad relocation section name `%s'"
+msgstr ""
+
+#: elf32-i386.c:686 elf32-i386.c:1654
+#, c-format
+msgid "%s: bad relocation section name `%s'"
+msgstr ""
+
 #: elf32-m32r.c:916
 msgid "SDA relocation when _SDA_BASE_ not defined"
 msgstr ""
 
-#: elf32-m32r.c:1000 elf32-ppc.c:2963
+#: elf32-m32r.c:1000 elf32-ppc.c:2959
 #, c-format
 msgid "%s: unknown relocation type %d"
 msgstr ""
@@ -831,155 +847,155 @@
 msgid ": m32rx instructions"
 msgstr ""
 
-#: elf32-m68k.c:433
+#: elf32-m68k.c:432
 msgid " [cpu32]"
 msgstr ""
 
-#: elf32-mcore.c:366 elf32-mcore.c:493
+#: elf32-mcore.c:364 elf32-mcore.c:490
 #, c-format
 msgid "%s: Relocation %s (%d) is not currently supported.\n"
 msgstr ""
 
-#: elf32-mcore.c:452
+#: elf32-mcore.c:449
 #, c-format
 msgid "%s: Unknown relocation type %d\n"
 msgstr ""
 
-#: elf32-mips.c:1576
+#: elf32-mips.c:1582
 msgid "32bits gp relative relocation occurs for an external symbol"
 msgstr ""
 
-#: elf32-mips.c:1725
+#: elf32-mips.c:1731
 #, c-format
 msgid "Linking mips16 objects into %s format is not supported"
 msgstr ""
 
-#: elf32-mips.c:2582
+#: elf32-mips.c:2588
 #, c-format
 msgid "%s: linking PIC files with non-PIC files"
 msgstr ""
 
-#: elf32-mips.c:2592
+#: elf32-mips.c:2598
 #, c-format
 msgid "%s: linking abicalls files with non-abicalls files"
 msgstr ""
 
-#: elf32-mips.c:2621
+#: elf32-mips.c:2627
 #, c-format
 msgid "%s: ISA mismatch (-mips%d) with previous modules (-mips%d)"
 msgstr ""
 
-#: elf32-mips.c:2630
+#: elf32-mips.c:2636
 #, c-format
 msgid "%s: ISA mismatch (%d) with previous modules (%d)"
 msgstr ""
 
-#: elf32-mips.c:2653
+#: elf32-mips.c:2659
 #, c-format
 msgid "%s: ABI mismatch: linking %s module with previous %s modules"
 msgstr ""
 
-#: elf32-mips.c:2667 elf32-ppc.c:1477 elf64-sparc.c:2971
+#: elf32-mips.c:2673 elf32-ppc.c:1477 elf64-sparc.c:2998
 #, c-format
 msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"
 msgstr ""
 
-#: elf32-mips.c:2698
+#: elf32-mips.c:2704
 msgid " [abi=O32]"
 msgstr ""
 
-#: elf32-mips.c:2700
+#: elf32-mips.c:2706
 msgid " [abi=O64]"
 msgstr ""
 
-#: elf32-mips.c:2702
+#: elf32-mips.c:2708
 msgid " [abi=EABI32]"
 msgstr ""
 
-#: elf32-mips.c:2704
+#: elf32-mips.c:2710
 msgid " [abi=EABI64]"
 msgstr ""
 
-#: elf32-mips.c:2706
+#: elf32-mips.c:2712
 msgid " [abi unknown]"
 msgstr ""
 
-#: elf32-mips.c:2708
+#: elf32-mips.c:2714
 msgid " [abi=N32]"
 msgstr ""
 
-#: elf32-mips.c:2710
+#: elf32-mips.c:2716
 msgid " [abi=64]"
 msgstr ""
 
-#: elf32-mips.c:2712
+#: elf32-mips.c:2718
 msgid " [no abi set]"
 msgstr ""
 
-#: elf32-mips.c:2715
+#: elf32-mips.c:2721
 msgid " [mips1]"
 msgstr ""
 
-#: elf32-mips.c:2717
+#: elf32-mips.c:2723
 msgid " [mips2]"
 msgstr ""
 
-#: elf32-mips.c:2719
+#: elf32-mips.c:2725
 msgid " [mips3]"
 msgstr ""
 
-#: elf32-mips.c:2721
+#: elf32-mips.c:2727
 msgid " [mips4]"
 msgstr ""
 
-#: elf32-mips.c:2723
+#: elf32-mips.c:2729
 msgid " [mips5]"
 msgstr ""
 
-#: elf32-mips.c:2725
+#: elf32-mips.c:2731
 msgid " [mips32]"
 msgstr ""
 
-#: elf32-mips.c:2727
+#: elf32-mips.c:2733
 msgid " [mips64]"
 msgstr ""
 
-#: elf32-mips.c:2729
+#: elf32-mips.c:2735
 msgid " [unknown ISA]"
 msgstr ""
 
-#: elf32-mips.c:2732
+#: elf32-mips.c:2738
 msgid " [32bitmode]"
 msgstr ""
 
-#: elf32-mips.c:2734
+#: elf32-mips.c:2740
 msgid " [not 32bitmode]"
 msgstr ""
 
-#: elf32-mips.c:4388
+#: elf32-mips.c:4407
 msgid "static procedure (no name)"
 msgstr ""
 
-#: elf32-mips.c:5005 elf64-alpha.c:4377
+#: elf32-mips.c:5024 elf64-alpha.c:4417
 #, c-format
 msgid "%s: illegal section name `%s'"
 msgstr ""
 
-#: elf32-mips.c:5570
+#: elf32-mips.c:5589
 msgid "not enough GOT space for local GOT entries"
 msgstr ""
 
-#: elf32-mips.c:6686
+#: elf32-mips.c:6705
 #, c-format
 msgid "%s: %s+0x%lx: jump to stub routine which is not jal"
 msgstr ""
 
-#: elf32-mips.c:7673
+#: elf32-mips.c:7692
 #, c-format
 msgid "Malformed reloc detected for section %s"
 msgstr ""
 
-#: elf32-mips.c:7750
+#: elf32-mips.c:7769
 #, c-format
 msgid "%s: CALL16 reloc at 0x%lx not against global symbol"
 msgstr ""
@@ -996,28 +1012,28 @@
 "%s: compiled normally and linked with modules compiled with -mrelocatable"
 msgstr ""
 
-#: elf32-ppc.c:1578
+#: elf32-ppc.c:1575
 #, c-format
 msgid "%s: Unknown special linker type %d"
 msgstr ""
 
-#: elf32-ppc.c:2245 elf32-ppc.c:2279 elf32-ppc.c:2314
+#: elf32-ppc.c:2241 elf32-ppc.c:2275 elf32-ppc.c:2310
 #, c-format
 msgid "%s: relocation %s cannot be used when making a shared object"
 msgstr ""
 
-#: elf32-ppc.c:3129
+#: elf32-ppc.c:3125
 #, c-format
 msgid "%s: unknown relocation type %d for symbol %s"
 msgstr ""
 
-#: elf32-ppc.c:3493 elf32-ppc.c:3514 elf32-ppc.c:3564
+#: elf32-ppc.c:3489 elf32-ppc.c:3510 elf32-ppc.c:3560
 #, c-format
 msgid ""
 "%s: The target (%s) of a %s relocation is in the wrong output section (%s)"
 msgstr ""
 
-#: elf32-ppc.c:3630
+#: elf32-ppc.c:3626
 #, c-format
 msgid "%s: Relocation %s is not yet supported for symbol %s."
 msgstr ""
@@ -1062,216 +1078,221 @@
 msgid "%s: 0x%lx: fatal: reloc overflow while relaxing"
 msgstr ""
 
-#: elf32-sparc.c:1512 elf64-sparc.c:2262
+#: elf32-sparc.c:1512 elf64-sparc.c:2264
 #, c-format
 msgid "%s: probably compiled without -fPIC?"
 msgstr ""
 
-#: elf32-sparc.c:1962
+#: elf32-sparc.c:1969
 #, c-format
 msgid "%s: compiled for a 64 bit system and target is 32 bit"
 msgstr ""
 
-#: elf32-sparc.c:1976
+#: elf32-sparc.c:1983
 #, c-format
 msgid "%s: linking little endian files with big endian files"
 msgstr ""
 
-#: elf32-v850.c:677
+#: elf32-v850.c:674
 #, c-format
 msgid "Variable `%s' cannot occupy in multiple small data regions"
 msgstr ""
 
-#: elf32-v850.c:680
+#: elf32-v850.c:677
 #, c-format
 msgid ""
 "Variable `%s' can only be in one of the small, zero, and tiny data regions"
 msgstr ""
 
-#: elf32-v850.c:683
+#: elf32-v850.c:680
 #, c-format
 msgid ""
 "Variable `%s' cannot be in both small and zero data regions simultaneously"
 msgstr ""
 
-#: elf32-v850.c:686
+#: elf32-v850.c:683
 #, c-format
 msgid ""
 "Variable `%s' cannot be in both small and tiny data regions simultaneously"
 msgstr ""
 
-#: elf32-v850.c:689
+#: elf32-v850.c:686
 #, c-format
 msgid ""
 "Variable `%s' cannot be in both zero and tiny data regions simultaneously"
 msgstr ""
 
-#: elf32-v850.c:1066
+#: elf32-v850.c:1063
 msgid "FAILED to find previous HI16 reloc\n"
 msgstr ""
 
-#: elf32-v850.c:1684
+#: elf32-v850.c:1692
 msgid "could not locate special linker symbol __gp"
 msgstr ""
 
-#: elf32-v850.c:1688
+#: elf32-v850.c:1696
 msgid "could not locate special linker symbol __ep"
 msgstr ""
 
-#: elf32-v850.c:1692
+#: elf32-v850.c:1700
 msgid "could not locate special linker symbol __ctbp"
 msgstr ""
 
-#: elf32-v850.c:1881
+#: elf32-v850.c:1889
 #, c-format
 msgid "%s: Architecture mismatch with previous modules"
 msgstr ""
 
-#: elf32-v850.c:1900
+#: elf32-v850.c:1908
 #, c-format
 msgid "private flags = %lx: "
 msgstr ""
 
-#: elf32-v850.c:1905
+#: elf32-v850.c:1913
 msgid "v850 architecture"
 msgstr ""
 
-#: elf32-v850.c:1906
+#: elf32-v850.c:1914
 msgid "v850e architecture"
 msgstr ""
 
-#: elf32-v850.c:1907
+#: elf32-v850.c:1915
 msgid "v850ea architecture"
 msgstr ""
 
-#: elf64-alpha.c:951
+#: elf64-alpha.c:985
 msgid "GPDISP relocation did not find ldah and lda instructions"
 msgstr ""
 
-#: elf64-alpha.c:3014
+#: elf64-alpha.c:3054
 #, c-format
 msgid "%s: .got subsegment exceeds 64K (size %d)"
 msgstr ""
 
-#: elf64-sparc.c:1248
+#: elf64-hppa.c:2018
+#, c-format
+msgid "stub entry for %s cannot load .plt, dp offset = %ld"
+msgstr ""
+
+#: elf64-sparc.c:1249
 #, c-format
 msgid "%s: check_relocs: unhandled reloc type %d"
 msgstr ""
 
-#: elf64-sparc.c:1285
+#: elf64-sparc.c:1286
 msgid "%s: Only registers %%g[2367] can be declared using STT_REGISTER"
 msgstr ""
 
-#: elf64-sparc.c:1305
+#: elf64-sparc.c:1306
 msgid ""
 "Register %%g%d used incompatibly: previously declared in %s to %s, in %s "
 "redefined to %s"
 msgstr ""
 
-#: elf64-sparc.c:1328
+#: elf64-sparc.c:1329
 #, c-format
 msgid "Symbol `%s' has differing types: previously %s, REGISTER in %s"
 msgstr ""
 
-#: elf64-sparc.c:1374
+#: elf64-sparc.c:1375
 #, c-format
 msgid "Symbol `%s' has differing types: REGISTER in %s, %s in %s"
 msgstr ""
 
-#: elf64-sparc.c:2952
+#: elf64-sparc.c:2979
 #, c-format
 msgid "%s: linking UltraSPARC specific with HAL specific code"
 msgstr ""
 
-#: elf.c:325
+#: elf.c:329
 #, c-format
 msgid "%s: invalid string offset %u >= %lu for section `%s'"
 msgstr ""
 
-#: elf.c:566
+#: elf.c:570
 msgid ""
 "\n"
 "Program Header:\n"
 msgstr ""
 
-#: elf.c:614
+#: elf.c:618
 msgid ""
 "\n"
 "Dynamic Section:\n"
 msgstr ""
 
-#: elf.c:743
+#: elf.c:747
 msgid ""
 "\n"
 "Version definitions:\n"
 msgstr ""
 
-#: elf.c:766
+#: elf.c:770
 msgid ""
 "\n"
 "Version References:\n"
 msgstr ""
 
-#: elf.c:771
+#: elf.c:775
 #, c-format
 msgid "  required from %s:\n"
 msgstr ""
 
-#: elf.c:1359
+#: elf.c:1363
 #, c-format
 msgid "%s: invalid link %lu for reloc section %s (index %u)"
 msgstr ""
 
-#: elf.c:2113
+#: elf.c:2117
 #, c-format
 msgid ""
 "creating section symbol, name = %s, value = 0x%.8lx, index = %d, section = "
 "0x%.8lx\n"
 msgstr ""
 
-#: elf.c:2716
+#: elf.c:2720
 #, c-format
 msgid "%s: Not enough room for program headers (allocated %u, need %u)"
 msgstr ""
 
-#: elf.c:2815
+#: elf.c:2819
 #, c-format
 msgid "%s: Not enough room for program headers, try linking with -N"
 msgstr ""
 
-#: elf.c:2941
+#: elf.c:2945
 #, c-format
 msgid "Error: First section in segment (%s) starts at 0x%x"
 msgstr ""
 
-#: elf.c:2944
+#: elf.c:2948
 #, c-format
 msgid "       whereas segment starts at 0x%x"
 msgstr ""
 
-#: elf.c:3217
+#: elf.c:3221
 #, c-format
 msgid "%s: warning: allocated section `%s' not in segment"
 msgstr ""
 
-#: elf.c:3616
+#: elf.c:3623
 #, c-format
 msgid "%s: symbol `%s' required but not present"
 msgstr ""
 
-#: elf.c:3625
+#: elf.c:3632
 #, c-format
 msgid ""
 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = "
 "0x%.8lx%s\n"
 msgstr ""
 
-#: elf.c:3866
+#: elf.c:3873
 #, c-format
 msgid "%s: warning: Empty loadable segment detected\n"
 msgstr ""
 
-#: elf.c:5213
+#: elf.c:5253
 #, c-format
 msgid "%s: unsupported relocation type %s"
 msgstr ""
@@ -1281,46 +1302,51 @@
 msgid "%s: version count (%ld) does not match symbol count (%ld)"
 msgstr ""
 
-#: elflink.c:432
+#: elflink.c:430
 #, c-format
 msgid "%s: Section %s is already to large to put hole of %ld bytes in"
 msgstr ""
 
-#: elflink.h:1465
+#: elflink.h:1468
 #, c-format
 msgid "%s: %s: invalid version %u (max %d)"
 msgstr ""
 
-#: elflink.h:1506
+#: elflink.h:1509
 #, c-format
 msgid "%s: %s: invalid needed version %d"
 msgstr ""
 
-#: elflink.h:1626
+#: elflink.h:1629
 #, c-format
 msgid "Warning: size of symbol `%s' changed from %lu to %lu in %s"
 msgstr ""
 
-#: elflink.h:1872
+#: elflink.h:1875
 #, c-format
 msgid "%s: warning: unexpected redefinition of `%s'"
 msgstr ""
 
-#: elflink.h:3659
+#: elflink.h:3660
 #, c-format
 msgid "warning: type and size of dynamic symbol `%s' are not defined"
 msgstr ""
 
-#: elflink.h:3931
+#: elflink.h:3932
 #, c-format
 msgid "%s: undefined versioned symbol name %s"
 msgstr ""
 
-#: elflink.h:5180
+#: elflink.h:5181
 #, c-format
 msgid "%s: could not find output section %s for input section %s"
 msgstr ""
 
+#: elflink.h:5559
+#, c-format
+msgid "%s: invalid section symbol index 0x%x (%s) ingored"
+msgstr ""
+
 #: i386linux.c:450 m68klinux.c:454 sparclinux.c:452
 #, c-format
 msgid "Output file requires shared library `%s'\n"
@@ -1451,342 +1477,43 @@
 msgstr ""
 
 #. XXX code yet to be written.
-#: peicode.h:807
+#: peicode.h:795
 #, c-format
 msgid "%s: Unhandled import type; %x"
 msgstr ""
 
-#: peicode.h:812
+#: peicode.h:800
 #, c-format
 msgid "%s: Unrecognised import type; %x"
 msgstr ""
 
-#: peicode.h:826
+#: peicode.h:814
 #, c-format
 msgid "%s: Unrecognised import name type; %x"
 msgstr ""
 
-#: peicode.h:1183
+#: peicode.h:1171
 #, c-format
 msgid "%s: Unrecognised machine type (0x%x) in Import Library Format archive"
 msgstr ""
 
-#: peicode.h:1195
+#: peicode.h:1183
 #, c-format
 msgid ""
 "%s: Recognised but unhandled machine type (0x%x) in Import Library Format "
 "archive"
 msgstr ""
 
-#: peicode.h:1212
+#: peicode.h:1200
 #, c-format
 msgid "%s: size field is zero in Import Library Format header"
 msgstr ""
 
-#: peicode.h:1240
+#: peicode.h:1228
 #, c-format
 msgid "%s: string not null terminated in ILF object file."
 msgstr ""
 
-#: peigen.c:993
-#, c-format
-msgid "%s: line number overflow: 0x%lx > 0xffff"
-msgstr ""
-
-#: peigen.c:1011
-#, c-format
-msgid "%s: reloc overflow 1: 0x%lx > 0xffff"
-msgstr ""
-
-#: peigen.c:1024
-msgid "Export Directory [.edata (or where ever we found it)]"
-msgstr ""
-
-#: peigen.c:1025
-msgid "Import Directory [parts of .idata]"
-msgstr ""
-
-#: peigen.c:1026
-msgid "Resource Directory [.rsrc]"
-msgstr ""
-
-#: peigen.c:1027
-msgid "Exception Directory [.pdata]"
-msgstr ""
-
-#: peigen.c:1028
-msgid "Security Directory"
-msgstr ""
-
-#: peigen.c:1029
-msgid "Base Relocation Directory [.reloc]"
-msgstr ""
-
-#: peigen.c:1030
-msgid "Debug Directory"
-msgstr ""
-
-#: peigen.c:1031
-msgid "Description Directory"
-msgstr ""
-
-#: peigen.c:1032
-msgid "Special Directory"
-msgstr ""
-
-#: peigen.c:1033
-msgid "Thread Storage Directory [.tls]"
-msgstr ""
-
-#: peigen.c:1034
-msgid "Load Configuration Directory"
-msgstr ""
-
-#: peigen.c:1035
-msgid "Bound Import Directory"
-msgstr ""
-
-#: peigen.c:1036
-msgid "Import Address Table Directory"
-msgstr ""
-
-#: peigen.c:1037
-msgid "Delay Import Directory"
-msgstr ""
-
-#: peigen.c:1038 peigen.c:1039
-msgid "Reserved"
-msgstr ""
-
-#: peigen.c:1103
-msgid ""
-"\n"
-"There is an import table, but the section containing it could not be found\n"
-msgstr ""
-
-#: peigen.c:1108
-#, c-format
-msgid ""
-"\n"
-"There is an import table in %s at 0x%lx\n"
-msgstr ""
-
-#: peigen.c:1147
-#, c-format
-msgid ""
-"\n"
-"Function descriptor located at the start address: %04lx\n"
-msgstr ""
-
-#: peigen.c:1150
-#, c-format
-msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"
-msgstr ""
-
-#: peigen.c:1156
-msgid ""
-"\n"
-"No reldata section! Function descriptor not decoded.\n"
-msgstr ""
-
-#: peigen.c:1161
-#, c-format
-msgid ""
-"\n"
-"The Import Tables (interpreted %s section contents)\n"
-msgstr ""
-
-#: peigen.c:1164
-msgid " vma:            Hint    Time      Forward  DLL       First\n"
-msgstr ""
-
-#: peigen.c:1166
-msgid "                 Table   Stamp     Chain    Name      Thunk\n"
-msgstr ""
-
-#: peigen.c:1216
-#, c-format
-msgid ""
-"\n"
-"\tDLL Name: %s\n"
-msgstr ""
-
-#: peigen.c:1220 peigen.c:1283
-msgid "\tvma:  Hint/Ord Member-Name\n"
-msgstr ""
-
-#: peigen.c:1282
-msgid "\tThe Import Address Table (difference found)\n"
-msgstr ""
-
-#: peigen.c:1289
-msgid "\t>>> Ran out of IAT members!\n"
-msgstr ""
-
-#: peigen.c:1308
-msgid "\tThe Import Address Table is identical\n"
-msgstr ""
-
-#: peigen.c:1381
-msgid ""
-"\n"
-"There is an export table, but the section containing it could not be found\n"
-msgstr ""
-
-#: peigen.c:1386
-#, c-format
-msgid ""
-"\n"
-"There is an export table in %s at 0x%lx\n"
-msgstr ""
-
-#: peigen.c:1417
-#, c-format
-msgid ""
-"\n"
-"The Export Tables (interpreted %s section contents)\n"
-"\n"
-msgstr ""
-
-#: peigen.c:1421
-#, c-format
-msgid "Export Flags \t\t\t%lx\n"
-msgstr ""
-
-#: peigen.c:1424
-#, c-format
-msgid "Time/Date stamp \t\t%lx\n"
-msgstr ""
-
-#: peigen.c:1427
-#, c-format
-msgid "Major/Minor \t\t\t%d/%d\n"
-msgstr ""
-
-#: peigen.c:1430
-msgid "Name \t\t\t\t"
-msgstr ""
-
-#: peigen.c:1436
-#, c-format
-msgid "Ordinal Base \t\t\t%ld\n"
-msgstr ""
-
-#: peigen.c:1439
-msgid "Number in:\n"
-msgstr ""
-
-#: peigen.c:1442
-#, c-format
-msgid "\tExport Address Table \t\t%08lx\n"
-msgstr ""
-
-#: peigen.c:1446
-#, c-format
-msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
-msgstr ""
-
-#: peigen.c:1449
-msgid "Table Addresses\n"
-msgstr ""
-
-#: peigen.c:1452
-msgid "\tExport Address Table \t\t"
-msgstr ""
-
-#: peigen.c:1457
-msgid "\tName Pointer Table \t\t"
-msgstr ""
-
-#: peigen.c:1462
-msgid "\tOrdinal Table \t\t\t"
-msgstr ""
-
-#: peigen.c:1476
-#, c-format
-msgid ""
-"\n"
-"Export Address Table -- Ordinal Base %ld\n"
-msgstr ""
-
-#: peigen.c:1495
-msgid "Forwarder RVA"
-msgstr ""
-
-#: peigen.c:1506
-msgid "Export RVA"
-msgstr ""
-
-#: peigen.c:1513
-msgid ""
-"\n"
-"[Ordinal/Name Pointer] Table\n"
-msgstr ""
-
-#: peigen.c:1568
-#, c-format
-msgid "Warning, .pdata section size (%ld) is not a multiple of %d\n"
-msgstr ""
-
-#: peigen.c:1572
-msgid ""
-"\n"
-"The Function Table (interpreted .pdata section contents)\n"
-msgstr ""
-
-#: peigen.c:1575
-msgid " vma:\t\t\tBegin Address    End Address      Unwind Info\n"
-msgstr ""
-
-#: peigen.c:1578
-msgid " vma:\t\tBegin    End      EH       EH       PrologEnd  Exception\n"
-msgstr ""
-
-#: peigen.c:1580
-msgid "     \t\tAddress  Address  Handler  Data     Address    Mask\n"
-msgstr ""
-
-#: peigen.c:1652
-msgid " Register save millicode"
-msgstr ""
-
-#: peigen.c:1655
-msgid " Register restore millicode"
-msgstr ""
-
-#: peigen.c:1658
-msgid " Glue code sequence"
-msgstr ""
-
-#: peigen.c:1709
-msgid ""
-"\n"
-"\n"
-"PE File Base Relocations (interpreted .reloc section contents)\n"
-msgstr ""
-
-#: peigen.c:1744
-#, c-format
-msgid ""
-"\n"
-"Virtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n"
-msgstr ""
-
-#: peigen.c:1757
-#, c-format
-msgid "\treloc %4d offset %4x [%4lx] %s"
-msgstr ""
-
-#. The MS dumpbin program reportedly ands with 0xff0f before
-#. printing the characteristics field.  Not sure why.  No reason to
-#. emulate it here.
-#: peigen.c:1796
-#, c-format
-msgid ""
-"\n"
-"Characteristics 0x%x\n"
-msgstr ""
-
 #: pe-mips.c:653
 #, c-format
 msgid "%s: `ld -r' not supported with PE MIPS objects\n"
@@ -1897,29 +1624,29 @@
 msgid "Object module NOT error-free !\n"
 msgstr ""
 
-#: vms-misc.c:539
+#: vms-misc.c:536
 #, c-format
 msgid "Stack overflow (%d) in _bfd_vms_push"
 msgstr ""
 
-#: vms-misc.c:557
+#: vms-misc.c:554
 msgid "Stack underflow in _bfd_vms_pop"
 msgstr ""
 
-#: vms-misc.c:915
+#: vms-misc.c:910
 msgid "_bfd_vms_output_counted called with zero bytes"
 msgstr ""
 
-#: vms-misc.c:920
+#: vms-misc.c:915
 msgid "_bfd_vms_output_counted called with too many bytes"
 msgstr ""
 
-#: vms-misc.c:1051
+#: vms-misc.c:1046
 #, c-format
 msgid "Symbol %s replaced by %s\n"
 msgstr ""
 
-#: vms-misc.c:1113
+#: vms-misc.c:1108
 #, c-format
 msgid "failed to enter %s"
 msgstr ""
diff --git a/bfd/reloc.c b/bfd/reloc.c
index f37a6a9..07cf691 100644
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -2108,6 +2108,13 @@
   ns32k relocations
 
 ENUM
+  BFD_RELOC_PDP11_DISP_8_PCREL
+ENUMX
+  BFD_RELOC_PDP11_DISP_6_PCREL
+ENUMDOC
+  PDP11 relocations
+
+ENUM
   BFD_RELOC_PJ_CODE_HI16
 ENUMX
   BFD_RELOC_PJ_CODE_LO16
@@ -2736,6 +2743,75 @@
   into 22 bits.
 
 ENUM
+  BFD_RELOC_390_12
+ENUMDOC
+   Direct 12 bit.
+ENUM
+  BFD_RELOC_390_GOT12
+ENUMDOC
+  12 bit GOT offset.
+ENUM
+  BFD_RELOC_390_PLT32
+ENUMDOC
+  32 bit PC relative PLT address.
+ENUM
+  BFD_RELOC_390_COPY
+ENUMDOC
+  Copy symbol at runtime.
+ENUM
+  BFD_RELOC_390_GLOB_DAT
+ENUMDOC
+  Create GOT entry.
+ENUM
+  BFD_RELOC_390_JMP_SLOT
+ENUMDOC
+  Create PLT entry.
+ENUM
+  BFD_RELOC_390_RELATIVE
+ENUMDOC
+  Adjust by program base.
+ENUM
+  BFD_RELOC_390_GOTPC
+ENUMDOC
+  32 bit PC relative offset to GOT.
+ENUM
+  BFD_RELOC_390_GOT16
+ENUMDOC
+  16 bit GOT offset.
+ENUM
+  BFD_RELOC_390_PC16DBL
+ENUMDOC
+  PC relative 16 bit shifted by 1.
+ENUM
+  BFD_RELOC_390_PLT16DBL
+ENUMDOC
+  16 bit PC rel. PLT shifted by 1.
+ENUM
+  BFD_RELOC_390_PC32DBL
+ENUMDOC
+  PC relative 32 bit shifted by 1.
+ENUM
+  BFD_RELOC_390_PLT32DBL
+ENUMDOC
+  32 bit PC rel. PLT shifted by 1.
+ENUM
+  BFD_RELOC_390_GOTPCDBL
+ENUMDOC
+  32 bit PC rel. GOT shifted by 1.
+ENUM
+  BFD_RELOC_390_GOT64
+ENUMDOC
+  64 bit GOT offset.
+ENUM
+  BFD_RELOC_390_PLT64
+ENUMDOC
+  64 bit PC relative PLT address.
+ENUM
+  BFD_RELOC_390_GOTENT
+ENUMDOC
+  32 bit rel. offset to GOT entry.
+                  
+ENUM
   BFD_RELOC_VTABLE_INHERIT
 ENUMX
   BFD_RELOC_VTABLE_ENTRY
diff --git a/bfd/rs6000-core.c b/bfd/rs6000-core.c
index 11cf9aa..755326a 100644
--- a/bfd/rs6000-core.c
+++ b/bfd/rs6000-core.c
@@ -1,5 +1,5 @@
 /* IBM RS/6000 "XCOFF" back-end for BFD.
-   Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 2000
+   Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 2000, 2001
    Free Software Foundation, Inc.
    FIXME: Can someone provide a transliteration of this name into ASCII?
    Using the following chars caused a compiler warning on HIUX (so I replaced
@@ -31,8 +31,7 @@
    In all cases, it does not support writing.
 
    This is in a separate file from coff-rs6000.c, because it includes
-   system include files that conflict with coff/rs6000.h.
-  */
+   system include files that conflict with coff/rs6000.h.  */
 
 /* Internalcoff.h and coffcode.h modify themselves based on this flag.  */
 #define RS6000COFF_C 1
@@ -107,11 +106,11 @@
 
 typedef union {
 #ifdef AIX_CORE_DUMPX_CORE
-    struct core_dumpx new;	/* new AIX 4.3+ core dump */
+  struct core_dumpx new;	/* new AIX 4.3+ core dump */
 #else
-    struct core_dump new;	/* for simpler coding */
+  struct core_dump new;		/* for simpler coding */
 #endif
-    struct core_dump old;	/* old AIX 4.2- core dump, still used on
+  struct core_dump old;		/* old AIX 4.2- core dump, still used on
 				   4.3+ with appropriate SMIT config */
 } CoreHdr;
 
@@ -120,11 +119,11 @@
 #ifdef CORE_VERSION_1
 typedef union {
 #ifdef AIX_CORE_DUMPX_CORE
-    struct vm_infox new;
+  struct vm_infox new;
 #else
-    struct vm_info new;
+  struct vm_info new;
 #endif
-    struct vm_info old;
+  struct vm_info old;
 } VmInfo;
 #endif
 
@@ -247,8 +246,8 @@
 
 /* Size of the leading portion that old and new core dump structures have in
    common.  */
-#define CORE_COMMONSZ	((int)&((struct core_dump *)0)->c_entries + \
-			 sizeof (((struct core_dump *)0)->c_entries))
+#define CORE_COMMONSZ	((int) &((struct core_dump *) 0)->c_entries \
+			 + sizeof (((struct core_dump *) 0)->c_entries))
 
 /* Try to read into CORE the header from the core file associated with ABFD.
    Return success.  */
@@ -269,7 +268,7 @@
   /* Read the trailing portion of the structure.  */
   size = CORE_NEW (*core) ? sizeof (core->new) : sizeof (core->old)
     - CORE_COMMONSZ;
-  return bfd_read ((char *)core + CORE_COMMONSZ, size, 1, abfd) == size;
+  return bfd_read ((char *) core + CORE_COMMONSZ, size, 1, abfd) == size;
 }
 
 static asection *
@@ -360,7 +359,7 @@
       c_regsize = sizeof (COLD_MSTSAVE (core.old));
       c_regptr = &COLD_MSTSAVE (core.old);
     }
-  c_regoff = (char *)c_regptr - (char *)&core;
+  c_regoff = (char *) c_regptr - (char *) &core;
 
   if (bfd_stat (abfd, &statbuf) < 0)
     {
@@ -378,7 +377,7 @@
 
      For the data segment, we have no choice but to keep going if it's
      not there, since the default behavior is not to dump it (regardless
-     of the ulimit, it's based on SA_FULLDUMP).	 But for the stack segment,
+     of the ulimit, it's based on SA_FULLDUMP).  But for the stack segment,
      if it's not there, we refuse to have anything to do with this core
      file.  The usefulness of a core dump without a stack segment is pretty
      limited anyway.  */
@@ -397,7 +396,7 @@
     }
 
   /* Don't check the core file size for a full core, AIX 4.1 includes
-     additional shared library sections in a full core.	 */
+     additional shared library sections in a full core.  */
   if (!(c_flag & (FULL_CORE | CORE_TRUNC)))
     {
       /* If the size is wrong, it means we're misinterpreting something.  */
@@ -422,9 +421,9 @@
     (*_bfd_error_handler) (_("%s: warning core file truncated"),
 			   bfd_get_filename (abfd));
 
-  /* Allocate core file header.	 */
+  /* Allocate core file header.  */
   size = CORE_NEW (core) ? sizeof (core.new) : sizeof (core.old);
-  tmpptr = (char*) bfd_zalloc (abfd, size);
+  tmpptr = (char *) bfd_zalloc (abfd, size);
   if (!tmpptr)
     return NULL;
 
@@ -450,7 +449,7 @@
 	  arch = bfd_arch_powerpc;
 	  mach = bfd_mach_ppc;
 	  break;
-      }
+	}
       bfd_default_set_arch_mach (abfd, arch, mach);
     }
 
@@ -481,7 +480,7 @@
      ulimit is large enough, otherwise the data section is omitted.
      AIX 4 sets FULL_CORE even if the core file is truncated, we have
      to examine core.c_datasize below to find out the actual size of
-     the .data section.	 */
+     the .data section.  */
   if (c_flag & FULL_CORE)
     {
       if (!make_bfd_asection (abfd, ".data",
@@ -537,9 +536,9 @@
 
     /* .data sections from loaded objects.  */
     if (proc64)
-      size = (int) ((LdInfo *)0)->l64.ldinfo_filename;
+      size = (int) ((LdInfo *) 0)->l64.ldinfo_filename;
     else
-      size = (int) ((LdInfo *)0)->l32.ldinfo_filename;
+      size = (int) ((LdInfo *) 0)->l32.ldinfo_filename;
 
     while (1)
       {
@@ -567,7 +566,7 @@
 	  if (!make_bfd_asection (abfd, ".data",
 				  SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS,
 				  ldi_datasize, ldi_dataorg, ldi_core))
-	      return NULL;
+	    return NULL;
 
 	if (ldi_next == 0)
 	  break;
@@ -617,10 +616,11 @@
   }
 #endif
 
-  return abfd->xvec;				/* this is garbage for now.  */
+  return abfd->xvec;		/* This is garbage for now.  */
 }
 
-/* return `true' if given core is from the given executable..  */
+/* Return `true' if given core is from the given executable.  */
+
 boolean
 rs6000coff_core_file_matches_executable_p (core_bfd, exec_bfd)
      bfd *core_bfd;
@@ -643,9 +643,9 @@
     c_loader = (file_ptr) COLD_LOADER (core.old);
 
   if (CORE_NEW (core) && CNEW_PROC64 (core.new))
-    size = (int) ((LdInfo *)0)->l64.ldinfo_filename;
+    size = (int) ((LdInfo *) 0)->l64.ldinfo_filename;
   else
-    size = (int) ((LdInfo *)0)->l32.ldinfo_filename;
+    size = (int) ((LdInfo *) 0)->l32.ldinfo_filename;
 
   if (bfd_seek (core_bfd, c_loader + size, SEEK_SET) != 0)
     return false;
diff --git a/bfd/targets.c b/bfd/targets.c
index 8f831f0..598f40e 100644
--- a/bfd/targets.c
+++ b/bfd/targets.c
@@ -542,6 +542,7 @@
 extern const bfd_target bfd_elf32_pjl_vec;
 extern const bfd_target bfd_elf32_powerpc_vec;
 extern const bfd_target bfd_elf32_powerpcle_vec;
+extern const bfd_target bfd_elf32_s390_vec;
 extern const bfd_target bfd_elf32_sh_vec;
 extern const bfd_target bfd_elf32_shblin_vec;
 extern const bfd_target bfd_elf32_shl_vec;
@@ -556,10 +557,13 @@
 extern const bfd_target bfd_elf64_bigmips_vec;
 extern const bfd_target bfd_elf64_hppa_linux_vec;
 extern const bfd_target bfd_elf64_hppa_vec;
+extern const bfd_target bfd_elf64_ia64_aix_big_vec;
+extern const bfd_target bfd_elf64_ia64_aix_little_vec;
 extern const bfd_target bfd_elf64_ia64_big_vec;
 extern const bfd_target bfd_elf64_ia64_little_vec;
 extern const bfd_target bfd_elf64_little_generic_vec;
 extern const bfd_target bfd_elf64_littlemips_vec;
+extern const bfd_target bfd_elf64_s390_vec;
 extern const bfd_target bfd_elf64_sparc_vec;
 extern const bfd_target bfd_elf64_x86_64_vec;
 extern const bfd_target bfd_powerpc_pe_vec;
@@ -622,6 +626,7 @@
 extern const bfd_target oasys_vec;
 extern const bfd_target pc532machaout_vec;
 extern const bfd_target pc532netbsd_vec;
+extern const bfd_target pdp11_aout_vec;
 extern const bfd_target pmac_xcoff_vec;
 extern const bfd_target ppcboot_vec;
 extern const bfd_target riscix_vec;
@@ -682,7 +687,7 @@
 extern const bfd_target trad_core_vec;
 extern const bfd_target ptrace_core_vec;
 
-const bfd_target * const bfd_target_vector[] = {
+static const bfd_target * const _bfd_target_vector[] = {
 
 #ifdef SELECT_VECS
 
@@ -722,6 +727,8 @@
 	&bfd_elf64_alpha_vec,
 	&bfd_elf64_hppa_vec,
 	&bfd_elf64_hppa_linux_vec,
+	&bfd_elf64_ia64_aix_little_vec,
+	&bfd_elf64_ia64_aix_big_vec,
 	&bfd_elf64_ia64_little_vec,
 	&bfd_elf64_ia64_big_vec,
 #endif
@@ -882,6 +889,7 @@
 	&oasys_vec,
 #endif
 	&pc532machaout_vec,
+	&pdp11_aout_vec,
 #if 0
 	/* We have no way of distinguishing these from other a.out variants */
 	&aout_arm_big_vec,
@@ -925,7 +933,10 @@
 	&vms_vax_vec,
 	&we32kcoff_vec,
 	&z8kcoff_vec,
-
+        &bfd_elf32_s390_vec, 
+#ifdef BFD64
+        &bfd_elf64_s390_vec,
+#endif
 #endif /* not SELECT_VECS */
 
 /* Always support S-records, for convenience.  */
@@ -971,6 +982,7 @@
 
 	NULL /* end of list marker */
 };
+const bfd_target * const *bfd_target_vector = _bfd_target_vector;
 
 /* bfd_default_vector[0] contains either the address of the default vector,
    if there is one, or zero if there isn't.  */
diff --git a/bfd/vms-misc.c b/bfd/vms-misc.c
index 89d39db..a7f56b8 100644
--- a/bfd/vms-misc.c
+++ b/bfd/vms-misc.c
@@ -166,7 +166,6 @@
   return;
 }
 #endif
-
 
 /* hash functions
 
@@ -210,7 +209,6 @@
 
   return (struct bfd_hash_entry *)ret;
 }
-
 
 /* object file input functions */
 
@@ -287,19 +285,19 @@
      on VAX there's no length information in the record
      so start with OBJ_S_C_MAXRECSIZ  */
 
-  if (PRIV(buf_size) == 0)
+  if (PRIV (buf_size) == 0)
     {
-      if (PRIV(is_vax))
+      if (PRIV (is_vax))
 	{
-	  PRIV(vms_buf) = (unsigned char *) malloc (OBJ_S_C_MAXRECSIZ);
-	  PRIV(buf_size) = OBJ_S_C_MAXRECSIZ;
-	  PRIV(file_format) = FF_VAX;
+	  PRIV (vms_buf) = (unsigned char *) malloc (OBJ_S_C_MAXRECSIZ);
+	  PRIV (buf_size) = OBJ_S_C_MAXRECSIZ;
+	  PRIV (file_format) = FF_VAX;
 	}
       else
-	PRIV(vms_buf) = (unsigned char *) malloc (6);
+	PRIV (vms_buf) = (unsigned char *) malloc (6);
     }
 
-  vms_buf = PRIV(vms_buf);
+  vms_buf = PRIV (vms_buf);
 
   if (vms_buf == 0)
     {
@@ -307,7 +305,7 @@
       return -1;
     }
 
-  switch (PRIV(file_format))
+  switch (PRIV (file_format))
     {
     case FF_UNKNOWN:
     case FF_FOREIGN:
@@ -331,7 +329,7 @@
 
   if (bfd_tell (abfd) & 1)
     {
-      if (bfd_read (PRIV(vms_buf), 1, 1, abfd) != 1)
+      if (bfd_read (PRIV (vms_buf), 1, 1, abfd) != 1)
 	{
 	  bfd_set_error (bfd_error_file_truncated);
 	  return 0;
@@ -341,7 +339,7 @@
   /* read the record header on Alpha.  */
 
   if ((test_len != 0)
-      && (bfd_read (PRIV(vms_buf), 1, test_len, abfd)
+      && (bfd_read (PRIV (vms_buf), 1, test_len, abfd)
 	  != (bfd_size_type) test_len))
     {
       bfd_set_error (bfd_error_file_truncated);
@@ -350,39 +348,39 @@
 
   /* check file format on first call  */
 
-  if (PRIV(file_format) == FF_UNKNOWN)
+  if (PRIV (file_format) == FF_UNKNOWN)
     {						/* record length repeats ? */
       if ( (vms_buf[0] == vms_buf[4])
         && (vms_buf[1] == vms_buf[5]))
 	{
-	  PRIV(file_format) = FF_FOREIGN;	/* Y: foreign environment */
+	  PRIV (file_format) = FF_FOREIGN;	/* Y: foreign environment */
 	  test_start = 2;
 	}
       else
 	{
-	  PRIV(file_format) = FF_NATIVE;	/* N: native environment */
+	  PRIV (file_format) = FF_NATIVE;	/* N: native environment */
 	  test_start = 0;
 	}
     }
 
-  if (PRIV(is_vax))
+  if (PRIV (is_vax))
     {
-      PRIV(rec_length) = bfd_read (vms_buf, 1, PRIV(buf_size), abfd);
-      if (PRIV(rec_length) <= 0)
+      PRIV (rec_length) = bfd_read (vms_buf, 1, PRIV (buf_size), abfd);
+      if (PRIV (rec_length) <= 0)
 	{
 	  bfd_set_error (bfd_error_file_truncated);
 	  return 0;
 	}
-      PRIV(vms_rec) = vms_buf;
+      PRIV (vms_rec) = vms_buf;
     }
   else		/* Alpha  */
     {
       /* extract vms record length  */
 
       _bfd_vms_get_header_values (abfd, vms_buf+test_start, NULL,
-				  &PRIV(rec_length));
+				  &PRIV (rec_length));
 
-      if (PRIV(rec_length) <= 0)
+      if (PRIV (rec_length) <= 0)
 	{
 	  bfd_set_error (bfd_error_file_truncated);
 	  return 0;
@@ -390,7 +388,7 @@
 
       /* that's what the linker manual says  */
 
-      if (PRIV(rec_length) > EOBJ_S_C_MAXRECSIZ)
+      if (PRIV (rec_length) > EOBJ_S_C_MAXRECSIZ)
 	{
 	  bfd_set_error (bfd_error_file_truncated);
 	  return 0;
@@ -398,21 +396,21 @@
 
       /* adjust the buffer  */
 
-      if (PRIV(rec_length) > PRIV(buf_size))
+      if (PRIV (rec_length) > PRIV (buf_size))
 	{
-	  PRIV(vms_buf) = (unsigned char *) realloc (vms_buf, PRIV(rec_length));
-	  vms_buf = PRIV(vms_buf);
+	  PRIV (vms_buf) = (unsigned char *) realloc (vms_buf, PRIV (rec_length));
+	  vms_buf = PRIV (vms_buf);
 	  if (vms_buf == 0)
 	    {
 	      bfd_set_error (bfd_error_no_memory);
 	      return -1;
 	    }
-	  PRIV(buf_size) = PRIV(rec_length);
+	  PRIV (buf_size) = PRIV (rec_length);
 	}
 
       /* read the remaining record  */
 
-      remaining = PRIV(rec_length) - test_len + test_start;
+      remaining = PRIV (rec_length) - test_len + test_start;
 
 #if VMS_DEBUG
       vms_debug (10, "bfd_read remaining %d\n", remaining);
@@ -423,14 +421,14 @@
 	  bfd_set_error (bfd_error_file_truncated);
 	  return 0;
 	}
-      PRIV(vms_rec) = vms_buf + test_start;
+      PRIV (vms_rec) = vms_buf + test_start;
     }
 
 #if VMS_DEBUG
-  vms_debug (11, "bfd_read rec_length %d\n", PRIV(rec_length));
+  vms_debug (11, "bfd_read rec_length %d\n", PRIV (rec_length));
 #endif
 
-  return PRIV(rec_length);
+  return PRIV (rec_length);
 }
 
 /* get next vms record from file
@@ -442,12 +440,12 @@
 {
 #if VMS_DEBUG
   vms_debug (8, "_bfd_vms_next_record (len %d, size %d)\n",
-	      PRIV(rec_length), PRIV(rec_size));
+	      PRIV (rec_length), PRIV (rec_size));
 #endif
 
-  if (PRIV(rec_length) > 0)
+  if (PRIV (rec_length) > 0)
     {
-      PRIV(vms_rec) += PRIV(rec_size);
+      PRIV (vms_rec) += PRIV (rec_size);
     }
   else
     {
@@ -455,31 +453,30 @@
 	return -1;
     }
 
-  if (!PRIV(vms_rec) || !PRIV(vms_buf)
-      || PRIV(vms_rec) >= (PRIV(vms_buf) + PRIV(buf_size)))
+  if (!PRIV (vms_rec) || !PRIV (vms_buf)
+      || PRIV (vms_rec) >= (PRIV (vms_buf) + PRIV (buf_size)))
     return -1;
 
-  if (PRIV(is_vax))
+  if (PRIV (is_vax))
     {
-      PRIV(rec_type) = *(PRIV(vms_rec));
-      PRIV(rec_size) = PRIV(rec_length);
+      PRIV (rec_type) = *(PRIV (vms_rec));
+      PRIV (rec_size) = PRIV (rec_length);
     }
   else
     {
-      _bfd_vms_get_header_values (abfd, PRIV(vms_rec), &PRIV(rec_type),
-				  &PRIV(rec_size));
+      _bfd_vms_get_header_values (abfd, PRIV (vms_rec), &PRIV (rec_type),
+				  &PRIV (rec_size));
     }
-  PRIV(rec_length) -= PRIV(rec_size);
+  PRIV (rec_length) -= PRIV (rec_size);
 
 #if VMS_DEBUG
   vms_debug (8, "_bfd_vms_next_record: rec %p, size %d, length %d, type %d\n",
-	      PRIV(vms_rec), PRIV(rec_size), PRIV(rec_length),
-	      PRIV(rec_type));
+	      PRIV (vms_rec), PRIV (rec_size), PRIV (rec_length),
+	      PRIV (rec_type));
 #endif
 
-  return PRIV(rec_type);
+  return PRIV (rec_type);
 }
-
 
 /* Copy sized string (string with fixed length) to new allocated area
    size is string length (size of record)  */
@@ -510,7 +507,6 @@
 
   return _bfd_vms_save_sized_string (ptr, len);
 }
-
 
 /* stack routines for vms ETIR commands */
 
@@ -525,19 +521,19 @@
   static int last_psect;
 
 #if VMS_DEBUG
-  vms_debug (4, "<push %016lx(%d) at %d>\n", val, psect, PRIV(stackptr));
+  vms_debug (4, "<push %016lx(%d) at %d>\n", val, psect, PRIV (stackptr));
 #endif
 
   if (psect >= 0)
     last_psect = psect;
 
-  PRIV(stack[PRIV(stackptr)]).value = val;
-  PRIV(stack[PRIV(stackptr)]).psect = last_psect;
-  PRIV(stackptr)++;
-  if (PRIV(stackptr) >= STACKSIZE)
+  PRIV (stack[PRIV (stackptr)]).value = val;
+  PRIV (stack[PRIV (stackptr)]).psect = last_psect;
+  PRIV (stackptr)++;
+  if (PRIV (stackptr) >= STACKSIZE)
     {
       bfd_set_error (bfd_error_bad_value);
-      (*_bfd_error_handler) (_("Stack overflow (%d) in _bfd_vms_push"), PRIV(stackptr));
+      (*_bfd_error_handler) (_("Stack overflow (%d) in _bfd_vms_push"), PRIV (stackptr));
       exit (1);
     }
   return;
@@ -552,24 +548,23 @@
 {
   uquad value;
 
-  if (PRIV(stackptr) == 0)
+  if (PRIV (stackptr) == 0)
     {
       bfd_set_error (bfd_error_bad_value);
       (*_bfd_error_handler) (_("Stack underflow in _bfd_vms_pop"));
       exit (1);
     }
-  PRIV(stackptr)--;
-  value = PRIV(stack[PRIV(stackptr)]).value;
-  if ((psect != NULL) && (PRIV(stack[PRIV(stackptr)]).psect >= 0))
-    *psect = PRIV(stack[PRIV(stackptr)]).psect;
+  PRIV (stackptr)--;
+  value = PRIV (stack[PRIV (stackptr)]).value;
+  if ((psect != NULL) && (PRIV (stack[PRIV (stackptr)]).psect >= 0))
+    *psect = PRIV (stack[PRIV (stackptr)]).psect;
 
 #if VMS_DEBUG
-  vms_debug (4, "<pop %016lx(%d)>\n", value, PRIV(stack[PRIV(stackptr)]).psect);
+  vms_debug (4, "<pop %016lx(%d)>\n", value, PRIV (stack[PRIV (stackptr)]).psect);
 #endif
 
   return value;
 }
-
 
 /* object file output functions */
 
@@ -587,7 +582,7 @@
 {
   vms_section *sptr, *newptr;
 
-  sptr = PRIV(vms_section_table)[section->index];
+  sptr = PRIV (vms_section_table)[section->index];
   if (sptr != NULL)
     return sptr;
 
@@ -600,7 +595,7 @@
   newptr->offset = 0;
   newptr->size = section->_raw_size;
   newptr->next = 0;
-  PRIV(vms_section_table)[section->index] = newptr;
+  PRIV (vms_section_table)[section->index] = newptr;
   return newptr;
 }
 
@@ -644,9 +639,8 @@
       bfd_set_error (bfd_error_nonrepresentable_section);
       return NULL;
     }
-  return PRIV(vms_section_table)[index];
+  return PRIV (vms_section_table)[index];
 }
-
 
 /* Object output routines  */
 
@@ -670,12 +664,12 @@
 
   /* save current output position to fill in lenght later  */
 
-  if (PRIV(push_level) > 0)
-    PRIV(length_pos) = PRIV(output_size);
+  if (PRIV (push_level) > 0)
+    PRIV (length_pos) = PRIV (output_size);
 
 #if VMS_DEBUG
   vms_debug (6, "_bfd_vms_output_begin: length_pos = %d\n",
-	      PRIV(length_pos));
+	      PRIV (length_pos));
 #endif
 
   _bfd_vms_output_short (abfd,0);		/* placeholder for length */
@@ -697,7 +691,7 @@
   vms_debug (6, "_bfd_vms_output_alignment(%d)\n", alignto);
 #endif
 
-  PRIV(output_alignment) = alignto;
+  PRIV (output_alignment) = alignto;
   return;
 }
 
@@ -708,11 +702,11 @@
      bfd *abfd;
 {
 #if VMS_DEBUG
-  vms_debug (6, "vms_output_push(pushed_size = %d)\n", PRIV(output_size));
+  vms_debug (6, "vms_output_push(pushed_size = %d)\n", PRIV (output_size));
 #endif
 
-  PRIV(push_level)++;
-  PRIV(pushed_size) = PRIV(output_size);
+  PRIV (push_level)++;
+  PRIV (pushed_size) = PRIV (output_size);
   return;
 }
 
@@ -723,18 +717,18 @@
      bfd *abfd;
 {
 #if VMS_DEBUG
-  vms_debug (6, "vms_output_pop(pushed_size = %d)\n", PRIV(pushed_size));
+  vms_debug (6, "vms_output_pop(pushed_size = %d)\n", PRIV (pushed_size));
 #endif
 
   _bfd_vms_output_flush (abfd);
-  PRIV(length_pos) = 2;
+  PRIV (length_pos) = 2;
 
 #if VMS_DEBUG
-  vms_debug (6, "vms_output_pop: length_pos = %d\n", PRIV(length_pos));
+  vms_debug (6, "vms_output_pop: length_pos = %d\n", PRIV (length_pos));
 #endif
 
-  PRIV(pushed_size) = 0;
-  PRIV(push_level)--;
+  PRIV (pushed_size) = 0;
+  PRIV (push_level)--;
   return;
 }
 
@@ -744,24 +738,24 @@
 _bfd_vms_output_flush (abfd)
      bfd *abfd;
 {
-  int real_size = PRIV(output_size);
+  int real_size = PRIV (output_size);
   int aligncount;
   int length;
 
 #if VMS_DEBUG
   vms_debug (6, "_bfd_vms_output_flush(real_size = %d, pushed_size %d at lenpos %d)\n",
-	      real_size, PRIV(pushed_size), PRIV(length_pos));
+	      real_size, PRIV (pushed_size), PRIV (length_pos));
 #endif
 
-  if (PRIV(push_level) > 0)
-    length = real_size - PRIV(pushed_size);
+  if (PRIV (push_level) > 0)
+    length = real_size - PRIV (pushed_size);
   else
     length = real_size;
 
   if (length == 0)
     return;
-  aligncount = (PRIV(output_alignment)
-		- (length % PRIV(output_alignment))) % PRIV(output_alignment);
+  aligncount = (PRIV (output_alignment)
+		- (length % PRIV (output_alignment))) % PRIV (output_alignment);
 
 #if VMS_DEBUG
   vms_debug (6, "align: adding %d bytes\n", aligncount);
@@ -769,34 +763,34 @@
 
   while (aligncount-- > 0)
     {
-      PRIV(output_buf)[real_size++] = 0;
+      PRIV (output_buf)[real_size++] = 0;
 #if 0
       /* this is why I *love* vms: inconsistency :-}
 	 alignment is added to the subrecord length
 	 but not to the record length  */
-      if (PRIV(push_level) > 0)
+      if (PRIV (push_level) > 0)
 #endif
 	length++;
     }
 
   /* put length to buffer  */
-  PRIV(output_size) = PRIV(length_pos);
+  PRIV (output_size) = PRIV (length_pos);
   _bfd_vms_output_short (abfd, (unsigned int)length);
 
-  if (PRIV(push_level) == 0)
+  if (PRIV (push_level) == 0)
     {
 #ifndef VMS
 	/* write length first, see FF_FOREIGN in the input routines */
-      fwrite (PRIV(output_buf)+2, 2, 1, (FILE *)abfd->iostream);
+      fwrite (PRIV (output_buf)+2, 2, 1, (FILE *)abfd->iostream);
 #endif
-      fwrite (PRIV(output_buf), real_size, 1, (FILE *)abfd->iostream);
+      fwrite (PRIV (output_buf), real_size, 1, (FILE *)abfd->iostream);
 
-      PRIV(output_size) = 0;
+      PRIV (output_size) = 0;
     }
   else
     {
-      PRIV(output_size) = real_size;
-      PRIV(pushed_size) = PRIV(output_size);
+      PRIV (output_size) = real_size;
+      PRIV (pushed_size) = PRIV (output_size);
     }
 
   return;
@@ -830,7 +824,7 @@
   vms_debug (6, "_bfd_vms_output_check(%d)\n", size);
 #endif
 
-  return (MAX_OUTREC_SIZE - (PRIV(output_size) + size + MIN_OUTREC_LUFT));
+  return (MAX_OUTREC_SIZE - (PRIV (output_size) + size + MIN_OUTREC_LUFT));
 }
 
 /* Output byte (8 bit) value  */
@@ -844,8 +838,8 @@
   vms_debug (6, "_bfd_vms_output_byte(%02x)\n", value);
 #endif
 
-  bfd_put_8 (abfd, value & 0xff, PRIV(output_buf) + PRIV(output_size));
-  PRIV(output_size) += 1;
+  bfd_put_8 (abfd, value & 0xff, PRIV (output_buf) + PRIV (output_size));
+  PRIV (output_size) += 1;
   return;
 }
 
@@ -860,8 +854,8 @@
   vms_debug (6, "_bfd_vms_output_short (%04x)\n", value);
 #endif
 
-  bfd_put_16 (abfd, value & 0xffff, PRIV(output_buf) + PRIV(output_size));
-  PRIV(output_size) += 2;
+  bfd_put_16 (abfd, value & 0xffff, PRIV (output_buf) + PRIV (output_size));
+  PRIV (output_size) += 2;
   return;
 }
 
@@ -876,8 +870,8 @@
   vms_debug (6, "_bfd_vms_output_long (%08lx)\n", value);
 #endif
 
-  bfd_put_32 (abfd, value, PRIV(output_buf) + PRIV(output_size));
-  PRIV(output_size) += 4;
+  bfd_put_32 (abfd, value, PRIV (output_buf) + PRIV (output_size));
+  PRIV (output_size) += 4;
   return;
 }
 
@@ -892,8 +886,8 @@
   vms_debug (6, "_bfd_vms_output_quad(%016lx)\n", value);
 #endif
 
-  bfd_put_64(abfd, value, PRIV(output_buf) + PRIV(output_size));
-  PRIV(output_size) += 8;
+  bfd_put_64(abfd, value, PRIV (output_buf) + PRIV (output_size));
+  PRIV (output_size) += 8;
   return;
 }
 
@@ -940,8 +934,8 @@
   if (length == 0)
     return;
 
-  memcpy (PRIV(output_buf) + PRIV(output_size), data, length);
-  PRIV(output_size) += length;
+  memcpy (PRIV (output_buf) + PRIV (output_size), data, length);
+  PRIV (output_size) += length;
 
   return;
 }
@@ -960,8 +954,8 @@
 
   if (count == 0)
     return;
-  memset (PRIV(output_buf) + PRIV(output_size), value, count);
-  PRIV(output_size) += count;
+  memset (PRIV (output_buf) + PRIV (output_size), value, count);
+  PRIV (output_size) += count;
 
   return;
 }
@@ -1026,7 +1020,7 @@
     }
   else
     {
-      if (PRIV(flag_hash_long_names))
+      if (PRIV (flag_hash_long_names))
 	i = maxlen-9;
       else
 	i = maxlen;
@@ -1037,7 +1031,7 @@
   out += i;
 
   if ((in_len > maxlen)
-      && PRIV(flag_hash_long_names))
+      && PRIV (flag_hash_long_names))
     sprintf (out, "_%08lx", result);
   else
     *out = 0;
@@ -1047,8 +1041,8 @@
 #endif
 
   if (in_len > maxlen
-	&& PRIV(flag_hash_long_names)
-	&& PRIV(flag_show_after_trunc))
+	&& PRIV (flag_hash_long_names)
+	&& PRIV (flag_show_after_trunc))
     printf (_("Symbol %s replaced by %s\n"), old_name, new_name);
 
   return outbuf;
@@ -1090,13 +1084,13 @@
 #endif
 
   entry = (vms_symbol_entry *)
-	  bfd_hash_lookup (PRIV(vms_symbol_table), name, false, false);
+	  bfd_hash_lookup (PRIV (vms_symbol_table), name, false, false);
   if (entry == 0)
     {
 #if VMS_DEBUG
       _bfd_vms_debug (8,  "creating hash entry for %s\n", name);
 #endif
-      entry = (vms_symbol_entry *)bfd_hash_lookup (PRIV(vms_symbol_table), name, true, false);
+      entry = (vms_symbol_entry *)bfd_hash_lookup (PRIV (vms_symbol_table), name, true, false);
       if (entry != 0)
 	{
 	  asymbol *symbol;
@@ -1104,7 +1098,7 @@
 	  if (symbol != 0)
 	    {
 	      entry->symbol = symbol;
-	      PRIV(gsd_sym_count)++;
+	      PRIV (gsd_sym_count)++;
 	      abfd->symcount++;
 	    }
 	  else
diff --git a/bfd/vms.c b/bfd/vms.c
index b52d817..369a24c 100644
--- a/bfd/vms.c
+++ b/bfd/vms.c
@@ -241,67 +241,67 @@
     return false;
 
 #ifdef __ALPHA
-  PRIV(is_vax) = 0;
+  PRIV (is_vax) = 0;
 #else
-  PRIV(is_vax) = 1;
+  PRIV (is_vax) = 1;
 #endif
-  PRIV(vms_buf) = 0;
-  PRIV(buf_size) = 0;
-  PRIV(rec_length) = 0;
-  PRIV(file_format) = FF_UNKNOWN;
-  PRIV(fixup_done) = false;
-  PRIV(sections) = NULL;
+  PRIV (vms_buf) = 0;
+  PRIV (buf_size) = 0;
+  PRIV (rec_length) = 0;
+  PRIV (file_format) = FF_UNKNOWN;
+  PRIV (fixup_done) = false;
+  PRIV (sections) = NULL;
 
-  PRIV(stack) = ((struct stack_struct *)
+  PRIV (stack) = ((struct stack_struct *)
 		 bfd_malloc (sizeof (struct stack_struct) * STACKSIZE));
-  if (PRIV(stack) == 0)
+  if (PRIV (stack) == 0)
     {
      vms_init_no_mem1:
       free (abfd->tdata.any);
       abfd->tdata.any = 0;
       return false;
     }
-  PRIV(stackptr) = 0;
+  PRIV (stackptr) = 0;
 
-  PRIV(vms_symbol_table) = ((struct bfd_hash_table *)
+  PRIV (vms_symbol_table) = ((struct bfd_hash_table *)
 			     bfd_malloc (sizeof (struct bfd_hash_table)));
-  if (PRIV(vms_symbol_table) == 0)
+  if (PRIV (vms_symbol_table) == 0)
     {
      vms_init_no_mem2:
-      free (PRIV(stack));
-      PRIV(stack) = 0;
+      free (PRIV (stack));
+      PRIV (stack) = 0;
       goto vms_init_no_mem1;
     }
 
-  if (!bfd_hash_table_init (PRIV(vms_symbol_table), _bfd_vms_hash_newfunc))
+  if (!bfd_hash_table_init (PRIV (vms_symbol_table), _bfd_vms_hash_newfunc))
     return false;
 
-  PRIV(location_stack) = ((struct location_struct *)
+  PRIV (location_stack) = ((struct location_struct *)
 			  bfd_malloc (sizeof (struct location_struct)
 				      * LOCATION_SAVE_SIZE));
-  if (PRIV(location_stack) == 0)
+  if (PRIV (location_stack) == 0)
     {
      vms_init_no_mem3:
-      free (PRIV(vms_symbol_table));
-      PRIV(vms_symbol_table) = 0;
+      free (PRIV (vms_symbol_table));
+      PRIV (vms_symbol_table) = 0;
       goto vms_init_no_mem2;
     }
 
   for (i = 0; i < VMS_SECTION_COUNT; i++)
-    PRIV(vms_section_table)[i] = NULL;
+    PRIV (vms_section_table)[i] = NULL;
 
-  PRIV(output_buf) = (unsigned char *) malloc (MAX_OUTREC_SIZE);
-  if (PRIV(output_buf) == 0)
+  PRIV (output_buf) = (unsigned char *) malloc (MAX_OUTREC_SIZE);
+  if (PRIV (output_buf) == 0)
     {
-      free (PRIV(location_stack));
-      PRIV(location_stack) = 0;
+      free (PRIV (location_stack));
+      PRIV (location_stack) = 0;
       goto vms_init_no_mem3;
     }
-  PRIV(push_level) = 0;
-  PRIV(pushed_size) = 0;
-  PRIV(length_pos) = 2;
-  PRIV(output_size) = 0;
-  PRIV(output_alignment) = 1;
+  PRIV (push_level) = 0;
+  PRIV (pushed_size) = 0;
+  PRIV (length_pos) = 2;
+  PRIV (output_size) = 0;
+  PRIV (output_alignment) = 1;
 
   return true;
 }
@@ -357,7 +357,7 @@
 vms_fixup_sections (abfd)
      bfd *abfd;
 {
-  if (PRIV(fixup_done))
+  if (PRIV (fixup_done))
     return true;
 
   /*
@@ -365,11 +365,11 @@
    */
 
   /* can't provide section count as argument to fill_section_ptr().  */
-  priv_section_count = PRIV(section_count);
-  bfd_hash_traverse (PRIV(vms_symbol_table), fill_section_ptr,
-		    (PTR) (PRIV(sections)));
+  priv_section_count = PRIV (section_count);
+  bfd_hash_traverse (PRIV (vms_symbol_table), fill_section_ptr,
+		    (PTR) (PRIV (sections)));
 
-  PRIV(fixup_done) = true;
+  PRIV (fixup_done) = true;
 
   return true;
 }
@@ -421,7 +421,7 @@
 	}
 
       if ((prev_type == EOBJ_S_C_EGSD)
-	   && (PRIV(rec_type) != EOBJ_S_C_EGSD))
+	   && (PRIV (rec_type) != EOBJ_S_C_EGSD))
 	{
 	  if (vms_fixup_sections (abfd) == false)
 	    {
@@ -433,7 +433,7 @@
 	    }
 	}
 
-      prev_type = PRIV(rec_type);
+      prev_type = PRIV (rec_type);
 
       if (target_vector == 0)
 	{
@@ -589,7 +589,7 @@
 
   if (abfd->section_count > 0)			/* we have sections */
     {
-      if (PRIV(is_vax))
+      if (PRIV (is_vax))
 	{
 	  if (_bfd_vms_write_hdr (abfd, OBJ_S_C_HDR) != 0)
 	    return false;
@@ -649,17 +649,17 @@
   if (abfd == 0)
     return true;
 
-  if (PRIV(vms_buf) != NULL)
+  if (PRIV (vms_buf) != NULL)
     {
-      free (PRIV(vms_buf));
-      PRIV(vms_buf) = NULL;
+      free (PRIV (vms_buf));
+      PRIV (vms_buf) = NULL;
     }
-  PRIV(buf_size) = 0;
+  PRIV (buf_size) = 0;
 
-  if (PRIV(output_buf) != 0)
+  if (PRIV (output_buf) != 0)
     {
-      free (PRIV(output_buf));
-      PRIV(output_buf) = 0;
+      free (PRIV (output_buf));
+      PRIV (output_buf) = 0;
     }
 
   sec = abfd->sections;
@@ -670,40 +670,40 @@
       sec = sec->next;
     }
 
-  if (PRIV(sections) != NULL)
+  if (PRIV (sections) != NULL)
     {
-      free (PRIV(sections));
-      PRIV(sections) = NULL;
+      free (PRIV (sections));
+      PRIV (sections) = NULL;
     }
 
-  if (PRIV(vms_symbol_table))
+  if (PRIV (vms_symbol_table))
     {
-      bfd_hash_table_free (PRIV(vms_symbol_table));
-      PRIV(vms_symbol_table) = 0;
+      bfd_hash_table_free (PRIV (vms_symbol_table));
+      PRIV (vms_symbol_table) = 0;
     }
 
-  if (PRIV(stack))
+  if (PRIV (stack))
     {
-      free (PRIV(stack));
-      PRIV(stack) = 0;
+      free (PRIV (stack));
+      PRIV (stack) = 0;
     }
 
-  if (PRIV(location_stack))
+  if (PRIV (location_stack))
     {
-      free (PRIV(location_stack));
-      PRIV(location_stack) = 0;
+      free (PRIV (location_stack));
+      PRIV (location_stack) = 0;
     }
 
   for (i = 0; i < VMS_SECTION_COUNT; i++)
     {
-      es = PRIV(vms_section_table)[i];
+      es = PRIV (vms_section_table)[i];
       while (es != NULL)
 	{
 	  es1 = es->next;
 	  free (es);
 	  es = es1;
 	}
-      PRIV(vms_section_table)[i] = NULL;
+      PRIV (vms_section_table)[i] = NULL;
    }
 
   free (abfd->tdata.any);
@@ -735,18 +735,18 @@
 #endif
   bfd_set_section_alignment(abfd, section, 4);
 
-  if (abfd->section_count > PRIV(section_count))
+  if (abfd->section_count > PRIV (section_count))
     {
-      PRIV(sections) = ((asection **)
-			    bfd_realloc (PRIV(sections), abfd->section_count * sizeof (asection *)));
-      if (PRIV(sections) == 0)
+      PRIV (sections) = ((asection **)
+			    bfd_realloc (PRIV (sections), abfd->section_count * sizeof (asection *)));
+      if (PRIV (sections) == 0)
 	return false;
-      PRIV(section_count) = abfd->section_count;
+      PRIV (section_count) = abfd->section_count;
     }
 #if VMS_DEBUG
-  vms_debug (6, "section_count: %d\n", PRIV(section_count));
+  vms_debug (6, "section_count: %d\n", PRIV (section_count));
 #endif
-  PRIV(sections)[section->index] = section;
+  PRIV (sections)[section->index] = section;
 #if VMS_DEBUG
   vms_debug (7, "%d: %s\n", section->index, section->name);
 #endif
@@ -1082,9 +1082,9 @@
      bfd *abfd;
 {
 #if VMS_DEBUG
-  vms_debug (1, "vms_get_symtab_upper_bound(%p), %d symbols\n", abfd, PRIV(gsd_sym_count));
+  vms_debug (1, "vms_get_symtab_upper_bound(%p), %d symbols\n", abfd, PRIV (gsd_sym_count));
 #endif
-  return (PRIV(gsd_sym_count)+1) * sizeof (asymbol *);
+  return (PRIV (gsd_sym_count)+1) * sizeof (asymbol *);
 }
 
 /* Copy symbols from hash table to symbol vector
@@ -1100,9 +1100,9 @@
   bfd *abfd = (bfd *) arg;
 
   if (entry == NULL)	/* init counter */
-    PRIV(symnum) = 0;
+    PRIV (symnum) = 0;
   else			/* fill vector, inc counter */
-    PRIV(symcache)[PRIV(symnum)++] = ((vms_symbol_entry *)entry)->symbol;
+    PRIV (symcache)[PRIV (symnum)++] = ((vms_symbol_entry *)entry)->symbol;
 
   return true;
 }
@@ -1126,12 +1126,12 @@
 
 	/* traverse table and fill symbols vector */
 
-  PRIV(symcache) = symbols;
-  bfd_hash_traverse(PRIV(vms_symbol_table), copy_symbols, (PTR)abfd);
+  PRIV (symcache) = symbols;
+  bfd_hash_traverse(PRIV (vms_symbol_table), copy_symbols, (PTR)abfd);
 
-  symbols[PRIV(gsd_sym_count)] = NULL;
+  symbols[PRIV (gsd_sym_count)] = NULL;
 
-  return PRIV(gsd_sym_count);
+  return PRIV (gsd_sym_count);
 }
 
 /* Create a new asymbol structure for the BFD abfd and return a pointer
@@ -1183,8 +1183,6 @@
 	fprintf ((FILE *)file," %s", symbol->name);
       break;
 
-      break;
-
       case bfd_print_symbol_all:
 	{
 	  CONST char *section_name = symbol->section->name;
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index dddbb35..aa91011 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,84 @@
+2001-02-28  Philip Blundell  <pb@futuretv.com>
+
+	* readelf.c (decode_ARM_machine_flags): Explicitly mention which
+	ABI is in use; remove ambiguity between the "unknown" EABI and
+	unrecognised ABIs.  Handle version 2 ARM EABI.  Update uses of
+	renamed EF_xx constants.
+
+2001-02-27  Alan Modra  <alan@linuxcare.com.au>
+
+	* configure.in (BFD_VERSION): New.
+	(AM_INIT_AUTOMAKE): Use $BFD_VERSION.
+	* configure: Regenerate.
+	* Makefile.am: Run "make dep-am"
+	* Makefile.in: Regenerate.
+
+2001-02-14  Nick Clifton  <nickc@redhat.com>
+
+	* MAINTAINERS: Add "Obvious Fix" rule.
+
+2001-02-11  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
+
+	* unwind-ia64.c: Don't use ANSI C preprocessor stringisation and string
+	literal concatenation.
+
+2001-02-11  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
+
+	* readelf.c (struct unw_aux_info): Remove const from the info member.
+	(process_unwind): Don't type-cast the third argument to the
+	GET_DATA_ALLOC macro.
+
+2001-02-11  Nick Clifton  <nickc@redhat.com>
+
+	* readelf.c (dump_relocations): Free corrected allocated
+	array.
+	(process_unwind): Fix compile time warning.
+
+2001-02-10  Nick Clifton  <nickc@redhat.com>
+
+	* binutils.texi: Document new --unwind option to readelf.
+
+2001-02-09  Martin Schwidefsky  <schwidefsky@de.ibm.com>
+
+	* readelf.c: Add linux target for S/390.
+
+2001-02-10  Alan Modra  <alan@linuxcare.com.au>
+
+	* nm.c (print_symbol_info_bsd): Don't #ifdef inside printf in case
+	printf is a macro.
+
+2001-02-08  Hans-Peter Nilsson  <hp@bitrange.com>
+
+	* acinclude.m4 (AM_PROG_LEX): Override installed definition.
+	* aclocal.m4: Regenerate.
+	* configure: Regenerate.
+
+2001-02-07  Todd Vierling  <tv@wasabisystems.com>
+
+	* bucomm.c (bfd_target_vector): Change extern array to pointer.
+	* objdump.c (bfd_target_vector): Likewise.
+
+2001-02-07  David Mosberger  <davidm@hpl.hp.com>
+
+	* readelf.c (process_unwind): New function.
+	(slurp_ia64_unwind_table): Ditto.
+	(dump_ia64_unwind): Ditto.
+	(find_symbol_for_address): Ditto.
+	(slurp_rela_relocs): New function (split off from dump_relocations()).
+	(slurp_rel_relocs): Ditto.
+	(parse_args): Handle '-u' option.
+
+	* unwind-ia64.c: New file.
+	* unwind-ia64.h: New file.
+	* Makefile.am: Include unwind-ia64.c in readelf build.
+	* Makefile.in: Regenerate.
+	* po/binutils.pot: Regenerate.
+
+2001-02-04  Philip Blundell  <philb@gnu.org>
+
+	* configure.in (OBJDUMP_DEFS): Match `arm*-*', not just `arm-*'.
+	* configure: Regenerate.
+
 2001-01-31  Steve deRosier  <sderosier@vari-lite.com>
 
 	* ieee.c (ieee_add_bb11): Don't check for backslashes
@@ -126,7 +207,7 @@
 
 2000-11-28  Hans-Peter Nilsson  <hp@bitrange.com>
 
-	* MAINTAINERS: Add Jörn Rennecke and self as SH maintainers.
+	* MAINTAINERS: Add Jvrn Rennecke and self as SH maintainers.
 	Change sourceware.cygnus.com to sources.redhat.com.
 	Fix typo for "amongst".
 
diff --git a/binutils/MAINTAINERS b/binutils/MAINTAINERS
index 427dd3a..ec66a38 100644
--- a/binutils/MAINTAINERS
+++ b/binutils/MAINTAINERS
@@ -76,3 +76,14 @@
 [It's a huge list, folks.  You know who you are.  If you have the
  *ability* to do binutils checkins, you're in this group.  Just remember
  to get approval before checking anything in.]
+
+	       -------------  Obvious Fixes -------------
+
+Fixes for obvious mistakes do not need approval, and can be checked in
+right away, but the patch should still be sent to the binutils list.
+The definition of obvious is a bit hazy, and if you are not sure, then
+you should seek approval first.  Obvious fixes include fixes for
+spelling mistakes, blatantly incorrect code (where the correct code is
+also blatantly obvious), and so on.  Obvious fixes should always be
+small, the larger they are, the more likely it is that they contain
+some un-obvious side effect or consequence.
diff --git a/binutils/Makefile.am b/binutils/Makefile.am
index 1ddf2f7..4489ca3 100644
--- a/binutils/Makefile.am
+++ b/binutils/Makefile.am
@@ -161,7 +161,7 @@
 
 strings_SOURCES = strings.c $(BULIBS)
 
-readelf_SOURCES = readelf.c version.c
+readelf_SOURCES = readelf.c version.c unwind-ia64.c
 readelf_LDADD   = $(INTLLIBS) $(LIBIBERTY)
 
 strip_new_SOURCES = objcopy.c is-strip.c rename.c $(WRITE_DEBUG_SRCS) $(BULIBS)
@@ -402,8 +402,8 @@
   $(INCDIR)/libiberty.h debug.h
 dlltool.o: dlltool.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/libiberty.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
-  $(INCDIR)/fopen-same.h $(INCDIR)/getopt.h $(INCDIR)/demangle.h \
-  $(INCDIR)/dyn-string.h dlltool.h
+  $(INCDIR)/fopen-same.h $(INCDIR)/demangle.h $(INCDIR)/dyn-string.h \
+  dlltool.h
 filemode.o: filemode.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h
 ieee.o: ieee.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/ieee.h \
@@ -419,14 +419,14 @@
   $(INCDIR)/nlm/internal.h $(INCDIR)/nlm/external.h nlmconv.h
 nm.o: nm.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/progress.h \
   bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
-  $(INCDIR)/getopt.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \
-  $(INCDIR)/aout/ranlib.h $(INCDIR)/demangle.h $(INCDIR)/libiberty.h
+  $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def $(INCDIR)/aout/ranlib.h \
+  $(INCDIR)/demangle.h $(INCDIR)/libiberty.h
 not-ranlib.o: not-ranlib.c
 not-strip.o: not-strip.c
 objcopy.o: objcopy.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/progress.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
-  $(INCDIR)/fopen-same.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h \
-  budbg.h $(INCDIR)/filenames.h
+  $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h budbg.h \
+  $(INCDIR)/filenames.h
 objdump.o: objdump.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/getopt.h $(INCDIR)/progress.h bucomm.h config.h \
   $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h $(INCDIR)/dis-asm.h \
@@ -451,8 +451,8 @@
 stabs.o: stabs.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
   $(INCDIR)/libiberty.h $(INCDIR)/demangle.h debug.h \
-  budbg.h $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h \
-  $(INCDIR)/aout/stab.def
+  budbg.h $(INCDIR)/filenames.h $(INCDIR)/aout/aout64.h \
+  $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def
 strings.o: strings.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
   $(INCDIR)/libiberty.h
@@ -492,14 +492,15 @@
   $(INCDIR)/elf/mn10300.h $(INCDIR)/elf/hppa.h $(INCDIR)/elf/arc.h \
   $(INCDIR)/elf/fr30.h $(INCDIR)/elf/mcore.h $(INCDIR)/elf/i960.h \
   $(INCDIR)/elf/pj.h $(INCDIR)/elf/avr.h $(INCDIR)/elf/ia64.h \
-  $(INCDIR)/elf/cris.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
-  $(INCDIR)/fopen-same.h $(INCDIR)/getopt.h
+  $(INCDIR)/elf/cris.h $(INCDIR)/elf/i860.h $(INCDIR)/elf/x86-64.h \
+  $(INCDIR)/elf/s390.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
+  $(INCDIR)/fopen-same.h unwind-ia64.h
 resres.o: resres.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
   $(INCDIR)/libiberty.h windres.h winduni.h
 dllwrap.o: dllwrap.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/libiberty.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
-  $(INCDIR)/fopen-same.h $(INCDIR)/getopt.h $(INCDIR)/dyn-string.h
+  $(INCDIR)/fopen-same.h $(INCDIR)/dyn-string.h
 rename.o: rename.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h
 underscore.o: underscore.c
diff --git a/binutils/Makefile.in b/binutils/Makefile.in
index 1b2a296..0f10cb4 100644
--- a/binutils/Makefile.in
+++ b/binutils/Makefile.in
@@ -253,7 +253,7 @@
 
 strings_SOURCES = strings.c $(BULIBS)
 
-readelf_SOURCES = readelf.c version.c
+readelf_SOURCES = readelf.c version.c unwind-ia64.c
 readelf_LDADD = $(INTLLIBS) $(LIBIBERTY)
 
 strip_new_SOURCES = objcopy.c is-strip.c rename.c $(WRITE_DEBUG_SRCS) $(BULIBS)
@@ -394,7 +394,8 @@
 addr2line_LDADD = $(LDADD)
 addr2line_DEPENDENCIES =  ../bfd/libbfd.la ../libiberty/libiberty.a
 addr2line_LDFLAGS = 
-readelf_OBJECTS =  readelf.$(OBJEXT) version.$(OBJEXT)
+readelf_OBJECTS =  readelf.$(OBJEXT) version.$(OBJEXT) \
+unwind-ia64.$(OBJEXT)
 readelf_DEPENDENCIES =  ../libiberty/libiberty.a
 readelf_LDFLAGS = 
 nm_new_OBJECTS =  nm.$(OBJEXT) bucomm.$(OBJEXT) version.$(OBJEXT) \
@@ -437,7 +438,7 @@
 
 DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
 
-TAR = gtar
+TAR = tar
 GZIP_ENV = --best
 SOURCES = $(nlmconv_SOURCES) $(srconv_SOURCES) $(sysdump_SOURCES) $(coffdump_SOURCES) $(dlltool_SOURCES) $(windres_SOURCES) $(dllwrap_SOURCES) $(size_SOURCES) $(objdump_SOURCES) $(ar_SOURCES) $(strings_SOURCES) $(ranlib_SOURCES) $(objcopy_SOURCES) $(addr2line_SOURCES) $(readelf_SOURCES) $(nm_new_SOURCES) $(strip_new_SOURCES) $(cxxfilt_SOURCES)
 OBJECTS = $(nlmconv_OBJECTS) $(srconv_OBJECTS) $(sysdump_OBJECTS) $(coffdump_OBJECTS) $(dlltool_OBJECTS) $(windres_OBJECTS) $(dllwrap_OBJECTS) $(size_OBJECTS) $(objdump_OBJECTS) $(ar_OBJECTS) $(strings_OBJECTS) $(ranlib_OBJECTS) $(objcopy_OBJECTS) $(addr2line_OBJECTS) $(readelf_OBJECTS) $(nm_new_OBJECTS) $(strip_new_OBJECTS) $(cxxfilt_OBJECTS)
@@ -1287,8 +1288,8 @@
   $(INCDIR)/libiberty.h debug.h
 dlltool.o: dlltool.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/libiberty.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
-  $(INCDIR)/fopen-same.h $(INCDIR)/getopt.h $(INCDIR)/demangle.h \
-  $(INCDIR)/dyn-string.h dlltool.h
+  $(INCDIR)/fopen-same.h $(INCDIR)/demangle.h $(INCDIR)/dyn-string.h \
+  dlltool.h
 filemode.o: filemode.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h
 ieee.o: ieee.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/ieee.h \
@@ -1304,14 +1305,14 @@
   $(INCDIR)/nlm/internal.h $(INCDIR)/nlm/external.h nlmconv.h
 nm.o: nm.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/progress.h \
   bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
-  $(INCDIR)/getopt.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \
-  $(INCDIR)/aout/ranlib.h $(INCDIR)/demangle.h $(INCDIR)/libiberty.h
+  $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def $(INCDIR)/aout/ranlib.h \
+  $(INCDIR)/demangle.h $(INCDIR)/libiberty.h
 not-ranlib.o: not-ranlib.c
 not-strip.o: not-strip.c
 objcopy.o: objcopy.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/progress.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
-  $(INCDIR)/fopen-same.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h \
-  budbg.h $(INCDIR)/filenames.h
+  $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h budbg.h \
+  $(INCDIR)/filenames.h
 objdump.o: objdump.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/getopt.h $(INCDIR)/progress.h bucomm.h config.h \
   $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h $(INCDIR)/dis-asm.h \
@@ -1336,8 +1337,8 @@
 stabs.o: stabs.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
   $(INCDIR)/libiberty.h $(INCDIR)/demangle.h debug.h \
-  budbg.h $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h \
-  $(INCDIR)/aout/stab.def
+  budbg.h $(INCDIR)/filenames.h $(INCDIR)/aout/aout64.h \
+  $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def
 strings.o: strings.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
   $(INCDIR)/libiberty.h
@@ -1377,14 +1378,15 @@
   $(INCDIR)/elf/mn10300.h $(INCDIR)/elf/hppa.h $(INCDIR)/elf/arc.h \
   $(INCDIR)/elf/fr30.h $(INCDIR)/elf/mcore.h $(INCDIR)/elf/i960.h \
   $(INCDIR)/elf/pj.h $(INCDIR)/elf/avr.h $(INCDIR)/elf/ia64.h \
-  $(INCDIR)/elf/cris.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
-  $(INCDIR)/fopen-same.h $(INCDIR)/getopt.h
+  $(INCDIR)/elf/cris.h $(INCDIR)/elf/i860.h $(INCDIR)/elf/x86-64.h \
+  $(INCDIR)/elf/s390.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
+  $(INCDIR)/fopen-same.h unwind-ia64.h
 resres.o: resres.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h \
   $(INCDIR)/libiberty.h windres.h winduni.h
 dllwrap.o: dllwrap.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/libiberty.h bucomm.h config.h $(INCDIR)/bin-bugs.h \
-  $(INCDIR)/fopen-same.h $(INCDIR)/getopt.h $(INCDIR)/dyn-string.h
+  $(INCDIR)/fopen-same.h $(INCDIR)/dyn-string.h
 rename.o: rename.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   bucomm.h config.h $(INCDIR)/bin-bugs.h $(INCDIR)/fopen-same.h
 underscore.o: underscore.c
diff --git a/binutils/NEWS b/binutils/NEWS
index 62f858f..12369e9 100644
--- a/binutils/NEWS
+++ b/binutils/NEWS
@@ -1,5 +1,7 @@
 -*- text -*-
 
+* Support for PDP-11 by Lars Brinkhoff.
+
 * Add support for ARM v5t and v5te architectures and Intel's XScale ARM
   extenstions.
 
diff --git a/binutils/acinclude.m4 b/binutils/acinclude.m4
index 403aa0e..7ffc031 100644
--- a/binutils/acinclude.m4
+++ b/binutils/acinclude.m4
@@ -14,3 +14,19 @@
 AC_DEFUN([CY_WITH_NLS],)
 AC_SUBST(INTLLIBS)
 ])
+
+## Replacement for AC_PROG_LEX and AC_DECL_YYTEXT
+## by Alexandre Oliva <oliva@dcc.unicamp.br>
+
+## We need to override the installed aclocal/lex.m4 because of a bug in
+## this definition in the recommended automake snapshot of 000227:
+## There were double-quotes around ``$missing_dir/missing flex'' which was
+## bad since aclocal wraps it in double-quotes.
+
+dnl AM_PROG_LEX
+dnl Look for flex, lex or missing, then run AC_PROG_LEX and AC_DECL_YYTEXT
+AC_DEFUN(AM_PROG_LEX,
+[missing_dir=ifelse([$1],,`cd $ac_aux_dir && pwd`,$1)
+AC_CHECK_PROGS(LEX, flex lex, [$missing_dir/missing flex])
+AC_PROG_LEX
+AC_DECL_YYTEXT])
diff --git a/binutils/aclocal.m4 b/binutils/aclocal.m4
index e68badb..37c162a 100644
--- a/binutils/aclocal.m4
+++ b/binutils/aclocal.m4
@@ -45,6 +45,15 @@
   ]
 )
 
+
+dnl AM_PROG_LEX
+dnl Look for flex, lex or missing, then run AC_PROG_LEX and AC_DECL_YYTEXT
+AC_DEFUN(AM_PROG_LEX,
+[missing_dir=ifelse([$1],,`cd $ac_aux_dir && pwd`,$1)
+AC_CHECK_PROGS(LEX, flex lex, [$missing_dir/missing flex])
+AC_PROG_LEX
+AC_DECL_YYTEXT])
+
 # Do all the work for Automake.  This macro actually does too much --
 # some checks are only needed if your package does certain things.
 # But this isn't really a big deal.
@@ -160,15 +169,6 @@
 done<<>>dnl>>)
 changequote([,]))])
 
-
-dnl AM_PROG_LEX
-dnl Look for flex, lex or missing, then run AC_PROG_LEX and AC_DECL_YYTEXT
-AC_DEFUN(AM_PROG_LEX,
-[missing_dir=ifelse([$1],,`cd $ac_aux_dir && pwd`,$1)
-AC_CHECK_PROGS(LEX, flex lex, "$missing_dir/missing flex")
-AC_PROG_LEX
-AC_DECL_YYTEXT])
-
 # Add --enable-maintainer-mode option to configure.
 # From Jim Meyering
 
diff --git a/binutils/binutils.texi b/binutils/binutils.texi
index 4114663..648cd2b 100644
--- a/binutils/binutils.texi
+++ b/binutils/binutils.texi
@@ -2479,6 +2479,7 @@
         [ -s | --syms | --symbols]
         [ -n | --notes]
         [ -r | --relocs]
+        [ -u | --unwind]
         [ -d | --dynamic]
         [ -V | --version-info]
         [ -D | --use-dynamic]
@@ -2548,7 +2549,13 @@
 @item -r
 @itemx --relocs
 @cindex ELF reloc information
-Displays the contents of the file's relocation section, if it ha one.
+Displays the contents of the file's relocation section, if it has one.
+
+@item -u
+@itemx --unwind
+@cindex unwind information
+Displays the contents of the file's unwind section, if it has one.  Only
+the unwind sections for IA64 ELF files are currently supported.
 
 @item -d
 @itemx --dynamic
diff --git a/binutils/bucomm.c b/binutils/bucomm.c
index 86c327f..1cf904d 100644
--- a/binutils/bucomm.c
+++ b/binutils/bucomm.c
@@ -157,7 +157,7 @@
      const char *name;
      FILE *f;
 {
-  extern bfd_target *bfd_target_vector[];
+  extern const bfd_target *const *bfd_target_vector;
   int t;
 
   if (name == NULL)
diff --git a/binutils/configure b/binutils/configure
index bf0043e..1821290 100755
--- a/binutils/configure
+++ b/binutils/configure
@@ -772,6 +772,7 @@
   
 
 
+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),
 # so one script is as good as another.  But avoid the broken or
 # incompatible versions:
@@ -784,7 +785,7 @@
 # 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:788: checking for a BSD compatible install" >&5
+echo "configure:789: 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
@@ -837,7 +838,7 @@
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:841: checking whether build environment is sane" >&5
+echo "configure:842: checking whether build environment is sane" >&5
 # Just in case
 sleep 1
 echo timestamp > conftestfile
@@ -894,7 +895,7 @@
 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:898: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:899: 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
@@ -923,7 +924,7 @@
 
 PACKAGE=binutils
 
-VERSION=2.10.91
+VERSION=${BFD_VERSION}
 
 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
   { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
@@ -940,7 +941,7 @@
 
 missing_dir=`cd $ac_aux_dir && pwd`
 echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:944: checking for working aclocal" >&5
+echo "configure:945: 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.
@@ -953,7 +954,7 @@
 fi
 
 echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:957: checking for working autoconf" >&5
+echo "configure:958: 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.
@@ -966,7 +967,7 @@
 fi
 
 echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:970: checking for working automake" >&5
+echo "configure:971: 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.
@@ -979,7 +980,7 @@
 fi
 
 echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:983: checking for working autoheader" >&5
+echo "configure:984: 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.
@@ -992,7 +993,7 @@
 fi
 
 echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:996: checking for working makeinfo" >&5
+echo "configure:997: 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.
@@ -1078,7 +1079,7 @@
 # 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:1082: checking for $ac_word" >&5
+echo "configure:1083: 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
@@ -1108,7 +1109,7 @@
   # 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:1112: checking for $ac_word" >&5
+echo "configure:1113: 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
@@ -1159,7 +1160,7 @@
       # 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:1163: checking for $ac_word" >&5
+echo "configure:1164: 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
@@ -1191,7 +1192,7 @@
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1195: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1196: 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.
@@ -1202,12 +1203,12 @@
 
 cat > conftest.$ac_ext << EOF
 
-#line 1206 "configure"
+#line 1207 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1211: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1212: \"$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
@@ -1233,12 +1234,12 @@
   { 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:1237: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1238: 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:1242: checking whether we are using GNU C" >&5
+echo "configure:1243: 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
@@ -1247,7 +1248,7 @@
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1251: \"$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:1252: \"$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
@@ -1266,7 +1267,7 @@
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1270: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1271: 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
@@ -1309,7 +1310,7 @@
 if test "$ac_cv_prog_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:1313: checking for ld used by GCC" >&5
+echo "configure:1314: checking for ld used by GCC" >&5
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return which upsets mingw
@@ -1339,10 +1340,10 @@
   esac
 elif test "$with_gnu_ld" = yes; then
   echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:1343: checking for GNU ld" >&5
+echo "configure:1344: checking for GNU ld" >&5
 else
   echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:1346: checking for non-GNU ld" >&5
+echo "configure:1347: checking for non-GNU ld" >&5
 fi
 if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1377,7 +1378,7 @@
 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:1381: checking if the linker ($LD) is GNU ld" >&5
+echo "configure:1382: checking if the linker ($LD) is GNU ld" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1394,7 +1395,7 @@
 
 
 echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
-echo "configure:1398: checking for $LD option to reload object files" >&5
+echo "configure:1399: 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
@@ -1406,7 +1407,7 @@
 test -n "$reload_flag" && reload_flag=" $reload_flag"
 
 echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-echo "configure:1410: checking for BSD-compatible nm" >&5
+echo "configure:1411: checking for BSD-compatible nm" >&5
 if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1444,7 +1445,7 @@
 echo "$ac_t""$NM" 1>&6
 
 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1448: checking whether ln -s works" >&5
+echo "configure:1449: 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
@@ -1465,7 +1466,7 @@
 fi
 
 echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
-echo "configure:1469: checking how to recognise dependant libraries" >&5
+echo "configure:1470: 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 +1609,13 @@
 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:1613: 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:1619: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   for ac_file in conftest.*; do
     case $ac_file in
     *.c) ;;
@@ -1634,7 +1635,7 @@
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:1638: checking for executable suffix" >&5
+echo "configure:1639: 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 +1645,7 @@
   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:1649: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
       *.c | *.o | *.obj | *.ilk | *.pdb) ;;
@@ -1677,7 +1678,7 @@
 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:1682: 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 +1740,7 @@
 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:1744: 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 +1811,7 @@
 # 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:1815: 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 +1843,7 @@
   # 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:1847: 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 +1878,7 @@
 # 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:1882: 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 +1910,7 @@
   # 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:1914: 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 +1977,8 @@
 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 1981 "configure"' > conftest.$ac_ext
+  if { (eval echo configure:1982: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     case "`/usr/bin/file conftest.o`" in
     *32-bit*)
       LD="${LD-ld} -32"
@@ -1998,7 +1999,7 @@
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -belf"
   echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-echo "configure:2002: checking whether the C compiler needs -belf" >&5
+echo "configure:2003: 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
@@ -2011,14 +2012,14 @@
 cross_compiling=$ac_cv_prog_cc_cross
 
      cat > conftest.$ac_ext <<EOF
-#line 2015 "configure"
+#line 2016 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2023: \"$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
@@ -2192,7 +2193,7 @@
 # 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:2196: checking for $ac_word" >&5
+echo "configure:2197: 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
@@ -2222,7 +2223,7 @@
   # 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:2226: checking for $ac_word" >&5
+echo "configure:2227: 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
@@ -2273,7 +2274,7 @@
       # 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:2277: checking for $ac_word" >&5
+echo "configure:2278: 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
@@ -2305,7 +2306,7 @@
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:2309: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:2310: 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.
@@ -2316,12 +2317,12 @@
 
 cat > conftest.$ac_ext << EOF
 
-#line 2320 "configure"
+#line 2321 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:2325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2326: \"$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
@@ -2347,12 +2348,12 @@
   { 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:2351: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2352: 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:2356: checking whether we are using GNU C" >&5
+echo "configure:2357: 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
@@ -2361,7 +2362,7 @@
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2365: \"$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:2366: \"$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
@@ -2380,7 +2381,7 @@
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:2384: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:2385: 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
@@ -2417,7 +2418,7 @@
 # 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:2421: checking for $ac_word" >&5
+echo "configure:2422: 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
@@ -2448,7 +2449,7 @@
 test -n "$YACC" || YACC="yacc"
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2452: checking how to run the C preprocessor" >&5
+echo "configure:2453: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -2463,13 +2464,13 @@
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 2467 "configure"
+#line 2468 "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:2473: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2474: \"$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
   :
@@ -2480,13 +2481,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 2484 "configure"
+#line 2485 "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:2490: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2491: \"$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
   :
@@ -2497,13 +2498,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 2501 "configure"
+#line 2502 "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:2507: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2508: \"$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
   :
@@ -2533,7 +2534,7 @@
 # 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:2537: checking for $ac_word" >&5
+echo "configure:2538: 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
@@ -2561,12 +2562,12 @@
 
 test -n "$LEX" && break
 done
-test -n "$LEX" || LEX=""$missing_dir/missing flex""
+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:2570: checking for $ac_word" >&5
+echo "configure:2571: 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
@@ -2600,7 +2601,7 @@
   *) ac_lib=l ;;
   esac
   echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
-echo "configure:2604: checking for yywrap in -l$ac_lib" >&5
+echo "configure:2605: 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
@@ -2608,7 +2609,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-l$ac_lib  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2612 "configure"
+#line 2613 "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
@@ -2619,7 +2620,7 @@
 yywrap()
 ; return 0; }
 EOF
-if { (eval echo configure:2623: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2624: \"$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
@@ -2642,7 +2643,7 @@
 fi
 
 echo $ac_n "checking lex output file root""... $ac_c" 1>&6
-echo "configure:2646: checking lex output file root" >&5
+echo "configure:2647: 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
@@ -2663,7 +2664,7 @@
 LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
 
 echo $ac_n "checking whether yytext is a pointer""... $ac_c" 1>&6
-echo "configure:2667: checking whether yytext is a pointer" >&5
+echo "configure:2668: 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
@@ -2675,14 +2676,14 @@
 ac_save_LIBS="$LIBS"
 LIBS="$LIBS $LEXLIB"
 cat > conftest.$ac_ext <<EOF
-#line 2679 "configure"
+#line 2680 "configure"
 #include "confdefs.h"
 `cat $LEX_OUTPUT_ROOT.c`
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2686: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2687: \"$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
@@ -2708,7 +2709,7 @@
 # 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:2712: checking for $ac_word" >&5
+echo "configure:2713: 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
@@ -2736,12 +2737,12 @@
 fi
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:2740: checking for ANSI C header files" >&5
+echo "configure:2741: 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 2745 "configure"
+#line 2746 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -2749,7 +2750,7 @@
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2753: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2754: \"$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*
@@ -2766,7 +2767,7 @@
 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 2770 "configure"
+#line 2771 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -2784,7 +2785,7 @@
 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 2788 "configure"
+#line 2789 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -2805,7 +2806,7 @@
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 2809 "configure"
+#line 2810 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -2816,7 +2817,7 @@
 exit (0); }
 
 EOF
-if { (eval echo configure:2820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2821: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -2840,12 +2841,12 @@
 fi
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:2844: checking for working const" >&5
+echo "configure:2845: 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 2849 "configure"
+#line 2850 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -2894,7 +2895,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:2898: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2899: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -2915,21 +2916,21 @@
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:2919: checking for inline" >&5
+echo "configure:2920: 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 2926 "configure"
+#line 2927 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:2933: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2934: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -2955,12 +2956,12 @@
 esac
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:2959: checking for off_t" >&5
+echo "configure:2960: 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 2964 "configure"
+#line 2965 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -2988,12 +2989,12 @@
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:2992: checking for size_t" >&5
+echo "configure:2993: 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 2997 "configure"
+#line 2998 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3023,19 +3024,19 @@
 # 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:3027: checking for working alloca.h" >&5
+echo "configure:3028: 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 3032 "configure"
+#line 3033 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:3039: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3040: \"$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
@@ -3056,12 +3057,12 @@
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:3060: checking for alloca" >&5
+echo "configure:3061: 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 3065 "configure"
+#line 3066 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -3089,7 +3090,7 @@
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:3093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3094: \"$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
@@ -3121,12 +3122,12 @@
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:3125: checking whether alloca needs Cray hooks" >&5
+echo "configure:3126: 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 3130 "configure"
+#line 3131 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -3151,12 +3152,12 @@
 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:3155: checking for $ac_func" >&5
+echo "configure:3156: 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 3160 "configure"
+#line 3161 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3179,7 +3180,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3184: \"$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
@@ -3206,7 +3207,7 @@
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:3210: checking stack direction for C alloca" >&5
+echo "configure:3211: 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
@@ -3214,7 +3215,7 @@
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 3218 "configure"
+#line 3219 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -3233,7 +3234,7 @@
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:3237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3238: \"$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
@@ -3258,17 +3259,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3262: checking for $ac_hdr" >&5
+echo "configure:3263: 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 3267 "configure"
+#line 3268 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3272: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3273: \"$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*
@@ -3297,12 +3298,12 @@
 for ac_func in getpagesize
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3301: checking for $ac_func" >&5
+echo "configure:3302: 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 3306 "configure"
+#line 3307 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3325,7 +3326,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3330: \"$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
@@ -3350,7 +3351,7 @@
 done
 
 echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:3354: checking for working mmap" >&5
+echo "configure:3355: 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
@@ -3358,7 +3359,7 @@
   ac_cv_func_mmap_fixed_mapped=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 3362 "configure"
+#line 3363 "configure"
 #include "confdefs.h"
 
 /* Thanks to Mike Haertel and Jim Avera for this test.
@@ -3498,7 +3499,7 @@
 }
 
 EOF
-if { (eval echo configure:3502: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3503: \"$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
@@ -3526,17 +3527,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3530: checking for $ac_hdr" >&5
+echo "configure:3531: 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 3535 "configure"
+#line 3536 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3540: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3541: \"$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*
@@ -3566,12 +3567,12 @@
 __argz_count __argz_stringify __argz_next
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3570: checking for $ac_func" >&5
+echo "configure:3571: 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 3575 "configure"
+#line 3576 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3594,7 +3595,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3598: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3599: \"$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
@@ -3623,12 +3624,12 @@
      for ac_func in stpcpy
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3627: checking for $ac_func" >&5
+echo "configure:3628: 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 3632 "configure"
+#line 3633 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3651,7 +3652,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3655: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3656: \"$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
@@ -3685,19 +3686,19 @@
 
    if test $ac_cv_header_locale_h = yes; then
     echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:3689: checking for LC_MESSAGES" >&5
+echo "configure:3690: 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 3694 "configure"
+#line 3695 "configure"
 #include "confdefs.h"
 #include <locale.h>
 int main() {
 return LC_MESSAGES
 ; return 0; }
 EOF
-if { (eval echo configure:3701: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3702: \"$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
@@ -3718,7 +3719,7 @@
     fi
   fi
    echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:3722: checking whether NLS is requested" >&5
+echo "configure:3723: 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"
@@ -3738,7 +3739,7 @@
 EOF
 
       echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:3742: checking whether included gettext is requested" >&5
+echo "configure:3743: 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"
@@ -3757,17 +3758,17 @@
 
 	ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:3761: checking for libintl.h" >&5
+echo "configure:3762: 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 3766 "configure"
+#line 3767 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3771: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3772: \"$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*
@@ -3784,19 +3785,19 @@
 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:3788: checking for gettext in libc" >&5
+echo "configure:3789: 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 3793 "configure"
+#line 3794 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 int main() {
 return (int) gettext ("")
 ; return 0; }
 EOF
-if { (eval echo configure:3800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3801: \"$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
@@ -3812,7 +3813,7 @@
 
 	   if test "$gt_cv_func_gettext_libc" != "yes"; then
 	     echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
-echo "configure:3816: checking for bindtextdomain in -lintl" >&5
+echo "configure:3817: 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
@@ -3820,7 +3821,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3824 "configure"
+#line 3825 "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
@@ -3831,7 +3832,7 @@
 bindtextdomain()
 ; return 0; }
 EOF
-if { (eval echo configure:3835: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3836: \"$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
@@ -3847,19 +3848,19 @@
 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:3851: checking for gettext in libintl" >&5
+echo "configure:3852: 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 3856 "configure"
+#line 3857 "configure"
 #include "confdefs.h"
 
 int main() {
 return (int) gettext ("")
 ; return 0; }
 EOF
-if { (eval echo configure:3863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3864: \"$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
@@ -3887,7 +3888,7 @@
 	      # 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:3891: checking for $ac_word" >&5
+echo "configure:3892: 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
@@ -3921,12 +3922,12 @@
 		for ac_func in dcgettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3925: checking for $ac_func" >&5
+echo "configure:3926: 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 3930 "configure"
+#line 3931 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3949,7 +3950,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3954: \"$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
@@ -3976,7 +3977,7 @@
 		# 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:3980: checking for $ac_word" >&5
+echo "configure:3981: 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
@@ -4012,7 +4013,7 @@
 		# 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:4016: checking for $ac_word" >&5
+echo "configure:4017: 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
@@ -4044,7 +4045,7 @@
 fi
 
 		cat > conftest.$ac_ext <<EOF
-#line 4048 "configure"
+#line 4049 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -4052,7 +4053,7 @@
 			       return _nl_msg_cat_cntr
 ; return 0; }
 EOF
-if { (eval echo configure:4056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4057: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   CATOBJEXT=.gmo
 		   DATADIRNAME=share
@@ -4084,7 +4085,7 @@
         # 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:4088: checking for $ac_word" >&5
+echo "configure:4089: 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
@@ -4118,7 +4119,7 @@
         # 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:4122: checking for $ac_word" >&5
+echo "configure:4123: 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
@@ -4154,7 +4155,7 @@
         # 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:4158: checking for $ac_word" >&5
+echo "configure:4159: 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
@@ -4244,7 +4245,7 @@
        LINGUAS=
      else
        echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:4248: checking for catalogs to be installed" >&5
+echo "configure:4249: checking for catalogs to be installed" >&5
        NEW_LINGUAS=
        for lang in ${LINGUAS=$ALL_LINGUAS}; do
          case "$ALL_LINGUAS" in
@@ -4272,17 +4273,17 @@
       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:4276: checking for linux/version.h" >&5
+echo "configure:4277: 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 4281 "configure"
+#line 4282 "configure"
 #include "confdefs.h"
 #include <linux/version.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4286: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4287: \"$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*
@@ -4345,7 +4346,7 @@
   
 
 echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:4349: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:4350: 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"
@@ -4370,7 +4371,7 @@
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:4374: checking for executable suffix" >&5
+echo "configure:4375: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4380,7 +4381,7 @@
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:4384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:4385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
       *.c | *.o | *.obj | *.ilk | *.pdb) ;;
@@ -4423,7 +4424,7 @@
 # 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:4427: checking for $ac_word" >&5
+echo "configure:4428: 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
@@ -4462,7 +4463,7 @@
 # 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:4466: checking for a BSD compatible install" >&5
+echo "configure:4467: 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
@@ -4529,7 +4530,7 @@
   EXEEXT_FOR_BUILD='$(EXEEXT)'
 else
   echo $ac_n "checking for build system executable suffix""... $ac_c" 1>&6
-echo "configure:4533: checking for build system executable suffix" >&5
+echo "configure:4534: checking for build system executable suffix" >&5
 if eval "test \"`echo '$''{'bfd_cv_build_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4564,17 +4565,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4568: checking for $ac_hdr" >&5
+echo "configure:4569: 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 4573 "configure"
+#line 4574 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4578: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4579: \"$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*
@@ -4601,12 +4602,12 @@
 done
 
 echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:4605: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:4606: checking for sys/wait.h that is POSIX.1 compatible" >&5
 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4610 "configure"
+#line 4611 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -4622,7 +4623,7 @@
 s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
 ; return 0; }
 EOF
-if { (eval echo configure:4626: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4627: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_sys_wait_h=yes
 else
@@ -4645,19 +4646,19 @@
 # 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:4649: checking for working alloca.h" >&5
+echo "configure:4650: 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 4654 "configure"
+#line 4655 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:4661: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4662: \"$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
@@ -4678,12 +4679,12 @@
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:4682: checking for alloca" >&5
+echo "configure:4683: 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 4687 "configure"
+#line 4688 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -4711,7 +4712,7 @@
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:4715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4716: \"$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
@@ -4743,12 +4744,12 @@
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:4747: checking whether alloca needs Cray hooks" >&5
+echo "configure:4748: 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 4752 "configure"
+#line 4753 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -4773,12 +4774,12 @@
 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:4777: checking for $ac_func" >&5
+echo "configure:4778: 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 4782 "configure"
+#line 4783 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4801,7 +4802,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:4805: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4806: \"$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
@@ -4828,7 +4829,7 @@
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:4832: checking stack direction for C alloca" >&5
+echo "configure:4833: 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
@@ -4836,7 +4837,7 @@
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 4840 "configure"
+#line 4841 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -4855,7 +4856,7 @@
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:4859: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4860: \"$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
@@ -4879,12 +4880,12 @@
 for ac_func in sbrk utimes setmode
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4883: checking for $ac_func" >&5
+echo "configure:4884: 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 4888 "configure"
+#line 4889 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4907,7 +4908,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:4911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4912: \"$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
@@ -4935,14 +4936,14 @@
 # Some systems have frexp only in -lm, not in -lc.
 
 echo $ac_n "checking for library containing frexp""... $ac_c" 1>&6
-echo "configure:4939: checking for library containing frexp" >&5
+echo "configure:4940: checking for library containing frexp" >&5
 if eval "test \"`echo '$''{'ac_cv_search_frexp'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_func_search_save_LIBS="$LIBS"
 ac_cv_search_frexp="no"
 cat > conftest.$ac_ext <<EOF
-#line 4946 "configure"
+#line 4947 "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
@@ -4953,7 +4954,7 @@
 frexp()
 ; return 0; }
 EOF
-if { (eval echo configure:4957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_search_frexp="none required"
 else
@@ -4964,7 +4965,7 @@
 test "$ac_cv_search_frexp" = "no" && for i in m; do
 LIBS="-l$i  $ac_func_search_save_LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4968 "configure"
+#line 4969 "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
@@ -4975,7 +4976,7 @@
 frexp()
 ; return 0; }
 EOF
-if { (eval echo configure:4979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_search_frexp="-l$i"
 break
@@ -4997,19 +4998,19 @@
 fi
 
 echo $ac_n "checking for time_t in time.h""... $ac_c" 1>&6
-echo "configure:5001: checking for time_t in time.h" >&5
+echo "configure:5002: checking for time_t in time.h" >&5
 if eval "test \"`echo '$''{'bu_cv_decl_time_t_time_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5006 "configure"
+#line 5007 "configure"
 #include "confdefs.h"
 #include <time.h>
 int main() {
 time_t i;
 ; return 0; }
 EOF
-if { (eval echo configure:5013: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5014: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bu_cv_decl_time_t_time_h=yes
 else
@@ -5030,19 +5031,19 @@
 fi
 
 echo $ac_n "checking for time_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:5034: checking for time_t in sys/types.h" >&5
+echo "configure:5035: checking for time_t in sys/types.h" >&5
 if eval "test \"`echo '$''{'bu_cv_decl_time_t_types_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5039 "configure"
+#line 5040 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 int main() {
 time_t i;
 ; return 0; }
 EOF
-if { (eval echo configure:5046: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bu_cv_decl_time_t_types_h=yes
 else
@@ -5065,12 +5066,12 @@
 # Under Next 3.2 <utime.h> apparently does not define struct utimbuf
 # by default.
 echo $ac_n "checking for utime.h""... $ac_c" 1>&6
-echo "configure:5069: checking for utime.h" >&5
+echo "configure:5070: checking for utime.h" >&5
 if eval "test \"`echo '$''{'bu_cv_header_utime_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5074 "configure"
+#line 5075 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #ifdef HAVE_TIME_H
@@ -5081,7 +5082,7 @@
 struct utimbuf s;
 ; return 0; }
 EOF
-if { (eval echo configure:5085: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5086: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bu_cv_header_utime_h=yes
 else
@@ -5102,12 +5103,12 @@
 fi
 
 echo $ac_n "checking whether fprintf must be declared""... $ac_c" 1>&6
-echo "configure:5106: checking whether fprintf must be declared" >&5
+echo "configure:5107: checking whether fprintf must be declared" >&5
 if eval "test \"`echo '$''{'bfd_cv_decl_needed_fprintf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5111 "configure"
+#line 5112 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -5128,7 +5129,7 @@
 char *(*pfn) = (char *(*)) fprintf
 ; return 0; }
 EOF
-if { (eval echo configure:5132: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5133: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_decl_needed_fprintf=no
 else
@@ -5149,12 +5150,12 @@
 fi
 
 echo $ac_n "checking whether strstr must be declared""... $ac_c" 1>&6
-echo "configure:5153: checking whether strstr must be declared" >&5
+echo "configure:5154: 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 5158 "configure"
+#line 5159 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -5175,7 +5176,7 @@
 char *(*pfn) = (char *(*)) strstr
 ; return 0; }
 EOF
-if { (eval echo configure:5179: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5180: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_decl_needed_strstr=no
 else
@@ -5196,12 +5197,12 @@
 fi
 
 echo $ac_n "checking whether sbrk must be declared""... $ac_c" 1>&6
-echo "configure:5200: checking whether sbrk must be declared" >&5
+echo "configure:5201: 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 5205 "configure"
+#line 5206 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -5222,7 +5223,7 @@
 char *(*pfn) = (char *(*)) sbrk
 ; return 0; }
 EOF
-if { (eval echo configure:5226: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5227: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_decl_needed_sbrk=no
 else
@@ -5243,12 +5244,12 @@
 fi
 
 echo $ac_n "checking whether getenv must be declared""... $ac_c" 1>&6
-echo "configure:5247: checking whether getenv must be declared" >&5
+echo "configure:5248: 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 5252 "configure"
+#line 5253 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -5269,7 +5270,7 @@
 char *(*pfn) = (char *(*)) getenv
 ; return 0; }
 EOF
-if { (eval echo configure:5273: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5274: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_decl_needed_getenv=no
 else
@@ -5290,12 +5291,12 @@
 fi
 
 echo $ac_n "checking whether environ must be declared""... $ac_c" 1>&6
-echo "configure:5294: checking whether environ must be declared" >&5
+echo "configure:5295: 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 5299 "configure"
+#line 5300 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -5316,7 +5317,7 @@
 char *(*pfn) = (char *(*)) environ
 ; return 0; }
 EOF
-if { (eval echo configure:5320: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5321: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_decl_needed_environ=no
 else
@@ -5418,7 +5419,7 @@
 	  DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM"
 	  BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
 	  ;;
-  	arm-* | xscale-* | strongarm-* | d10v-*)
+  	arm*-* | xscale-* | strongarm-* | d10v-*)
 	  OBJDUMP_DEFS="-DDISASSEMBLER_NEEDS_RELOCS"
 	  ;;
 	i[3-6]86-*pe* | i[3-6]86-*-cygwin* | i[3-6]86-*-mingw32*)
diff --git a/binutils/configure.in b/binutils/configure.in
index d175d85..e2fed82 100644
--- a/binutils/configure.in
+++ b/binutils/configure.in
@@ -6,7 +6,10 @@
 AC_CANONICAL_SYSTEM
 AC_ISC_POSIX
 
-AM_INIT_AUTOMAKE(binutils, 2.10.91)
+changequote(,)dnl
+BFD_VERSION=`sed -n -e 's/^.._INIT_AUTOMAKE.*,[ 	]*\([^ 	]*\)[ 	]*).*/\1/p' < ${srcdir}/../bfd/configure.in`
+changequote([,])dnl
+AM_INIT_AUTOMAKE(binutils, ${BFD_VERSION})
 
 AM_PROG_LIBTOOL
 
@@ -220,7 +223,7 @@
 	  DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_ARM"
 	  BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
 	  ;;
-  	arm-* | xscale-* | strongarm-* | d10v-*)
+  	arm*-* | xscale-* | strongarm-* | d10v-*)
 	  OBJDUMP_DEFS="-DDISASSEMBLER_NEEDS_RELOCS"
 	  ;;
 changequote(,)dnl
diff --git a/binutils/nm.c b/binutils/nm.c
index f1219eb..3695d1e 100644
--- a/binutils/nm.c
+++ b/binutils/nm.c
@@ -1,5 +1,5 @@
 /* nm.c -- Describe symbol table of a rel file.
-   Copyright 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000
+   Copyright 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001
    Free Software Foundation, Inc.
 
    This file is part of GNU Binutils.
@@ -1473,13 +1473,11 @@
 {
   if (bfd_is_undefined_symclass (info->type))
     {
-      printf ("%*s",
 #ifdef BFD64
-	      16,
+      printf ("%*s", 16, "");
 #else
-	      8,
+      printf ("%*s", 8, "");
 #endif
-	      "");
     }
   else
     print_value (info->value);
diff --git a/binutils/objdump.c b/binutils/objdump.c
index a665831..1f66ab7 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -2644,14 +2644,14 @@
 static void
 display_target_list ()
 {
-  extern bfd_target *bfd_target_vector[];
+  extern const bfd_target *const *bfd_target_vector;
   char *dummy_name;
   int t;
 
   dummy_name = make_temp_file (NULL);
   for (t = 0; bfd_target_vector[t]; t++)
     {
-      bfd_target *p = bfd_target_vector[t];
+      const bfd_target *p = bfd_target_vector[t];
       bfd *abfd = bfd_openw (dummy_name, p->name);
       int a;
 
@@ -2692,7 +2692,7 @@
      int first;
      int last;
 {
-  extern bfd_target *bfd_target_vector[];
+  extern const bfd_target *const *bfd_target_vector;
   int t, a;
   char *dummy_name;
 
@@ -2710,7 +2710,7 @@
 		bfd_printable_arch_mach (a, 0));
 	for (t = first; t < last && bfd_target_vector[t]; t++)
 	  {
-	    bfd_target *p = bfd_target_vector[t];
+	    const bfd_target *p = bfd_target_vector[t];
 	    boolean ok = true;
 	    bfd *abfd = bfd_openw (dummy_name, p->name);
 
@@ -2761,7 +2761,7 @@
 display_target_tables ()
 {
   int t, columns;
-  extern bfd_target *bfd_target_vector[];
+  extern const bfd_target *const *bfd_target_vector;
   char *colum;
 
   columns = 0;
diff --git a/binutils/po/binutils.pot b/binutils/po/binutils.pot
index b497a04..d1cc8be 100644
--- a/binutils/po/binutils.pot
+++ b/binutils/po/binutils.pot
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2001-01-11 12:02-0800\n"
+"POT-Creation-Date: 2001-02-18 11:44-0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -23,7 +23,7 @@
 msgstr ""
 
 #: addr2line.c:83 ar.c:288 nlmconv.c:1119 objcopy.c:373 objcopy.c:405
-#: readelf.c:1876 size.c:91 strings.c:530 windres.c:737
+#: readelf.c:1976 size.c:91 strings.c:530 windres.c:737
 #, c-format
 msgid "Report bugs to %s\n"
 msgstr ""
@@ -185,7 +185,7 @@
 msgid "internal error -- this option not implemented"
 msgstr ""
 
-#: ar.c:824 ar.c:876 ar.c:1322 objcopy.c:1124
+#: ar.c:824 ar.c:876 ar.c:1322 objcopy.c:1131
 #, c-format
 msgid "internal stat error on %s"
 msgstr ""
@@ -1174,17 +1174,17 @@
 msgid "IEEE string length overflow: %u\n"
 msgstr ""
 
-#: ieee.c:5324
+#: ieee.c:5333
 #, c-format
 msgid "IEEE unsupported integer type size %u\n"
 msgstr ""
 
-#: ieee.c:5360
+#: ieee.c:5369
 #, c-format
 msgid "IEEE unsupported float type size %u\n"
 msgstr ""
 
-#: ieee.c:5396
+#: ieee.c:5405
 #, c-format
 msgid "IEEE unsupported complex type size %u\n"
 msgstr ""
@@ -1482,7 +1482,7 @@
 "\n"
 msgstr ""
 
-#: nm.c:1552
+#: nm.c:1550
 msgid ""
 "\n"
 "Archive index:\n"
@@ -1618,138 +1618,142 @@
 msgid "%s: Symbol \"%s\" is target of more than one redefinition"
 msgstr ""
 
-#: objcopy.c:773
+#: objcopy.c:772
+msgid "Unable to change endianness of input file(s)"
+msgstr ""
+
+#: objcopy.c:780
 #, c-format
 msgid "copy from %s(%s) to %s(%s)\n"
 msgstr ""
 
-#: objcopy.c:792
+#: objcopy.c:799
 #, c-format
 msgid "Warning: Output file cannot represent architecture %s"
 msgstr ""
 
-#: objcopy.c:819
+#: objcopy.c:826
 #, c-format
 msgid "can't create section `%s': %s"
 msgstr ""
 
-#: objcopy.c:905
+#: objcopy.c:912
 #, c-format
 msgid "Can't fill gap after %s: %s"
 msgstr ""
 
-#: objcopy.c:930
+#: objcopy.c:937
 #, c-format
 msgid "Can't add padding to %s: %s"
 msgstr ""
 
-#: objcopy.c:1068
+#: objcopy.c:1075
 #, c-format
 msgid "%s: error copying private BFD data: %s"
 msgstr ""
 
-#: objcopy.c:1102
+#: objcopy.c:1109
 #, c-format
 msgid "cannot mkdir %s for archive copying (error: %s)"
 msgstr ""
 
-#: objcopy.c:1291
+#: objcopy.c:1298
 msgid "making"
 msgstr ""
 
-#: objcopy.c:1300
+#: objcopy.c:1307
 msgid "size"
 msgstr ""
 
-#: objcopy.c:1314
+#: objcopy.c:1321
 msgid "vma"
 msgstr ""
 
-#: objcopy.c:1340
+#: objcopy.c:1347
 msgid "alignment"
 msgstr ""
 
-#: objcopy.c:1349
+#: objcopy.c:1356
 msgid "flags"
 msgstr ""
 
-#: objcopy.c:1363
+#: objcopy.c:1370
 msgid "private data"
 msgstr ""
 
-#: objcopy.c:1371
+#: objcopy.c:1378
 #, c-format
 msgid "%s: section `%s': error in %s: %s"
 msgstr ""
 
-#: objcopy.c:1645
+#: objcopy.c:1652
 #, c-format
 msgid "%s: can't create debugging section: %s"
 msgstr ""
 
-#: objcopy.c:1660
+#: objcopy.c:1667
 #, c-format
 msgid "%s: can't set debugging section contents: %s"
 msgstr ""
 
-#: objcopy.c:1669
+#: objcopy.c:1676
 #, c-format
 msgid "%s: don't know how to write debugging information for %s"
 msgstr ""
 
-#: objcopy.c:1775
+#: objcopy.c:1782
 #, c-format
 msgid "%s: cannot stat: %s"
 msgstr ""
 
-#: objcopy.c:1825
+#: objcopy.c:1832
 msgid "byte number must be non-negative"
 msgstr ""
 
-#: objcopy.c:1831
+#: objcopy.c:1838
 msgid "interleave must be positive"
 msgstr ""
 
-#: objcopy.c:1851 objcopy.c:1859
+#: objcopy.c:1858 objcopy.c:1866
 #, c-format
 msgid "%s both copied and removed"
 msgstr ""
 
-#: objcopy.c:1928 objcopy.c:1998 objcopy.c:2099 objcopy.c:2127
+#: objcopy.c:1935 objcopy.c:2005 objcopy.c:2106 objcopy.c:2134
 #, c-format
 msgid "bad format for %s"
 msgstr ""
 
-#: objcopy.c:1931
+#: objcopy.c:1938
 #, c-format
 msgid "cannot stat: %s: %s"
 msgstr ""
 
-#: objcopy.c:1949
+#: objcopy.c:1956
 #, c-format
 msgid "cannot open: %s: %s"
 msgstr ""
 
-#: objcopy.c:1953
+#: objcopy.c:1960
 #, c-format
 msgid "%s: fread failed"
 msgstr ""
 
-#: objcopy.c:2067
+#: objcopy.c:2074
 #, c-format
 msgid "Warning: truncating gap-fill from 0x%s to 0x%x"
 msgstr ""
 
-#: objcopy.c:2169
+#: objcopy.c:2176
 msgid "byte number must be less than interleave"
 msgstr ""
 
-#: objcopy.c:2188
+#: objcopy.c:2195
 #, c-format
 msgid "Cannot stat: %s: %s"
 msgstr ""
 
-#: objcopy.c:2228 objcopy.c:2242
+#: objcopy.c:2235 objcopy.c:2249
 #, c-format
 msgid "%s %s%c0x%s never used"
 msgstr ""
@@ -1996,984 +2000,1010 @@
 msgid "Last stabs entries before error:\n"
 msgstr ""
 
-#: readelf.c:260
+#: readelf.c:271
 #, c-format
 msgid "Unable to seek to start of %s at %x\n"
 msgstr ""
 
-#: readelf.c:268
+#: readelf.c:279
 #, c-format
 msgid "Out of memory allocating %d bytes for %s\n"
 msgstr ""
 
-#: readelf.c:274
+#: readelf.c:285
 #, c-format
 msgid "Unable to read in %d bytes of %s\n"
 msgstr ""
 
-#: readelf.c:284
+#: readelf.c:295
 #, c-format
 msgid "Unable to seek to %x for %s\n"
 msgstr ""
 
-#: readelf.c:289
+#: readelf.c:300
 #, c-format
 msgid "Unable to read data at %x for %s\n"
 msgstr ""
 
-#: readelf.c:304 readelf.c:330
+#: readelf.c:315 readelf.c:341
 #, c-format
 msgid "%s: Error: "
 msgstr ""
 
-#: readelf.c:316 readelf.c:345
+#: readelf.c:327 readelf.c:356
 #, c-format
 msgid "%s: Warning: "
 msgstr ""
 
-#: readelf.c:395 readelf.c:533
+#: readelf.c:406 readelf.c:544
 #, c-format
 msgid "Unhandled data length: %d\n"
 msgstr ""
 
-#: readelf.c:597
+#: readelf.c:609
 msgid "Don't know about relocations on this machine architecture\n"
 msgstr ""
 
-#: readelf.c:637 readelf.c:666 readelf.c:698 readelf.c:726
+#: readelf.c:640 readelf.c:667 readelf.c:710 readelf.c:735
 msgid "out of memory parsing relocs"
 msgstr ""
 
-#: readelf.c:744
+#: readelf.c:784
 msgid ""
 "  Offset    Info  Type            Symbol's Value  Symbol's Name          "
 "Addend\n"
 msgstr ""
 
-#: readelf.c:747
+#: readelf.c:787
 msgid "  Offset    Info  Type            Symbol's Value  Symbol's Name\n"
 msgstr ""
 
-#: readelf.c:907 readelf.c:909
+#: readelf.c:951 readelf.c:953
 #, c-format
 msgid "unrecognised: %-7lx"
 msgstr ""
 
-#: readelf.c:934
+#: readelf.c:978
 #, c-format
 msgid "<string table index %3ld>"
 msgstr ""
 
-#: readelf.c:1147
+#: readelf.c:1194
 #, c-format
 msgid "Processor Specific: %lx"
 msgstr ""
 
-#: readelf.c:1166
+#: readelf.c:1213
 #, c-format
 msgid "Operating System specific: %lx"
 msgstr ""
 
-#: readelf.c:1169 readelf.c:1677
+#: readelf.c:1216 readelf.c:1758
 #, c-format
 msgid "<unknown>: %lx"
 msgstr ""
 
-#: readelf.c:1183
+#: readelf.c:1230
 msgid "NONE (None)"
 msgstr ""
 
-#: readelf.c:1184
+#: readelf.c:1231
 msgid "REL (Relocatable file)"
 msgstr ""
 
-#: readelf.c:1185
+#: readelf.c:1232
 msgid "EXEC (Executable file)"
 msgstr ""
 
-#: readelf.c:1186
+#: readelf.c:1233
 msgid "DYN (Shared object file)"
 msgstr ""
 
-#: readelf.c:1187
+#: readelf.c:1234
 msgid "CORE (Core file)"
 msgstr ""
 
-#: readelf.c:1191
+#: readelf.c:1238
 #, c-format
 msgid "Processor Specific: (%x)"
 msgstr ""
 
-#: readelf.c:1193
+#: readelf.c:1240
 #, c-format
 msgid "OS Specific: (%x)"
 msgstr ""
 
-#: readelf.c:1195 readelf.c:1281 readelf.c:1811
+#: readelf.c:1242 readelf.c:1329 readelf.c:1909
 #, c-format
 msgid "<unknown>: %x"
 msgstr ""
 
-#: readelf.c:1208
+#: readelf.c:1255
 msgid "None"
 msgstr ""
 
-#: readelf.c:1849
+#: readelf.c:1948
 msgid "Usage: readelf {options} elf-file(s)\n"
 msgstr ""
 
-#: readelf.c:1850
+#: readelf.c:1949
 msgid "  Options are:\n"
 msgstr ""
 
-#: readelf.c:1851
+#: readelf.c:1950
 msgid "  -a or --all               Equivalent to: -h -l -S -s -r -d -V -A -I\n"
 msgstr ""
 
-#: readelf.c:1852
+#: readelf.c:1951
 msgid "  -h or --file-header       Display the ELF file header\n"
 msgstr ""
 
-#: readelf.c:1853
+#: readelf.c:1952
 msgid "  -l or --program-headers or --segments\n"
 msgstr ""
 
-#: readelf.c:1854
+#: readelf.c:1953
 msgid "                            Display the program headers\n"
 msgstr ""
 
-#: readelf.c:1855
+#: readelf.c:1954
 msgid "  -S or --section-headers or --sections\n"
 msgstr ""
 
-#: readelf.c:1856
+#: readelf.c:1955
 msgid "                            Display the sections' header\n"
 msgstr ""
 
-#: readelf.c:1857
+#: readelf.c:1956
 msgid "  -e or --headers           Equivalent to: -h -l -S\n"
 msgstr ""
 
-#: readelf.c:1858
+#: readelf.c:1957
 msgid "  -s or --syms or --symbols Display the symbol table\n"
 msgstr ""
 
-#: readelf.c:1859
+#: readelf.c:1958
 msgid "  -n or --notes             Display the core notes (if present)\n"
 msgstr ""
 
-#: readelf.c:1860
+#: readelf.c:1959
 msgid "  -r or --relocs            Display the relocations (if present)\n"
 msgstr ""
 
-#: readelf.c:1861
+#: readelf.c:1960
+msgid "  -u or --unwind            Display the unwind info (if present)\n"
+msgstr ""
+
+#: readelf.c:1961
 msgid "  -d or --dynamic           Display the dynamic segment (if present)\n"
 msgstr ""
 
-#: readelf.c:1862
+#: readelf.c:1962
 msgid "  -V or --version-info      Display the version sections (if present)\n"
 msgstr ""
 
-#: readelf.c:1863
+#: readelf.c:1963
 msgid ""
 "  -A or --arch-specific     Display architecture specific information (if "
 "any).\n"
 msgstr ""
 
-#: readelf.c:1864
+#: readelf.c:1964
 msgid ""
 "  -D or --use-dynamic       Use the dynamic section info when displaying "
 "symbols\n"
 msgstr ""
 
-#: readelf.c:1865
+#: readelf.c:1965
 msgid "  -x <number> or --hex-dump=<number>\n"
 msgstr ""
 
-#: readelf.c:1866
+#: readelf.c:1966
 msgid "                            Dump the contents of section <number>\n"
 msgstr ""
 
-#: readelf.c:1867
+#: readelf.c:1967
 msgid ""
 "  -w[liaprf] or --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=frames]\n"
 msgstr ""
 
-#: readelf.c:1868
+#: readelf.c:1968
 msgid ""
 "                            Display the contents of DWARF2 debug sections\n"
 msgstr ""
 
-#: readelf.c:1870
+#: readelf.c:1970
 msgid "  -i <number> or --instruction-dump=<number>\n"
 msgstr ""
 
-#: readelf.c:1871
+#: readelf.c:1971
 msgid ""
 "                            Disassemble the contents of section <number>\n"
 msgstr ""
 
-#: readelf.c:1873
+#: readelf.c:1973
 msgid "  -I or --histogram         Display histogram of bucket list lengths\n"
 msgstr ""
 
-#: readelf.c:1874
+#: readelf.c:1974
 msgid "  -v or --version           Display the version number of readelf\n"
 msgstr ""
 
-#: readelf.c:1875
+#: readelf.c:1975
 msgid "  -H or --help              Display this information\n"
 msgstr ""
 
-#: readelf.c:1893
+#: readelf.c:1993
 msgid "Out of memory allocating dump request table."
 msgstr ""
 
-#: readelf.c:2033
+#: readelf.c:2137
 #, c-format
 msgid "Unrecognised debug option '%s'\n"
 msgstr ""
 
-#: readelf.c:2058
+#: readelf.c:2162
 #, c-format
 msgid "Invalid option '-%c'\n"
 msgstr ""
 
-#: readelf.c:2071
+#: readelf.c:2175
 msgid "Nothing to do.\n"
 msgstr ""
 
-#: readelf.c:2084 readelf.c:2101 readelf.c:3740
+#: readelf.c:2188 readelf.c:2205 readelf.c:4201
 msgid "none"
 msgstr ""
 
-#: readelf.c:2085
+#: readelf.c:2189
 msgid "ELF32"
 msgstr ""
 
-#: readelf.c:2086
+#: readelf.c:2190
 msgid "ELF64"
 msgstr ""
 
-#: readelf.c:2088 readelf.c:2105 readelf.c:2133
+#: readelf.c:2192 readelf.c:2209 readelf.c:2237
 #, c-format
 msgid "<unknown: %x>"
 msgstr ""
 
-#: readelf.c:2102
+#: readelf.c:2206
 msgid "2's complement, little endian"
 msgstr ""
 
-#: readelf.c:2103
+#: readelf.c:2207
 msgid "2's complement, big endian"
 msgstr ""
 
-#: readelf.c:2118
+#: readelf.c:2222
 msgid "UNIX - System V"
 msgstr ""
 
-#: readelf.c:2119
+#: readelf.c:2223
 msgid "UNIX - HP-UX"
 msgstr ""
 
-#: readelf.c:2120
+#: readelf.c:2224
 msgid "UNIX - NetBSD"
 msgstr ""
 
-#: readelf.c:2121
+#: readelf.c:2225
 msgid "UNIX - Linux"
 msgstr ""
 
-#: readelf.c:2122
+#: readelf.c:2226
 msgid "GNU/Hurd"
 msgstr ""
 
-#: readelf.c:2123
+#: readelf.c:2227
 msgid "UNIX - Solaris"
 msgstr ""
 
-#: readelf.c:2124
+#: readelf.c:2228
 msgid "UNIX - AIX"
 msgstr ""
 
-#: readelf.c:2125
+#: readelf.c:2229
 msgid "UNIX - IRIX"
 msgstr ""
 
-#: readelf.c:2126
+#: readelf.c:2230
 msgid "UNIX - FreeBSD"
 msgstr ""
 
-#: readelf.c:2127
+#: readelf.c:2231
 msgid "UNIX - TRU64"
 msgstr ""
 
-#: readelf.c:2128
+#: readelf.c:2232
 msgid "Novell - Modesto"
 msgstr ""
 
-#: readelf.c:2129
+#: readelf.c:2233
 msgid "UNIX - OpenBSD"
 msgstr ""
 
-#: readelf.c:2130
+#: readelf.c:2234
 msgid "Standalone App"
 msgstr ""
 
-#: readelf.c:2131
+#: readelf.c:2235
 msgid "ARM"
 msgstr ""
 
-#: readelf.c:2148
+#: readelf.c:2252
 msgid "Not an ELF file - it has the wrong magic bytes at the start\n"
 msgstr ""
 
-#: readelf.c:2156
+#: readelf.c:2260
 msgid "ELF Header:\n"
 msgstr ""
 
-#: readelf.c:2157
+#: readelf.c:2261
 msgid "  Magic:   "
 msgstr ""
 
-#: readelf.c:2161
+#: readelf.c:2265
 #, c-format
 msgid "  Class:                             %s\n"
 msgstr ""
 
-#: readelf.c:2163
+#: readelf.c:2267
 #, c-format
 msgid "  Data:                              %s\n"
 msgstr ""
 
-#: readelf.c:2165
+#: readelf.c:2269
 #, c-format
 msgid "  Version:                           %d %s\n"
 msgstr ""
 
-#: readelf.c:2172
+#: readelf.c:2276
 #, c-format
 msgid "  OS/ABI:                            %s\n"
 msgstr ""
 
-#: readelf.c:2174
+#: readelf.c:2278
 #, c-format
 msgid "  ABI Version:                       %d\n"
 msgstr ""
 
-#: readelf.c:2176
+#: readelf.c:2280
 #, c-format
 msgid "  Type:                              %s\n"
 msgstr ""
 
-#: readelf.c:2178
+#: readelf.c:2282
 #, c-format
 msgid "  Machine:                           %s\n"
 msgstr ""
 
-#: readelf.c:2180
+#: readelf.c:2284
 #, c-format
 msgid "  Version:                           0x%lx\n"
 msgstr ""
 
-#: readelf.c:2183
+#: readelf.c:2287
 msgid "  Entry point address:               "
 msgstr ""
 
-#: readelf.c:2185
-msgid ""
-"\n"
-"  Start of program headers:          "
-msgstr ""
-
-#: readelf.c:2187
-msgid ""
-" (bytes into file)\n"
-"  Start of section headers:          "
-msgstr ""
-
-#: readelf.c:2189
-msgid " (bytes into file)\n"
-msgstr ""
-
-#: readelf.c:2191
-#, c-format
-msgid "  Flags:                             0x%lx%s\n"
-msgstr ""
-
-#: readelf.c:2194
-#, c-format
-msgid "  Size of this header:               %ld (bytes)\n"
-msgstr ""
-
-#: readelf.c:2196
-#, c-format
-msgid "  Size of program headers:           %ld (bytes)\n"
-msgstr ""
-
-#: readelf.c:2198
-#, c-format
-msgid "  Number of program headers:         %ld\n"
-msgstr ""
-
-#: readelf.c:2200
-#, c-format
-msgid "  Size of section headers:           %ld (bytes)\n"
-msgstr ""
-
-#: readelf.c:2202
-#, c-format
-msgid "  Number of section headers:         %ld\n"
-msgstr ""
-
-#: readelf.c:2204
-#, c-format
-msgid "  Section header string table index: %ld\n"
-msgstr ""
-
 #: readelf.c:2289
 msgid ""
 "\n"
-"There are no program headers in this file.\n"
+"  Start of program headers:          "
+msgstr ""
+
+#: readelf.c:2291
+msgid ""
+" (bytes into file)\n"
+"  Start of section headers:          "
+msgstr ""
+
+#: readelf.c:2293
+msgid " (bytes into file)\n"
 msgstr ""
 
 #: readelf.c:2295
 #, c-format
+msgid "  Flags:                             0x%lx%s\n"
+msgstr ""
+
+#: readelf.c:2298
+#, c-format
+msgid "  Size of this header:               %ld (bytes)\n"
+msgstr ""
+
+#: readelf.c:2300
+#, c-format
+msgid "  Size of program headers:           %ld (bytes)\n"
+msgstr ""
+
+#: readelf.c:2302
+#, c-format
+msgid "  Number of program headers:         %ld\n"
+msgstr ""
+
+#: readelf.c:2304
+#, c-format
+msgid "  Size of section headers:           %ld (bytes)\n"
+msgstr ""
+
+#: readelf.c:2306
+#, c-format
+msgid "  Number of section headers:         %ld\n"
+msgstr ""
+
+#: readelf.c:2308
+#, c-format
+msgid "  Section header string table index: %ld\n"
+msgstr ""
+
+#: readelf.c:2393
+msgid ""
+"\n"
+"There are no program headers in this file.\n"
+msgstr ""
+
+#: readelf.c:2399
+#, c-format
 msgid ""
 "\n"
 "Elf file type is %s\n"
 msgstr ""
 
-#: readelf.c:2296
+#: readelf.c:2400
 msgid "Entry point "
 msgstr ""
 
-#: readelf.c:2298
+#: readelf.c:2402
 #, c-format
 msgid ""
 "\n"
 "There are %d program headers, starting at offset "
 msgstr ""
 
-#: readelf.c:2309 readelf.c:2485 readelf.c:2527 readelf.c:2570 readelf.c:2611
-#: readelf.c:3133 readelf.c:3174 readelf.c:3350 readelf.c:4358 readelf.c:4372
-#: readelf.c:7741 readelf.c:7781
+#: readelf.c:2413 readelf.c:2589 readelf.c:2631 readelf.c:2674 readelf.c:2715
+#: readelf.c:3594 readelf.c:3635 readelf.c:3811 readelf.c:4732 readelf.c:4746
+#: readelf.c:8117 readelf.c:8157
 msgid "Out of memory\n"
 msgstr ""
 
-#: readelf.c:2327
+#: readelf.c:2431
 #, c-format
 msgid ""
 "\n"
 "Program Header%s:\n"
 msgstr ""
 
-#: readelf.c:2331
+#: readelf.c:2435
 msgid ""
 "  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align\n"
 msgstr ""
 
-#: readelf.c:2335
+#: readelf.c:2439
 msgid "  Type           Offset             VirtAddr           PhysAddr\n"
 msgstr ""
 
-#: readelf.c:2337
+#: readelf.c:2441
 msgid "                 FileSiz            MemSiz              Flags  Align\n"
 msgstr ""
 
-#: readelf.c:2395
+#: readelf.c:2499
 msgid "more than one dynamic segment\n"
 msgstr ""
 
-#: readelf.c:2403
+#: readelf.c:2507
 msgid "Unable to find program interpreter name\n"
 msgstr ""
 
-#: readelf.c:2410
+#: readelf.c:2514
 #, c-format
 msgid ""
 "\n"
 "      [Requesting program interpreter: %s]"
 msgstr ""
 
-#: readelf.c:2428
+#: readelf.c:2532
 msgid ""
 "\n"
 " Section to Segment mapping:\n"
 msgstr ""
 
-#: readelf.c:2429
+#: readelf.c:2533
 msgid "  Segment Sections...\n"
 msgstr ""
 
-#: readelf.c:2693
+#: readelf.c:2797
 msgid ""
 "\n"
 "There are no sections in this file.\n"
 msgstr ""
 
-#: readelf.c:2699
+#: readelf.c:2803
 #, c-format
 msgid "There are %d section headers, starting at offset 0x%lx:\n"
 msgstr ""
 
-#: readelf.c:2739
+#: readelf.c:2841
 msgid "File contains multiple dynamic symbol tables\n"
 msgstr ""
 
-#: readelf.c:2752
+#: readelf.c:2854
 msgid "File contains multiple dynamic string tables\n"
 msgstr ""
 
-#: readelf.c:2786
+#: readelf.c:2888
 #, c-format
 msgid ""
 "\n"
 "Section Header%s:\n"
 msgstr ""
 
-#: readelf.c:2790
+#: readelf.c:2892
 msgid ""
 "  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk "
 "Inf Al\n"
 msgstr ""
 
-#: readelf.c:2793
+#: readelf.c:2895
 msgid "  [Nr] Name              Type             Address           Offset\n"
 msgstr ""
 
-#: readelf.c:2794
+#: readelf.c:2896
 msgid "       Size              EntSize          Flags  Link  Info  Align\n"
 msgstr ""
 
-#: readelf.c:2841
+#: readelf.c:2943
 msgid "Key to Flags:\n"
 msgstr ""
 
-#: readelf.c:2842
+#: readelf.c:2944
 msgid "  W (write), A (alloc), X (execute), M (merge), S (strings)\n"
 msgstr ""
 
-#: readelf.c:2843
+#: readelf.c:2945
 msgid "  I (info), L (link order), G (group), x (unknown)\n"
 msgstr ""
 
-#: readelf.c:2844
+#: readelf.c:2946
 msgid ""
 "  O (extra OS processing required) o (OS specific), p (processor specific)\n"
 msgstr ""
 
-#: readelf.c:2902
+#: readelf.c:3004
 #, c-format
 msgid ""
 "\n"
 "Relocation section at offset 0x%lx contains %ld bytes:\n"
 msgstr ""
 
-#: readelf.c:2909
+#: readelf.c:3011
 msgid ""
 "\n"
 "There are no dynamic relocations in this file.\n"
 msgstr ""
 
-#: readelf.c:2937
+#: readelf.c:3039
 msgid ""
 "\n"
 "Relocation section "
 msgstr ""
 
-#: readelf.c:2944
+#: readelf.c:3046 readelf.c:3417
 #, c-format
 msgid " at offset 0x%lx contains %lu entries:\n"
 msgstr ""
 
-#: readelf.c:2972
+#: readelf.c:3074
 msgid ""
 "\n"
 "There are no relocations in this file.\n"
 msgstr ""
 
-#: readelf.c:3227
+#: readelf.c:3318 readelf.c:3330
+#, c-format
+msgid "Skipping unexpected symbol type %u"
+msgstr ""
+
+#: readelf.c:3338
+#, c-format
+msgid "Skipping unexpected relocation type %s"
+msgstr ""
+
+#: readelf.c:3410
+msgid ""
+"\n"
+"Unwind section "
+msgstr ""
+
+#: readelf.c:3426
+msgid ""
+"\n"
+"There are no unwind sections in this file.\n"
+msgstr ""
+
+#: readelf.c:3688
 msgid ""
 "\n"
 "There is no dynamic segment in this file.\n"
 msgstr ""
 
-#: readelf.c:3261
+#: readelf.c:3722
 msgid "Unable to seek to end of file!"
 msgstr ""
 
-#: readelf.c:3270
+#: readelf.c:3731
 msgid "Unable to determine the number of symbols to load\n"
 msgstr ""
 
-#: readelf.c:3300
+#: readelf.c:3761
 msgid "Unable to seek to end of file\n"
 msgstr ""
 
-#: readelf.c:3306
+#: readelf.c:3767
 msgid "Unable to determine the length of the dynamic string table\n"
 msgstr ""
 
-#: readelf.c:3367
+#: readelf.c:3828
 #, c-format
 msgid ""
 "\n"
 "Dynamic segment at offset 0x%x contains %ld entries:\n"
 msgstr ""
 
-#: readelf.c:3370
+#: readelf.c:3831
 msgid "  Tag        Type                         Name/Value\n"
 msgstr ""
 
-#: readelf.c:3406
+#: readelf.c:3867
 msgid "Auxiliary library"
 msgstr ""
 
-#: readelf.c:3410
+#: readelf.c:3871
 msgid "Filter library"
 msgstr ""
 
-#: readelf.c:3414
+#: readelf.c:3875
 msgid "Configuration file"
 msgstr ""
 
-#: readelf.c:3418
+#: readelf.c:3879
 msgid "Dependency audit library"
 msgstr ""
 
-#: readelf.c:3422
+#: readelf.c:3883
 msgid "Audit library"
 msgstr ""
 
-#: readelf.c:3440 readelf.c:3466 readelf.c:3492
+#: readelf.c:3901 readelf.c:3927 readelf.c:3953
 msgid "Flags:"
 msgstr ""
 
-#: readelf.c:3442 readelf.c:3468 readelf.c:3494
+#: readelf.c:3903 readelf.c:3929 readelf.c:3955
 msgid " None\n"
 msgstr ""
 
-#: readelf.c:3613
+#: readelf.c:4074
 #, c-format
 msgid "Shared library: [%s]"
 msgstr ""
 
-#: readelf.c:3616
+#: readelf.c:4077
 msgid " program interpreter"
 msgstr ""
 
-#: readelf.c:3620
+#: readelf.c:4081
 #, c-format
 msgid "Library soname: [%s]"
 msgstr ""
 
-#: readelf.c:3624
+#: readelf.c:4085
 #, c-format
 msgid "Library rpath: [%s]"
 msgstr ""
 
-#: readelf.c:3628
+#: readelf.c:4089
 #, c-format
 msgid "Library runpath: [%s]"
 msgstr ""
 
-#: readelf.c:3689
+#: readelf.c:4150
 #, c-format
 msgid "Not needed object: [%s]\n"
 msgstr ""
 
-#: readelf.c:3786
+#: readelf.c:4247
 #, c-format
 msgid ""
 "\n"
 "Version definition section '%s' contains %ld entries:\n"
 msgstr ""
 
-#: readelf.c:3789
+#: readelf.c:4250
 msgid "  Addr: 0x"
 msgstr ""
 
-#: readelf.c:3791 readelf.c:3979
+#: readelf.c:4252 readelf.c:4440
 #, c-format
 msgid "  Offset: %#08lx  Link: %lx (%s)\n"
 msgstr ""
 
-#: readelf.c:3821
+#: readelf.c:4282
 #, c-format
 msgid "  %#06x: Rev: %d  Flags: %s"
 msgstr ""
 
-#: readelf.c:3824
+#: readelf.c:4285
 #, c-format
 msgid "  Index: %d  Cnt: %d  "
 msgstr ""
 
-#: readelf.c:3835
+#: readelf.c:4296
 #, c-format
 msgid "Name: %s\n"
 msgstr ""
 
-#: readelf.c:3837
+#: readelf.c:4298
 #, c-format
 msgid "Name index: %ld\n"
 msgstr ""
 
-#: readelf.c:3852
+#: readelf.c:4313
 #, c-format
 msgid "  %#06x: Parent %d: %s\n"
 msgstr ""
 
-#: readelf.c:3855
+#: readelf.c:4316
 #, c-format
 msgid "  %#06x: Parent %d, name index: %ld\n"
 msgstr ""
 
-#: readelf.c:3874
+#: readelf.c:4335
 #, c-format
 msgid ""
 "\n"
 "Version needs section '%s' contains %ld entries:\n"
 msgstr ""
 
-#: readelf.c:3877
+#: readelf.c:4338
 msgid " Addr: 0x"
 msgstr ""
 
-#: readelf.c:3879
+#: readelf.c:4340
 #, c-format
 msgid "  Offset: %#08lx  Link to section: %ld (%s)\n"
 msgstr ""
 
-#: readelf.c:3905
+#: readelf.c:4366
 #, c-format
 msgid "  %#06x: Version: %d"
 msgstr ""
 
-#: readelf.c:3908
+#: readelf.c:4369
 #, c-format
 msgid "  File: %s"
 msgstr ""
 
-#: readelf.c:3910
+#: readelf.c:4371
 #, c-format
 msgid "  File: %lx"
 msgstr ""
 
-#: readelf.c:3912
+#: readelf.c:4373
 #, c-format
 msgid "  Cnt: %d\n"
 msgstr ""
 
-#: readelf.c:3930
+#: readelf.c:4391
 #, c-format
 msgid "  %#06x: Name: %s"
 msgstr ""
 
-#: readelf.c:3933
+#: readelf.c:4394
 #, c-format
 msgid "  %#06x: Name index: %lx"
 msgstr ""
 
-#: readelf.c:3936
+#: readelf.c:4397
 #, c-format
 msgid "  Flags: %s  Version: %d\n"
 msgstr ""
 
-#: readelf.c:3974
+#: readelf.c:4435
 #, c-format
 msgid ""
 "\n"
 "Version symbols section '%s' contains %d entries:\n"
 msgstr ""
 
-#: readelf.c:3977
+#: readelf.c:4438
 msgid " Addr: "
 msgstr ""
 
-#: readelf.c:4007
+#: readelf.c:4469
 msgid "   0 (*local*)    "
 msgstr ""
 
-#: readelf.c:4011
+#: readelf.c:4473
 msgid "   1 (*global*)   "
 msgstr ""
 
-#: readelf.c:4233
+#: readelf.c:4607
 msgid ""
 "\n"
 "No version information found in this file.\n"
 msgstr ""
 
-#: readelf.c:4251 readelf.c:4286
+#: readelf.c:4625 readelf.c:4660
 #, c-format
 msgid "<processor specific>: %d"
 msgstr ""
 
-#: readelf.c:4253 readelf.c:4298
+#: readelf.c:4627 readelf.c:4672
 #, c-format
 msgid "<OS specific>: %d"
 msgstr ""
 
-#: readelf.c:4255 readelf.c:4301
+#: readelf.c:4629 readelf.c:4675
 #, c-format
 msgid "<unknown>: %d"
 msgstr ""
 
-#: readelf.c:4364
+#: readelf.c:4738
 msgid "Unable to read in dynamic data\n"
 msgstr ""
 
-#: readelf.c:4406
+#: readelf.c:4780
 msgid "Unable to seek to start of dynamic information"
 msgstr ""
 
-#: readelf.c:4412
+#: readelf.c:4786
 msgid "Failed to read in number of buckets\n"
 msgstr ""
 
-#: readelf.c:4418
+#: readelf.c:4792
 msgid "Failed to read in number of chains\n"
 msgstr ""
 
-#: readelf.c:4438
+#: readelf.c:4812
 msgid ""
 "\n"
 "Symbol table for image:\n"
 msgstr ""
 
-#: readelf.c:4440
+#: readelf.c:4814
 msgid "  Num Buc:    Value  Size   Type   Bind Vis      Ndx Name\n"
 msgstr ""
 
-#: readelf.c:4442
+#: readelf.c:4816
 msgid "  Num Buc:    Value          Size   Type   Bind Vis      Ndx Name\n"
 msgstr ""
 
-#: readelf.c:4486
+#: readelf.c:4860
 #, c-format
 msgid ""
 "\n"
 "Symbol table '%s' contains %lu entries:\n"
 msgstr ""
 
-#: readelf.c:4490
+#: readelf.c:4864
 msgid "   Num:    Value  Size Type    Bind   Vis      Ndx Name\n"
 msgstr ""
 
-#: readelf.c:4492
+#: readelf.c:4866
 msgid "   Num:    Value          Size Type    Bind   Vis      Ndx Name\n"
 msgstr ""
 
-#: readelf.c:4601
+#: readelf.c:4976
 msgid "bad dynamic symbol"
 msgstr ""
 
-#: readelf.c:4660
+#: readelf.c:5036
 msgid ""
 "\n"
 "Dynamic symbol information is not available for displaying symbols.\n"
 msgstr ""
 
-#: readelf.c:4672
+#: readelf.c:5048
 #, c-format
 msgid ""
 "\n"
 "Histogram for bucket list length (total of %d buckets):\n"
 msgstr ""
 
-#: readelf.c:4674
+#: readelf.c:5050
 msgid " Length  Number     %% of total  Coverage\n"
 msgstr ""
 
-#: readelf.c:4679 readelf.c:4698 readelf.c:7423 readelf.c:7616
+#: readelf.c:5055 readelf.c:5074 readelf.c:7799 readelf.c:7992
 msgid "Out of memory"
 msgstr ""
 
-#: readelf.c:4747
+#: readelf.c:5123
 #, c-format
 msgid ""
 "\n"
 "Dynamic info segment at offset 0x%lx contains %d entries:\n"
 msgstr ""
 
-#: readelf.c:4750
+#: readelf.c:5126
 msgid " Num: Name                           BoundTo     Flags\n"
 msgstr ""
 
-#: readelf.c:4798
+#: readelf.c:5174
 #, c-format
 msgid ""
 "\n"
 "Assembly dump of section %s\n"
 msgstr ""
 
-#: readelf.c:4821
+#: readelf.c:5197
 #, c-format
 msgid ""
 "\n"
 "Section '%s' has no data to dump.\n"
 msgstr ""
 
-#: readelf.c:4826
+#: readelf.c:5202
 #, c-format
 msgid ""
 "\n"
 "Hex dump of section '%s':\n"
 msgstr ""
 
-#: readelf.c:4978
+#: readelf.c:5354
 msgid "badly formed extended line op encountered!"
 msgstr ""
 
-#: readelf.c:4985
+#: readelf.c:5361
 #, c-format
 msgid "  Extended opcode %d: "
 msgstr ""
 
-#: readelf.c:4990
+#: readelf.c:5366
 msgid ""
 "End of Sequence\n"
 "\n"
 msgstr ""
 
-#: readelf.c:4996
+#: readelf.c:5372
 #, c-format
 msgid "set Address to 0x%lx\n"
 msgstr ""
 
-#: readelf.c:5001
+#: readelf.c:5377
 msgid "  define new File Table entry\n"
 msgstr ""
 
-#: readelf.c:5002 readelf.c:5124
+#: readelf.c:5378 readelf.c:5500
 msgid "  Entry\tDir\tTime\tSize\tName\n"
 msgstr ""
 
-#: readelf.c:5004
+#: readelf.c:5380
 #, c-format
 msgid "   %d\t"
 msgstr ""
 
-#: readelf.c:5007 readelf.c:5009 readelf.c:5011 readelf.c:5136 readelf.c:5138
-#: readelf.c:5140
+#: readelf.c:5383 readelf.c:5385 readelf.c:5387 readelf.c:5512 readelf.c:5514
+#: readelf.c:5516
 #, c-format
 msgid "%lu\t"
 msgstr ""
 
-#: readelf.c:5012
+#: readelf.c:5388
 #, c-format
 msgid ""
 "%s\n"
 "\n"
 msgstr ""
 
-#: readelf.c:5016
+#: readelf.c:5392
 #, c-format
 msgid "UNKNOWN: length %d\n"
 msgstr ""
 
-#: readelf.c:5042
+#: readelf.c:5418
 #, c-format
 msgid ""
 "\n"
@@ -2981,503 +3011,503 @@
 "\n"
 msgstr ""
 
-#: readelf.c:5054
+#: readelf.c:5430
 msgid "The line info appears to be corrupt - the section is too small\n"
 msgstr ""
 
-#: readelf.c:5062
+#: readelf.c:5438
 msgid "Only DWARF version 2 line info is currently supported.\n"
 msgstr ""
 
-#: readelf.c:5077
+#: readelf.c:5453
 #, c-format
 msgid "  Length:                      %ld\n"
 msgstr ""
 
-#: readelf.c:5078
+#: readelf.c:5454
 #, c-format
 msgid "  DWARF Version:               %d\n"
 msgstr ""
 
-#: readelf.c:5079
+#: readelf.c:5455
 #, c-format
 msgid "  Prolgue Length:              %d\n"
 msgstr ""
 
-#: readelf.c:5080
+#: readelf.c:5456
 #, c-format
 msgid "  Minimum Instruction Length:  %d\n"
 msgstr ""
 
-#: readelf.c:5081
+#: readelf.c:5457
 #, c-format
 msgid "  Initial value of 'is_stmt':  %d\n"
 msgstr ""
 
-#: readelf.c:5082
+#: readelf.c:5458
 #, c-format
 msgid "  Line Base:                   %d\n"
 msgstr ""
 
-#: readelf.c:5083
+#: readelf.c:5459
 #, c-format
 msgid "  Line Range:                  %d\n"
 msgstr ""
 
-#: readelf.c:5084
+#: readelf.c:5460
 #, c-format
 msgid "  Opcode Base:                 %d\n"
 msgstr ""
 
-#: readelf.c:5093
+#: readelf.c:5469
 msgid ""
 "\n"
 " Opcodes:\n"
 msgstr ""
 
-#: readelf.c:5096
+#: readelf.c:5472
 #, c-format
 msgid "  Opcode %d has %d args\n"
 msgstr ""
 
-#: readelf.c:5102
+#: readelf.c:5478
 msgid ""
 "\n"
 " The Directory Table is empty.\n"
 msgstr ""
 
-#: readelf.c:5105
+#: readelf.c:5481
 msgid ""
 "\n"
 " The Directory Table:\n"
 msgstr ""
 
-#: readelf.c:5109
+#: readelf.c:5485
 #, c-format
 msgid "  %s\n"
 msgstr ""
 
-#: readelf.c:5120
+#: readelf.c:5496
 msgid ""
 "\n"
 " The File Name Table is empty.\n"
 msgstr ""
 
-#: readelf.c:5123
+#: readelf.c:5499
 msgid ""
 "\n"
 " The File Name Table:\n"
 msgstr ""
 
-#: readelf.c:5131
+#: readelf.c:5507
 #, c-format
 msgid "  %d\t"
 msgstr ""
 
-#: readelf.c:5142
+#: readelf.c:5518
 #, c-format
 msgid "%s\n"
 msgstr ""
 
 #. Now display the statements.
-#: readelf.c:5150
+#: readelf.c:5526
 msgid ""
 "\n"
 " Line Number Statements:\n"
 msgstr ""
 
-#: readelf.c:5169
+#: readelf.c:5545
 msgid "  Copy\n"
 msgstr ""
 
-#: readelf.c:5176
+#: readelf.c:5552
 #, c-format
 msgid "  Advance PC by %d to %lx\n"
 msgstr ""
 
-#: readelf.c:5184
+#: readelf.c:5560
 #, c-format
 msgid "  Advance Line by %d to %d\n"
 msgstr ""
 
-#: readelf.c:5191
+#: readelf.c:5567
 #, c-format
 msgid "  Set File Name to entry %d in the File Name Table\n"
 msgstr ""
 
-#: readelf.c:5199
+#: readelf.c:5575
 #, c-format
 msgid "  Set column to %d\n"
 msgstr ""
 
-#: readelf.c:5206
+#: readelf.c:5582
 #, c-format
 msgid "  Set is_stmt to %d\n"
 msgstr ""
 
-#: readelf.c:5211
+#: readelf.c:5587
 msgid "  Set basic block\n"
 msgstr ""
 
-#: readelf.c:5219
+#: readelf.c:5595
 #, c-format
 msgid "  Advance PC by constant %d to 0x%lx\n"
 msgstr ""
 
-#: readelf.c:5227
+#: readelf.c:5603
 #, c-format
 msgid "  Advance PC by fixed size amount %d to 0x%lx\n"
 msgstr ""
 
-#: readelf.c:5235
+#: readelf.c:5611
 #, c-format
 msgid "  Special opcode %d: advance Address by %d to 0x%lx"
 msgstr ""
 
-#: readelf.c:5239
+#: readelf.c:5615
 #, c-format
 msgid " and Line by %d to %d\n"
 msgstr ""
 
-#: readelf.c:5262 readelf.c:5691
+#: readelf.c:5638 readelf.c:6067
 #, c-format
 msgid ""
 "Contents of the %s section:\n"
 "\n"
 msgstr ""
 
-#: readelf.c:5285
+#: readelf.c:5661
 msgid "Only DWARF 2 pubnames are currently supported\n"
 msgstr ""
 
-#: readelf.c:5292
+#: readelf.c:5668
 #, c-format
 msgid "  Length:                              %ld\n"
 msgstr ""
 
-#: readelf.c:5294
+#: readelf.c:5670
 #, c-format
 msgid "  Version:                             %d\n"
 msgstr ""
 
-#: readelf.c:5296
+#: readelf.c:5672
 #, c-format
 msgid "  Offset into .debug_info section:     %ld\n"
 msgstr ""
 
-#: readelf.c:5298
+#: readelf.c:5674
 #, c-format
 msgid "  Size of area in .debug_info section: %ld\n"
 msgstr ""
 
-#: readelf.c:5301
+#: readelf.c:5677
 msgid ""
 "\n"
 "    Offset\tName\n"
 msgstr ""
 
-#: readelf.c:5383
+#: readelf.c:5759
 #, c-format
 msgid "Unknown TAG value: %lx"
 msgstr ""
 
-#: readelf.c:5478
+#: readelf.c:5854
 #, c-format
 msgid "Unknown AT value: %lx"
 msgstr ""
 
-#: readelf.c:5515
+#: readelf.c:5891
 #, c-format
 msgid "Unknown FORM value: %lx"
 msgstr ""
 
-#: readelf.c:5697
+#: readelf.c:6073
 msgid "  Number TAG\n"
 msgstr ""
 
-#: readelf.c:5703
+#: readelf.c:6079
 #, c-format
 msgid "   %ld      %s    [%s]\n"
 msgstr ""
 
-#: readelf.c:5706
+#: readelf.c:6082
 msgid "has children"
 msgstr ""
 
-#: readelf.c:5706
+#: readelf.c:6082
 msgid "no children"
 msgstr ""
 
-#: readelf.c:5710
+#: readelf.c:6086
 #, c-format
 msgid "    %-18s %s\n"
 msgstr ""
 
-#: readelf.c:5729
+#: readelf.c:6105
 #, c-format
 msgid " %lu byte block: "
 msgstr ""
 
-#: readelf.c:6036
+#: readelf.c:6412
 msgid "(User defined location op)"
 msgstr ""
 
-#: readelf.c:6038
+#: readelf.c:6414
 msgid "(Unknown location op)"
 msgstr ""
 
-#: readelf.c:6165
+#: readelf.c:6541
 #, c-format
 msgid "Unable to handle FORM: %d"
 msgstr ""
 
-#: readelf.c:6169
+#: readelf.c:6545
 #, c-format
 msgid "Unrecognised form: %d"
 msgstr ""
 
-#: readelf.c:6182
+#: readelf.c:6558
 msgid "(not inlined)"
 msgstr ""
 
-#: readelf.c:6183
+#: readelf.c:6559
 msgid "(inlined)"
 msgstr ""
 
-#: readelf.c:6184
+#: readelf.c:6560
 msgid "(declared as inline but ignored)"
 msgstr ""
 
-#: readelf.c:6185
+#: readelf.c:6561
 msgid "(declared as inline and inlined)"
 msgstr ""
 
-#: readelf.c:6186
+#: readelf.c:6562
 #, c-format
 msgid "  (Unknown inline attribute value: %lx)"
 msgstr ""
 
-#: readelf.c:6315 readelf.c:6441
+#: readelf.c:6691 readelf.c:6817
 #, c-format
 msgid ""
 "The section %s contains:\n"
 "\n"
 msgstr ""
 
-#: readelf.c:6337
+#: readelf.c:6713
 #, c-format
 msgid "  Compilation Unit @ %lx:\n"
 msgstr ""
 
-#: readelf.c:6338
+#: readelf.c:6714
 #, c-format
 msgid "   Length:        %ld\n"
 msgstr ""
 
-#: readelf.c:6339
+#: readelf.c:6715
 #, c-format
 msgid "   Version:       %d\n"
 msgstr ""
 
-#: readelf.c:6340
+#: readelf.c:6716
 #, c-format
 msgid "   Abbrev Offset: %ld\n"
 msgstr ""
 
-#: readelf.c:6341
+#: readelf.c:6717
 #, c-format
 msgid "   Pointer Size:  %d\n"
 msgstr ""
 
-#: readelf.c:6345
+#: readelf.c:6721
 msgid "Only version 2 DWARF debug information is currently supported.\n"
 msgstr ""
 
-#: readelf.c:6367
+#: readelf.c:6743
 msgid "Unable to locate .debug_abbrev section!\n"
 msgstr ""
 
-#: readelf.c:6407
+#: readelf.c:6783
 #, c-format
 msgid "Unable to locate entry %lu in the abbreviation table\n"
 msgstr ""
 
-#: readelf.c:6412
+#: readelf.c:6788
 #, c-format
 msgid " <%d><%x>: Abbrev Number: %lu (%s)\n"
 msgstr ""
 
-#: readelf.c:6462
+#: readelf.c:6838
 msgid "Only DWARF 2 aranges are currently supported.\n"
 msgstr ""
 
-#: readelf.c:6466
+#: readelf.c:6842
 #, c-format
 msgid "  Length:                   %ld\n"
 msgstr ""
 
-#: readelf.c:6467
+#: readelf.c:6843
 #, c-format
 msgid "  Version:                  %d\n"
 msgstr ""
 
-#: readelf.c:6468
+#: readelf.c:6844
 #, c-format
 msgid "  Offset into .debug_info:  %lx\n"
 msgstr ""
 
-#: readelf.c:6469
+#: readelf.c:6845
 #, c-format
 msgid "  Pointer Size:             %d\n"
 msgstr ""
 
-#: readelf.c:6470
+#: readelf.c:6846
 #, c-format
 msgid "  Segment Size:             %d\n"
 msgstr ""
 
-#: readelf.c:6472
+#: readelf.c:6848
 msgid ""
 "\n"
 "    Address  Length\n"
 msgstr ""
 
-#: readelf.c:6634
+#: readelf.c:7010
 #, c-format
 msgid "The section %s contains:\n"
 msgstr ""
 
-#: readelf.c:7109
+#: readelf.c:7485
 #, c-format
 msgid "Displaying the debug contents of section %s is not yet supported.\n"
 msgstr ""
 
-#: readelf.c:7173
+#: readelf.c:7549
 #, c-format
 msgid ""
 "\n"
 "Section '%s' has no debugging data.\n"
 msgstr ""
 
-#: readelf.c:7192
+#: readelf.c:7568
 #, c-format
 msgid "Unrecognised debug section: %s\n"
 msgstr ""
 
-#: readelf.c:7264
+#: readelf.c:7640
 msgid "Some sections were not dumped because they do not exist!\n"
 msgstr ""
 
-#: readelf.c:7447
+#: readelf.c:7823
 #, c-format
 msgid ""
 "\n"
 "Section '%s' contains %d entries:\n"
 msgstr ""
 
-#: readelf.c:7609
+#: readelf.c:7985
 msgid "conflict list with without table"
 msgstr ""
 
-#: readelf.c:7637
+#: readelf.c:8013
 #, c-format
 msgid ""
 "\n"
 "Section '.conflict' contains %d entries:\n"
 msgstr ""
 
-#: readelf.c:7638
+#: readelf.c:8014
 msgid "  Num:    Index       Value  Name"
 msgstr ""
 
-#: readelf.c:7663
+#: readelf.c:8039
 msgid "NT_PRSTATUS (prstatus structure)"
 msgstr ""
 
-#: readelf.c:7664
+#: readelf.c:8040
 msgid "NT_FPREGSET (floating point registers)"
 msgstr ""
 
-#: readelf.c:7665
+#: readelf.c:8041
 msgid "NT_PRPSINFO (prpsinfo structure)"
 msgstr ""
 
-#: readelf.c:7666
+#: readelf.c:8042
 msgid "NT_TASKSTRUCT (task structure)"
 msgstr ""
 
-#: readelf.c:7667
+#: readelf.c:8043
 msgid "NT_PRXFPREG (user_xfpregs structure)"
 msgstr ""
 
-#: readelf.c:7668
+#: readelf.c:8044
 msgid "NT_PSTATUS (pstatus structure)"
 msgstr ""
 
-#: readelf.c:7669
+#: readelf.c:8045
 msgid "NT_FPREGS (floating point registers)"
 msgstr ""
 
-#: readelf.c:7670
+#: readelf.c:8046
 msgid "NT_PSINFO (psinfo structure)"
 msgstr ""
 
-#: readelf.c:7671
+#: readelf.c:8047
 msgid "NT_LWPSTATUS (lwpstatus_t structure)"
 msgstr ""
 
-#: readelf.c:7672
+#: readelf.c:8048
 msgid "NT_LWPSINFO (lwpsinfo_t structure)"
 msgstr ""
 
-#: readelf.c:7673
+#: readelf.c:8049
 msgid "NT_WIN32PSTATUS (win32_pstatus strcuture)"
 msgstr ""
 
-#: readelf.c:7675
+#: readelf.c:8051
 #, c-format
 msgid "Unknown note type: (0x%08x)"
 msgstr ""
 
-#: readelf.c:7713
+#: readelf.c:8089
 #, c-format
 msgid ""
 "\n"
 "Notes at offset 0x%08lx with length 0x%08lx:\n"
 msgstr ""
 
-#: readelf.c:7715
+#: readelf.c:8091
 msgid "  Owner\t\tData size\tDescription\n"
 msgstr ""
 
-#: readelf.c:7826
+#: readelf.c:8202
 msgid "No note segments present in the core file.\n"
 msgstr ""
 
-#: readelf.c:7904
+#: readelf.c:8280
 msgid "This instance of readelf has been built without support for a\n"
 msgstr ""
 
-#: readelf.c:7905
+#: readelf.c:8281
 msgid "64 bit data type and so it cannot read 64 bit ELF files.\n"
 msgstr ""
 
-#: readelf.c:7940
+#: readelf.c:8316
 #, c-format
 msgid "Cannot stat input file %s.\n"
 msgstr ""
 
-#: readelf.c:7947
+#: readelf.c:8323
 #, c-format
 msgid "Input file %s not found.\n"
 msgstr ""
 
-#: readelf.c:7953
+#: readelf.c:8329
 #, c-format
 msgid "%s: Failed to read file header\n"
 msgstr ""
 
-#: readelf.c:7967
+#: readelf.c:8343
 #, c-format
 msgid ""
 "\n"
@@ -3907,98 +3937,98 @@
 msgid "unable to open output file %s"
 msgstr ""
 
-#: stabs.c:349 stabs.c:1770
+#: stabs.c:343 stabs.c:1760
 msgid "numeric overflow"
 msgstr ""
 
-#: stabs.c:360
+#: stabs.c:354
 #, c-format
 msgid "Bad stab: %s\n"
 msgstr ""
 
-#: stabs.c:370
+#: stabs.c:364
 #, c-format
 msgid "Warning: %s: %s\n"
 msgstr ""
 
-#: stabs.c:492
+#: stabs.c:486
 msgid "N_LBRAC not within function\n"
 msgstr ""
 
-#: stabs.c:531
+#: stabs.c:525
 msgid "Too many N_RBRACs\n"
 msgstr ""
 
-#: stabs.c:780
+#: stabs.c:770
 msgid "unknown C++ encoded name"
 msgstr ""
 
 #. Complain and keep going, so compilers can invent new
 #. cross-reference types.
-#: stabs.c:1307
+#: stabs.c:1297
 msgid "unrecognized cross reference type"
 msgstr ""
 
 #. Does this actually ever happen?  Is that why we are worrying
 #. about dealing with it rather than just calling error_type?
-#: stabs.c:1862
+#: stabs.c:1852
 msgid "missing index type"
 msgstr ""
 
-#: stabs.c:2189
+#: stabs.c:2179
 msgid "unknown virtual character for baseclass"
 msgstr ""
 
-#: stabs.c:2207
+#: stabs.c:2197
 msgid "unknown visibility character for baseclass"
 msgstr ""
 
-#: stabs.c:2399
+#: stabs.c:2389
 msgid "unnamed $vb type"
 msgstr ""
 
-#: stabs.c:2405
+#: stabs.c:2395
 msgid "unrecognized C++ abbreviation"
 msgstr ""
 
-#: stabs.c:2485
+#: stabs.c:2475
 msgid "unknown visibility character for field"
 msgstr ""
 
-#: stabs.c:2741
+#: stabs.c:2731
 msgid "const/volatile indicator missing"
 msgstr ""
 
-#: stabs.c:2981
+#: stabs.c:2971
 #, c-format
 msgid "No mangling for \"%s\"\n"
 msgstr ""
 
-#: stabs.c:3294
+#: stabs.c:3284
 msgid "Undefined N_EXCL"
 msgstr ""
 
-#: stabs.c:3382
+#: stabs.c:3372
 #, c-format
 msgid "Type file number %d out of range\n"
 msgstr ""
 
-#: stabs.c:3387
+#: stabs.c:3377
 #, c-format
 msgid "Type index number %d out of range\n"
 msgstr ""
 
-#: stabs.c:3474
+#: stabs.c:3464
 #, c-format
 msgid "Unrecognized XCOFF type %d\n"
 msgstr ""
 
-#: stabs.c:3773
+#: stabs.c:3763
 #, c-format
 msgid "bad mangled name `%s'\n"
 msgstr ""
 
-#: stabs.c:3869
+#: stabs.c:3859
 msgid "no argument types in mangled string\n"
 msgstr ""
 
@@ -4031,7 +4061,7 @@
 msgstr ""
 
 #: version.c:39
-msgid "Copyright 1997, 98, 99, 2000 Free Software Foundation, Inc.\n"
+msgid "Copyright 1997, 98, 99, 2000, 2001 Free Software Foundation, Inc.\n"
 msgstr ""
 
 #: version.c:40
diff --git a/binutils/readelf.c b/binutils/readelf.c
index d506925..18928c5 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -74,6 +74,7 @@
 #include "elf/cris.h"
 #include "elf/i860.h"
 #include "elf/x86-64.h"
+#include "elf/s390.h"
 
 #include "bucomm.h"
 #include "getopt.h"
@@ -104,6 +105,7 @@
 int 			do_reloc;
 int 			do_sections;
 int 			do_segments;
+int			do_unwind;
 int 			do_using_dynamic;
 int 			do_header;
 int 			do_dump;
@@ -150,6 +152,8 @@
 static const char *       get_sparc64_dynamic_type    PARAMS ((unsigned long));
 static const char *       get_parisc_dynamic_type     PARAMS ((unsigned long));
 static const char *       get_dynamic_type            PARAMS ((unsigned long));
+static int		  slurp_rela_relocs 	      PARAMS ((FILE *, unsigned long, unsigned long, Elf_Internal_Rela **, unsigned long *));
+static int		  slurp_rel_relocs 	      PARAMS ((FILE *, unsigned long, unsigned long, Elf_Internal_Rel **, unsigned long *));
 static int                dump_relocations            PARAMS ((FILE *, unsigned long, unsigned long, Elf_Internal_Sym *, unsigned long, char *, int));
 static char *             get_file_type               PARAMS ((unsigned));
 static char *             get_machine_name            PARAMS ((unsigned));
@@ -157,9 +161,11 @@
 static char *             get_machine_flags           PARAMS ((unsigned, unsigned));
 static const char *       get_mips_segment_type       PARAMS ((unsigned long));
 static const char *       get_parisc_segment_type     PARAMS ((unsigned long));
+static const char *       get_ia64_segment_type       PARAMS ((unsigned long));
 static const char *       get_segment_type            PARAMS ((unsigned long));
 static const char *       get_mips_section_type_name  PARAMS ((unsigned int));
 static const char *       get_parisc_section_type_name PARAMS ((unsigned int));
+static const char *       get_ia64_section_type_name  PARAMS ((unsigned int));
 static const char *       get_section_type_name       PARAMS ((unsigned int));
 static const char *       get_symbol_binding          PARAMS ((unsigned int));
 static const char *       get_symbol_type             PARAMS ((unsigned int));
@@ -171,6 +177,7 @@
 static int                process_file_header         PARAMS ((void));
 static int                process_program_headers     PARAMS ((FILE *));
 static int                process_section_headers     PARAMS ((FILE *));
+static int		  process_unwind	      PARAMS ((FILE *));
 static void               dynamic_segment_mips_val    PARAMS ((Elf_Internal_Dyn *));
 static void               dynamic_segment_parisc_val  PARAMS ((Elf_Internal_Dyn *));
 static int                process_dynamic_segment     PARAMS ((FILE *));
@@ -187,6 +194,7 @@
 static int                get_file_header             PARAMS ((FILE *));
 static Elf_Internal_Sym * get_32bit_elf_symbols       PARAMS ((FILE *, unsigned long, unsigned long));
 static Elf_Internal_Sym * get_64bit_elf_symbols       PARAMS ((FILE *, unsigned long, unsigned long));
+static const char *	  get_elf_section_flags	      PARAMS ((bfd_vma));
 static int *              get_dynamic_data            PARAMS ((FILE *, unsigned int));
 static int                get_32bit_dynamic_segment   PARAMS ((FILE *));
 static int                get_64bit_dynamic_segment   PARAMS ((FILE *));
@@ -244,7 +252,7 @@
 /* If we can support a 64 bit data type then BFD64 should be defined
    and sizeof (bfd_vma) == 8.  In this case when translating from an
    external 8 byte field to an internal field, we can assume that the
-   internal field is also 8 bytes wide and so we can extact all the data.
+   internal field is also 8 bytes wide and so we can extract all the data.
    If, however, BFD64 is not defined, then we must assume that the
    internal data structure only has 4 byte wide fields that are the
    equivalent of the 8 byte wide external counterparts, and so we must
@@ -576,6 +584,7 @@
     case EM_CRIS:
     case EM_860:
     case EM_X86_64:
+    case EM_S390:
       return TRUE;
 
     case EM_MMA:
@@ -602,6 +611,144 @@
     }
 }
 
+static int
+slurp_rela_relocs (file, rel_offset, rel_size, relasp, nrelasp)
+     FILE *file;
+     unsigned long rel_offset;
+     unsigned long rel_size;
+     Elf_Internal_Rela **relasp;
+     unsigned long *nrelasp;
+{
+  Elf_Internal_Rela *relas;
+  unsigned long nrelas;
+  unsigned int i;
+
+  if (is_32bit_elf)
+    {
+      Elf32_External_Rela * erelas;
+
+      GET_DATA_ALLOC (rel_offset, rel_size, erelas,
+		      Elf32_External_Rela *, "relocs");
+
+      nrelas = rel_size / sizeof (Elf32_External_Rela);
+
+      relas = (Elf_Internal_Rela *)
+	malloc (nrelas * sizeof (Elf_Internal_Rela));
+
+      if (relas == NULL)
+	{
+	  error(_("out of memory parsing relocs"));
+	  return 0;
+	}
+
+      for (i = 0; i < nrelas; i++)
+	{
+	  relas[i].r_offset = BYTE_GET (erelas[i].r_offset);
+	  relas[i].r_info   = BYTE_GET (erelas[i].r_info);
+	  relas[i].r_addend = BYTE_GET (erelas[i].r_addend);
+	}
+
+      free (erelas);
+    }
+  else
+    {
+      Elf64_External_Rela * erelas;
+
+      GET_DATA_ALLOC (rel_offset, rel_size, erelas,
+		      Elf64_External_Rela *, "relocs");
+
+      nrelas = rel_size / sizeof (Elf64_External_Rela);
+
+      relas = (Elf_Internal_Rela *)
+	malloc (nrelas * sizeof (Elf_Internal_Rela));
+
+      if (relas == NULL)
+	{
+	  error(_("out of memory parsing relocs"));
+	  return 0;
+	}
+
+      for (i = 0; i < nrelas; i++)
+	{
+	  relas[i].r_offset = BYTE_GET8 (erelas[i].r_offset);
+	  relas[i].r_info   = BYTE_GET8 (erelas[i].r_info);
+	  relas[i].r_addend = BYTE_GET8 (erelas[i].r_addend);
+	}
+
+      free (erelas);
+    }
+  *relasp = relas;
+  *nrelasp = nrelas;
+  return 1;
+}
+
+static int
+slurp_rel_relocs (file, rel_offset, rel_size, relsp, nrelsp)
+     FILE *file;
+     unsigned long rel_offset;
+     unsigned long rel_size;
+     Elf_Internal_Rel **relsp;
+     unsigned long *nrelsp;
+{
+  Elf_Internal_Rel *rels;
+  unsigned long nrels;
+  unsigned int i;
+
+  if (is_32bit_elf)
+    {
+      Elf32_External_Rel * erels;
+
+      GET_DATA_ALLOC (rel_offset, rel_size, erels,
+		      Elf32_External_Rel *, "relocs");
+
+      nrels = rel_size / sizeof (Elf32_External_Rel);
+
+      rels = (Elf_Internal_Rel *) malloc (nrels * sizeof (Elf_Internal_Rel));
+
+      if (rels == NULL)
+	{
+	  error(_("out of memory parsing relocs"));
+	  return 0;
+	}
+
+      for (i = 0; i < nrels; i++)
+	{
+	  rels[i].r_offset = BYTE_GET (erels[i].r_offset);
+	  rels[i].r_info   = BYTE_GET (erels[i].r_info);
+	}
+
+      free (erels);
+    }
+  else
+    {
+      Elf64_External_Rel * erels;
+
+      GET_DATA_ALLOC (rel_offset, rel_size, erels,
+		      Elf64_External_Rel *, "relocs");
+
+      nrels = rel_size / sizeof (Elf64_External_Rel);
+
+      rels = (Elf_Internal_Rel *) malloc (nrels * sizeof (Elf_Internal_Rel));
+
+      if (rels == NULL)
+	{
+	  error(_("out of memory parsing relocs"));
+	  return 0;
+	}
+
+      for (i = 0; i < nrels; i++)
+	{
+	  rels[i].r_offset = BYTE_GET8 (erels[i].r_offset);
+	  rels[i].r_info   = BYTE_GET8 (erels[i].r_info);
+	}
+
+      free (erels);
+    }
+  *relsp = rels;
+  *nrelsp = nrels;
+  return 1;
+}
+
 /* Display the contents of the relocation data found at the specified offset.  */
 static int
 dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela)
@@ -623,123 +770,13 @@
 
   if (is_rela)
     {
-      if (is_32bit_elf)
-	{
-	  Elf32_External_Rela * erelas;
-
-	  GET_DATA_ALLOC (rel_offset, rel_size, erelas,
-			  Elf32_External_Rela *, "relocs");
-
-	  rel_size = rel_size / sizeof (Elf32_External_Rela);
-
-	  relas = (Elf_Internal_Rela *)
-	    malloc (rel_size * sizeof (Elf_Internal_Rela));
-
-	  if (relas == NULL)
-	    {
-	      error(_("out of memory parsing relocs"));
-	      return 0;
-	    }
-
-	  for (i = 0; i < rel_size; i++)
-	    {
-	      relas[i].r_offset = BYTE_GET (erelas[i].r_offset);
-	      relas[i].r_info   = BYTE_GET (erelas[i].r_info);
-	      relas[i].r_addend = BYTE_GET (erelas[i].r_addend);
-	    }
-
-	  free (erelas);
-
-	  rels = (Elf_Internal_Rel *) relas;
-	}
-      else
-	{
-	  Elf64_External_Rela * erelas;
-
-	  GET_DATA_ALLOC (rel_offset, rel_size, erelas,
-			  Elf64_External_Rela *, "relocs");
-
-	  rel_size = rel_size / sizeof (Elf64_External_Rela);
-
-	  relas = (Elf_Internal_Rela *)
-	    malloc (rel_size * sizeof (Elf_Internal_Rela));
-
-	  if (relas == NULL)
-	    {
-	      error(_("out of memory parsing relocs"));
-	      return 0;
-	    }
-
-	  for (i = 0; i < rel_size; i++)
-	    {
-	      relas[i].r_offset = BYTE_GET8 (erelas[i].r_offset);
-	      relas[i].r_info   = BYTE_GET8 (erelas[i].r_info);
-	      relas[i].r_addend = BYTE_GET8 (erelas[i].r_addend);
-	    }
-
-	  free (erelas);
-
-	  rels = (Elf_Internal_Rel *) relas;
-	}
+      if (!slurp_rela_relocs (file, rel_offset, rel_size, &relas, &rel_size))
+	return 0;
     }
   else
     {
-      if (is_32bit_elf)
-	{
-	  Elf32_External_Rel * erels;
-
-	  GET_DATA_ALLOC (rel_offset, rel_size, erels,
-			  Elf32_External_Rel *, "relocs");
-
-	  rel_size = rel_size / sizeof (Elf32_External_Rel);
-
-	  rels = (Elf_Internal_Rel *)
-	    malloc (rel_size * sizeof (Elf_Internal_Rel));
-
-	  if (rels == NULL)
-	    {
-	      error(_("out of memory parsing relocs"));
-	      return 0;
-	    }
-
-	  for (i = 0; i < rel_size; i++)
-	    {
-	      rels[i].r_offset = BYTE_GET (erels[i].r_offset);
-	      rels[i].r_info   = BYTE_GET (erels[i].r_info);
-	    }
-
-	  free (erels);
-
-	  relas = (Elf_Internal_Rela *) rels;
-	}
-      else
-	{
-	  Elf64_External_Rel * erels;
-
-	  GET_DATA_ALLOC (rel_offset, rel_size, erels,
-			  Elf64_External_Rel *, "relocs");
-
-	  rel_size = rel_size / sizeof (Elf64_External_Rel);
-
-	  rels = (Elf_Internal_Rel *)
-	    malloc (rel_size * sizeof (Elf_Internal_Rel));
-
-	  if (rels == NULL)
-	    {
-	      error(_("out of memory parsing relocs"));
-	      return 0;
-	    }
-
-	  for (i = 0; i < rel_size; i++)
-	    {
-	      rels[i].r_offset = BYTE_GET8 (erels[i].r_offset);
-	      rels[i].r_info   = BYTE_GET8 (erels[i].r_info);
-	    }
-
-	  free (erels);
-
-	  relas = (Elf_Internal_Rela *) rels;
-	}
+      if (!slurp_rel_relocs (file, rel_offset, rel_size, &rels, &rel_size))
+	return 0;
     }
 
   if (is_rela)
@@ -903,6 +940,10 @@
 	case EM_X86_64:
 	  rtype = elf_x86_64_reloc_type (type);
 	  break;
+
+        case EM_S390:
+          rtype = elf_s390_reloc_type (type);
+          break;
 	}
 
       if (rtype == NULL)
@@ -956,7 +997,10 @@
       putchar ('\n');
     }
 
-  free (relas);
+  if (is_rela)
+    free (relas);
+  else
+    free (rels);
 
   return 1;
 }
@@ -1280,6 +1324,7 @@
     case EM_HUANY:       	return "Harvard Universitys's machine-independent object format";
     case EM_PRISM:       	return "SiTera Prism";
     case EM_X86_64:		return "Advanced Micro Devices X86-64";
+    case EM_S390:               return "IBM S/390";
     default:
       sprintf (buff, _("<unknown>: %x"), e_machine);
       return buff;
@@ -1314,12 +1359,13 @@
   switch (eabi)
     {
     default:
-      strcat (buf, ", <unknown EABI>");
+      strcat (buf, ", <unrecognised EABI>");
       if (e_flags)
 	unknown = 1;
       break;
 
     case EF_ARM_EABI_VER1:
+      strcat (buf, ", Version1 EABI");
       while (e_flags)
 	{
 	  unsigned flag;
@@ -1330,7 +1376,7 @@
 
 	  switch (flag)
 	    {
-	    case EF_ARM_SYMSARESORTED: /* Conflicts with EF_INTERWORK.  */
+	    case EF_ARM_SYMSARESORTED: /* Conflicts with EF_ARM_INTERWORK.  */
 	      strcat (buf, ", sorted symbol tables");
 	      break;
 
@@ -1341,7 +1387,8 @@
 	}
       break;
 
-    case EF_ARM_EABI_UNKNOWN:
+    case EF_ARM_EABI_VER2:
+      strcat (buf, ", Version2 EABI");
       while (e_flags)
 	{
 	  unsigned flag;
@@ -1352,35 +1399,66 @@
 
 	  switch (flag)
 	    {
-	    case EF_INTERWORK:
+	    case EF_ARM_SYMSARESORTED: /* Conflicts with EF_ARM_INTERWORK.  */
+	      strcat (buf, ", sorted symbol tables");
+	      break;
+
+	    case EF_ARM_DYNSYMSUSESEGIDX:
+	      strcat (buf, ", dynamic symbols use segment index");
+	      break;
+
+	    case EF_ARM_MAPSYMSFIRST:
+	      strcat (buf, ", mapping symbols precede others");
+	      break;
+
+	    default:
+	      unknown = 1;
+	      break;
+	    }
+	}
+      break;
+
+    case EF_ARM_EABI_UNKNOWN:
+      strcat (buf, ", GNU EABI");
+      while (e_flags)
+	{
+	  unsigned flag;
+
+	  /* Process flags one bit at a time.  */
+	  flag = e_flags & - e_flags;
+	  e_flags &= ~ flag;
+
+	  switch (flag)
+	    {
+	    case EF_ARM_INTERWORK:
 	      strcat (buf, ", interworking enabled");
 	      break;
 
-	    case EF_APCS_26:
+	    case EF_ARM_APCS_26:
 	      strcat (buf, ", uses APCS/26");
 	      break;
 
-	    case EF_APCS_FLOAT:
+	    case EF_ARM_APCS_FLOAT:
 	      strcat (buf, ", uses APCS/float");
 	      break;
 
-	    case EF_PIC:
+	    case EF_ARM_PIC:
 	      strcat (buf, ", position independent");
 	      break;
 
-	    case EF_ALIGN8:
+	    case EF_ARM_ALIGN8:
 	      strcat (buf, ", 8 bit structure alignment");
 	      break;
 
-	    case EF_NEW_ABI:
+	    case EF_ARM_NEW_ABI:
 	      strcat (buf, ", uses new ABI");
 	      break;
 
-	    case EF_OLD_ABI:
+	    case EF_ARM_OLD_ABI:
 	      strcat (buf, ", uses old ABI");
 	      break;
 
-	    case EF_SOFT_FLOAT:
+	    case EF_ARM_SOFT_FLOAT:
 	      strcat (buf, ", software FP");
 	      break;
 
@@ -1565,6 +1643,21 @@
 	  if ((e_flags & EF_PICOJAVA_GNUCALLS) == EF_PICOJAVA_GNUCALLS)
 	    strcat (buf, ", gnu calling convention");
 	  break;
+
+	case EM_IA_64:
+	  if ((e_flags & EF_IA_64_ABI64))
+	    strcat (buf, ", 64-bit");
+	  else
+	    strcat (buf, ", 32-bit");
+	  if ((e_flags & EF_IA_64_REDUCEDFP))
+	    strcat (buf, ", reduced fp model");
+	  if ((e_flags & EF_IA_64_NOFUNCDESC_CONS_GP))
+	    strcat (buf, ", no function descriptors, constant gp");
+	  else if ((e_flags & EF_IA_64_CONS_GP))
+	    strcat (buf, ", constant gp");
+	  if ((e_flags & EF_IA_64_ABSOLUTE))
+	    strcat (buf, ", absolute");
+	  break;
 	}
     }
 
@@ -1618,6 +1711,21 @@
 }
 
 static const char *
+get_ia64_segment_type (type)
+     unsigned long type;
+{
+  switch (type)
+    {
+    case PT_IA_64_ARCHEXT:	return "IA_64_ARCHEXT";
+    case PT_IA_64_UNWIND:	return "IA_64_UNWIND";
+    default:
+      break;
+    }
+
+  return NULL;
+}
+
+static const char *
 get_segment_type (p_type)
      unsigned long p_type;
 {
@@ -1647,6 +1755,9 @@
 	    case EM_PARISC:
 	      result = get_parisc_segment_type (p_type);
 	      break;
+	    case EM_IA_64:
+	      result = get_ia64_segment_type (p_type);
+	      break;
 	    default:
 	      result = NULL;
 	      break;
@@ -1750,6 +1861,20 @@
 }
 
 static const char *
+get_ia64_section_type_name (sh_type)
+     unsigned int sh_type;
+{
+  switch (sh_type)
+    {
+    case SHT_IA_64_EXT:		return "IA_64_EXT";
+    case SHT_IA_64_UNWIND:	return "IA_64_UNWIND";
+    default:
+      break;
+    }
+  return NULL;
+}
+
+static const char *
 get_section_type_name (sh_type)
      unsigned int sh_type;
 {
@@ -1796,6 +1921,9 @@
 	    case EM_PARISC:
 	      result = get_parisc_section_type_name (sh_type);
 	      break;
+	    case EM_IA_64:
+	      result = get_ia64_section_type_name (sh_type);
+	      break;
 	    default:
 	      result = NULL;
 	      break;
@@ -1837,6 +1965,7 @@
   {"use-dynamic",      no_argument, 0, 'D'},
   {"hex-dump",         required_argument, 0, 'x'},
   {"debug-dump",       optional_argument, 0, 'w'},
+  {"unwind",	       no_argument, 0, 'u'},
 #ifdef SUPPORT_DISASSEMBLY
   {"instruction-dump", required_argument, 0, 'i'},
 #endif
@@ -1861,6 +1990,7 @@
   fprintf (stdout, _("  -s or --syms or --symbols Display the symbol table\n"));
   fprintf (stdout, _("  -n or --notes             Display the core notes (if present)\n"));
   fprintf (stdout, _("  -r or --relocs            Display the relocations (if present)\n"));
+  fprintf (stdout, _("  -u or --unwind            Display the unwind info (if present)\n"));
   fprintf (stdout, _("  -d or --dynamic           Display the dynamic segment (if present)\n"));
   fprintf (stdout, _("  -V or --version-info      Display the version sections (if present)\n"));
   fprintf (stdout, _("  -A or --arch-specific     Display architecture specific information (if any).\n"));
@@ -1923,7 +2053,7 @@
     usage ();
 
   while ((c = getopt_long
-	  (argc, argv, "ersahnldSDAIw::x:i:vV", options, NULL)) != EOF)
+	  (argc, argv, "ersuahnldSDAIw::x:i:vV", options, NULL)) != EOF)
     {
       char *    cp;
       int	section;
@@ -1940,6 +2070,7 @@
 	case 'a':
 	  do_syms ++;
 	  do_reloc ++;
+	  do_unwind ++;
 	  do_dynamic ++;
 	  do_header ++;
 	  do_sections ++;
@@ -1963,6 +2094,9 @@
 	case 'r':
 	  do_reloc ++;
 	  break;
+	case 'u':
+	  do_unwind ++;
+	  break;
 	case 'h':
 	  do_header ++;
 	  break;
@@ -2065,7 +2199,7 @@
 	}
     }
 
-  if (!do_dynamic && !do_syms && !do_reloc && !do_sections
+  if (!do_dynamic && !do_syms && !do_reloc && !do_unwind && !do_sections
       && !do_segments && !do_header && !do_dump && !do_version
       && !do_histogram && !do_debugging && !do_arch && !do_notes)
     usage ();
@@ -2976,6 +3110,365 @@
   return 1;
 }
 
+#include "unwind-ia64.h"
+
+/* An absolute address consists of a section and an offset.  If the
+   section is NULL, the offset itself is the address, otherwise, the
+   address equals to LOAD_ADDRESS(section) + offset.  */
+
+struct absaddr
+  {
+    unsigned short section;
+    bfd_vma offset;
+  };
+
+struct unw_aux_info
+  {
+    struct unw_table_entry
+      {
+	struct absaddr    start;
+	struct absaddr    end;
+	struct absaddr    info;
+      }
+    *table;				/* Unwind table.  */
+    unsigned long         table_len;	/* Length of unwind table.  */
+    unsigned char *       info;		/* Unwind info.  */
+    unsigned long         info_size;	/* Size of unwind info.  */
+    bfd_vma               info_addr;	/* starting address of unwind info.  */
+    bfd_vma               seg_base;	/* Starting address of segment.  */
+    Elf_Internal_Sym *    symtab;	/* The symbol table.  */
+    unsigned              long nsyms;	/* Number of symbols.  */
+    const char *          strtab;	/* The string table.  */
+    unsigned long         strtab_size;	/* Size of string table.  */
+  };
+
+static void find_symbol_for_address PARAMS ((struct unw_aux_info *,
+					     struct absaddr, const char **,
+					     bfd_vma *));
+static void dump_ia64_unwind PARAMS ((struct unw_aux_info *));
+static int  slurp_ia64_unwind_table PARAMS ((FILE *, struct unw_aux_info *,
+					    Elf32_Internal_Shdr *));
+
+static void
+find_symbol_for_address (aux, addr, symname, offset)
+     struct unw_aux_info *aux;
+     struct absaddr addr;
+     const char **symname;
+     bfd_vma *offset;
+{
+  bfd_vma dist = (bfd_vma) 0x100000;
+  Elf_Internal_Sym *sym, *best = NULL;
+  unsigned long i;
+
+  for (i = 0, sym = aux->symtab; i < aux->nsyms; ++i, ++sym)
+    {
+      if (ELF_ST_TYPE (sym->st_info) == STT_FUNC
+	  && sym->st_name != 0
+	  && (addr.section == SHN_UNDEF || addr.section == sym->st_shndx)
+	  && addr.offset >= sym->st_value
+	  && addr.offset - sym->st_value < dist)
+	{
+	  best = sym;
+	  dist = addr.offset - sym->st_value;
+	  if (!dist)
+	    break;
+	}
+    }
+  if (best)
+    {
+      *symname = (best->st_name >= aux->strtab_size
+		  ? "<corrupt>" : aux->strtab + best->st_name);
+      *offset = dist;
+      return;
+    }
+  *symname = NULL;
+  *offset = addr.offset;
+}
+
+static void
+dump_ia64_unwind (aux)
+     struct unw_aux_info *aux;
+{
+  bfd_vma addr_size;
+  struct unw_table_entry * tp;
+  int in_body;
+  
+  addr_size = is_32bit_elf ? 4 : 8;
+
+  for (tp = aux->table; tp < aux->table + aux->table_len; ++tp)
+    {
+      bfd_vma stamp;
+      bfd_vma offset;
+      const unsigned char * dp;
+      const unsigned char * head;
+      const char * procname;
+
+      find_symbol_for_address (aux, tp->start, &procname, &offset);
+
+      fputs ("\n<", stdout);
+
+      if (procname)
+	{
+	  fputs (procname, stdout);
+
+	  if (offset)
+	    printf ("+%lx", (unsigned long) offset);
+	}
+
+      fputs (">: [", stdout);
+      print_vma (tp->start.offset, PREFIX_HEX);
+      fputc ('-', stdout);
+      print_vma (tp->end.offset, PREFIX_HEX);
+      printf ("), info at +0x%lx\n",
+	      (unsigned long) (tp->info.offset - aux->seg_base));
+
+      head = aux->info + (tp->info.offset - aux->info_addr);
+      stamp = BYTE_GET8 ((unsigned char *) head);
+
+      printf ("  v%u, flags=0x%lx (%s%s ), len=%lu bytes\n",
+	      (unsigned) UNW_VER (stamp),
+	      (unsigned long) ((stamp & UNW_FLAG_MASK) >> 32),
+	      UNW_FLAG_EHANDLER (stamp) ? " ehandler" : "",
+	      UNW_FLAG_UHANDLER (stamp) ? " uhandler" : "",
+	      (unsigned long) (addr_size * UNW_LENGTH (stamp)));
+
+      if (UNW_VER (stamp) != 1)
+	{
+	  printf ("\tUnknown version.\n");
+	  continue;
+	}
+
+      in_body = 0;
+      for (dp = head + 8; dp < head + 8 + addr_size * UNW_LENGTH (stamp);)
+	dp = unw_decode (dp, in_body, & in_body);
+    }
+}
+
+static int
+slurp_ia64_unwind_table (file, aux, sec)
+     FILE *file;
+     struct unw_aux_info *aux;
+     Elf32_Internal_Shdr *sec;
+{
+  unsigned long size, addr_size, nrelas, i;
+  Elf_Internal_Phdr *prog_hdrs, *seg;
+  struct unw_table_entry *tep;
+  Elf32_Internal_Shdr *relsec;
+  Elf_Internal_Rela *rela, *rp;
+  unsigned char *table, *tp;
+  Elf_Internal_Sym *sym;
+  const char *relname;
+  int result;
+
+  addr_size = is_32bit_elf ? 4 : 8;
+
+  /* First, find the starting address of the segment that includes
+     this section: */
+
+  if (elf_header.e_phnum)
+    {
+      prog_hdrs = (Elf_Internal_Phdr *)
+	xmalloc (elf_header.e_phnum * sizeof (Elf_Internal_Phdr));
+
+      if (is_32bit_elf)
+	result = get_32bit_program_headers (file, prog_hdrs);
+      else
+	result = get_64bit_program_headers (file, prog_hdrs);
+
+      if (!result)
+	{
+	  free (prog_hdrs);
+	  return 0;
+	}
+
+      for (seg = prog_hdrs; seg < prog_hdrs + elf_header.e_phnum; ++seg)
+	{
+	  if (seg->p_type != PT_LOAD)
+	    continue;
+
+	  if (sec->sh_addr >= seg->p_vaddr
+	      && (sec->sh_addr + sec->sh_size <= seg->p_vaddr + seg->p_memsz))
+	    {
+	      aux->seg_base = seg->p_vaddr;
+	      break;
+	    }
+	}
+
+      free (prog_hdrs);
+    }
+
+  /* Second, build the unwind table from the contents of the unwind section:  */
+  size = sec->sh_size;
+  GET_DATA_ALLOC (sec->sh_offset, size, table, char *, "unwind table");
+
+  tep = aux->table = xmalloc (size / (3 * addr_size) * sizeof (aux->table[0]));
+  for (tp = table; tp < table + size; tp += 3 * addr_size, ++ tep)
+    {
+      tep->start.section = SHN_UNDEF;
+      tep->end.section   = SHN_UNDEF;
+      tep->info.section  = SHN_UNDEF;
+      if (is_32bit_elf)
+	{
+	  tep->start.offset = byte_get ((unsigned char *) tp + 0, 4);
+	  tep->end.offset   = byte_get ((unsigned char *) tp + 4, 4);
+	  tep->info.offset  = byte_get ((unsigned char *) tp + 8, 4);
+	}
+      else
+	{
+	  tep->start.offset = BYTE_GET8 ((unsigned char *) tp +  0);
+	  tep->end.offset   = BYTE_GET8 ((unsigned char *) tp +  8);
+	  tep->info.offset  = BYTE_GET8 ((unsigned char *) tp + 16);
+	}
+      tep->start.offset += aux->seg_base;
+      tep->end.offset   += aux->seg_base;
+      tep->info.offset  += aux->seg_base;
+    }
+  free (table);
+
+  /* Third, apply any relocations to the unwind table: */
+
+  for (relsec = section_headers;
+       relsec < section_headers + elf_header.e_shnum;
+       ++relsec)
+    {
+      if (relsec->sh_type != SHT_RELA
+	  || section_headers + relsec->sh_info != sec)
+	continue;
+
+      if (!slurp_rela_relocs (file, relsec->sh_offset, relsec->sh_size,
+			      & rela, & nrelas))
+	return 0;
+
+      for (rp = rela; rp < rela + nrelas; ++rp)
+	{
+	  if (is_32bit_elf)
+	    {
+	      relname = elf_ia64_reloc_type (ELF32_R_TYPE (rp->r_info));
+	      sym = aux->symtab + ELF32_R_SYM (rp->r_info);
+
+	      if (ELF32_ST_TYPE (sym->st_info) != STT_SECTION)
+		{
+		  warn (_("Skipping unexpected symbol type %u"),
+			ELF32_ST_TYPE (sym->st_info));
+		  continue;
+		}
+	    }
+	  else
+	    {
+	      relname = elf_ia64_reloc_type (ELF64_R_TYPE (rp->r_info));
+	      sym = aux->symtab + ELF64_R_SYM (rp->r_info);
+
+	      if (ELF64_ST_TYPE (sym->st_info) != STT_SECTION)
+		{
+		  warn (_("Skipping unexpected symbol type %u"),
+			ELF64_ST_TYPE (sym->st_info));
+		  continue;
+		}
+	    }
+
+	  if (strncmp (relname, "R_IA64_SEGREL", 13) != 0)
+	    {
+	      warn (_("Skipping unexpected relocation type %s"), relname);
+	      continue;
+	    }
+
+	  i = rp->r_offset / (3 * addr_size);
+
+	  switch (rp->r_offset/addr_size % 3)
+	    {
+	    case 0:
+	      aux->table[i].start.section = sym->st_shndx;
+	      aux->table[i].start.offset += rp->r_addend;
+	      break;
+	    case 1:
+	      aux->table[i].end.section   = sym->st_shndx;
+	      aux->table[i].end.offset   += rp->r_addend;
+	      break;
+	    case 2:
+	      aux->table[i].info.section  = sym->st_shndx;
+	      aux->table[i].info.offset  += rp->r_addend;
+	      break;
+	    default:
+	      break;
+	    }
+	}
+
+      free (rela);
+    }
+
+  aux->table_len = size / (3 * addr_size);
+  return 1;
+}
+
+static int
+process_unwind (file)
+     FILE * file;
+{
+  Elf32_Internal_Shdr *sec, *unwsec = NULL, *strsec;
+  unsigned long i, addr_size;
+  struct unw_aux_info aux;
+
+  memset (& aux, 0, sizeof (aux));
+
+  addr_size = is_32bit_elf ? 4 : 8;
+
+  if (!do_unwind)
+    return 1;
+
+  for (i = 0, sec = section_headers; i < elf_header.e_shnum; ++i, ++sec)
+    {
+      if (sec->sh_type == SHT_SYMTAB)
+	{
+	  aux.nsyms = sec->sh_size / sec->sh_entsize;
+	  aux.symtab = GET_ELF_SYMBOLS (file, sec->sh_offset, aux.nsyms);
+
+	  strsec = section_headers + sec->sh_link;
+	  aux.strtab_size = strsec->sh_size;
+	  GET_DATA_ALLOC (strsec->sh_offset, aux.strtab_size,
+			  (char *) aux.strtab, char *, "string table");
+	}
+      else if (sec->sh_type == SHT_IA_64_UNWIND)
+	unwsec = sec;
+      else if (strcmp (SECTION_NAME (sec), ELF_STRING_ia64_unwind_info) == 0)
+	{
+	  aux.info_size = sec->sh_size;
+	  aux.info_addr = sec->sh_addr;
+	  GET_DATA_ALLOC (sec->sh_offset, aux.info_size, aux.info,
+			  char *, "unwind info");
+	}
+    }
+
+  if (unwsec)
+    {
+      printf (_("\nUnwind section "));
+
+      if (string_table == NULL)
+	printf ("%d", unwsec->sh_name);
+      else
+	printf ("'%s'", SECTION_NAME (unwsec));
+
+      printf (_(" at offset 0x%lx contains %lu entries:\n"),
+	      unwsec->sh_offset, (unsigned long) (unwsec->sh_size / (3 * addr_size)));
+
+      (void) slurp_ia64_unwind_table (file, & aux, unwsec);
+
+      if (aux.table_len > 0)
+	dump_ia64_unwind (& aux);
+    }
+  else
+    printf (_("\nThere are no unwind sections in this file.\n"));
+
+  if (aux.table)
+    free ((char *) aux.table);
+  if (aux.info)
+    free ((char *) aux.info);
+  if (aux.symtab)
+    free (aux.symtab);
+  if (aux.strtab)
+    free ((char *) aux.strtab);
+
+  return 1;
+}
 
 static void
 dynamic_segment_mips_val (entry)
@@ -7896,6 +8389,8 @@
 
   process_relocs (file);
 
+  process_unwind (file);
+
   process_symbol_table (file);
 
   process_syminfo (file);
diff --git a/binutils/testsuite/ChangeLog b/binutils/testsuite/ChangeLog
index 5f12ea7..ae14227 100644
--- a/binutils/testsuite/ChangeLog
+++ b/binutils/testsuite/ChangeLog
@@ -1,3 +1,13 @@
+2001-02-11  H.J. Lu  <hjl@gnu.org>
+
+	* config/default.exp: Set up gcc_gas_flag.
+
+	* binutils-all/objcopy.exp (copy_setup): Process gcc_gas_flag
+	for Linux only.
+
+	* binutils-all/testprog.c: Include <string.h> and don't use
+	exit ().
+
 2001-01-16  Matthew Green  <mrg@redhat.com>
 
 	* binutils-all/readelf.s-64: Match readelf -S output.
diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp
index 430b7fe..85a320b 100644
--- a/binutils/testsuite/binutils-all/objcopy.exp
+++ b/binutils/testsuite/binutils-all/objcopy.exp
@@ -398,6 +398,7 @@
 proc copy_setup { } {
     global srcdir
     global subdir
+    global gcc_gas_flag
     
     set res [build_wrapper testglue.o];
     set flags { debug };
@@ -409,6 +410,11 @@
 	set add_libs "";
     }
 
+    if { [istarget *-*-linux*] } {
+	foreach i $gcc_gas_flag {
+	    set flags "additional_flags=$i $flags"
+	}
+    }
     if { [target_compile "$srcdir/$subdir/testprog.c $add_libs" tmpdir/testprog executable $flags]  != "" } {
 	return 2
     }
diff --git a/binutils/testsuite/binutils-all/readelf.wi b/binutils/testsuite/binutils-all/readelf.wi
index 51668a7..d76e649 100644
--- a/binutils/testsuite/binutils-all/readelf.wi
+++ b/binutils/testsuite/binutils-all/readelf.wi
@@ -1,6 +1,6 @@
 The section .debug_info contains:
 
-  Compilation Unit:
+  Compilation Unit @ .*:
    Length:        .*
    Version:       2
    Abbrev Offset: 0
diff --git a/binutils/testsuite/binutils-all/testprog.c b/binutils/testsuite/binutils-all/testprog.c
index c2b1856..57de461 100644
--- a/binutils/testsuite/binutils-all/testprog.c
+++ b/binutils/testsuite/binutils-all/testprog.c
@@ -1,6 +1,7 @@
 /* This program is used to test objcopy and strip.  */
 
 #include <stdio.h>
+#include <string.h>
 
 int common;
 int global = 1;
@@ -22,9 +23,9 @@
       || strcmp (string, "string") != 0)
     {
       printf ("failed\n");
-      exit (1);
+      return (1);
     }
 
   printf ("ok\n");
-  exit (0);
+  return (0);
 }
diff --git a/binutils/testsuite/config/default.exp b/binutils/testsuite/config/default.exp
index 2a2802e..6b0039a 100644
--- a/binutils/testsuite/config/default.exp
+++ b/binutils/testsuite/config/default.exp
@@ -70,6 +70,20 @@
 
 if ![file isdirectory tmpdir] {catch "exec mkdir tmpdir" status}
 
+# Make a symlink from tmpdir/gas/as and tmpdir/gas/ld to the assembler
+# and linker in the build tree, so that we can use a -B option to gcc
+# to force it to use the newly built assembler/linker.
+if {![file isdirectory tmpdir/gas]} then {
+    catch "exec mkdir tmpdir/gas" status
+    if {[file isfile ../gas/as-new]} then {
+	catch "exec ln -s ../../../gas/as-new tmpdir/gas/as" status
+    }
+    if {[file isfile ../ld/ld-new]} then {
+	catch "exec ln -s ../../../ld/ld-new tmpdir/gas/ld" status
+    }
+}
+set gcc_gas_flag "-B[pwd]/tmpdir/gas/"
+
 #
 # binutils_run
 #	run a program, returning the output
diff --git a/binutils/unwind-ia64.c b/binutils/unwind-ia64.c
new file mode 100644
index 0000000..826de56
--- /dev/null
+++ b/binutils/unwind-ia64.c
@@ -0,0 +1,1108 @@
+/* unwind-ia64.c -- utility routines to dump IA-64 unwind info for readelf.
+   Copyright (c) 2000, 2001 Free Software Foundation, Inc.
+	Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
+
+This file is part of GNU Binutils.
+
+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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#include "unwind-ia64.h"
+#include <stdio.h>
+#include <string.h>
+
+#if __GNUC__ >= 2
+/* Define BFD64 here, even if our default architecture is 32 bit ELF
+   as this will allow us to read in and parse 64bit and 32bit ELF files.
+   Only do this if we belive that the compiler can support a 64 bit
+   data type.  For now we only rely on GCC being able to do this.  */
+#define BFD64
+#endif
+#include "bfd.h"
+
+static bfd_vma unw_rlen = 0;
+
+static void
+unw_print_brmask (cp, mask)
+     char * cp;
+     unsigned char mask;
+{
+  char *sep = "";
+  int i;
+
+  for (i = 0; mask && (i < 5); ++i)
+    {
+      if (mask & 1)
+	{
+	  cp += sprintf (cp, "%sb%u", sep, i + 1);
+	  sep = ",";
+	}
+      mask >>= 1;
+    }
+  *cp = '\0';
+}
+
+static void
+unw_print_grmask (cp, mask)
+     char * cp;
+     unsigned char mask;
+{
+  char *sep = "";
+  int i;
+
+  *cp = '\0';
+  for (i = 0; i < 4; ++i)
+    {
+      if (mask & 1)
+	{
+	  cp += sprintf (cp, "%sr%u", sep, i + 4);
+	  sep = ",";
+	}
+      mask >>= 1;
+    }
+}
+
+static void
+unw_print_frmask (cp, mask)
+     char * cp;
+     unsigned long mask;
+{
+  char *sep = "";
+  int i;
+
+  *cp = '\0';
+  for (i = 0; i < 20; ++i)
+    {
+      if (mask & 1)
+	{
+	  cp += sprintf (cp, "%sf%u", sep, (i < 4) ? (i + 2) : (i + 12));
+	  sep = ",";
+	}
+      mask >>= 1;
+    }
+}
+
+static void
+unw_print_abreg (cp, abreg)
+     char * cp;
+     unsigned char abreg;
+{
+  static const char *special_reg[16] =
+  {
+    "pr", "psp", "@priunat", "rp", "ar.bsp", "ar.bspstore", "ar.rnat",
+    "ar.unat", "ar.fpsr", "ar.pfs", "ar.lc",
+    "Unknown11", "Unknown12", "Unknown13", "Unknown14", "Unknown15"
+  };
+
+  switch ((abreg >> 5) & 0x3)
+    {
+    case 0: /* gr */
+      sprintf (cp, "r%u", (abreg & 0x1f));
+      break;
+
+    case 1: /* fr */
+      sprintf (cp, "f%u", (abreg & 0x1f));
+      break;
+
+    case 2: /* br */
+      sprintf (cp, "b%u", (abreg & 0x1f));
+      break;
+
+    case 3: /* special */
+      strcpy (cp, special_reg[abreg & 0xf]);
+      break;
+    }
+}
+
+static void
+unw_print_xyreg (cp, x, ytreg)
+     char *        cp;
+     unsigned char x;
+     unsigned char ytreg;
+{
+  switch ((x << 1) | ((ytreg >> 7) & 1))
+    {
+    case 0: /* gr */
+      sprintf (cp, "r%u", (ytreg & 0x1f));
+      break;
+
+    case 1: /* fr */
+      sprintf (cp, "f%u", (ytreg & 0x1f));
+      break;
+
+    case 2: /* br */
+      sprintf (cp, "b%u", (ytreg & 0x1f));
+      break;
+    }
+}
+
+#define UNW_REG_BSP		"bsp"
+#define UNW_REG_BSPSTORE	"bspstore"
+#define UNW_REG_FPSR		"fpsr"
+#define UNW_REG_LC		"lc"
+#define UNW_REG_PFS		"pfs"
+#define UNW_REG_PR		"pr"
+#define UNW_REG_PSP		"psp"
+#define UNW_REG_RNAT		"rnat"
+#define UNW_REG_RP		"rp"
+#define UNW_REG_UNAT		"unat"
+
+typedef bfd_vma unw_word;
+
+#define UNW_DEC_BAD_CODE(code)			\
+    printf ("Unknown code 0x%02x\n", code)
+
+#define UNW_DEC_PROLOGUE(fmt, body, rlen, arg)					\
+  do										\
+    {										\
+      unw_rlen = rlen;								\
+      *(int *)arg = body;							\
+      printf ("    %s:%s(rlen=%lu)\n",						\
+	      fmt, body ? "body" : "prologue", (unsigned long) rlen);		\
+    }										\
+  while (0)
+
+#define UNW_DEC_PROLOGUE_GR(fmt, rlen, mask, grsave, arg)			\
+  do										\
+    {										\
+      char regname[16], maskstr[64], *sep;					\
+										\
+      unw_rlen = rlen;								\
+      *(int *)arg = 0;								\
+										\
+      maskstr[0] = '\0';							\
+      sep = "";									\
+      if (mask & 0x8)								\
+	{									\
+	  strcat (maskstr, "rp");						\
+	  sep = ",";								\
+	}									\
+      if (mask & 0x4)								\
+	{									\
+	  strcat (maskstr, sep);						\
+	  strcat (maskstr, "ar.pfs");						\
+	  sep = ",";								\
+	}									\
+      if (mask & 0x2)								\
+	{									\
+	  strcat (maskstr, sep);						\
+	  strcat (maskstr, "psp");						\
+	  sep = ",";								\
+	}									\
+      if (mask & 0x1)								\
+	{									\
+	  strcat (maskstr, sep);						\
+	  strcat (maskstr, "pr");						\
+	}									\
+      sprintf (regname, "r%u", grsave);						\
+      printf ("    %s:prologue_gr(mask=[%s],grsave=%s,rlen=%lu)\n",		\
+	      fmt, maskstr, regname, (unsigned long) rlen);			\
+    }										\
+  while (0)
+
+#define UNW_DEC_FR_MEM(fmt, frmask, arg)			\
+  do								\
+    {								\
+      char frstr[200];						\
+								\
+      unw_print_frmask (frstr, frmask);				\
+      printf ("\t%s:fr_mem(frmask=[%s])\n", fmt, frstr);	\
+    }								\
+  while (0)
+
+#define UNW_DEC_GR_MEM(fmt, grmask, arg)			\
+  do								\
+    {								\
+      char grstr[200];						\
+								\
+      unw_print_grmask (grstr, grmask);				\
+      printf ("\t%s:gr_mem(grmask=[%s])\n", fmt, grstr);	\
+    }								\
+  while (0)
+
+#define UNW_DEC_FRGR_MEM(fmt, grmask, frmask, arg)			     	\
+  do										\
+    {									     	\
+      char frstr[200], grstr[20];						\
+									     	\
+      unw_print_grmask (grstr, grmask);					     	\
+      unw_print_frmask (frstr, frmask);					     	\
+      printf ("\t%s:frgr_mem(grmask=[%s],frmask=[%s])\n", fmt, grstr, frstr);	\
+    }										\
+  while (0)
+
+#define UNW_DEC_BR_MEM(fmt, brmask, arg)				\
+  do									\
+    {									\
+      char brstr[20];							\
+									\
+      unw_print_brmask (brstr, brmask);					\
+      printf ("\t%s:br_mem(brmask=[%s])\n", fmt, brstr);		\
+    }									\
+  while (0)
+
+#define UNW_DEC_BR_GR(fmt, brmask, gr, arg)				\
+  do									\
+    {									\
+      char brstr[20];							\
+									\
+      unw_print_brmask (brstr, brmask);					\
+      printf ("\t%s:br_gr(brmask=[%s],gr=r%u)\n", fmt, brstr, gr);	\
+    }									\
+  while (0)
+
+#define UNW_DEC_REG_GR(fmt, src, dst, arg)		\
+  printf ("\t%s:%s_gr(reg=r%u)\n", fmt, src, dst)
+
+#define UNW_DEC_RP_BR(fmt, dst, arg)		\
+  printf ("\t%s:rp_br(reg=b%u)\n", fmt, dst)
+
+#define UNW_DEC_REG_WHEN(fmt, reg, t, arg)				\
+  printf ("\t%s:%s_when(t=%lu)\n", fmt, reg, (unsigned long) t)
+
+#define UNW_DEC_REG_SPREL(fmt, reg, spoff, arg)		\
+  printf ("\t%s:%s_sprel(spoff=0x%lx)\n",		\
+	  fmt, reg, 4*(unsigned long)spoff)
+
+#define UNW_DEC_REG_PSPREL(fmt, reg, pspoff, arg)		\
+  printf ("\t%s:%s_psprel(pspoff=0x10-0x%lx)\n",		\
+	  fmt, reg, 4*(unsigned long)pspoff)
+
+#define UNW_DEC_GR_GR(fmt, grmask, gr, arg)				\
+  do									\
+    {									\
+      char grstr[20];							\
+									\
+      unw_print_grmask (grstr, grmask);					\
+      printf ("\t%s:gr_gr(grmask=[%s],r%u)\n", fmt, grstr, gr);		\
+    }									\
+  while (0)
+
+#define UNW_DEC_ABI(fmt, abi, context, arg)			\
+  do								\
+    {								\
+      static const char *abiname[] =				\
+      {								\
+	"@svr4", "@hpux", "@nt"					\
+      };							\
+      char buf[20];						\
+      const char *abistr = buf;					\
+								\
+      if (abi < 3)						\
+	abistr = abiname[abi];					\
+      else							\
+	sprintf (buf, "0x%x", abi);				\
+      printf ("\t%s:unwabi(abi=%s,context=0x%02x)\n",		\
+	      fmt, abistr, context);				\
+    }								\
+  while (0)
+
+#define UNW_DEC_PRIUNAT_GR(fmt, r, arg)		\
+  printf ("\t%s:priunat_gr(reg=r%u)\n", fmt, r)
+
+#define UNW_DEC_PRIUNAT_WHEN_GR(fmt, t, arg)				\
+  printf ("\t%s:priunat_when_gr(t=%lu)\n", fmt, (unsigned long) t)
+
+#define UNW_DEC_PRIUNAT_WHEN_MEM(fmt, t, arg)				\
+  printf ("\t%s:priunat_when_mem(t=%lu)\n", fmt, (unsigned long) t)
+
+#define UNW_DEC_PRIUNAT_PSPREL(fmt, pspoff, arg)		\
+  printf ("\t%s:priunat_psprel(pspoff=0x10-0x%lx)\n",		\
+	  fmt, 4*(unsigned long)pspoff)
+
+#define UNW_DEC_PRIUNAT_SPREL(fmt, spoff, arg)		\
+  printf ("\t%s:priunat_sprel(spoff=0x%lx)\n",		\
+	  fmt, 4*(unsigned long)spoff)
+
+#define UNW_DEC_MEM_STACK_F(fmt, t, size, arg)		\
+  printf ("\t%s:mem_stack_f(t=%lu,size=%lu)\n",		\
+	  fmt, (unsigned long) t, 16*(unsigned long)size)
+
+#define UNW_DEC_MEM_STACK_V(fmt, t, arg)				\
+  printf ("\t%s:mem_stack_v(t=%lu)\n", fmt, (unsigned long) t)
+
+#define UNW_DEC_SPILL_BASE(fmt, pspoff, arg)			\
+  printf ("\t%s:spill_base(pspoff=0x10-0x%lx)\n",		\
+	  fmt, 4*(unsigned long)pspoff)
+
+#define UNW_DEC_SPILL_MASK(fmt, dp, arg)					\
+  do										\
+    {										\
+      static const char * spill_type = "-frb";					\
+      unsigned const char * imaskp = dp;					\
+      unsigned char mask = 0;							\
+      bfd_vma insn = 0;								\
+										\
+      printf ("\t%s:spill_mask(imask=[", fmt);					\
+      for (insn = 0; insn < unw_rlen; ++insn)					\
+	{									\
+	  if ((insn % 4) == 0)							\
+	    mask = *imaskp++;							\
+	  if (insn > 0 && (insn % 3) == 0)					\
+	    putchar (',');							\
+	  putchar (spill_type[(mask >> (2 * (3 - (insn & 0x3)))) & 0x3]);	\
+	}									\
+      printf ("])\n");								\
+      dp = imaskp;								\
+    }										\
+  while (0)
+
+#define UNW_DEC_SPILL_SPREL(fmt, t, abreg, spoff, arg)				\
+  do										\
+    {										\
+      char regname[10];								\
+										\
+      unw_print_abreg (regname, abreg);						\
+      printf ("\t%s:spill_sprel(reg=%s,t=%lu,spoff=0x%lx)\n",			\
+	      fmt, regname, (unsigned long) t, 4*(unsigned long)off);		\
+    }										\
+  while (0)
+
+#define UNW_DEC_SPILL_PSPREL(fmt, t, abreg, pspoff, arg)		 	\
+  do										\
+    {									 	\
+      char regname[10];							 	\
+									 	\
+      unw_print_abreg (regname, abreg);					 	\
+      printf ("\t%s:spill_psprel(reg=%s,t=%lu,pspoff=0x10-0x%lx)\n", 		\
+	      fmt, regname, (unsigned long) t, 4*(unsigned long)pspoff);	\
+    }										\
+  while (0)
+
+#define UNW_DEC_RESTORE(fmt, t, abreg, arg)			\
+  do								\
+    {								\
+      char regname[10];						\
+								\
+      unw_print_abreg (regname, abreg);				\
+      printf ("\t%s:restore(t=%lu,reg=%s)\n",			\
+	      fmt, (unsigned long) t, regname);			\
+    }								\
+  while (0)
+
+#define UNW_DEC_SPILL_REG(fmt, t, abreg, x, ytreg, arg)		\
+  do								\
+    {								\
+      char abregname[10], tregname[10];				\
+								\
+      unw_print_abreg (abregname, abreg);			\
+      unw_print_xyreg (tregname, x, ytreg);			\
+      printf ("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",		\
+	      fmt, (unsigned long) t, abregname, tregname);	\
+    }								\
+  while (0)
+
+#define UNW_DEC_SPILL_SPREL_P(fmt, qp, t, abreg, spoff, arg)		   	    \
+  do										    \
+    {									   	    \
+      char regname[20];							   	    \
+									   	    \
+      unw_print_abreg (regname, abreg);					   	    \
+      printf ("\t%s:spill_sprel_p(qp=p%u,t=%lu,reg=%s,spoff=0x%lx)\n",		    \
+	      fmt, qp, (unsigned long) t, regname, 4 * (unsigned long)spoff);	    \
+    }										    \
+  while (0)
+
+#define UNW_DEC_SPILL_PSPREL_P(fmt, qp, t, abreg, pspoff, arg)		\
+  do									\
+    {									\
+      char regname[20];							\
+									\
+      unw_print_abreg (regname, abreg);					\
+      printf ("\t%s:spill_psprel_p(qp=p%u,t=%lu,reg=%s,pspoff=0x10-0x%lx)\n",\
+	      fmt, qp, (unsigned long) t, regname, 4*(unsigned long)pspoff);\
+    }									\
+  while (0)
+
+#define UNW_DEC_RESTORE_P(fmt, qp, t, abreg, arg)			\
+  do									\
+    {									\
+      char regname[20];							\
+									\
+      unw_print_abreg (regname, abreg);					\
+      printf ("\t%s:restore_p(qp=p%u,t=%lu,reg=%s)\n",			\
+	      fmt, qp, (unsigned long) t, regname);			\
+    }									\
+  while (0)
+
+#define UNW_DEC_SPILL_REG_P(fmt, qp, t, abreg, x, ytreg, arg)		\
+  do									\
+    {									\
+      char regname[20], tregname[20];					\
+									\
+      unw_print_abreg (regname, abreg);					\
+      unw_print_xyreg (tregname, x, ytreg);				\
+      printf ("\t%s:spill_reg_p(qp=p%u,t=%lu,reg=%s,treg=%s)\n",	\
+	      fmt, qp, (unsigned long) t, regname, tregname);		\
+    }									\
+  while (0)
+
+#define UNW_DEC_LABEL_STATE(fmt, label, arg)				\
+  printf ("\t%s:label_state(label=%lu)\n", fmt, (unsigned long) label)
+
+#define UNW_DEC_COPY_STATE(fmt, label, arg)				\
+  printf ("\t%s:copy_state(label=%lu)\n", fmt, (unsigned long) label)
+
+#define UNW_DEC_EPILOGUE(fmt, t, ecount, arg)		\
+  printf ("\t%s:epilogue(t=%lu,ecount=%lu)\n",		\
+	  fmt, (unsigned long) t, (unsigned long) ecount)
+
+/*
+ * Generic IA-64 unwind info decoder.
+ *
+ * This file is used both by the Linux kernel and objdump.  Please
+ * keep the two copies of this file in sync (modulo differences in the
+ * prototypes...).
+ *
+ * You need to customize the decoder by defining the following
+ * macros/constants before including this file:
+ *
+ *  Types:
+ *	unw_word	Unsigned integer type with at least 64 bits 
+ *
+ *  Register names:
+ *	UNW_REG_BSP
+ *	UNW_REG_BSPSTORE
+ *	UNW_REG_FPSR
+ *	UNW_REG_LC
+ *	UNW_REG_PFS
+ *	UNW_REG_PR
+ *	UNW_REG_RNAT
+ *	UNW_REG_PSP
+ *	UNW_REG_RP
+ *	UNW_REG_UNAT
+ *
+ *  Decoder action macros:
+ *	UNW_DEC_BAD_CODE(code)
+ *	UNW_DEC_ABI(fmt,abi,context,arg)
+ *	UNW_DEC_BR_GR(fmt,brmask,gr,arg)
+ *	UNW_DEC_BR_MEM(fmt,brmask,arg)
+ *	UNW_DEC_COPY_STATE(fmt,label,arg)
+ *	UNW_DEC_EPILOGUE(fmt,t,ecount,arg)
+ *	UNW_DEC_FRGR_MEM(fmt,grmask,frmask,arg)
+ *	UNW_DEC_FR_MEM(fmt,frmask,arg)
+ *	UNW_DEC_GR_GR(fmt,grmask,gr,arg)
+ *	UNW_DEC_GR_MEM(fmt,grmask,arg)
+ *	UNW_DEC_LABEL_STATE(fmt,label,arg)
+ *	UNW_DEC_MEM_STACK_F(fmt,t,size,arg)
+ *	UNW_DEC_MEM_STACK_V(fmt,t,arg)
+ *	UNW_DEC_PRIUNAT_GR(fmt,r,arg)
+ *	UNW_DEC_PRIUNAT_WHEN_GR(fmt,t,arg)
+ *	UNW_DEC_PRIUNAT_WHEN_MEM(fmt,t,arg)
+ *	UNW_DEC_PRIUNAT_WHEN_PSPREL(fmt,pspoff,arg)
+ *	UNW_DEC_PRIUNAT_WHEN_SPREL(fmt,spoff,arg)
+ *	UNW_DEC_PROLOGUE(fmt,body,rlen,arg)
+ *	UNW_DEC_PROLOGUE_GR(fmt,rlen,mask,grsave,arg)
+ *	UNW_DEC_REG_PSPREL(fmt,reg,pspoff,arg)
+ *	UNW_DEC_REG_REG(fmt,src,dst,arg)
+ *	UNW_DEC_REG_SPREL(fmt,reg,spoff,arg)
+ *	UNW_DEC_REG_WHEN(fmt,reg,t,arg)
+ *	UNW_DEC_RESTORE(fmt,t,abreg,arg)
+ *	UNW_DEC_RESTORE_P(fmt,qp,t,abreg,arg)
+ *	UNW_DEC_SPILL_BASE(fmt,pspoff,arg)
+ *	UNW_DEC_SPILL_MASK(fmt,imaskp,arg)
+ *	UNW_DEC_SPILL_PSPREL(fmt,t,abreg,pspoff,arg)
+ *	UNW_DEC_SPILL_PSPREL_P(fmt,qp,t,abreg,pspoff,arg)
+ *	UNW_DEC_SPILL_REG(fmt,t,abreg,x,ytreg,arg)
+ *	UNW_DEC_SPILL_REG_P(fmt,qp,t,abreg,x,ytreg,arg)
+ *	UNW_DEC_SPILL_SPREL(fmt,t,abreg,spoff,arg)
+ *	UNW_DEC_SPILL_SPREL_P(fmt,qp,t,abreg,pspoff,arg)
+ */
+
+static unw_word unw_decode_uleb128 PARAMS ((const unsigned char **));
+static const unsigned char *unw_decode_x1 PARAMS ((const unsigned char *,
+						   unsigned char, void *));
+static const unsigned char *unw_decode_x2 PARAMS ((const unsigned char *,
+						   unsigned char, void *));
+static const unsigned char *unw_decode_x3 PARAMS ((const unsigned char *,
+						   unsigned char, void *));
+static const unsigned char *unw_decode_x4 PARAMS ((const unsigned char *,
+						   unsigned char, void *));
+static const unsigned char *unw_decode_r1 PARAMS ((const unsigned char *,
+						   unsigned char, void *));
+static const unsigned char *unw_decode_r2 PARAMS ((const unsigned char *,
+						   unsigned char, void *));
+static const unsigned char *unw_decode_r3 PARAMS ((const unsigned char *,
+						   unsigned char, void *));
+static const unsigned char *unw_decode_p1 PARAMS ((const unsigned char *,
+						   unsigned char, void *));
+static const unsigned char *unw_decode_p2_p5 PARAMS ((const unsigned char *,
+						      unsigned char, void *));
+static const unsigned char *unw_decode_p6 PARAMS ((const unsigned char *,
+						   unsigned char, void *));
+static const unsigned char *unw_decode_p7_p10 PARAMS ((const unsigned char *,
+						       unsigned char, void *));
+static const unsigned char *unw_decode_b1 PARAMS ((const unsigned char *,
+						   unsigned char, void *));
+static const unsigned char *unw_decode_b2 PARAMS ((const unsigned char *,
+						   unsigned char, void *));
+static const unsigned char *unw_decode_b3_x4 PARAMS ((const unsigned char *,
+						      unsigned char, void *));
+
+static unw_word
+unw_decode_uleb128 (dpp)
+     const unsigned char **dpp;
+{
+  unsigned shift = 0;
+  unw_word byte, result = 0;
+  const unsigned char *bp = *dpp;
+
+  while (1)
+    {
+      byte = *bp++;
+      result |= (byte & 0x7f) << shift;
+
+      if ((byte & 0x80) == 0)
+	break;
+
+      shift += 7;
+    }
+
+  *dpp = bp;
+
+  return result;
+}
+
+static const unsigned char *
+unw_decode_x1 (dp, code, arg)
+     const unsigned char * dp;
+     unsigned char         code;
+     void *                arg ATTRIBUTE_UNUSED;
+{
+  unsigned char byte1, abreg;
+  unw_word t, off;
+
+  byte1 = *dp++;
+  t = unw_decode_uleb128 (&dp);
+  off = unw_decode_uleb128 (&dp);
+  abreg = (byte1 & 0x7f);
+  if (byte1 & 0x80)
+    UNW_DEC_SPILL_SPREL ("X1", t, abreg, off, arg);
+  else
+    UNW_DEC_SPILL_PSPREL ("X1", t, abreg, off, arg);
+  return dp;
+}
+
+static const unsigned char *
+unw_decode_x2 (dp, code, arg)
+     const unsigned char * dp;
+     unsigned char         code;
+     void *                arg ATTRIBUTE_UNUSED;
+{
+  unsigned char byte1, byte2, abreg, x, ytreg;
+  unw_word t;
+
+  byte1 = *dp++;
+  byte2 = *dp++;
+  t = unw_decode_uleb128 (&dp);
+  abreg = (byte1 & 0x7f);
+  ytreg = byte2;
+  x = (byte1 >> 7) & 1;
+  if ((byte1 & 0x80) == 0 && ytreg == 0)
+    UNW_DEC_RESTORE ("X2", t, abreg, arg);
+  else
+    UNW_DEC_SPILL_REG ("X2", t, abreg, x, ytreg, arg);
+  return dp;
+}
+
+static const unsigned char *
+unw_decode_x3 (dp, code, arg)
+     const unsigned char * dp;
+     unsigned char         code;
+     void *                arg ATTRIBUTE_UNUSED;
+{
+  unsigned char byte1, byte2, abreg, qp;
+  unw_word t, off;
+
+  byte1 = *dp++;
+  byte2 = *dp++;
+  t = unw_decode_uleb128 (&dp);
+  off = unw_decode_uleb128 (&dp);
+
+  qp = (byte1 & 0x3f);
+  abreg = (byte2 & 0x7f);
+
+  if (byte1 & 0x80)
+    UNW_DEC_SPILL_SPREL_P ("X3", qp, t, abreg, off, arg);
+  else
+    UNW_DEC_SPILL_PSPREL_P ("X3", qp, t, abreg, off, arg);
+  return dp;
+}
+
+static const unsigned char *
+unw_decode_x4 (dp, code, arg)
+     const unsigned char * dp;
+     unsigned char         code;
+     void *                arg ATTRIBUTE_UNUSED;
+{
+  unsigned char byte1, byte2, byte3, qp, abreg, x, ytreg;
+  unw_word t;
+
+  byte1 = *dp++;
+  byte2 = *dp++;
+  byte3 = *dp++;
+  t = unw_decode_uleb128 (&dp);
+
+  qp = (byte1 & 0x3f);
+  abreg = (byte2 & 0x7f);
+  x = (byte2 >> 7) & 1;
+  ytreg = byte3;
+
+  if ((byte2 & 0x80) == 0 && byte3 == 0)
+    UNW_DEC_RESTORE_P ("X4", qp, t, abreg, arg);
+  else
+    UNW_DEC_SPILL_REG_P ("X4", qp, t, abreg, x, ytreg, arg);
+  return dp;
+}
+
+static const unsigned char *
+unw_decode_r1 (dp, code, arg)
+     const unsigned char *dp;
+     unsigned char code;
+     void *arg;
+{
+  int body = (code & 0x20) != 0;
+  unw_word rlen;
+
+  rlen = (code & 0x1f);
+  UNW_DEC_PROLOGUE ("R1", body, rlen, arg);
+  return dp;
+}
+
+static const unsigned char *
+unw_decode_r2 (dp, code, arg)
+     const unsigned char *dp;
+     unsigned char code;
+     void *arg;
+{
+  unsigned char byte1, mask, grsave;
+  unw_word rlen;
+
+  byte1 = *dp++;
+
+  mask = ((code & 0x7) << 1) | ((byte1 >> 7) & 1);
+  grsave = (byte1 & 0x7f);
+  rlen = unw_decode_uleb128 (& dp);
+  UNW_DEC_PROLOGUE_GR ("R2", rlen, mask, grsave, arg);
+  return dp;
+}
+
+static const unsigned char *
+unw_decode_r3 (dp, code, arg)
+     const unsigned char *dp;
+     unsigned char code;
+     void *arg;
+{
+  unw_word rlen;
+
+  rlen = unw_decode_uleb128 (& dp);
+  UNW_DEC_PROLOGUE ("R3", ((code & 0x3) == 1), rlen, arg);
+  return dp;
+}
+
+static const unsigned char *
+unw_decode_p1 (dp, code, arg)
+     const unsigned char * dp;
+     unsigned char         code;
+     void *                arg ATTRIBUTE_UNUSED;
+{
+  unsigned char brmask = (code & 0x1f);
+
+  UNW_DEC_BR_MEM ("P1", brmask, arg);
+  return dp;
+}
+
+static const unsigned char *
+unw_decode_p2_p5 (dp, code, arg)
+     const unsigned char * dp;
+     unsigned char         code;
+     void *                arg ATTRIBUTE_UNUSED;
+{
+  if ((code & 0x10) == 0)
+    {
+      unsigned char byte1 = *dp++;
+
+      UNW_DEC_BR_GR ("P2", ((code & 0xf) << 1) | ((byte1 >> 7) & 1),
+		     (byte1 & 0x7f), arg);
+    }
+  else if ((code & 0x08) == 0)
+    {
+      unsigned char byte1 = *dp++, r, dst;
+
+      r = ((code & 0x7) << 1) | ((byte1 >> 7) & 1);
+      dst = (byte1 & 0x7f);
+      switch (r)
+	{
+	case 0:
+	  UNW_DEC_REG_GR ("P3", UNW_REG_PSP, dst, arg);
+	  break;
+	case 1:
+	  UNW_DEC_REG_GR ("P3", UNW_REG_RP, dst, arg);
+	  break;
+	case 2:
+	  UNW_DEC_REG_GR ("P3", UNW_REG_PFS, dst, arg);
+	  break;
+	case 3:
+	  UNW_DEC_REG_GR ("P3", UNW_REG_PR, dst, arg);
+	  break;
+	case 4:
+	  UNW_DEC_REG_GR ("P3", UNW_REG_UNAT, dst, arg);
+	  break;
+	case 5:
+	  UNW_DEC_REG_GR ("P3", UNW_REG_LC, dst, arg);
+	  break;
+	case 6:
+	  UNW_DEC_RP_BR ("P3", dst, arg);
+	  break;
+	case 7:
+	  UNW_DEC_REG_GR ("P3", UNW_REG_RNAT, dst, arg);
+	  break;
+	case 8:
+	  UNW_DEC_REG_GR ("P3", UNW_REG_BSP, dst, arg);
+	  break;
+	case 9:
+	  UNW_DEC_REG_GR ("P3", UNW_REG_BSPSTORE, dst, arg);
+	  break;
+	case 10:
+	  UNW_DEC_REG_GR ("P3", UNW_REG_FPSR, dst, arg);
+	  break;
+	case 11:
+	  UNW_DEC_PRIUNAT_GR ("P3", dst, arg);
+	  break;
+	default:
+	  UNW_DEC_BAD_CODE (r);
+	  break;
+	}
+    }
+  else if ((code & 0x7) == 0)
+    UNW_DEC_SPILL_MASK ("P4", dp, arg);
+  else if ((code & 0x7) == 1)
+    {
+      unw_word grmask, frmask, byte1, byte2, byte3;
+
+      byte1 = *dp++;
+      byte2 = *dp++;
+      byte3 = *dp++;
+      grmask = ((byte1 >> 4) & 0xf);
+      frmask = ((byte1 & 0xf) << 16) | (byte2 << 8) | byte3;
+      UNW_DEC_FRGR_MEM ("P5", grmask, frmask, arg);
+    }
+  else
+    UNW_DEC_BAD_CODE (code);
+
+  return dp;
+}
+
+static const unsigned char *
+unw_decode_p6 (dp, code, arg)
+     const unsigned char * dp;
+     unsigned char         code;
+     void *                arg ATTRIBUTE_UNUSED;
+{
+  int gregs = (code & 0x10) != 0;
+  unsigned char mask = (code & 0x0f);
+
+  if (gregs)
+    UNW_DEC_GR_MEM ("P6", mask, arg);
+  else
+    UNW_DEC_FR_MEM ("P6", mask, arg);
+  return dp;
+}
+
+static const unsigned char *
+unw_decode_p7_p10 (dp, code, arg)
+     const unsigned char *dp;
+     unsigned char code;
+     void *arg;
+{
+  unsigned char r, byte1, byte2;
+  unw_word t, size;
+
+  if ((code & 0x10) == 0)
+    {
+      r = (code & 0xf);
+      t = unw_decode_uleb128 (&dp);
+      switch (r)
+	{
+	case 0:
+	  size = unw_decode_uleb128 (&dp);
+	  UNW_DEC_MEM_STACK_F ("P7", t, size, arg);
+	  break;
+
+	case 1:
+	  UNW_DEC_MEM_STACK_V ("P7", t, arg);
+	  break;
+	case 2:
+	  UNW_DEC_SPILL_BASE ("P7", t, arg);
+	  break;
+	case 3:
+	  UNW_DEC_REG_SPREL ("P7", UNW_REG_PSP, t, arg);
+	  break;
+	case 4:
+	  UNW_DEC_REG_WHEN ("P7", UNW_REG_RP, t, arg);
+	  break;
+	case 5:
+	  UNW_DEC_REG_PSPREL ("P7", UNW_REG_RP, t, arg);
+	  break;
+	case 6:
+	  UNW_DEC_REG_WHEN ("P7", UNW_REG_PFS, t, arg);
+	  break;
+	case 7:
+	  UNW_DEC_REG_PSPREL ("P7", UNW_REG_PFS, t, arg);
+	  break;
+	case 8:
+	  UNW_DEC_REG_WHEN ("P7", UNW_REG_PR, t, arg);
+	  break;
+	case 9:
+	  UNW_DEC_REG_PSPREL ("P7", UNW_REG_PR, t, arg);
+	  break;
+	case 10:
+	  UNW_DEC_REG_WHEN ("P7", UNW_REG_LC, t, arg);
+	  break;
+	case 11:
+	  UNW_DEC_REG_PSPREL ("P7", UNW_REG_LC, t, arg);
+	  break;
+	case 12:
+	  UNW_DEC_REG_WHEN ("P7", UNW_REG_UNAT, t, arg);
+	  break;
+	case 13:
+	  UNW_DEC_REG_PSPREL ("P7", UNW_REG_UNAT, t, arg);
+	  break;
+	case 14:
+	  UNW_DEC_REG_WHEN ("P7", UNW_REG_FPSR, t, arg);
+	  break;
+	case 15:
+	  UNW_DEC_REG_PSPREL ("P7", UNW_REG_FPSR, t, arg);
+	  break;
+	default:
+	  UNW_DEC_BAD_CODE (r);
+	  break;
+	}
+    }
+  else
+    {
+      switch (code & 0xf)
+	{
+	case 0x0:		/* p8 */
+	  {
+	    r = *dp++;
+	    t = unw_decode_uleb128 (&dp);
+	    switch (r)
+	      {
+	      case 1:
+		UNW_DEC_REG_SPREL ("P8", UNW_REG_RP, t, arg);
+		break;
+	      case 2:
+		UNW_DEC_REG_SPREL ("P8", UNW_REG_PFS, t, arg);
+		break;
+	      case 3:
+		UNW_DEC_REG_SPREL ("P8", UNW_REG_PR, t, arg);
+		break;
+	      case 4:
+		UNW_DEC_REG_SPREL ("P8", UNW_REG_LC, t, arg);
+		break;
+	      case 5:
+		UNW_DEC_REG_SPREL ("P8", UNW_REG_UNAT, t, arg);
+		break;
+	      case 6:
+		UNW_DEC_REG_SPREL ("P8", UNW_REG_FPSR, t, arg);
+		break;
+	      case 7:
+		UNW_DEC_REG_WHEN ("P8", UNW_REG_BSP, t, arg);
+		break;
+	      case 8:
+		UNW_DEC_REG_PSPREL ("P8", UNW_REG_BSP, t, arg);
+		break;
+	      case 9:
+		UNW_DEC_REG_SPREL ("P8", UNW_REG_BSP, t, arg);
+		break;
+	      case 10:
+		UNW_DEC_REG_WHEN ("P8", UNW_REG_BSPSTORE, t, arg);
+		break;
+	      case 11:
+		UNW_DEC_REG_PSPREL ("P8", UNW_REG_BSPSTORE, t, arg);
+		break;
+	      case 12:
+		UNW_DEC_REG_SPREL ("P8", UNW_REG_BSPSTORE, t, arg);
+		break;
+	      case 13:
+		UNW_DEC_REG_WHEN ("P8", UNW_REG_RNAT, t, arg);
+		break;
+	      case 14:
+		UNW_DEC_REG_PSPREL ("P8", UNW_REG_RNAT, t, arg);
+		break;
+	      case 15:
+		UNW_DEC_REG_SPREL ("P8", UNW_REG_RNAT, t, arg);
+		break;
+	      case 16:
+		UNW_DEC_PRIUNAT_WHEN_GR ("P8", t, arg);
+		break;
+	      case 17:
+		UNW_DEC_PRIUNAT_PSPREL ("P8", t, arg);
+		break;
+	      case 18:
+		UNW_DEC_PRIUNAT_SPREL ("P8", t, arg);
+		break;
+	      case 19:
+		UNW_DEC_PRIUNAT_WHEN_MEM ("P8", t, arg);
+		break;
+	      default:
+		UNW_DEC_BAD_CODE (r);
+		break;
+	      }
+	  }
+	  break;
+
+	case 0x1:
+	  byte1 = *dp++;
+	  byte2 = *dp++;
+	  UNW_DEC_GR_GR ("P9", (byte1 & 0xf), (byte2 & 0x7f), arg);
+	  break;
+
+	case 0xf:		/* p10 */
+	  byte1 = *dp++;
+	  byte2 = *dp++;
+	  UNW_DEC_ABI ("P10", byte1, byte2, arg);
+	  break;
+
+	case 0x9:
+	  return unw_decode_x1 (dp, code, arg);
+
+	case 0xa:
+	  return unw_decode_x2 (dp, code, arg);
+
+	case 0xb:
+	  return unw_decode_x3 (dp, code, arg);
+
+	case 0xc:
+	  return unw_decode_x4 (dp, code, arg);
+
+	default:
+	  UNW_DEC_BAD_CODE (code);
+	  break;
+	}
+    }
+  return dp;
+}
+
+static const unsigned char *
+unw_decode_b1 (dp, code, arg)
+     const unsigned char * dp;
+     unsigned char         code;
+     void *                arg ATTRIBUTE_UNUSED;
+{
+  unw_word label = (code & 0x1f);
+
+  if ((code & 0x20) != 0)
+    UNW_DEC_COPY_STATE ("B1", label, arg);
+  else
+    UNW_DEC_LABEL_STATE ("B1", label, arg);
+  return dp;
+}
+
+static const unsigned char *
+unw_decode_b2 (dp, code, arg)
+     const unsigned char * dp;
+     unsigned char         code;
+     void *                arg ATTRIBUTE_UNUSED;
+{
+  unw_word t;
+
+  t = unw_decode_uleb128 (& dp);
+  UNW_DEC_EPILOGUE ("B2", t, (code & 0x1f), arg);
+  return dp;
+}
+
+static const unsigned char *
+unw_decode_b3_x4 (dp, code, arg)
+     const unsigned char *dp;
+     unsigned char code;
+     void *arg;
+{
+  unw_word t, ecount, label;
+
+  if ((code & 0x10) == 0)
+    {
+      t = unw_decode_uleb128 (&dp);
+      ecount = unw_decode_uleb128 (&dp);
+      UNW_DEC_EPILOGUE ("B3", t, ecount, arg);
+    }
+  else if ((code & 0x07) == 0)
+    {
+      label = unw_decode_uleb128 (&dp);
+      if ((code & 0x08) != 0)
+	UNW_DEC_COPY_STATE ("B4", label, arg);
+      else
+	UNW_DEC_LABEL_STATE ("B4", label, arg);
+    }
+  else
+    switch (code & 0x7)
+      {
+      case 1:
+	return unw_decode_x1 (dp, code, arg);
+      case 2:
+	return unw_decode_x2 (dp, code, arg);
+      case 3:
+	return unw_decode_x3 (dp, code, arg);
+      case 4:
+	return unw_decode_x4 (dp, code, arg);
+      default:
+	UNW_DEC_BAD_CODE (code);
+	break;
+      }
+  return dp;
+}
+
+typedef const unsigned char *(*unw_decoder)
+     PARAMS ((const unsigned char *, unsigned char, void *));
+
+static unw_decoder unw_decode_table[2][8] =
+  {
+    /* prologue table: */
+    {
+      unw_decode_r1,		/* 0 */
+      unw_decode_r1,
+      unw_decode_r2,
+      unw_decode_r3,
+      unw_decode_p1,		/* 4 */
+      unw_decode_p2_p5,
+      unw_decode_p6,
+      unw_decode_p7_p10
+    },
+    {
+      unw_decode_r1,		/* 0 */
+      unw_decode_r1,
+      unw_decode_r2,
+      unw_decode_r3,
+      unw_decode_b1,		/* 4 */
+      unw_decode_b1,
+      unw_decode_b2,
+      unw_decode_b3_x4
+    }
+  };
+
+/* Decode one descriptor and return address of next descriptor.  */
+const unsigned char *
+unw_decode (dp, inside_body, ptr_inside_body)
+     const unsigned char * dp;
+     int                   inside_body;
+     void *                ptr_inside_body;
+{
+  unw_decoder decoder;
+  unsigned char code;
+
+  code = *dp++;
+  decoder = unw_decode_table[inside_body][code >> 5];
+  return (*decoder) (dp, code, ptr_inside_body);
+}
diff --git a/binutils/unwind-ia64.h b/binutils/unwind-ia64.h
new file mode 100644
index 0000000..6cb5a8c
--- /dev/null
+++ b/binutils/unwind-ia64.h
@@ -0,0 +1,31 @@
+/* unwind-ia64.h -- dump IA-64 unwind info.
+   Copyright (c) 2000, 2001 Free Software Foundation, Inc.
+	Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
+
+This file is part of GNU Binutils.
+
+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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#include <elf/ia64.h>
+#include <ansidecl.h>
+
+#define UNW_VER(x)		((x) >> 48)
+#define UNW_FLAG_MASK		0x0000ffff00000000
+#define UNW_FLAG_OSMASK		0x0000f00000000000
+#define UNW_FLAG_EHANDLER(x)	((x) & 0x0000000100000000L)
+#define UNW_FLAG_UHANDLER(x)	((x) & 0x0000000200000000L)
+#define UNW_LENGTH(x)		((x) & 0x00000000ffffffffL)
+
+extern const unsigned char *	unw_decode PARAMS ((const unsigned char *, int, void *));
diff --git a/config.guess b/config.guess
index ffb758f..3b3df45 100755
--- a/config.guess
+++ b/config.guess
@@ -3,7 +3,7 @@
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
 #   Free Software Foundation, Inc.
 
-timestamp='2001-01-01'
+timestamp='2001-01-17'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -93,7 +93,7 @@
 
 
 dummy=dummy-$$
-trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
+trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
 
 # CC_FOR_BUILD -- compiler used by this script.
 # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
@@ -107,7 +107,7 @@
 	     CC_FOR_BUILD="$c"; break
 	  fi
 	done
-	rm -f $dummy.c $dummy.o
+	rm -f $dummy.c $dummy.o $dummy.rel
 	if test x"$CC_FOR_BUILD" = x ; then
 	  CC_FOR_BUILD=no_compiler_found
 	fi
@@ -276,7 +276,7 @@
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
 	exit 0;;
-    SR2?01:HI-UX/MPP:*:*)
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
 	echo hppa1.1-hitachi-hiuxmpp
 	exit 0;;
     Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
@@ -927,6 +927,8 @@
 	  rm -f $dummy.c $dummy
 	elif test "${UNAME_MACHINE}" = "s390"; then
 	  echo s390-ibm-linux && exit 0
+	elif test "${UNAME_MACHINE}" = "s390x"; then
+	  echo s390x-ibm-linux && exit 0
 	elif test "${UNAME_MACHINE}" = "x86_64"; then
 	  echo x86_64-unknown-linux-gnu && exit 0
 	elif test "${UNAME_MACHINE}" = "parisc64" -o "${UNAME_MACHINE}" = "hppa64"; then
@@ -1090,9 +1092,12 @@
     TSUNAMI:LynxOS:2.*:*)
 	echo sparc-unknown-lynxos${UNAME_RELEASE}
 	exit 0 ;;
-    rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
+    rs6000:LynxOS:2.*:*)
 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
 	exit 0 ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
     SM[BE]S:UNIX_SV:*:*)
 	echo mips-dde-sysv${UNAME_RELEASE}
 	exit 0 ;;
@@ -1197,6 +1202,24 @@
 	# is probably installed.
 	echo ${UNAME_MACHINE}-pc-os2-emx
 	exit 0 ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit 0 ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit 0 ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit 0 ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit 0 ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit 0 ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit 0 ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
@@ -1288,11 +1311,24 @@
 #endif
 
 #if defined (vax)
-#if !defined (ultrix)
-  printf ("vax-dec-bsd\n"); exit (0);
-#else
-  printf ("vax-dec-ultrix\n"); exit (0);
-#endif
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
 #endif
 
 #if defined (alliant) && defined (i860)
@@ -1339,8 +1375,9 @@
 cat >&2 <<EOF
 $0: unable to guess system type
 
-The $version version of this script cannot recognize your system type.
-Please download the most up to date version of the config scripts:
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
 
     ftp://ftp.gnu.org/pub/gnu/config/
 
@@ -1349,7 +1386,7 @@
 pertinent to <config-patches@gnu.org> in order to provide the needed
 information to handle your system.
 
-config.guess version = $version
+config.guess timestamp = $timestamp
 
 uname -m = `(uname -m) 2>/dev/null || echo unknown`
 uname -r = `(uname -r) 2>/dev/null || echo unknown`
diff --git a/config.sub b/config.sub
index a97fdc3..e1afb5d 100755
--- a/config.sub
+++ b/config.sub
@@ -3,7 +3,7 @@
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
 #   Free Software Foundation, Inc.
 
-timestamp='2001-01-07'
+timestamp='2001-01-12'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -69,7 +69,7 @@
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
@@ -117,7 +117,7 @@
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  nto-qnx* | linux-gnu* | storm-chaos*)
+  nto-qnx* | linux-gnu* | storm-chaos* | os2-emx*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
@@ -226,7 +226,8 @@
 		| alphaev6[78] \
 		| we32k | ns16k | clipper | i370 | sh | sh[34] \
 		| powerpc | powerpcle \
-		| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
+		| 1750a | dsp16xx | pdp10 | pdp11 \
+		| mips16 | mips64 | mipsel | mips64el \
 		| mips64orion | mips64orionel | mipstx39 | mipstx39el \
 		| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
 		| mips64vr5000 | miprs64vr5000el | mcore \
@@ -268,12 +269,12 @@
 	      | alphaev6[78]-* \
 	      | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
 	      | clipper-* | orion-* \
-	      | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
+	      | sparclite-* | pdp10-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
 	      | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
 	      | mips64el-* | mips64orion-* | mips64orionel-* \
 	      | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
 	      | mipstx39-* | mipstx39el-* | mcore-* \
-	      | f30[01]-* | f700-* | s390-* | sv1-* | t3e-* \
+	      | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \
 	      | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
 	      | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* \
 	      | bs2000-* | tic54x-* | c54x-* | x86_64-*)
@@ -424,6 +425,10 @@
 		basic_machine=tron-gmicro
 		os=-sysv
 		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
 	h3050r* | hiux*)
 		basic_machine=hppa1.1-hitachi
 		os=-hiuxwe2
@@ -523,18 +528,6 @@
 		basic_machine=i386-unknown
 		os=-vsta
 		;;
-	i386-go32 | go32)
-		basic_machine=i386-unknown
-		os=-go32
-		;;
-	i386-mingw32 | mingw32)
-		basic_machine=i386-unknown
-		os=-mingw32
-		;;
-	i[34567]86-pw32 | pw32)
-		basic_machine=i586-unknown
-		os=-pw32
-		;;
 	iris | iris4d)
 		basic_machine=mips-sgi
 		case $os in
@@ -560,6 +553,10 @@
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
 	miniframe)
 		basic_machine=m68000-convergent
 		;;
@@ -590,7 +587,7 @@
 		os=-coff
 		;;
 	msdos)
-		basic_machine=i386-unknown
+		basic_machine=i386-pc
 		os=-msdos
 		;;
 	mvs)
@@ -729,6 +726,10 @@
 	ps2)
 		basic_machine=i386-ibm
 		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
 	rom68k)
 		basic_machine=m68k-rom68k
 		os=-coff
@@ -919,6 +920,10 @@
 	vax)
 		basic_machine=vax-dec
 		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
 	pdp11)
 		basic_machine=pdp11-dec
 		;;
@@ -1009,7 +1014,8 @@
 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
 	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
 	      | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
-	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* | -storm-chaos*)
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1141,6 +1147,9 @@
 	arm*-semi)
 		os=-aout
 		;;
+	pdp10-*)
+		os=-tops20
+		;;
         pdp11-*)
 		os=-none
 		;;
diff --git a/config/ChangeLog b/config/ChangeLog
index 920ab32..5a398ec 100644
--- a/config/ChangeLog
+++ b/config/ChangeLog
@@ -1,4 +1,9 @@
-Fri Jul 14 18:13:23 2000  Mark P Mitchell  <mark@codesourcery.com>
+2001-02-09  Martin Schwidefsky  <schwidefsky@de.ibm.com>
+
+	* mh-s390pic: New file.
+	* mt-s390pic: New file.
+
+2000-07-14  Mark P Mitchell  <mark@codesourcery.com>
 
 	* mh-irix6 (CC): Don't set it.
 
diff --git a/config/mh-s390pic b/config/mh-s390pic
new file mode 100644
index 0000000..92e48d9
--- /dev/null
+++ b/config/mh-s390pic
@@ -0,0 +1 @@
+PICFLAG=-fpic
diff --git a/config/mt-s390pic b/config/mt-s390pic
new file mode 100644
index 0000000..ff98727
--- /dev/null
+++ b/config/mt-s390pic
@@ -0,0 +1 @@
+PICFLAG_FOR_TARGET=-fpic
diff --git a/configure b/configure
index dfc1762..ae89f40 100755
--- a/configure
+++ b/configure
@@ -450,7 +450,7 @@
 					fi
 					;;
 				esac
-				echo "Configuring for a ${host_alias} host." 1>&2
+				echo "Configuring for a ${host_alias} host."
 				arguments="--host=$host_alias $arguments"
 			else
 				echo 'Config.guess failed to determine the host type.  You need to specify one.' 1>&2
diff --git a/configure.in b/configure.in
index 1284aa6..e2a7f97 100644
--- a/configure.in
+++ b/configure.in
@@ -321,6 +321,9 @@
     powerpc*-*-*)
       host_makefile_frag="${host_makefile_frag} config/mh-ppcpic"
       ;;
+    s390-* | s390x-*)
+      host_makefile_frag="${host_makefile_frag} config/mh-s390pic"
+      ;;
     *-*-*)
       if test -f ${srcdir}/config/mh-${host_cpu}pic; then
         host_makefile_frag="${host_makefile_frag} config/mh-${host_cpu}pic"
@@ -555,7 +558,7 @@
      noconfigdirs="$noconfigdirs tk itcl tix libgui gdb"
      ;;
   *-*-cygwin*)
-     noconfigdirs="autoconf automake send-pr rcs guile perl texinfo apache inet"
+     noconfigdirs="autoconf automake send-pr rcs guile perl apache inet"
     ;;
   *-*-netbsd*)
     noconfigdirs="rcs"
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 58ca571..879405e 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,7 +1,289 @@
+2001-02-28  Andreas Jaeger  <aj@suse.de>, Bo Thorsen  <bo@suse.de>
+
+	* config/tc-i386.c (tc_gen_reloc): Remove ugly hack which is not needed
+	anymore since we use bfd_elf_generic_reloc now.
+	(md_apply_fix3): Only apply hack for partial_inplace if not using RELA.
+
+2001-02-27  Alan Modra  <alan@linuxcare.com.au>
+
+	* configure.in (BFD_VERSION): New.
+	(AM_INIT_AUTOMAKE): Use $BFD_VERSION.
+	* configure: Regenerate.
+	* Makefile.am: Run "make dep-am"
+	* Makefile.in: Regenerate.
+	* doc/Makefile.in: Regenerate.
+
+2001-02-26  Mark Elbrecht  <snowball3@bigfoot.com>
+
+	* config/obj-coff.c [BFD_ASSEMBLER] (obj_coff_section): Set
+	SEC_NEVER_LOAD when the 'n' flag is used.
+	Add SEC_NEVER_LOAD to matchflags.
+
+2001-02-24  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
+
+	* symbols.c (decode_local_label_name): Initialize message_format
+	only when an error is reported (perf pb due to I18N).
+
+2001-02-23  H.J. Lu  <hjl@gnu.org>
+
+	* dwarf2dbg.c (dwarf2_directive_file): Call s_app_file (0) if
+	BFD_ASSEMBLER is not defined.
+
+2001-02-23   Richard Sandiford <rsandifo@redhat.com>
+
+	* config/tc-mn10300.c (md_apply_fix3): Don't mark a fixup as
+	done if it's against a symbol.
+
+2001-02-22  Timothy Wall  <twall@cygnus.com>
+
+	* config/tc-ia64.c (ia64_target_format): Return ia64-aix-specific
+	target formats if applicable.
+	* config/te-ia64aix.h: New.  Configuration for AIX5 on IA-64.
+	* Makefile.am (TARG_ENV_HFILES): Added config/te-ia64aix.h.
+	* Makefile.in: Regenerated.
+	* configure.in: Added configuration for ia64-*-aix*.
+	* configure: Regenerated.
+
+2001-02-21  David Mosberger  <davidm@hpl.hp.com>
+
+	* config/tc-ia64.c (enum operand_match_result): New type.
+	(operand_match): Change return type to operand_match_result.
+	Fix all returns appropriately, adding support for returning the
+	out-of-range result.
+	(parse_operands): New locals result, error_pos, out_of_range_pos,
+	curr_out_of_range_pos.  Rewrite operand matching loop to give better
+	error messages.
+
+2001-02-21  David Mosberger  <davidm@hpl.hp.com>
+
+	* config/tc-ia64.c (struct unwind): Add member "prologue_count".
+	(dot_proc): Clear unwind.prologue_count to zero.
+	(dot_prologue): Increment unwind.prologue_count.
+	(dot_restore): If second operand is omitted, use
+	unwind.prologue_count -1 for "ecount" (# of additional regions to
+	pop).  Decrement unwind.prologue_count by number of regions
+	popped.
+
+2001-02-21  Nick Clifton  <nickc@redhat.com>
+
+	* doc/as.texinfo (Section): Note that some flags to the COFF
+	version of .section remove attributes rather than setting them.
+
+2001-02-20  Kazu Hirata  <kazu@hxi.com>
+
+	* tc-pdp11.c: Fix formatting.
+	* tc-pdp11.h: Likewise.
+
+2001-02-20  Bo Thorsen  <bo@suse.de>
+
+	* config/tc-i386.c (tc_i386_fix_adjustable): Fix GOTPCREL GOT
+	entry.
+
+2001-02-18  David O'Brien  <obrien@FreeBSD.org>
+
+	* configure.in (cpu_type, arch): Add a generic FreeBSD specification as
+	all FreeBSD platforms should look the same at this level.
+	* configure: Rebuilt.
+	* config/tc-i386.c: Add support for old FreeBSD a.out hosts.
+
+2001-02-18  lars brinkhoff  <lars@nocrew.org>
+
+	* Makefile.am: Add PDP-11 target.
+	* configure.in: Likewise.
+	* config/tc-pdp11.c: New file.
+	* config/tc-pdp11.h: New file.
+	* doc/Makefile.am: Add PDP-11 documentation.
+	* doc/all.texi: Likewise.
+	* doc/as.texinfo: Likewise.
+	* doc/c-pdp11.texi: New file.
+
+2001-02-16  matthew green  <mrg@redhat.com>
+
+	* gas/cgen.c (gas_cgen_md_apply_fix3): Support BFD_RELOC_64.
+
+2001-02-13  Jim Wilson  <wilson@redhat.com>
+
+	* config/tc-ia64.c (operand_match, case TAG13): Make a BFD_RELOC_UNUSED
+	reloc instead of a 0 reloc.
+	(md_apply_fix3): Check for BFD_RELOC_UNUSED instead of 0, and mark it
+	as done.
+	* config/tc-ia64.h (TC_RELOC_RTSYM_LOC_FIXUP): Likewise.
+
+2001-02-13  Ian Lance Taylor  <ian@zembu.com>
+
+	* write.c (is_dnrange): Stop as soon as the address becomes
+	larger.
+	(relax_frag): Add segment parameter.  Only call symbol_get_frag
+	once.  Only call is_dnrange if the symbol is in the same segment,
+	and the symbol address is larger.
+	(relax_segment): Pass segment to md_relax_frag and relax_frag.
+	* write.h (relax_frag): Update declaration.
+	* config/tc-fr30.c (fr30_relax_frag): Add segment parameter.  Pass
+	it to relax_frag.
+	* config/tc-m32r.c (m32r_relax_frag): Likewise.
+	* config/tc-m32r.h (md_relax_frag): Add segment parameter.
+	(m32r_relax_frag): Update declaration.
+	* config/tc-mips.h (md_relax_frag): Add segment parameter.
+	* config/tc-tic54x.h (md_relax_frag): Likewise.
+	* doc/internals.texi (CPU backend): Update documentation for
+	md_relax_frag.
+
+2001-02-13  Alan Modra  <alan@linuxcare.com.au>
+
+	* doc/c-i386.texi (i386-Arch): Add "jumps"/"nojumps" blurb.
+	Mention effect of < 386 architectures on jump promotion.
+	(i386-Jumps): xref above.  Don't assume long disp is 32 bits.
+
+	* config/tc-i386.c (no_cond_jump_promotion): New.
+	(set_cpu_arch): Parse "jumps" arch modifier.
+	(insn_size): Modify usage comment.
+	(ENCODE_RELAX_STATE): Reformat and protect macro arg.
+	(SIZE_FROM_RELAX_STATE): Rename to DISP_SIZE_FROM_RELAX_STATE.
+	(TYPE_FROM_RELAX_STATE): New define.
+	(UNCOND_JUMP, COND_JUMP): Renumber.
+	(md_relax_table): Reorder to suit.
+	(COND_JUMP86): New define.
+	(md_relax_table): Handle COND_JUMP86 cases. Add a few comments.
+	(md_assemble): Create frag var for jumps of max size, encode relax
+	state for COND_JUMP86.
+	(md_estimate_size_before_relax): Handle COND_JUMP86 cases, and
+	leave conditional jumps small if no_cond_jump_promotion.
+	(md_convert_frag): Likewise.
+
+	* expr.c (operator): Don't bump input_line_pointer for two char
+	operators.  Instead return operator size via new param num_chars.
+	(expr): Use above to parse multi-char operators correctly.
+
+Mon Feb 12 17:45:50 CET 2001  Jan Hubicka  <jh@suse.cz>
+
+	* tc-i386.c (i386_displacement): Fix handling of
+	BFD_RELOC_X86_64_GOTPCREL.
+	(i386_validate_fix): Likewise.
+
+2001-02-12  Philip Blundell  <pb@futuretv.com>
+
+	* config/tc-arm.c (do_ldst): Improve warnings for unpredictable
+	ldrt/strt instructions.
+
+2001-02-11  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
+
+	* config/tc-mips.c (macro): For M_LA_AB emit a
+	BFD_RELOC_MIPS_CALL16 relocation or a
+	BFD_RELOC_MIPS_CALL_HI16/BFD_RELOC_MIPS_CALL_LO16 pair instead of
+	BFD_RELOC_MIPS_GOT16 and
+	BFD_RELOC_MIPS_GOT_HI16/BFD_RELOC_MIPS_GOT_LO16, respectively for
+	loading the jump register when generating SVR4_PIC code.
+
+2001-02-10  Chris Demetriou  <cgd@broadcom.com>
+
+	* configure.in: Make 'mipself' and 'mipsecoff' emulations
+	map to MIPS-specific files, as they used to do before the
+	change on 2000-05-21.
+	* configure: Regerate.
+
+2001-02-10  Chris Demetriou  <cgd@broadcom.com>
+
+	* config/tc-mips.c (md_parse_option): Don't try to compile
+	ELF-only option code if not ELF.
+
+2001-02-08  David Mosberger  <davidm@hpl.hp.com>
+
+	* config/tc-ia64.h (md_elf_section_type): New macro.
+	(ELF_TC_SPECIAL_SECTIONS): Drop .IA_64.unwind and .IA_64.unwind_info
+	(they're now handled via ia64_elf_section_type.
+
+	* config/tc-ia64.c (unwind): New members saved_text_seg,
+	saved_text_subseg, and force_unwind_entry.
+	(optimize_unw_records): New function to optimize away unnecessary
+	unwind directives.
+	(ia64_elf_section_type): New function.
+	(output_unw_records): Generate unwind info only if the size is
+	non-zero or if it's forced for some other reason (e.g.,
+	handlerdata or a personality routine).
+	(generate_unwind_image): Don't switch back to previous
+	section---stay inside the unwind info section instead so that
+	handlerdata that may follow goes into the right place.
+	(dot_handlerdata): Force generation of unwind entry and save the
+	current active text segment before generating unwind image.
+	(dot_unwentry): Force generation of unwind entry.
+	(dot_personality): Ditto.
+	(dot_endp): Generate unwind table entry only if there is
+	some unwind info or the unwind entry was forced.
+
+	* config/tc-ia64.c (make_unw_section_name): New macro to form
+	unwind section name.
+	(generate_unwind_image): Add "text_name" argument.  Use it to
+	form unwind section name.
+	(dot_handlerdata): Determine current segment (section) name and
+	pass it to generate_unwind_image().
+	(dot_endp): Determine current segment (section) name and use
+	it to determine the appropriate unwind section name.
+	(ia64_md_do_align): Add missing ATTRIBUTE_UNUSED declarations to
+	n, fill, and max arguments.
+
+2001-02-09  Schwidefsky  <schwidefsky@de.ibm.com>
+
+	* Makefile.am: Add linux target for S/390.
+	* configure.in: Likewise.
+	* config/tc-s390.c: New file.
+	* config/tc-s390.h: New file.
+
+2001-02-09  Alexandre Oliva  <aoliva@redhat.com>
+
+	* config/tc-sh.c (md_pseudo_table): Add uaquad.  Use s_uacons for
+	2byte, 4byte and 8byte.
+
+2001-02-08  Alan Modra   <alan@linuxcare.com.au>
+
+	* config/tc-hppa.c (pa_build_unwind_subspace): Don't call
+	md_number_to_chars with size > sizeof (valueT).
+
+2001-02-06  H.J. Lu  <hjl@gnu.org>
+
+	* config/tc-ia64.h (TC_RELOC_RTSYM_LOC_FIXUP): Do fixup if
+	there is no relocation.
+
+2001-02-06  H.J. Lu  <hjl@gnu.org>
+
+	* config/tc-ia64.h (TC_RELOC_RTSYM_LOC_FIXUP): New. Defined.
+
+	* config/tc-ia64.c (md_parse_option): Only accept the valid
+	ia64 options on "-axxx".
+
+2001-02-05  Jim Wilson  <wilson@redhat.com>
+
+	* config/tc-ia64.c (errata_nop_necessary_p): Return 0 instead of
+	aborting for invalid operands.
+
+2001-02-06  Alan Modra  <alan@linuxcare.com.au>
+
+	* config/tc-hppa.c (fix_new_hppa): Pass in unwind directly rather
+	than via pointer.  Update all callers.
+	(UNWIND_LOW32): Define.
+	(UNWIND_HIGH32): Define.
+	(pa_build_unwind_subspace): Use the above macros instead of dumping
+	bitfields directly.  Call frag_more once rather than multiple times.
+	(md_assemble): Use UNWIND_LOW32.
+	(pa_entry): Likewise
+	(pa_procend): Likewise.
+	(process_exit): Use UNWIND_HIGH32.
+
+2001-02-04  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
+
+	* config/tc-m68hc11.h (LISTING_HEADER): Use m68hc11_listing_header
+	function to select the header according to the cpu.
+	(md_after_pass_hook, md_do_align): Remove.
+	(md_cleanup, m68hc11_cleanup): Remove.
+	(md_pcrel_from_section): Declare.
+	* config/tc-m68hc11.c (build_dbranch_insn): Remove insn_size.
+	(build_jump_insn, build_insn): Likewise.
+	(m68hc11_listing_header): New function.
+	(m68hc11_cleanup): Remove.
+
 2001-02-02  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
 
 	* config/tc-m68hc11.c (relaxable_symbol): Relax externally visible
-	symbols because there is no support for shared libraries and these 
+	symbols because there is no support for shared libraries and these
 	symbols can't be overridden (unless they are weak).
 
 2001-02-01  Momchil Velikov  <velco@fadata.bg>
@@ -20,7 +302,7 @@
 	still set.  Issue an error message instead.
 	(md_estimate_size_before_relax): Delete unused variable
 	'buffer_address'.  Fixup parentheses around if statement.
-	
+
 2001-01-23  Kazu Hirata  <kazu@hxi.com>
 
 	* as.c: Fix formatting.
diff --git a/gas/Makefile.am b/gas/Makefile.am
index 47b6253..679c292 100644
--- a/gas/Makefile.am
+++ b/gas/Makefile.am
@@ -63,8 +63,10 @@
 	mn10200 \
 	mn10300 \
 	ns32k \
+	pdp11 \
 	pj \
 	ppc \
+	s390 \
 	sh \
 	sparc \
 	tahoe \
@@ -77,7 +79,7 @@
 	z8k
 
 # Object format types.  This is only used for dependency information.
-# We deliberately omit som, since it does not work as a cross assembler.
+# We deliberately omit some, since it does not work as a cross assembler.
 
 OBJ_FORMATS = \
 	aout \
@@ -100,7 +102,7 @@
 	case $$o in \
 	aout) \
 	  case $$c in \
-	  a29k | arm | cris | i386 | m68k | mips | ns32k | sparc | tahoe | tic30 | vax) \
+	  a29k | arm | cris | i386 | m68k | mips | ns32k | pdp11 | sparc | tahoe | tic30 | vax) \
 	    valid=yes ;; \
 	  esac ;; \
 	bout) \
@@ -244,8 +246,10 @@
 	config/tc-mn10200.c \
 	config/tc-mn10300.c \
 	config/tc-ns32k.c \
+	config/tc-pdp11.c \
 	config/tc-pj.c \
 	config/tc-ppc.c \
+	config/tc-s390.c \
 	config/tc-sh.c \
 	config/tc-sparc.c \
 	config/tc-tahoe.c \
@@ -284,8 +288,10 @@
 	config/tc-mn10200.h \
 	config/tc-mn10300.h \
 	config/tc-ns32k.h \
+	config/tc-pdp11.h \
 	config/tc-pj.h \
 	config/tc-ppc.h \
+	config/tc-s390.h \
 	config/tc-sh.h \
 	config/tc-sparc.h \
 	config/tc-tahoe.h \
@@ -338,6 +344,7 @@
 	config/te-hp300.h \
 	config/te-hppa.h \
 	config/te-i386aix.h \
+	config/te-ia64aix.h \
 	config/te-ic960.h \
 	config/te-linux.h \
 	config/te-lnews.h \
@@ -945,12 +952,14 @@
   $(INCDIR)/opcode/alpha.h $(srcdir)/config/atof-vax.c
 DEPTC_arc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-arc.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
-  subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/arc.h \
-  $(INCDIR)/elf/arc.h $(INCDIR)/elf/reloc-macros.h
+  struc-symbol.h subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/arc.h \
+  $(srcdir)/../opcodes/arc-ext.h $(INCDIR)/elf/arc.h \
+  $(INCDIR)/elf/reloc-macros.h
 DEPTC_arc_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-arc.h subsegs.h \
-  $(INCDIR)/obstack.h $(INCDIR)/opcode/arc.h $(INCDIR)/elf/arc.h \
+  $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arc.h struc-symbol.h \
+  subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/arc.h \
+  $(srcdir)/../opcodes/arc-ext.h $(INCDIR)/elf/arc.h \
   $(INCDIR)/elf/reloc-macros.h
 DEPTC_arm_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-arm.h \
   $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h
@@ -1166,6 +1175,14 @@
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h $(INCDIR)/opcode/ns32k.h \
   $(INCDIR)/obstack.h
+DEPTC_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
+  $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/opcode/pdp11.h
+DEPTC_pdp11_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pdp11.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+  $(INCDIR)/opcode/pdp11.h
+DEPTC_pdp11_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-pdp11.h $(INCDIR)/opcode/pdp11.h
 DEPTC_pj_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pj.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
   $(INCDIR)/opcode/pj.h
@@ -1179,7 +1196,16 @@
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ppc.h subsegs.h \
   $(INCDIR)/obstack.h $(INCDIR)/opcode/ppc.h $(INCDIR)/elf/ppc.h \
-  $(INCDIR)/elf/reloc-macros.h
+  $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h
+DEPTC_s390_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-s390.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+  subsegs.h $(INCDIR)/obstack.h struc-symbol.h $(INCDIR)/opcode/s390.h \
+  $(INCDIR)/elf/s390.h $(INCDIR)/elf/reloc-macros.h
+DEPTC_s390_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-s390.h subsegs.h \
+  $(INCDIR)/obstack.h struc-symbol.h $(INCDIR)/opcode/s390.h \
+  $(INCDIR)/elf/s390.h $(INCDIR)/elf/reloc-macros.h
 DEPTC_sh_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sh.h \
   $(INCDIR)/coff/internal.h $(INCDIR)/coff/sh.h $(BFDDIR)/libcoff.h \
   $(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/sh-opc.h \
@@ -1303,11 +1329,11 @@
 DEPOBJ_alpha_evax = $(srcdir)/config/obj-evax.h $(srcdir)/config/tc-alpha.h
 DEPOBJ_arc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-arc.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
-  $(INCDIR)/obstack.h subsegs.h
+  struc-symbol.h $(INCDIR)/obstack.h subsegs.h
 DEPOBJ_arc_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-arc.h subsegs.h \
-  $(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
+  $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arc.h struc-symbol.h \
+  subsegs.h $(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
 DEPOBJ_arm_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-arm.h \
   $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
   $(INCDIR)/obstack.h
@@ -1492,6 +1518,16 @@
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h subsegs.h \
   $(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
+DEPOBJ_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
+  $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+  $(INCDIR)/obstack.h
+DEPOBJ_pdp11_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pdp11.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+  $(INCDIR)/obstack.h subsegs.h
+DEPOBJ_pdp11_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-pdp11.h subsegs.h \
+  $(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
 DEPOBJ_pj_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pj.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
   $(INCDIR)/obstack.h subsegs.h
@@ -1507,6 +1543,13 @@
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ppc.h subsegs.h \
   $(INCDIR)/obstack.h $(INCDIR)/elf/ppc.h $(INCDIR)/elf/reloc-macros.h \
   $(INCDIR)/aout/aout64.h
+DEPOBJ_s390_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-s390.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+  $(INCDIR)/obstack.h subsegs.h
+DEPOBJ_s390_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-s390.h subsegs.h \
+  $(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
 DEPOBJ_sh_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sh.h \
   $(INCDIR)/coff/internal.h $(INCDIR)/coff/sh.h $(BFDDIR)/libcoff.h \
   $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
@@ -1761,6 +1804,13 @@
 DEP_ns32k_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-ns32k.h
+DEP_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
+  $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
+DEP_pdp11_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pdp11.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+DEP_pdp11_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-pdp11.h
 DEP_pj_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pj.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
 DEP_pj_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
@@ -1772,6 +1822,11 @@
 DEP_ppc_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-ppc.h
+DEP_s390_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-s390.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+DEP_s390_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-s390.h
 DEP_sh_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sh.h \
   $(INCDIR)/coff/internal.h $(INCDIR)/coff/sh.h $(BFDDIR)/libcoff.h \
   $(INCDIR)/bfdlink.h
@@ -1849,7 +1904,7 @@
 #MKDEP    DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING BELOW.
 app.o: app.c
 as.o: as.c subsegs.h $(INCDIR)/obstack.h output-file.h \
-  sb.h macro.h
+  sb.h macro.h dwarf2dbg.h
 atof-generic.o: atof-generic.c
 bignum-copy.o: bignum-copy.c
 cond.o: cond.c macro.h sb.h $(INCDIR)/obstack.h
@@ -1879,7 +1934,8 @@
 subsegs.o: subsegs.c subsegs.h $(INCDIR)/obstack.h
 symbols.o: symbols.c $(INCDIR)/obstack.h subsegs.h \
   struc-symbol.h
-write.o: write.c subsegs.h $(INCDIR)/obstack.h output-file.h
+write.o: write.c subsegs.h $(INCDIR)/obstack.h output-file.h \
+  dwarf2dbg.h
 gasp.o: gasp.c sb.h macro.h
 itbl-ops.o: itbl-ops.c itbl-ops.h
 e-crisaout.o: $(srcdir)/config/e-crisaout.c emul-target.h
diff --git a/gas/Makefile.in b/gas/Makefile.in
index bd1a89e..c5e4bba 100644
--- a/gas/Makefile.in
+++ b/gas/Makefile.in
@@ -174,8 +174,10 @@
 	mn10200 \
 	mn10300 \
 	ns32k \
+	pdp11 \
 	pj \
 	ppc \
+	s390 \
 	sh \
 	sparc \
 	tahoe \
@@ -189,7 +191,7 @@
 
 
 # Object format types.  This is only used for dependency information.
-# We deliberately omit som, since it does not work as a cross assembler.
+# We deliberately omit some, since it does not work as a cross assembler.
 
 OBJ_FORMATS = \
 	aout \
@@ -213,7 +215,7 @@
 	case $$o in \
 	aout) \
 	  case $$c in \
-	  a29k | arm | cris | i386 | m68k | mips | ns32k | sparc | tahoe | tic30 | vax) \
+	  a29k | arm | cris | i386 | m68k | mips | ns32k | pdp11 | sparc | tahoe | tic30 | vax) \
 	    valid=yes ;; \
 	  esac ;; \
 	bout) \
@@ -361,8 +363,10 @@
 	config/tc-mn10200.c \
 	config/tc-mn10300.c \
 	config/tc-ns32k.c \
+	config/tc-pdp11.c \
 	config/tc-pj.c \
 	config/tc-ppc.c \
+	config/tc-s390.c \
 	config/tc-sh.c \
 	config/tc-sparc.c \
 	config/tc-tahoe.c \
@@ -402,8 +406,10 @@
 	config/tc-mn10200.h \
 	config/tc-mn10300.h \
 	config/tc-ns32k.h \
+	config/tc-pdp11.h \
 	config/tc-pj.h \
 	config/tc-ppc.h \
+	config/tc-s390.h \
 	config/tc-sh.h \
 	config/tc-sparc.h \
 	config/tc-tahoe.h \
@@ -459,6 +465,7 @@
 	config/te-hp300.h \
 	config/te-hppa.h \
 	config/te-i386aix.h \
+	config/te-ia64aix.h \
 	config/te-ic960.h \
 	config/te-linux.h \
 	config/te-lnews.h \
@@ -659,13 +666,15 @@
 
 DEPTC_arc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-arc.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
-  subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/arc.h \
-  $(INCDIR)/elf/arc.h $(INCDIR)/elf/reloc-macros.h
+  struc-symbol.h subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/arc.h \
+  $(srcdir)/../opcodes/arc-ext.h $(INCDIR)/elf/arc.h \
+  $(INCDIR)/elf/reloc-macros.h
 
 DEPTC_arc_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-arc.h subsegs.h \
-  $(INCDIR)/obstack.h $(INCDIR)/opcode/arc.h $(INCDIR)/elf/arc.h \
+  $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arc.h struc-symbol.h \
+  subsegs.h $(INCDIR)/obstack.h $(INCDIR)/opcode/arc.h \
+  $(srcdir)/../opcodes/arc-ext.h $(INCDIR)/elf/arc.h \
   $(INCDIR)/elf/reloc-macros.h
 
 DEPTC_arm_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-arm.h \
@@ -935,6 +944,17 @@
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h $(INCDIR)/opcode/ns32k.h \
   $(INCDIR)/obstack.h
 
+DEPTC_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
+  $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/opcode/pdp11.h
+
+DEPTC_pdp11_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pdp11.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+  $(INCDIR)/opcode/pdp11.h
+
+DEPTC_pdp11_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-pdp11.h $(INCDIR)/opcode/pdp11.h
+
 DEPTC_pj_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pj.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
   $(INCDIR)/opcode/pj.h
@@ -951,7 +971,18 @@
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ppc.h subsegs.h \
   $(INCDIR)/obstack.h $(INCDIR)/opcode/ppc.h $(INCDIR)/elf/ppc.h \
-  $(INCDIR)/elf/reloc-macros.h
+  $(INCDIR)/elf/reloc-macros.h dwarf2dbg.h
+
+DEPTC_s390_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-s390.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+  subsegs.h $(INCDIR)/obstack.h struc-symbol.h $(INCDIR)/opcode/s390.h \
+  $(INCDIR)/elf/s390.h $(INCDIR)/elf/reloc-macros.h
+
+DEPTC_s390_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-s390.h subsegs.h \
+  $(INCDIR)/obstack.h struc-symbol.h $(INCDIR)/opcode/s390.h \
+  $(INCDIR)/elf/s390.h $(INCDIR)/elf/reloc-macros.h
 
 DEPTC_sh_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sh.h \
   $(INCDIR)/coff/internal.h $(INCDIR)/coff/sh.h $(BFDDIR)/libcoff.h \
@@ -1110,12 +1141,12 @@
 DEPOBJ_alpha_evax = $(srcdir)/config/obj-evax.h $(srcdir)/config/tc-alpha.h
 DEPOBJ_arc_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-arc.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
-  $(INCDIR)/obstack.h subsegs.h
+  struc-symbol.h $(INCDIR)/obstack.h subsegs.h
 
 DEPOBJ_arc_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-arc.h subsegs.h \
-  $(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
+  $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arc.h struc-symbol.h \
+  subsegs.h $(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
 
 DEPOBJ_arm_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-arm.h \
   $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
@@ -1354,6 +1385,19 @@
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h subsegs.h \
   $(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
 
+DEPOBJ_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
+  $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+  $(INCDIR)/obstack.h
+
+DEPOBJ_pdp11_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pdp11.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+  $(INCDIR)/obstack.h subsegs.h
+
+DEPOBJ_pdp11_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-pdp11.h subsegs.h \
+  $(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
+
 DEPOBJ_pj_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pj.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
   $(INCDIR)/obstack.h subsegs.h
@@ -1373,6 +1417,15 @@
   $(INCDIR)/obstack.h $(INCDIR)/elf/ppc.h $(INCDIR)/elf/reloc-macros.h \
   $(INCDIR)/aout/aout64.h
 
+DEPOBJ_s390_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-s390.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
+  $(INCDIR)/obstack.h subsegs.h
+
+DEPOBJ_s390_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-s390.h subsegs.h \
+  $(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
+
 DEPOBJ_sh_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sh.h \
   $(INCDIR)/coff/internal.h $(INCDIR)/coff/sh.h $(BFDDIR)/libcoff.h \
   $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h subsegs.h
@@ -1715,6 +1768,16 @@
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h
 
+DEP_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
+  $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
+
+DEP_pdp11_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pdp11.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+
+DEP_pdp11_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-pdp11.h
+
 DEP_pj_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pj.h \
   $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
 
@@ -1730,6 +1793,13 @@
   $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
   $(INCDIR)/bfdlink.h $(srcdir)/config/tc-ppc.h
 
+DEP_s390_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-s390.h \
+  $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
+
+DEP_s390_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-s390.h
+
 DEP_sh_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-sh.h \
   $(INCDIR)/coff/internal.h $(INCDIR)/coff/sh.h $(BFDDIR)/libcoff.h \
   $(INCDIR)/bfdlink.h
@@ -1877,7 +1947,7 @@
 
 DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
 
-TAR = gtar
+TAR = tar
 GZIP_ENV = --best
 SOURCES = $(itbl_test_SOURCES) $(as_new_SOURCES) $(EXTRA_as_new_SOURCES) $(gasp_new_SOURCES)
 OBJECTS = $(itbl_test_OBJECTS) $(as_new_OBJECTS) $(gasp_new_OBJECTS)
@@ -2695,7 +2765,7 @@
 #MKDEP    DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING BELOW.
 app.o: app.c
 as.o: as.c subsegs.h $(INCDIR)/obstack.h output-file.h \
-  sb.h macro.h
+  sb.h macro.h dwarf2dbg.h
 atof-generic.o: atof-generic.c
 bignum-copy.o: bignum-copy.c
 cond.o: cond.c macro.h sb.h $(INCDIR)/obstack.h
@@ -2725,7 +2795,8 @@
 subsegs.o: subsegs.c subsegs.h $(INCDIR)/obstack.h
 symbols.o: symbols.c $(INCDIR)/obstack.h subsegs.h \
   struc-symbol.h
-write.o: write.c subsegs.h $(INCDIR)/obstack.h output-file.h
+write.o: write.c subsegs.h $(INCDIR)/obstack.h output-file.h \
+  dwarf2dbg.h
 gasp.o: gasp.c sb.h macro.h
 itbl-ops.o: itbl-ops.c itbl-ops.h
 e-crisaout.o: $(srcdir)/config/e-crisaout.c emul-target.h
diff --git a/gas/cgen.c b/gas/cgen.c
index 271d391..602af6e 100644
--- a/gas/cgen.c
+++ b/gas/cgen.c
@@ -615,7 +615,9 @@
 	case BFD_RELOC_32:
 	  md_number_to_chars (where, value, 4);
 	  break;
-	/* FIXME: later add support for 64 bits.  */
+	case BFD_RELOC_64:
+	  md_number_to_chars (where, value, 8);
+	  break;
 	default:
 	  as_bad_where (fixP->fx_file, fixP->fx_line,
 			_("internal error: can't install fix for reloc type %d (`%s')"),
diff --git a/gas/config.in b/gas/config.in
index fc7ef2b..8477871 100644
--- a/gas/config.in
+++ b/gas/config.in
@@ -163,6 +163,12 @@
 /* Default architecture. */
 #undef DEFAULT_ARCH
 
+/* Default architecture. */
+#undef DEFAULT_ARCH
+
+/* Default architecture. */
+#undef DEFAULT_ARCH
+
 /* Using cgen code? */
 #undef USING_CGEN
 
diff --git a/gas/config/obj-coff.c b/gas/config/obj-coff.c
index e16e5df..46a4ca8 100644
--- a/gas/config/obj-coff.c
+++ b/gas/config/obj-coff.c
@@ -1434,7 +1434,7 @@
 	      switch (*input_line_pointer)
 		{
 		case 'b': flags |= SEC_ALLOC; flags &=~ SEC_LOAD; break;
-		case 'n': flags &=~ SEC_LOAD; break;
+		case 'n': flags &=~ SEC_LOAD; flags |= SEC_NEVER_LOAD; break;
 		case 'd': flags |= SEC_DATA | SEC_LOAD; /* fall through */
 		case 'w': flags &=~ SEC_READONLY; break;
 		case 'x': flags |= SEC_CODE | SEC_LOAD; break;
@@ -1488,7 +1488,7 @@
       /* This section's attributes have already been set. Warn if the
          attributes don't match.  */
       flagword matchflags = SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE
-                           | SEC_DATA | SEC_SHARED;
+	                  | SEC_DATA | SEC_SHARED | SEC_NEVER_LOAD;
       if ((flags ^ oldflags) & matchflags)
 	as_warn (_("Ignoring changed section attributes for %s"), name);
     }
@@ -4056,10 +4056,10 @@
     }
   *p = 0;
 
-  symbolP = symbol_find_or_make(name);
+  symbolP = symbol_find_or_make (name);
 
-  if (S_GET_SEGMENT(symbolP) == SEG_UNKNOWN &&
-      S_GET_VALUE(symbolP) == 0)
+  if (S_GET_SEGMENT (symbolP) == SEG_UNKNOWN &&
+      S_GET_VALUE (symbolP) == 0)
     {
       if (! need_pass_2)
 	{
@@ -4073,14 +4073,14 @@
 		       (offsetT) temp, (char *) 0);
 	  *p = 0;
 	  subseg_set (current_seg, current_subseg); /* restore current seg */
-	  S_SET_SEGMENT(symbolP, SEG_E2);
-	  S_SET_STORAGE_CLASS(symbolP, C_STAT);
+	  S_SET_SEGMENT (symbolP, SEG_E2);
+	  S_SET_STORAGE_CLASS (symbolP, C_STAT);
 	}
     }
   else
-    as_bad(_("Symbol %s already defined"), name);
+    as_bad (_("Symbol %s already defined"), name);
 
-  demand_empty_rest_of_line();
+  demand_empty_rest_of_line ();
 #endif
 }
 
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index e2e452e..514dba7 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -4323,9 +4323,16 @@
 	      if (ldst_extend (&str, halfword) == FAIL)
 		return;
 	      if (conflict_reg)
-		as_warn (_("%s register same as write-back base"),
-			 ((inst.instruction & LOAD_BIT)
-			  ? _("destination") : _("source")));
+		{
+		  if (flags & TRANS_BIT)
+		    as_warn (_("Rn and Rd must be different in %s"),
+			     ((inst.instruction & LOAD_BIT)
+			      ? "LDRT" : "STRT"));
+		  else
+		    as_warn (_("%s register same as write-back base"),
+			     ((inst.instruction & LOAD_BIT)
+			      ? _("destination") : _("source")));
+		}
 	    }
 	  else
 	    {
@@ -4346,8 +4353,15 @@
 		}
 
 	      flags |= INDEX_UP;
-	      if (! (flags & TRANS_BIT))
-		pre_inc = 1;
+	      if (flags & TRANS_BIT)
+		{
+		  if (conflict_reg)
+		    as_warn (_("Rn and Rd must be different in %s"),
+			     ((inst.instruction & LOAD_BIT)
+			      ? "LDRT" : "STRT"));
+		}
+		else
+		  pre_inc = 1;
 	    }
 	}
       else
diff --git a/gas/config/tc-fr30.c b/gas/config/tc-fr30.c
index c61a8af..ea7ffb5 100644
--- a/gas/config/tc-fr30.c
+++ b/gas/config/tc-fr30.c
@@ -208,7 +208,8 @@
 };
 
 long
-fr30_relax_frag (fragP, stretch)
+fr30_relax_frag (segment, fragP, stretch)
+     segT    segment;
      fragS * fragP;
      long    stretch;
 {
@@ -235,7 +236,7 @@
     }
   else
     {
-      growth = relax_frag (fragP, stretch);
+      growth = relax_frag (segment, fragP, stretch);
 
       /* Long jump on odd halfword boundary?  */
       if (fragP->fr_subtype == 2 && (address & 3) != 0)
diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c
index 568becd..e2905ec 100644
--- a/gas/config/tc-hppa.c
+++ b/gas/config/tc-hppa.c
@@ -133,6 +133,31 @@
     unsigned int frame_size:27;
   };
 
+/* We can't rely on compilers placing bitfields in any particular
+   place, so use these macros when dumping unwind descriptors to
+   object files.  */
+#define UNWIND_LOW32(U) \
+  (((U)->cannot_unwind << 31)		\
+   | ((U)->millicode << 30)		\
+   | ((U)->millicode_save_rest << 29)	\
+   | ((U)->region_desc << 27)		\
+   | ((U)->save_sr << 25)		\
+   | ((U)->entry_fr << 21)		\
+   | ((U)->entry_gr << 16)		\
+   | ((U)->args_stored << 15)		\
+   | ((U)->call_fr << 10)		\
+   | ((U)->call_gr << 5)		\
+   | ((U)->save_sp << 4)		\
+   | ((U)->save_rp << 3)		\
+   | ((U)->save_rp_in_frame << 2)	\
+   | ((U)->extn_ptr_defined << 1)	\
+   | ((U)->cleanup_defined << 0))
+
+#define UNWIND_HIGH32(U) \
+  (((U)->hpe_interrupt_marker << 31)	\
+   | ((U)->hpux_interrupt_marker << 30)	\
+   | ((U)->frame_size << 0))
+
 struct unwind_table
   {
     /* Starting and ending offsets of the region described by
@@ -546,7 +571,7 @@
 				  offsetT, expressionS *, int,
 				  bfd_reloc_code_real_type,
 				  enum hppa_reloc_field_selector_type_alt,
-				  int, unsigned int, int *));
+				  int, unsigned int, int));
 static int is_end_of_statement PARAMS ((void));
 static int reg_name_search PARAMS ((char *));
 static int pa_chk_field_selector PARAMS ((char **));
@@ -1278,7 +1303,7 @@
      enum hppa_reloc_field_selector_type_alt r_field;
      int r_format;
      unsigned int arg_reloc;
-     int* unwind_bits ATTRIBUTE_UNUSED;
+     int unwind_bits ATTRIBUTE_UNUSED;
 {
   fixS *new_fix;
 
@@ -1297,7 +1322,7 @@
   hppa_fix->segment = now_seg;
 #ifdef OBJ_SOM
   if (r_type == R_ENTRY || r_type == R_EXIT)
-    new_fix->fx_offset = *unwind_bits;
+    new_fix->fx_offset = unwind_bits;
 #endif
 
   /* foo-$global$ is used to access non-automatic storage.  $global$
@@ -1348,7 +1373,7 @@
 
   fix_new_hppa (frag, where, size,
 		(symbolS *) NULL, (offsetT) 0, exp, 0, rel_type,
-		hppa_field_selector, size * 8, 0, NULL);
+		hppa_field_selector, size * 8, 0, 0);
 
   /* Reset field selector to its default state.  */
   hppa_field_selector = 0;
@@ -1458,12 +1483,14 @@
 		 information when the label appears after the proc/procend.  */
 	      if (within_entry_exit)
 		{
-		  char *where = frag_more (0);
+		  char *where;
+		  unsigned int u;
 
+		  where = frag_more (0);
+		  u = UNWIND_LOW32 (&last_call_info->ci_unwind.descriptor);
 		  fix_new_hppa (frag_now, where - frag_now->fr_literal, 0,
 				NULL, (offsetT) 0, NULL,
-				0, R_HPPA_ENTRY, e_fsel, 0, 0,
-				(int *)&last_call_info->ci_unwind.descriptor);
+				0, R_HPPA_ENTRY, e_fsel, 0, 0, u);
 		}
 #endif
 	    }
@@ -1488,7 +1515,7 @@
     fix_new_hppa (frag_now, (to - frag_now->fr_literal), 4, NULL,
 		  (offsetT) 0, &the_insn.exp, the_insn.pcrel,
 		  the_insn.reloc, the_insn.field_selector,
-		  the_insn.format, the_insn.arg_reloc, NULL);
+		  the_insn.format, the_insn.arg_reloc, 0);
 
 #ifdef OBJ_ELF
   dwarf2_emit_insn (4);
@@ -5923,7 +5950,7 @@
   fix_new_hppa (frag_now, where - frag_now->fr_literal, 0,
 		NULL, (offsetT) 0, NULL,
 		0, begin ? R_HPPA_BEGIN_BRTAB : R_HPPA_END_BRTAB,
-		e_fsel, 0, 0, NULL);
+		e_fsel, 0, 0, 0);
 #endif
 
   demand_empty_rest_of_line ();
@@ -5948,7 +5975,7 @@
   fix_new_hppa (frag_now, where - frag_now->fr_literal, 0,
 		NULL, (offsetT) 0, begin ? NULL : &exp,
 		0, begin ? R_HPPA_BEGIN_TRY : R_HPPA_END_TRY,
-		e_fsel, 0, 0, NULL);
+		e_fsel, 0, 0, 0);
 #endif
 
   demand_empty_rest_of_line ();
@@ -6049,12 +6076,11 @@
 pa_build_unwind_subspace (call_info)
      struct call_info *call_info;
 {
-  char *unwind;
   asection *seg, *save_seg;
   subsegT save_subseg;
-  unsigned int i;
+  unsigned int unwind;
   int reloc;
-  char c, *p;
+  char *p;
 
   if ((bfd_get_section_flags (stdoutput, now_seg)
        & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
@@ -6081,17 +6107,14 @@
 
   /* Get some space to hold relocation information for the unwind
      descriptor.  */
-  p = frag_more (4);
-  md_number_to_chars (p, 0, 4);
+  p = frag_more (16);
 
   /* Relocation info. for start offset of the function.  */
+  md_number_to_chars (p, 0, 4);
   fix_new_hppa (frag_now, p - frag_now->fr_literal, 4,
 		call_info->start_symbol, (offsetT) 0,
 		(expressionS *) NULL, 0, reloc,
-		e_fsel, 32, 0, NULL);
-
-  p = frag_more (4);
-  md_number_to_chars (p, 0, 4);
+		e_fsel, 32, 0, 0);
 
   /* Relocation info. for end offset of the function.
 
@@ -6100,21 +6123,18 @@
      symbol into the symbol table.  It (should) end up giving the same
      value as call_info->start_symbol + function size once the linker is
      finished with its work.  */
-
-  fix_new_hppa (frag_now, p - frag_now->fr_literal, 4,
+  md_number_to_chars (p + 4, 0, 4);
+  fix_new_hppa (frag_now, p + 4 - frag_now->fr_literal, 4,
 		call_info->end_symbol, (offsetT) 0,
 		(expressionS *) NULL, 0, reloc,
-		e_fsel, 32, 0, NULL);
+		e_fsel, 32, 0, 0);
 
-  /* Dump it.  */
-  unwind = (char *) &call_info->ci_unwind;
-  for (i = 8; i < sizeof (struct unwind_table); i++)
-    {
-      c = *(unwind + i);
-      {
-	FRAG_APPEND_1_CHAR (c);
-      }
-    }
+  /* Dump the descriptor.  */
+  unwind = UNWIND_LOW32 (&call_info->ci_unwind.descriptor);
+  md_number_to_chars (p + 8, unwind, 4);
+
+  unwind = UNWIND_HIGH32 (&call_info->ci_unwind.descriptor);
+  md_number_to_chars (p + 12, unwind, 4);
 
   /* Return back to the original segment/subsegment.  */
   subseg_set (save_seg, save_subseg);
@@ -6404,12 +6424,14 @@
      denote the entry and exit points.  */
   if (last_call_info->start_symbol != NULL)
     {
-      char *where = frag_more (0);
+      char *where;
+      unsigned int u;
 
+      where = frag_more (0);
+      u = UNWIND_LOW32 (&last_call_info->ci_unwind.descriptor);
       fix_new_hppa (frag_now, where - frag_now->fr_literal, 0,
 		    NULL, (offsetT) 0, NULL,
-		    0, R_HPPA_ENTRY, e_fsel, 0, 0,
-		    (int *) &last_call_info->ci_unwind.descriptor);
+		    0, R_HPPA_ENTRY, e_fsel, 0, 0, u);
     }
 #endif
 }
@@ -6517,7 +6539,7 @@
   fix_new_hppa (frag_now, where - frag_now->fr_literal, 0,
 		NULL, (offsetT) 0,
 		NULL, 0, R_HPPA_EXIT, e_fsel, 0, 0,
-		(int *) &last_call_info->ci_unwind.descriptor + 1);
+		UNWIND_HIGH32 (&last_call_info->ci_unwind.descriptor));
 #endif
 }
 
@@ -7048,12 +7070,14 @@
 		 information when the label appears after the proc/procend.  */
 	      if (within_entry_exit)
 		{
-		  char *where = frag_more (0);
+		  char *where;
+		  unsigned int u;
 
+		  where = frag_more (0);
+		  u = UNWIND_LOW32 (&last_call_info->ci_unwind.descriptor);
 		  fix_new_hppa (frag_now, where - frag_now->fr_literal, 0,
 				NULL, (offsetT) 0, NULL,
-				0, R_HPPA_ENTRY, e_fsel, 0, 0,
-				(int *) &last_call_info->ci_unwind.descriptor);
+				0, R_HPPA_ENTRY, e_fsel, 0, 0, u);
 		}
 #endif
 	    }
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index f1e7006..f3249ff 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -273,15 +273,20 @@
 /* CPU feature flags.  */
 static unsigned int cpu_arch_flags = CpuUnknownFlags|CpuNo64;
 
+/* If set, conditional jumps are not automatically promoted to handle
+   larger than a byte offset.  */
+static unsigned int no_cond_jump_promotion = 0;
+
 /* Interface to relax_segment.
-   There are 2 relax states for 386 jump insns: one for conditional &
-   one for unconditional jumps.  This is because these two types of
-   jumps add different sizes to frags when we're figuring out what
-   sort of jump to choose to reach a given label.  */
+   There are 3 major relax states for 386 jump insns because the
+   different types of jumps add different sizes to frags when we're
+   figuring out what sort of jump to choose to reach a given label.  */
 
 /* Types.  */
-#define COND_JUMP 1
-#define UNCOND_JUMP 2
+#define UNCOND_JUMP 1
+#define COND_JUMP 2
+#define COND_JUMP86 3
+
 /* Sizes.  */
 #define CODE16	1
 #define SMALL	0
@@ -297,10 +302,12 @@
 #endif
 #endif
 
-#define ENCODE_RELAX_STATE(type,size) \
-  ((relax_substateT) ((type<<2) | (size)))
-#define SIZE_FROM_RELAX_STATE(s) \
-    ( (((s) & 0x3) == BIG ? 4 : (((s) & 0x3) == BIG16 ? 2 : 1)) )
+#define ENCODE_RELAX_STATE(type, size) \
+  ((relax_substateT) (((type) << 2) | (size)))
+#define TYPE_FROM_RELAX_STATE(s) \
+  ((s) >> 2)
+#define DISP_SIZE_FROM_RELAX_STATE(s) \
+    ((((s) & 3) == BIG ? 4 : (((s) & 3) == BIG16 ? 2 : 1)))
 
 /* This table is used by relax_frag to promote short jumps to long
    ones where necessary.  SMALL (short) jumps may be promoted to BIG
@@ -322,6 +329,17 @@
   {1, 1, 0, 0},
   {1, 1, 0, 0},
 
+  /* UNCOND_JUMP states.  */
+  {127 + 1, -128 + 1, 0, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG)},
+  {127 + 1, -128 + 1, 0, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16)},
+  /* dword jmp adds 3 bytes to frag:
+     0 extra opcode bytes, 3 extra displacement bytes.  */
+  {0, 0, 3, 0},
+  /* word jmp adds 1 byte to frag:
+     0 extra opcode bytes, 1 extra displacement byte.  */
+  {0, 0, 1, 0},
+
+  /* COND_JUMP states.  */
   {127 + 1, -128 + 1, 0, ENCODE_RELAX_STATE (COND_JUMP, BIG)},
   {127 + 1, -128 + 1, 0, ENCODE_RELAX_STATE (COND_JUMP, BIG16)},
   /* dword conditionals adds 4 bytes to frag:
@@ -331,15 +349,15 @@
      1 extra opcode byte, 1 extra displacement byte.  */
   {0, 0, 2, 0},
 
-  {127 + 1, -128 + 1, 0, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG)},
-  {127 + 1, -128 + 1, 0, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16)},
-  /* dword jmp adds 3 bytes to frag:
-     0 extra opcode bytes, 3 extra displacement bytes.  */
-  {0, 0, 3, 0},
-  /* word jmp adds 1 byte to frag:
-     0 extra opcode bytes, 1 extra displacement byte.  */
-  {0, 0, 1, 0}
-
+  /* COND_JUMP86 states.  */
+  {127 + 1, -128 + 1, 0, ENCODE_RELAX_STATE (COND_JUMP86, BIG)},
+  {127 + 1, -128 + 1, 0, ENCODE_RELAX_STATE (COND_JUMP86, BIG16)},
+  /* dword conditionals adds 4 bytes to frag:
+     1 extra opcode byte, 3 extra displacement bytes.  */
+  {0, 0, 4, 0},
+  /* word conditionals add 3 bytes to frag:
+     1 extra opcode byte, 2 extra displacement bytes.  */
+  {0, 0, 3, 0}
 };
 
 static const arch_entry cpu_arch[] = {
@@ -726,7 +744,8 @@
 	  if (strcmp (string, cpu_arch[i].name) == 0)
 	    {
 	      cpu_arch_name = cpu_arch[i].name;
-	      cpu_arch_flags = cpu_arch[i].flags | (flag_code == CODE_64BIT ? Cpu64 : CpuNo64);
+	      cpu_arch_flags = (cpu_arch[i].flags
+				| (flag_code == CODE_64BIT ? Cpu64 : CpuNo64));
 	      break;
 	    }
 	}
@@ -738,6 +757,23 @@
   else
     as_bad (_("missing cpu architecture"));
 
+  no_cond_jump_promotion = 0;
+  if (*input_line_pointer == ','
+      && ! is_end_of_line[(unsigned char) input_line_pointer[1]])
+    {
+      char *string = ++input_line_pointer;
+      int e = get_symbol_end ();
+
+      if (strcmp (string, "nojumps") == 0)
+	no_cond_jump_promotion = 1;
+      else if (strcmp (string, "jumps") == 0)
+	;
+      else
+	as_bad (_("no such architecture modifier: `%s'"), string);
+
+      *input_line_pointer = e;
+    }
+
   demand_empty_rest_of_line ();
 }
 
@@ -1152,6 +1188,7 @@
       || fixP->fx_r_type == BFD_RELOC_386_GOT32
       || fixP->fx_r_type == BFD_RELOC_X86_64_PLT32
       || fixP->fx_r_type == BFD_RELOC_X86_64_GOT32
+      || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPCREL
       || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
       || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
     return 0;
@@ -1197,7 +1234,8 @@
   /* Points to template once we've found it.  */
   const template *t;
 
-  /* Count the size of the instruction generated.  */
+  /* Count the size of the instruction generated.  Does not include
+     variable part of jump insns before relax.  */
   int insn_size = 0;
 
   int j;
@@ -2671,7 +2709,6 @@
     /* Output jumps.  */
     if (i.tm.opcode_modifier & Jump)
       {
-	int size;
 	int code16;
 	int prefix;
 
@@ -2692,10 +2729,6 @@
 	    i.prefixes--;
 	  }
 
-	size = 4;
-	if (code16)
-	  size = 2;
-
 	if (i.prefixes != 0 && !intel_syntax)
 	  as_warn (_("skipping prefixes on this instruction"));
 
@@ -2704,7 +2737,7 @@
 	   instruction we may generate in md_convert_frag.  This is 2
 	   bytes for the opcode and room for the prefix and largest
 	   displacement.  */
-	frag_grow (prefix + 2 + size);
+	frag_grow (prefix + 2 + 4);
 	insn_size += prefix + 1;
 	/* Prefix and 1 opcode byte go in fr_fix.  */
 	p = frag_more (prefix + 1);
@@ -2716,11 +2749,13 @@
 	/* 1 possible extra opcode + displacement go in var part.
 	   Pass reloc in fr_var.  */
 	frag_var (rs_machine_dependent,
-		  1 + size,
+		  1 + 4,
 		  i.disp_reloc[0],
 		  ((unsigned char) *p == JUMP_PC_RELATIVE
 		   ? ENCODE_RELAX_STATE (UNCOND_JUMP, SMALL) | code16
-		   : ENCODE_RELAX_STATE (COND_JUMP, SMALL) | code16),
+		   : ((cpu_arch_flags & Cpu386) != 0
+		      ? ENCODE_RELAX_STATE (COND_JUMP, SMALL) | code16
+		      : ENCODE_RELAX_STATE (COND_JUMP86, SMALL) | code16)),
 		  i.op[0].disps->X_add_symbol,
 		  i.op[0].disps->X_add_number,
 		  p);
@@ -3436,7 +3471,10 @@
       assert (exp->X_op == O_symbol);
       exp->X_op = O_subtract;
       exp->X_op_symbol = GOT_symbol;
-      i.disp_reloc[this_operand] = BFD_RELOC_32;
+      if (i.disp_reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL)
+        i.disp_reloc[this_operand] = BFD_RELOC_32_PCREL;
+      else
+        i.disp_reloc[this_operand] = BFD_RELOC_32;
     }
 #endif
 
@@ -3906,10 +3944,10 @@
       old_fr_fix = fragP->fr_fix;
       opcode = (unsigned char *) fragP->fr_opcode;
 
-      switch (opcode[0])
+      switch (TYPE_FROM_RELAX_STATE (fragP->fr_subtype))
 	{
-	case JUMP_PC_RELATIVE:
-	  /* Make jmp (0xeb) a dword displacement jump.  */
+	case UNCOND_JUMP:
+	  /* Make jmp (0xeb) a (d)word displacement jump.  */
 	  opcode[0] = 0xe9;
 	  fragP->fr_fix += size;
 	  fix_new (fragP, old_fr_fix, size,
@@ -3918,9 +3956,33 @@
 		   reloc_type);
 	  break;
 
-	default:
+	case COND_JUMP86:
+	  if (no_cond_jump_promotion)
+	    return 1;
+	  if (size == 2)
+	    {
+	      /* Negate the condition, and branch past an
+		 unconditional jump.  */
+	      opcode[0] ^= 1;
+	      opcode[1] = 3;
+	      /* Insert an unconditional jump.  */
+	      opcode[2] = 0xe9;
+	      /* We added two extra opcode bytes, and have a two byte
+		 offset.  */
+	      fragP->fr_fix += 2 + 2;
+	      fix_new (fragP, old_fr_fix + 2, 2,
+		       fragP->fr_symbol,
+		       fragP->fr_offset, 1,
+		       reloc_type);
+	      break;
+	    }
+	  /* Fall through.  */
+
+	case COND_JUMP:
+	  if (no_cond_jump_promotion)
+	    return 1;
 	  /* This changes the byte-displacement jump 0x7N
-	     to the dword-displacement jump 0x0f,0x8N.  */
+	     to the (d)word-displacement jump 0x0f,0x8N.  */
 	  opcode[1] = opcode[0] + 0x10;
 	  opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
 	  /* We've added an opcode byte.  */
@@ -3930,6 +3992,10 @@
 		   fragP->fr_offset, 1,
 		   reloc_type);
 	  break;
+
+	default:
+	  BAD_CASE (fragP->fr_subtype);
+	  break;
 	}
       frag_wane (fragP);
       return fragP->fr_fix - old_fr_fix;
@@ -3983,51 +4049,65 @@
   /* Displacement from opcode start to fill into instruction.  */
   displacement_from_opcode_start = target_address - opcode_address;
 
-  switch (fragP->fr_subtype)
+  if ((fragP->fr_subtype & BIG) == 0)
     {
-    case ENCODE_RELAX_STATE (COND_JUMP, SMALL):
-    case ENCODE_RELAX_STATE (COND_JUMP, SMALL16):
-    case ENCODE_RELAX_STATE (UNCOND_JUMP, SMALL):
-    case ENCODE_RELAX_STATE (UNCOND_JUMP, SMALL16):
       /* Don't have to change opcode.  */
       extension = 1;		/* 1 opcode + 1 displacement  */
       where_to_put_displacement = &opcode[1];
-      break;
-
-    case ENCODE_RELAX_STATE (COND_JUMP, BIG):
-      extension = 5;		/* 2 opcode + 4 displacement  */
-      opcode[1] = opcode[0] + 0x10;
-      opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
-      where_to_put_displacement = &opcode[2];
-      break;
-
-    case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG):
-      extension = 4;		/* 1 opcode + 4 displacement  */
-      opcode[0] = 0xe9;
-      where_to_put_displacement = &opcode[1];
-      break;
-
-    case ENCODE_RELAX_STATE (COND_JUMP, BIG16):
-      extension = 3;		/* 2 opcode + 2 displacement  */
-      opcode[1] = opcode[0] + 0x10;
-      opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
-      where_to_put_displacement = &opcode[2];
-      break;
-
-    case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16):
-      extension = 2;		/* 1 opcode + 2 displacement  */
-      opcode[0] = 0xe9;
-      where_to_put_displacement = &opcode[1];
-      break;
-
-    default:
-      BAD_CASE (fragP->fr_subtype);
-      break;
     }
+  else
+    {
+      if (no_cond_jump_promotion
+	  && TYPE_FROM_RELAX_STATE (fragP->fr_subtype) != UNCOND_JUMP)
+	as_warn_where (fragP->fr_file, fragP->fr_line, _("long jump required"));
+
+      switch (fragP->fr_subtype)
+	{
+	case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG):
+	  extension = 4;		/* 1 opcode + 4 displacement  */
+	  opcode[0] = 0xe9;
+	  where_to_put_displacement = &opcode[1];
+	  break;
+
+	case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16):
+	  extension = 2;		/* 1 opcode + 2 displacement  */
+	  opcode[0] = 0xe9;
+	  where_to_put_displacement = &opcode[1];
+	  break;
+
+	case ENCODE_RELAX_STATE (COND_JUMP, BIG):
+	case ENCODE_RELAX_STATE (COND_JUMP86, BIG):
+	  extension = 5;		/* 2 opcode + 4 displacement  */
+	  opcode[1] = opcode[0] + 0x10;
+	  opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
+	  where_to_put_displacement = &opcode[2];
+	  break;
+
+	case ENCODE_RELAX_STATE (COND_JUMP, BIG16):
+	  extension = 3;		/* 2 opcode + 2 displacement  */
+	  opcode[1] = opcode[0] + 0x10;
+	  opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
+	  where_to_put_displacement = &opcode[2];
+	  break;
+
+	case ENCODE_RELAX_STATE (COND_JUMP86, BIG16):
+	  extension = 4;
+	  opcode[0] ^= 1;
+	  opcode[1] = 3;
+	  opcode[2] = 0xe9;
+	  where_to_put_displacement = &opcode[3];
+	  break;
+
+	default:
+	  BAD_CASE (fragP->fr_subtype);
+	  break;
+	}
+    }
+
   /* Now put displacement after opcode.  */
   md_number_to_chars ((char *) where_to_put_displacement,
 		      (valueT) (displacement_from_opcode_start - extension),
-		      SIZE_FROM_RELAX_STATE (fragP->fr_subtype));
+		      DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype));
   fragP->fr_fix += extension;
 }
 
@@ -4117,7 +4197,7 @@
   if ((fixP->fx_r_type == BFD_RELOC_32_PCREL
        || fixP->fx_r_type == BFD_RELOC_16_PCREL
        || fixP->fx_r_type == BFD_RELOC_8_PCREL)
-      && fixP->fx_addsy)
+      && fixP->fx_addsy && !use_rela_relocations)
     {
 #ifndef OBJ_AOUT
       if (OUTPUT_FLAVOR == bfd_target_elf_flavour
@@ -4600,9 +4680,18 @@
   if (fixp->fx_subsy && fixp->fx_subsy == GOT_symbol)
     {
       /* GOTOFF relocation are nonsense in 64bit mode.  */
-      if (flag_code == CODE_64BIT)
-	abort ();
-      fixp->fx_r_type = BFD_RELOC_386_GOTOFF;
+      if (fixp->fx_r_type == BFD_RELOC_32_PCREL)
+	{
+	  if (flag_code != CODE_64BIT)
+	    abort ();
+	  fixp->fx_r_type = BFD_RELOC_X86_64_GOTPCREL;
+	}
+      else
+	{
+	  if (flag_code == CODE_64BIT)
+	    abort ();
+	  fixp->fx_r_type = BFD_RELOC_386_GOTOFF;
+	}
       fixp->fx_subsy = 0;
     }
 }
@@ -4693,15 +4782,6 @@
   else
     {
       rel->addend = fixp->fx_offset;
-#ifdef OBJ_ELF
-      /* Ohhh, this is ugly.  The problem is that if this is a local global
-         symbol, the relocation will entirely be performed at link time, not
-         at assembly time.  bfd_perform_reloc doesn't know about this sort
-         of thing, and as a result we need to fake it out here.  */
-      if ((S_IS_EXTERN (fixp->fx_addsy) || S_IS_WEAK (fixp->fx_addsy))
-	  && !S_IS_COMMON (fixp->fx_addsy))
-	rel->addend -= symbol_get_bfdsym (fixp->fx_addsy)->value;
-#endif
       if (fixp->fx_pcrel)
 	rel->addend -= fixp->fx_size;
     }
diff --git a/gas/config/tc-i386.h b/gas/config/tc-i386.h
index 3a66177..a68d5e4 100644
--- a/gas/config/tc-i386.h
+++ b/gas/config/tc-i386.h
@@ -75,6 +75,9 @@
 #define TARGET_MACH		(i386_mach ())
 extern unsigned long i386_mach PARAMS ((void));
 
+#ifdef TE_FreeBSD
+#define AOUT_TARGET_FORMAT	"a.out-i386-freebsd"
+#endif
 #ifdef TE_NetBSD
 #define AOUT_TARGET_FORMAT	"a.out-i386-netbsd"
 #endif
diff --git a/gas/config/tc-ia64.c b/gas/config/tc-ia64.c
index 4f761e2..a551a41 100644
--- a/gas/config/tc-ia64.c
+++ b/gas/config/tc-ia64.c
@@ -1,5 +1,5 @@
 /* tc-ia64.c -- Assembler for the HP/Intel IA-64 architecture.
-   Copyright (C) 1998, 1999, 2000 Free Software Foundation.
+   Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation.
    Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
 
    This file is part of GAS, the GNU Assembler.
@@ -124,6 +124,13 @@
     DYNREG_NUM_TYPES
   };
 
+enum operand_match_result
+  {
+    OPERAND_MATCH,
+    OPERAND_OUT_OF_RANGE,
+    OPERAND_MISMATCH
+  };
+
 /* On the ia64, we can't know the address of a text label until the
    instructions are packed into a bundle.  To handle this, we keep
    track of the list of labels that appear in front of each
@@ -617,10 +624,14 @@
   symbolS *proc_end;
   symbolS *info;		/* pointer to unwind info */
   symbolS *personality_routine;
+  segT saved_text_seg;
+  subsegT saved_text_subseg;
+  unsigned int force_unwind_entry : 1;	/* force generation of unwind entry? */
 
   /* TRUE if processing unwind directives in a prologue region.  */
   int prologue;
   int prologue_mask;
+  unsigned int prologue_count;	/* number of .prologues seen so far */
 } unwind;
 
 typedef void (*vbyte_func) PARAMS ((int, char *, char *));
@@ -686,8 +697,9 @@
 static symbolS *declare_register PARAMS ((const char *name, int regnum));
 static void declare_register_set PARAMS ((const char *, int, int));
 static unsigned int operand_width PARAMS ((enum ia64_opnd));
-static int operand_match PARAMS ((const struct ia64_opcode *idesc,
-				  int index, expressionS *e));
+static enum operand_match_result operand_match PARAMS ((const struct ia64_opcode *idesc,
+							int index,
+							expressionS *e));
 static int parse_operand PARAMS ((expressionS *e));
 static struct ia64_opcode * parse_operands PARAMS ((struct ia64_opcode *));
 static void build_insn PARAMS ((struct slot *, bfd_vma *));
@@ -825,11 +837,28 @@
 static int count_bits PARAMS ((unsigned long));
 static unsigned long slot_index PARAMS ((unsigned long, fragS *,
 					 unsigned long, fragS *));
+static unw_rec_list *optimize_unw_records PARAMS ((unw_rec_list *));
 static void fixup_unw_records PARAMS ((unw_rec_list *));
 static int output_unw_records PARAMS ((unw_rec_list *, void **));
 static int convert_expr_to_ab_reg PARAMS ((expressionS *, unsigned int *, unsigned int *));
 static int convert_expr_to_xy_reg PARAMS ((expressionS *, unsigned int *, unsigned int *));
-static int generate_unwind_image PARAMS ((void));
+static int generate_unwind_image PARAMS ((const char *));
+
+/* Build the unwind section name by appending the (possibly stripped)
+   text section NAME to the unwind PREFIX.  The resulting string
+   pointer is assigned to RESULT.  The string is allocated on the
+   stack, so this must be a macro... */
+#define make_unw_section_name(special, text_name, result)		   \
+  {									   \
+    char *_prefix = special_section_name[special];			   \
+    size_t _prefix_len = strlen (_prefix), _text_len = strlen (text_name); \
+    char *_result = alloca (_prefix_len + _text_len + 1);		   \
+    memcpy(_result, _prefix, _prefix_len);				   \
+    memcpy(_result + _prefix_len, text_name, _text_len);		   \
+    _result[_prefix_len + _text_len] = '\0';				   \
+    result = _result;							   \
+  }									   \
+while (0)
 
 /* Determine if application register REGNUM resides in the integer
    unit (as opposed to the memory unit).  */
@@ -874,6 +903,22 @@
   return flags;
 }
 
+int
+ia64_elf_section_type (str, len)
+	const char *str;
+	size_t len;
+{
+  len = sizeof (ELF_STRING_ia64_unwind_info) - 1;
+  if (strncmp (str, ELF_STRING_ia64_unwind_info, len) == 0)
+    return SHT_PROGBITS;
+
+  len = sizeof (ELF_STRING_ia64_unwind) - 1;
+  if (strncmp (str, ELF_STRING_ia64_unwind, len) == 0)
+    return SHT_IA_64_UNWIND;
+
+  return -1;
+}
+
 static unsigned int
 set_regstack (ins, locs, outs, rots)
      unsigned int ins, locs, outs, rots;
@@ -2495,6 +2540,25 @@
   return index;
 }
 
+/* Optimize unwind record directives.  */
+
+static unw_rec_list *
+optimize_unw_records (list)
+     unw_rec_list *list;
+{
+  if (!list)
+    return NULL;
+
+  /* If the only unwind record is ".prologue" or ".prologue" followed
+     by ".body", then we can optimize the unwind directives away.  */
+  if (list->r.type == prologue
+      && (list->next == NULL
+	  || (list->next->r.type == body && list->next->next == NULL)))
+    return NULL;
+
+  return list;
+}
+
 /* Given a complete record list, process any records which have
    unresolved fields, (ie length counts for a prologue).  After
    this has been run, all neccessary information should be available
@@ -2681,6 +2745,9 @@
   int size, x, extra = 0;
   unsigned char *mem;
 
+  *ptr = NULL;
+
+  list = optimize_unw_records (list);
   fixup_unw_records (list);
   size = calc_record_size (list);
 
@@ -2688,24 +2755,33 @@
   x = size % 8;
   if (x != 0)
     extra = 8 - x;
-  /* Add 8 for the header + 8 more bytes for the personality offset.  */
-  mem = xmalloc (size + extra + 16);
 
-  vbyte_mem_ptr = mem + 8;
-  /* Clear the padding area and personality.  */
-  memset (mem + 8 + size, 0 , extra + 8);
-  /* Initialize the header area.  */
-  md_number_to_chars (mem, (((bfd_vma) 1 << 48)     /* version */
-			    | (unwind.personality_routine
-			       ? ((bfd_vma) 3 << 32) /* U & E handler flags */
-			       : 0)
-			    | ((size + extra) / 8)),  /* length (dwords) */
-		      8);
+  if (size > 0 || unwind.force_unwind_entry)
+    {
+      unwind.force_unwind_entry = 0;
 
-  process_unw_records (list, output_vbyte_mem);
+      /* Add 8 for the header + 8 more bytes for the personality offset.  */
+      mem = xmalloc (size + extra + 16);
 
-  *ptr = mem;
-  return size + extra + 16;
+      vbyte_mem_ptr = mem + 8;
+      /* Clear the padding area and personality.  */
+      memset (mem + 8 + size, 0 , extra + 8);
+      /* Initialize the header area.  */
+      md_number_to_chars (mem,
+			  (((bfd_vma) 1 << 48)     /* version */
+			   | (unwind.personality_routine
+			      ? ((bfd_vma) 3 << 32) /* U & E handler flags */
+			      : 0)
+			   | ((size + extra) / 8)),  /* length (dwords) */
+			  8);
+
+      process_unw_records (list, output_vbyte_mem);
+
+      *ptr = mem;
+
+      size += extra + 16;
+    }
+  return size;
 }
 
 static int
@@ -2980,7 +3056,7 @@
      int dummy ATTRIBUTE_UNUSED;
 {
   expressionS e1, e2;
-  unsigned long ecount = 0;
+  unsigned long ecount;	/* # of _additional_ regions to pop */
   int sep;
 
   sep = parse_operand (&e1);
@@ -2993,14 +3069,21 @@
   if (sep == ',')
     {
       parse_operand (&e2);
-      if (e1.X_op != O_constant)
+      if (e2.X_op != O_constant || e2.X_add_number < 0)
 	{
-	  as_bad ("Second operand to .restore must be constant");
+	  as_bad ("Second operand to .restore must be a constant >= 0");
 	  return;
 	}
-      ecount = e1.X_op;
+      ecount = e2.X_add_number;
     }
+  else
+    ecount = unwind.prologue_count - 1;
   add_unwind_entry (output_epilogue (ecount));
+
+  if (ecount < unwind.prologue_count)
+    unwind.prologue_count -= ecount + 1;
+  else
+    unwind.prologue_count = 0;
 }
 
 static void
@@ -3053,7 +3136,8 @@
 }
 
 static int
-generate_unwind_image ()
+generate_unwind_image (text_name)
+     const char *text_name;
 {
   int size;
   unsigned char *unw_rec;
@@ -3071,8 +3155,13 @@
   if (size != 0)
     {
       unsigned char *where;
+      char *sec_name;
       expressionS exp;
-      set_section ((char *) special_section_name[SPECIAL_SECTION_UNWIND_INFO]);
+
+      make_unw_section_name (SPECIAL_SECTION_UNWIND_INFO, text_name, sec_name);
+      set_section (sec_name);
+      bfd_set_section_flags (stdoutput, now_seg,
+			     SEC_LOAD | SEC_ALLOC | SEC_READONLY);
 
       /* Make sure the section has 8 byte alignment.  */
       record_alignment (now_seg, 3);
@@ -3088,6 +3177,7 @@
       /* Copy the information from the unwind record into this section. The
 	 data is already in the correct byte order.  */
       memcpy (where, unw_rec, size);
+
       /* Add the personality address to the image.  */
       if (unwind.personality_routine != 0)
 	{
@@ -3098,7 +3188,6 @@
 	  		     &exp, 0, BFD_RELOC_IA64_LTOFF_FPTR64LSB);
 	  unwind.personality_routine = 0;
 	}
-      obj_elf_previous (0);
     }
 
   free_list_records (unwind.list);
@@ -3111,7 +3200,23 @@
 dot_handlerdata (dummy)
      int dummy ATTRIBUTE_UNUSED;
 {
-  generate_unwind_image ();
+  const char *text_name = segment_name (now_seg);
+
+  /* If text section name starts with ".text" (which it should),
+     strip this prefix off.  */
+  if (strcmp (text_name, ".text") == 0)
+    text_name = "";
+
+  unwind.force_unwind_entry = 1;
+
+  /* Remember which segment we're in so we can switch back after .endp */
+  unwind.saved_text_seg = now_seg;
+  unwind.saved_text_subseg = now_subseg;
+
+  /* Generate unwind info into unwind-info section and then leave that
+     section as the currently active one so dataXX directives go into
+     the language specific data area of the unwind info block.  */
+  generate_unwind_image (text_name);
   demand_empty_rest_of_line ();
 }
 
@@ -3119,6 +3224,7 @@
 dot_unwentry (dummy)
      int dummy ATTRIBUTE_UNUSED;
 {
+  unwind.force_unwind_entry = 1;
   demand_empty_rest_of_line ();
 }
 
@@ -3583,6 +3689,7 @@
   c = get_symbol_end ();
   p = input_line_pointer;
   unwind.personality_routine = symbol_find_or_make (name);
+  unwind.force_unwind_entry = 1;
   *p = c;
   SKIP_WHITESPACE ();
   demand_empty_rest_of_line ();
@@ -3619,6 +3726,7 @@
   demand_empty_rest_of_line ();
   ia64_do_align (16);
 
+  unwind.prologue_count = 0;
   unwind.list = unwind.tail = unwind.current_entry = NULL;
   unwind.personality_routine = 0;
 }
@@ -3673,6 +3781,7 @@
 
   unwind.prologue = 1;
   unwind.prologue_mask = mask;
+  ++unwind.prologue_count;
 }
 
 static void
@@ -3685,57 +3794,115 @@
   long where;
   segT saved_seg;
   subsegT saved_subseg;
+  const char *sec_name, *text_name;
 
-  saved_seg = now_seg;
-  saved_subseg = now_subseg;
+  if (unwind.saved_text_seg)
+    {
+      saved_seg = unwind.saved_text_seg;
+      saved_subseg = unwind.saved_text_subseg;
+      unwind.saved_text_seg = NULL;
+    }
+  else
+    {
+      saved_seg = now_seg;
+      saved_subseg = now_subseg;
+    }
+
+  /*
+    Use a slightly ugly scheme to derive the unwind section names from
+    the text section name:
+
+    text sect.  unwind table sect.
+    name:       name:                      comments:
+    ----------  -----------------          --------------------------------
+    .text       .IA_64.unwind
+    .text.foo   .IA_64.unwind.text.foo
+    .foo        .IA_64.unwind.foo
+    _info       .IA_64.unwind_info         gas issues error message (ditto)
+    _infoFOO    .IA_64.unwind_infoFOO      gas issues error message (ditto)
+
+    This mapping is done so that:
+
+	(a) An object file with unwind info only in .text will use
+	    unwind section names .IA_64.unwind and .IA_64.unwind_info.
+	    This follows the letter of the ABI and also ensures backwards
+	    compatibility with older toolchains.
+
+	(b) An object file with unwind info in multiple text sections
+	    will use separate unwind sections for each text section.
+	    This allows us to properly set the "sh_info" and "sh_link"
+	    fields in SHT_IA_64_UNWIND as required by the ABI and also
+	    lets GNU ld support programs with multiple segments
+	    containing unwind info (as might be the case for certain
+	    embedded applications).
+	    
+	(c) An error is issued if there would be a name clash.
+  */
+  text_name = segment_name (saved_seg);
+  if (strncmp (text_name, "_info", 5) == 0)
+    {
+      as_bad ("Illegal section name `%s' (causes unwind section name clash)",
+	      text_name);
+      ignore_rest_of_line ();
+      return;
+    }
+  if (strcmp (text_name, ".text") == 0)
+    text_name = "";
 
   expression (&e);
   demand_empty_rest_of_line ();
 
   insn_group_break (1, 0, 0);
 
-  /* If there was a .handlerdata, we haven't generated an image yet.  */
-  if (unwind.info == 0)
+  /* If there wasn't a .handlerdata, we haven't generated an image yet.  */
+  if (!unwind.info)
+    generate_unwind_image (text_name);
+
+  if (unwind.info || unwind.force_unwind_entry)
     {
-      generate_unwind_image ();
-    }
+      subseg_set (md.last_text_seg, 0);
+      unwind.proc_end = expr_build_dot ();
 
-  subseg_set (md.last_text_seg, 0);
-  unwind.proc_end = expr_build_dot ();
+      make_unw_section_name (SPECIAL_SECTION_UNWIND, text_name, sec_name);
+      set_section ((char *) sec_name);
+      bfd_set_section_flags (stdoutput, now_seg,
+			     SEC_LOAD | SEC_ALLOC | SEC_READONLY);
 
-  set_section ((char *) special_section_name[SPECIAL_SECTION_UNWIND]);
+      /* Make sure the section has 8 byte alignment.  */
+      record_alignment (now_seg, 3);
 
-  /* Make sure the section has 8 byte alignment.  */
-  record_alignment (now_seg, 3);
+      ptr = frag_more (24);
+      where = frag_now_fix () - 24;
+      bytes_per_address = bfd_arch_bits_per_address (stdoutput) / 8;
 
-  ptr = frag_more (24);
-  where = frag_now_fix () - 24;
-  bytes_per_address = bfd_arch_bits_per_address (stdoutput) / 8;
-
-  /* Issue the values of  a) Proc Begin,  b) Proc End,  c) Unwind Record.  */
-  e.X_op = O_pseudo_fixup;
-  e.X_op_symbol = pseudo_func[FUNC_SEG_RELATIVE].u.sym;
-  e.X_add_number = 0;
-  e.X_add_symbol = unwind.proc_start;
-  ia64_cons_fix_new (frag_now, where, bytes_per_address, &e);
-
-  e.X_op = O_pseudo_fixup;
-  e.X_op_symbol = pseudo_func[FUNC_SEG_RELATIVE].u.sym;
-  e.X_add_number = 0;
-  e.X_add_symbol = unwind.proc_end;
-  ia64_cons_fix_new (frag_now, where + bytes_per_address, bytes_per_address, &e);
-
-  if (unwind.info != 0)
-    {
+      /* Issue the values of  a) Proc Begin, b) Proc End, c) Unwind Record. */
       e.X_op = O_pseudo_fixup;
       e.X_op_symbol = pseudo_func[FUNC_SEG_RELATIVE].u.sym;
       e.X_add_number = 0;
-      e.X_add_symbol = unwind.info;
-      ia64_cons_fix_new (frag_now, where + (bytes_per_address * 2), bytes_per_address, &e);
-    }
-  else
-    md_number_to_chars (ptr + (bytes_per_address * 2), 0, bytes_per_address);
+      e.X_add_symbol = unwind.proc_start;
+      ia64_cons_fix_new (frag_now, where, bytes_per_address, &e);
 
+      e.X_op = O_pseudo_fixup;
+      e.X_op_symbol = pseudo_func[FUNC_SEG_RELATIVE].u.sym;
+      e.X_add_number = 0;
+      e.X_add_symbol = unwind.proc_end;
+      ia64_cons_fix_new (frag_now, where + bytes_per_address,
+			 bytes_per_address, &e);
+
+      if (unwind.info)
+	{
+	  e.X_op = O_pseudo_fixup;
+	  e.X_op_symbol = pseudo_func[FUNC_SEG_RELATIVE].u.sym;
+	  e.X_add_number = 0;
+	  e.X_add_symbol = unwind.info;
+	  ia64_cons_fix_new (frag_now, where + (bytes_per_address * 2),
+			     bytes_per_address, &e);
+	}
+      else
+	md_number_to_chars (ptr + (bytes_per_address * 2), 0,
+			    bytes_per_address);
+
+    }
   subseg_set (saved_seg, saved_subseg);
   unwind.proc_start = unwind.proc_end = unwind.info = 0;
 }
@@ -4581,7 +4748,7 @@
   return bits;
 }
 
-static int
+static enum operand_match_result
 operand_match (idesc, index, e)
      const struct ia64_opcode *idesc;
      int index;
@@ -4598,62 +4765,77 @@
 
     case IA64_OPND_AR_CCV:
       if (e->X_op == O_register && e->X_add_number == REG_AR + 32)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_AR_PFS:
       if (e->X_op == O_register && e->X_add_number == REG_AR + 64)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_GR0:
       if (e->X_op == O_register && e->X_add_number == REG_GR + 0)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_IP:
       if (e->X_op == O_register && e->X_add_number == REG_IP)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_PR:
       if (e->X_op == O_register && e->X_add_number == REG_PR)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_PR_ROT:
       if (e->X_op == O_register && e->X_add_number == REG_PR_ROT)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_PSR:
       if (e->X_op == O_register && e->X_add_number == REG_PSR)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_PSR_L:
       if (e->X_op == O_register && e->X_add_number == REG_PSR_L)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_PSR_UM:
       if (e->X_op == O_register && e->X_add_number == REG_PSR_UM)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_C1:
-      if (e->X_op == O_constant && e->X_add_number == 1)
-	return 1;
+      if (e->X_op == O_constant)
+	{
+	  if (e->X_add_number == 1)
+	    return OPERAND_MATCH;
+	  else
+	    return OPERAND_OUT_OF_RANGE;
+	}
       break;
 
     case IA64_OPND_C8:
-      if (e->X_op == O_constant && e->X_add_number == 8)
-	return 1;
+      if (e->X_op == O_constant)
+	{
+	  if (e->X_add_number == 8)
+	    return OPERAND_MATCH;
+	  else
+	    return OPERAND_OUT_OF_RANGE;
+	}
       break;
 
     case IA64_OPND_C16:
-      if (e->X_op == O_constant && e->X_add_number == 16)
-	return 1;
+      if (e->X_op == O_constant)
+	{
+	  if (e->X_add_number == 16)
+	    return OPERAND_MATCH;
+	  else
+	    return OPERAND_OUT_OF_RANGE;
+	}
       break;
 
       /* register operands:  */
@@ -4661,20 +4843,20 @@
     case IA64_OPND_AR3:
       if (e->X_op == O_register && e->X_add_number >= REG_AR
 	  && e->X_add_number < REG_AR + 128)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_B1:
     case IA64_OPND_B2:
       if (e->X_op == O_register && e->X_add_number >= REG_BR
 	  && e->X_add_number < REG_BR + 8)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_CR3:
       if (e->X_op == O_register && e->X_add_number >= REG_CR
 	  && e->X_add_number < REG_CR + 128)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_F1:
@@ -4683,14 +4865,14 @@
     case IA64_OPND_F4:
       if (e->X_op == O_register && e->X_add_number >= REG_FR
 	  && e->X_add_number < REG_FR + 128)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_P1:
     case IA64_OPND_P2:
       if (e->X_op == O_register && e->X_add_number >= REG_P
 	  && e->X_add_number < REG_P + 64)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_R1:
@@ -4698,13 +4880,17 @@
     case IA64_OPND_R3:
       if (e->X_op == O_register && e->X_add_number >= REG_GR
 	  && e->X_add_number < REG_GR + 128)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_R3_2:
-      if (e->X_op == O_register && e->X_add_number >= REG_GR
-	  && e->X_add_number < REG_GR + 4)
-	return 1;
+      if (e->X_op == O_register && e->X_add_number >= REG_GR)
+	{ 
+	  if (e->X_add_number < REG_GR + 4)
+	    return OPERAND_MATCH;
+	  else if (e->X_add_number < REG_GR + 128)
+	    return OPERAND_OUT_OF_RANGE;
+	}
       break;
 
       /* indirect operands:  */
@@ -4721,12 +4907,12 @@
       if (e->X_op == O_index && e->X_op_symbol
 	  && (S_GET_VALUE (e->X_op_symbol) - IND_CPUID
 	      == opnd - IA64_OPND_CPUID_R3))
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_MR3:
       if (e->X_op == O_index && !e->X_op_symbol)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
       /* immediate operands:  */
@@ -4734,40 +4920,58 @@
     case IA64_OPND_LEN4:
     case IA64_OPND_LEN6:
       bits = operand_width (idesc->operands[index]);
-      if (e->X_op == O_constant
-	  && (bfd_vma) (e->X_add_number - 1) < ((bfd_vma) 1 << bits))
-	return 1;
+      if (e->X_op == O_constant)
+	{
+	  if ((bfd_vma) (e->X_add_number - 1) < ((bfd_vma) 1 << bits))
+	    return OPERAND_MATCH;
+	  else
+	    return OPERAND_OUT_OF_RANGE;
+	}
       break;
 
     case IA64_OPND_CNT2b:
-      if (e->X_op == O_constant
-	  && (bfd_vma) (e->X_add_number - 1) < 3)
-	return 1;
+      if (e->X_op == O_constant)
+	{
+	  if ((bfd_vma) (e->X_add_number - 1) < 3)
+	    return OPERAND_MATCH;
+	  else
+	    return OPERAND_OUT_OF_RANGE;
+	}
       break;
 
     case IA64_OPND_CNT2c:
       val = e->X_add_number;
-      if (e->X_op == O_constant
-	  && (val == 0 || val == 7 || val == 15 || val == 16))
-	return 1;
+      if (e->X_op == O_constant)
+	{
+	  if ((val == 0 || val == 7 || val == 15 || val == 16))
+	    return OPERAND_MATCH;
+	  else
+	    return OPERAND_OUT_OF_RANGE;
+	}
       break;
 
     case IA64_OPND_SOR:
       /* SOR must be an integer multiple of 8 */
-      if (e->X_add_number & 0x7)
-	break;
+      if (e->X_op == O_constant && e->X_add_number & 0x7)
+	return OPERAND_OUT_OF_RANGE;
     case IA64_OPND_SOF:
     case IA64_OPND_SOL:
-      if (e->X_op == O_constant &&
-	  (bfd_vma) e->X_add_number <= 96)
-	return 1;
+      if (e->X_op == O_constant)
+	{
+	  if ((bfd_vma) e->X_add_number <= 96)
+	    return OPERAND_MATCH;
+	  else
+	    return OPERAND_OUT_OF_RANGE;
+	}
       break;
 
     case IA64_OPND_IMMU62:
       if (e->X_op == O_constant)
 	{
 	  if ((bfd_vma) e->X_add_number < ((bfd_vma) 1 << 62))
-	    return 1;
+	    return OPERAND_MATCH;
+	  else
+	    return OPERAND_OUT_OF_RANGE;
 	}
       else
 	{
@@ -4793,10 +4997,10 @@
 	  fix->expr = *e;
 	  fix->is_pcrel = 0;
 	  ++CURR_SLOT.num_fixups;
-	  return 1;
+	  return OPERAND_MATCH;
 	}
       else if (e->X_op == O_constant)
-	return 1;
+	return OPERAND_MATCH;
       break;
 
     case IA64_OPND_CCNT5:
@@ -4814,59 +5018,78 @@
     case IA64_OPND_MHTYPE8:
     case IA64_OPND_POS6:
       bits = operand_width (idesc->operands[index]);
-      if (e->X_op == O_constant
-	  && (bfd_vma) e->X_add_number < ((bfd_vma) 1 << bits))
-	return 1;
+      if (e->X_op == O_constant)
+	{
+	  if ((bfd_vma) e->X_add_number < ((bfd_vma) 1 << bits))
+	    return OPERAND_MATCH;
+	  else
+	    return OPERAND_OUT_OF_RANGE;
+	}
       break;
 
     case IA64_OPND_IMMU9:
       bits = operand_width (idesc->operands[index]);
-      if (e->X_op == O_constant
-	  && (bfd_vma) e->X_add_number < ((bfd_vma) 1 << bits))
+      if (e->X_op == O_constant)
 	{
-	  int lobits = e->X_add_number & 0x3;
-	  if (((bfd_vma) e->X_add_number & 0x3C) != 0 && lobits == 0)
-	    e->X_add_number |= (bfd_vma) 0x3;
-	  return 1;
+	  if ((bfd_vma) e->X_add_number < ((bfd_vma) 1 << bits))
+	    {
+	      int lobits = e->X_add_number & 0x3;
+	      if (((bfd_vma) e->X_add_number & 0x3C) != 0 && lobits == 0)
+		e->X_add_number |= (bfd_vma) 0x3;
+	      return OPERAND_MATCH;
+	    }
+	  else
+	    return OPERAND_OUT_OF_RANGE;
 	}
       break;
 
     case IA64_OPND_IMM44:
       /* least 16 bits must be zero */
       if ((e->X_add_number & 0xffff) != 0)
+	/* XXX technically, this is wrong: we should not be issuing warning
+	   messages until we're sure this instruction pattern is going to
+	   be used! */
 	as_warn (_("lower 16 bits of mask ignored"));
 
-      if (e->X_op == O_constant
-	  && ((e->X_add_number >= 0
-	       && (bfd_vma) e->X_add_number < ((bfd_vma) 1 << 44))
-	      || (e->X_add_number < 0
-		  && (bfd_vma) -e->X_add_number <= ((bfd_vma) 1 << 44))))
+      if (e->X_op == O_constant)
 	{
-	  /* sign-extend */
-	  if (e->X_add_number >= 0
-	      && (e->X_add_number & ((bfd_vma) 1 << 43)) != 0)
+	  if (((e->X_add_number >= 0
+		&& (bfd_vma) e->X_add_number < ((bfd_vma) 1 << 44))
+	       || (e->X_add_number < 0
+		   && (bfd_vma) -e->X_add_number <= ((bfd_vma) 1 << 44))))
 	    {
-	      e->X_add_number |= ~(((bfd_vma) 1 << 44) - 1);
+	      /* sign-extend */
+	      if (e->X_add_number >= 0
+		  && (e->X_add_number & ((bfd_vma) 1 << 43)) != 0)
+		{
+		  e->X_add_number |= ~(((bfd_vma) 1 << 44) - 1);
+		}
+	      return OPERAND_MATCH;
 	    }
-	  return 1;
+	  else
+	    return OPERAND_OUT_OF_RANGE;
 	}
       break;
 
     case IA64_OPND_IMM17:
       /* bit 0 is a don't care (pr0 is hardwired to 1) */
-      if (e->X_op == O_constant
-	  && ((e->X_add_number >= 0
-	       && (bfd_vma) e->X_add_number < ((bfd_vma) 1 << 17))
-	      || (e->X_add_number < 0
-		  && (bfd_vma) -e->X_add_number <= ((bfd_vma) 1 << 17))))
+      if (e->X_op == O_constant)
 	{
-	  /* sign-extend */
-	  if (e->X_add_number >= 0
-	      && (e->X_add_number & ((bfd_vma) 1 << 16)) != 0)
+	  if (((e->X_add_number >= 0
+		&& (bfd_vma) e->X_add_number < ((bfd_vma) 1 << 17))
+	       || (e->X_add_number < 0
+		   && (bfd_vma) -e->X_add_number <= ((bfd_vma) 1 << 17))))
 	    {
-	      e->X_add_number |= ~(((bfd_vma) 1 << 17) - 1);
+	      /* sign-extend */
+	      if (e->X_add_number >= 0
+		  && (e->X_add_number & ((bfd_vma) 1 << 16)) != 0)
+		{
+		  e->X_add_number |= ~(((bfd_vma) 1 << 17) - 1);
+		}
+	      return OPERAND_MATCH;
 	    }
-	  return 1;
+	  else
+	    return OPERAND_OUT_OF_RANGE;
 	}
       break;
 
@@ -4904,18 +5127,18 @@
 	  fix->expr = *e;
 	  fix->is_pcrel = 0;
 	  ++CURR_SLOT.num_fixups;
-	  return 1;
+	  return OPERAND_MATCH;
 	}
       else if (e->X_op != O_constant
 	       && ! (e->X_op == O_big && opnd == IA64_OPND_IMM8M1U8))
-	return 0;
+	return OPERAND_MISMATCH;
 
       if (opnd == IA64_OPND_IMM8M1U4)
 	{
 	  /* Zero is not valid for unsigned compares that take an adjusted
 	     constant immediate range.  */
 	  if (e->X_add_number == 0)
-	    return 0;
+	    return OPERAND_OUT_OF_RANGE;
 
 	  /* Sign-extend 32-bit unsigned numbers, so that the following range
 	     checks will work.  */
@@ -4927,7 +5150,7 @@
 	  /* Check for 0x100000000.  This is valid because
 	     0x100000000-1 is the same as ((uint32_t) -1).  */
 	  if (val == ((bfd_signed_vma) 1 << 32))
-	    return 1;
+	    return OPERAND_MATCH;
 
 	  val = val - 1;
 	}
@@ -4936,7 +5159,7 @@
 	  /* Zero is not valid for unsigned compares that take an adjusted
 	     constant immediate range.  */
 	  if (e->X_add_number == 0)
-	    return 0;
+	    return OPERAND_OUT_OF_RANGE;
 
 	  /* Check for 0x10000000000000000.  */
 	  if (e->X_op == O_big)
@@ -4946,9 +5169,9 @@
 		  && generic_bignum[2] == 0
 		  && generic_bignum[3] == 0
 		  && generic_bignum[4] == 1)
-		return 1;
+		return OPERAND_MATCH;
 	      else
-		return 0;
+		return OPERAND_OUT_OF_RANGE;
 	    }
 	  else
 	    val = e->X_add_number - 1;
@@ -4969,17 +5192,22 @@
 
       if ((val >= 0 && (bfd_vma) val < ((bfd_vma) 1 << (bits - 1)))
 	  || (val < 0 && (bfd_vma) -val <= ((bfd_vma) 1 << (bits - 1))))
-	return 1;
-      break;
+	return OPERAND_MATCH;
+      else
+	return OPERAND_OUT_OF_RANGE;
 
     case IA64_OPND_INC3:
       /* +/- 1, 4, 8, 16 */
       val = e->X_add_number;
       if (val < 0)
 	val = -val;
-      if (e->X_op == O_constant
-	  && (val == 1 || val == 4 || val == 8 || val == 16))
-	return 1;
+      if (e->X_op == O_constant)
+	{
+	  if ((val == 1 || val == 4 || val == 8 || val == 16))
+	    return OPERAND_MATCH;
+	  else
+	    return OPERAND_OUT_OF_RANGE;
+	}
       break;
 
     case IA64_OPND_TGT25:
@@ -5005,23 +5233,26 @@
 	  fix->expr = *e;
 	  fix->is_pcrel = 1;
 	  ++CURR_SLOT.num_fixups;
-	  return 1;
+	  return OPERAND_MATCH;
 	}
     case IA64_OPND_TAG13:
     case IA64_OPND_TAG13b:
       switch (e->X_op)
 	{
 	case O_constant:
-	  return 1;
+	  return OPERAND_MATCH;
 
 	case O_symbol:
 	  fix = CURR_SLOT.fixup + CURR_SLOT.num_fixups;
-	  fix->code = ia64_gen_real_reloc_type (e->X_op_symbol, 0);
+	  /* There are no external relocs for TAG13/TAG13b fields, so we
+	     create a dummy reloc.  This will not live past md_apply_fix3.  */
+	  fix->code = BFD_RELOC_UNUSED;
+	  fix->code = ia64_gen_real_reloc_type (e->X_op_symbol, fix->code);
 	  fix->opnd = idesc->operands[index];
 	  fix->expr = *e;
 	  fix->is_pcrel = 1;
 	  ++CURR_SLOT.num_fixups;
-	  return 1;
+	  return OPERAND_MATCH;
 
 	default:
 	  break;
@@ -5031,7 +5262,7 @@
     default:
       break;
     }
-  return 0;
+  return OPERAND_MISMATCH;
 }
 
 static int
@@ -5079,8 +5310,9 @@
      struct ia64_opcode *idesc;
 {
   int i = 0, highest_unmatched_operand, num_operands = 0, num_outputs = 0;
-  int sep = 0;
+  int error_pos, out_of_range_pos, curr_out_of_range_pos, sep = 0;
   enum ia64_opnd expected_operand = IA64_OPND_NIL;
+  enum operand_match_result result;
   char mnemonic[129];
   char *first_arg = 0, *end, *saved_input_pointer;
   unsigned int sof;
@@ -5162,6 +5394,8 @@
     }
 
   highest_unmatched_operand = 0;
+  curr_out_of_range_pos = -1;
+  error_pos = 0;
   expected_operand = idesc->operands[0];
   for (; idesc; idesc = get_next_opcode (idesc))
     {
@@ -5169,16 +5403,52 @@
 	continue;		/* mismatch in # of outputs */
 
       CURR_SLOT.num_fixups = 0;
-      for (i = 0; i < num_operands && idesc->operands[i]; ++i)
-	if (!operand_match (idesc, i, CURR_SLOT.opnd + i))
-	  break;
 
-      if (i != num_operands)
+      /* Try to match all operands.  If we see an out-of-range operand,
+	 then continue trying to match the rest of the operands, since if
+	 the rest match, then this idesc will give the best error message.  */
+
+      out_of_range_pos = -1;
+      for (i = 0; i < num_operands && idesc->operands[i]; ++i)
 	{
-	  if (i > highest_unmatched_operand)
+	  result = operand_match (idesc, i, CURR_SLOT.opnd + i);
+	  if (result != OPERAND_MATCH)
+	    {
+	      if (result != OPERAND_OUT_OF_RANGE)
+		break;
+	      if (out_of_range_pos < 0)
+		/* remember position of the first out-of-range operand: */
+		out_of_range_pos = i;
+	    }
+	}
+
+      /* If we did not match all operands, or if at least one operand was
+	 out-of-range, then this idesc does not match.  Keep track of which
+	 idesc matched the most operands before failing.  If we have two
+	 idescs that failed at the same position, and one had an out-of-range
+	 operand, then prefer the out-of-range operand.  Thus if we have
+	 "add r0=0x1000000,r1" we get an error saying the constant is out
+	 of range instead of an error saying that the constant should have been
+	 a register.  */
+
+      if (i != num_operands || out_of_range_pos >= 0)
+	{
+	  if (i > highest_unmatched_operand
+	      || (i == highest_unmatched_operand
+		  && out_of_range_pos > curr_out_of_range_pos))
 	    {
 	      highest_unmatched_operand = i;
-	      expected_operand = idesc->operands[i];
+	      if (out_of_range_pos >= 0)
+		{
+		  expected_operand = idesc->operands[out_of_range_pos];
+		  error_pos = out_of_range_pos;
+		}
+	      else
+		{
+		  expected_operand = idesc->operands[i];
+		  error_pos = i;
+		}
+	      curr_out_of_range_pos = out_of_range_pos;
 	    }
 	  continue;
 	}
@@ -5193,7 +5463,7 @@
     {
       if (expected_operand)
 	as_bad ("Operand %u of `%s' should be %s",
-		highest_unmatched_operand + 1, mnemonic,
+		error_pos + 1, mnemonic,
 		elf64_ia64_operands[expected_operand].desc);
       else
 	as_bad ("Operand mismatch");
@@ -5223,8 +5493,9 @@
 	    || idesc->operands[i] == IA64_OPND_P2)
 	  {
 	    int regno = slot->opnd[i].X_add_number - REG_P;
+	    /* Ignore invalid operands; they generate errors elsewhere.  */
 	    if (regno >= 64)
-	      abort ();
+	      return 0;
 	    this_group->p_reg_set[regno] = 1;
 	  }
     }
@@ -5239,8 +5510,9 @@
 	    || idesc->operands[i] == IA64_OPND_R3)
 	  {
 	    int regno = slot->opnd[i].X_add_number - REG_GR;
+	    /* Ignore invalid operands; they generate errors elsewhere.  */
 	    if (regno >= 128)
-	      abort ();
+	      return 0;
 	    if (strncmp (idesc->name, "add", 3) != 0
 		&& strncmp (idesc->name, "sub", 3) != 0
 		&& strncmp (idesc->name, "shladd", 6) != 0
@@ -5270,8 +5542,9 @@
 	  || idesc->operands[i] == IA64_OPND_MR3)
 	{
 	  int regno = slot->opnd[i].X_add_number - REG_GR;
+	  /* Ignore invalid operands; they generate errors elsewhere.  */
 	  if (regno >= 128)
-	    abort ();
+	    return 0;
 	  if (idesc->operands[i] == IA64_OPND_R3)
 	    {
 	      if (strcmp (idesc->name, "fc") != 0
@@ -5776,6 +6049,7 @@
      int c;
      char *arg;
 {
+
   switch (c)
     {
     /* Switches from the Intel assembler.  */
@@ -5831,12 +6105,13 @@
       break;
 
     case 'a':
-      /* ??? Conflicts with gas' listing option.  */
       /* indirect=<tgt>	Assume unannotated indirect branches behavior
 			according to <tgt> --
 			exit:	branch out from the current context (default)
 			labels:	all labels in context may be branch targets
        */
+      if (strncmp (arg, "indirect=", 9) != 0)
+        return 0;
       break;
 
     case 'x':
@@ -6194,16 +6469,32 @@
       if (md.flags & EF_IA_64_BE)
 	{
 	  if (md.flags & EF_IA_64_ABI64)
+#ifdef TE_AIX50
+	    return "elf64-ia64-aix-big";
+#else
 	    return "elf64-ia64-big";
+#endif
 	  else
+#ifdef TE_AIX50
+	    return "elf32-ia64-aix-big";
+#else
 	    return "elf32-ia64-big";
+#endif
 	}
       else
 	{
 	  if (md.flags & EF_IA_64_ABI64)
+#ifdef TE_AIX50
+	    return "elf64-ia64-aix-little";
+#else
 	    return "elf64-ia64-little";
+#endif
 	  else
+#ifdef TE_AIX50
+	    return "elf32-ia64-aix-little";
+#else
 	    return "elf32-ia64-little";
+#endif
 	}
     }
   else
@@ -9651,16 +9942,15 @@
     }
   if (fix->fx_addsy)
     {
-      switch (fix->fx_r_type)
+      if (fix->fx_r_type == (int) BFD_RELOC_UNUSED)
 	{
-	case 0:
+	  /* This must be a TAG13 or TAG13b operand.  There are no external
+	     relocs defined for them, so we must give an error.  */
 	  as_bad_where (fix->fx_file, fix->fx_line,
 			"%s must have a constant value",
 			elf64_ia64_operands[fix->tc_fix_data.opnd].desc);
-	  break;
-
-	default:
-	  break;
+	  fix->fx_done = 1;
+	  return 1;
 	}
 
       /* ??? This is a hack copied from tc-i386.c to make PCREL relocs
@@ -9787,10 +10077,10 @@
 
 void
 ia64_md_do_align (n, fill, len, max)
-     int n;
-     const char *fill;
+     int n ATTRIBUTE_UNUSED;
+     const char *fill ATTRIBUTE_UNUSED;
      int len ATTRIBUTE_UNUSED;
-     int max;
+     int max ATTRIBUTE_UNUSED;
 {
   if (subseg_text_p (now_seg))
     ia64_flush_insns ();
diff --git a/gas/config/tc-ia64.h b/gas/config/tc-ia64.h
index fd802de..ee4c749 100644
--- a/gas/config/tc-ia64.h
+++ b/gas/config/tc-ia64.h
@@ -1,5 +1,5 @@
 /* tc-ia64.h -- Header file for tc-ia64.c.
-   Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
    Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
 
    This file is part of GAS, the GNU Assembler.
@@ -82,6 +82,7 @@
 extern void ia64_validate_fix PARAMS ((struct fix *fix));
 extern char * ia64_canonicalize_symbol_name PARAMS ((char *));
 extern flagword ia64_elf_section_flags PARAMS ((flagword, int, int));
+extern int ia64_elf_section_type PARAMS ((const char *, size_t len));
 extern long ia64_pcrel_from_section PARAMS ((struct fix *fix, segT sec));
 extern void ia64_md_do_align PARAMS ((int, const char *, int, int));
 extern void ia64_handle_align PARAMS ((fragS *f));
@@ -111,6 +112,7 @@
 #define MD_PCREL_FROM_SECTION(fix,sec)	ia64_pcrel_from_section (fix, sec)
 #define md_do_align(n,f,l,m,j)		ia64_md_do_align (n,f,l,m)
 #define HANDLE_ALIGN(f)			ia64_handle_align (f)
+#define md_elf_section_type(str,len)	ia64_elf_section_type (str, len)
 
 #define MAX_MEM_FOR_RS_ALIGN_CODE  (15 + 16)
 
@@ -121,9 +123,7 @@
 
 #define ELF_TC_SPECIAL_SECTIONS						   \
 { ".sbss",	SHT_NOBITS,	SHF_ALLOC + SHF_WRITE + SHF_IA_64_SHORT }, \
-{ ".sdata",	SHT_PROGBITS,	SHF_ALLOC + SHF_WRITE + SHF_IA_64_SHORT }, \
-{ ".IA_64.unwind",	SHT_IA_64_UNWIND,	SHF_ALLOC }, \
-{ ".IA_64.unwind_info",	SHT_PROGBITS,		SHF_ALLOC },
+{ ".sdata",	SHT_PROGBITS,	SHF_ALLOC + SHF_WRITE + SHF_IA_64_SHORT },
 
 #define DWARF2_LINE_MIN_INSN_LENGTH 1	/* so slot-multipliers can be 1 */
 
@@ -246,3 +246,19 @@
     unw_x_record x;
   } record;
 } unwind_record;
+
+/* This expression evaluates to false if the relocation is for a local 
+   object for which we still want to do the relocation at runtime.
+   True if we are willing to perform this relocation while building
+   the .o file.  This is only used for pcrel relocations.  */
+
+/* If the reloc type is BFD_RELOC_UNUSED, then this is for a TAG13/TAG13b field
+   which has no external reloc, so we must resolve the value now.  */
+
+#define TC_RELOC_RTSYM_LOC_FIXUP(FIX)				\
+  ((FIX)->fx_addsy == NULL					\
+   || (FIX)->fx_r_type == BFD_RELOC_UNUSED			\
+   || (! S_IS_EXTERNAL ((FIX)->fx_addsy)			\
+       && ! S_IS_WEAK ((FIX)->fx_addsy)				\
+       && S_IS_DEFINED ((FIX)->fx_addsy)			\
+       && ! S_IS_COMMON ((FIX)->fx_addsy)))
diff --git a/gas/config/tc-m32r.c b/gas/config/tc-m32r.c
index 062181e..cf68fe3 100644
--- a/gas/config/tc-m32r.c
+++ b/gas/config/tc-m32r.c
@@ -1384,7 +1384,8 @@
 };
 
 long
-m32r_relax_frag (fragP, stretch)
+m32r_relax_frag (segment, fragP, stretch)
+     segT segment;
      fragS *fragP;
      long stretch;
 {
@@ -1411,7 +1412,7 @@
     }
   else
     {
-      growth = relax_frag (fragP, stretch);
+      growth = relax_frag (segment, fragP, stretch);
 
       /* Long jump on odd halfword boundary?  */
       if (fragP->fr_subtype == 2 && (address & 3) != 0)
diff --git a/gas/config/tc-m32r.h b/gas/config/tc-m32r.h
index 9e04c19..98bfb8d 100644
--- a/gas/config/tc-m32r.h
+++ b/gas/config/tc-m32r.h
@@ -54,9 +54,9 @@
 #define md_prepare_relax_scan(fragP, address, aim, this_state, this_type) \
 m32r_prepare_relax_scan (fragP, address, aim, this_state, this_type)
 #else
-extern long m32r_relax_frag PARAMS ((fragS *, long));
-#define md_relax_frag(fragP, stretch) \
-m32r_relax_frag (fragP, stretch)
+extern long m32r_relax_frag PARAMS ((segT, fragS *, long));
+#define md_relax_frag(segment, fragP, stretch) \
+m32r_relax_frag (segment, fragP, stretch)
 #endif
 /* Account for nop if 32 bit insn falls on odd halfword boundary.  */
 #define TC_CGEN_MAX_RELAX(insn, len) (6)
diff --git a/gas/config/tc-m68hc11.c b/gas/config/tc-m68hc11.c
index 5645d29..2069030 100644
--- a/gas/config/tc-m68hc11.c
+++ b/gas/config/tc-m68hc11.c
@@ -226,6 +226,8 @@
   {"fdb", cons, 2},
   {"fcc", stringer, 1},
   {"rmb", s_space, 0},
+
+  /* Dwarf2 support for Gcc.  */
   {"file", dwarf2_directive_file, 0},
   {"loc", dwarf2_directive_loc, 0},
 
@@ -288,6 +290,16 @@
   return 0;
 }
 
+/* Listing header selected according to cpu.  */
+const char *
+m68hc11_listing_header ()
+{
+  if (current_architecture & cpu6811)
+    return "M68HC11 GAS ";
+  else
+    return "M68HC12 GAS ";
+}
+
 void
 md_show_usage (stream)
      FILE *stream;
@@ -371,7 +383,7 @@
   get_default_target ();
   switch (c)
     {
-      /* -S means keep external to 2 bits offset rather than 16 bits one.  */
+      /* -S means keep external to 2 bit offset rather than 16 bit one.  */
     case OPTION_SHORT_BRANCHS:
     case 'S':
       flag_fixed_branchs = 1;
@@ -1198,7 +1210,7 @@
   if (mode & M6812_AUTO_INC_DEC)
     return (num != 0 && num <= 8 && num >= -8);
 
-  /* The 68HC12 supports 5, 9 and 16-bits offsets.  */
+  /* The 68HC12 supports 5, 9 and 16-bit offsets.  */
   if (mode & (M6812_INDEXED_IND | M6812_INDEXED | M6812_OP_IDX))
     mode = M6811_OP_IND16;
 
@@ -1307,7 +1319,7 @@
     }
 }
 
-/* Put a 2 bytes expression described by 'oper'.  If this expression contains
+/* Put a 2 byte expression described by 'oper'.  If this expression contains
    unresolved symbols, generate a 16-bit fixup.  */
 static void
 fixup16 (oper, mode, opmode)
@@ -1392,7 +1404,6 @@
      int jmp_mode;
 {
   unsigned char code;
-  int insn_size;
   char *f;
   unsigned long n;
 
@@ -1403,7 +1414,6 @@
   assert (operands[0].reg1 == REG_NONE && operands[0].reg2 == REG_NONE);
 
   code = opcode->opcode;
-  insn_size = 1;
 
   n = operands[0].exp.X_add_number;
 
@@ -1527,7 +1537,6 @@
      int jmp_mode;
 {
   unsigned char code;
-  int insn_size;
   char *f;
   unsigned long n;
 
@@ -1538,7 +1547,6 @@
   assert (operands[0].reg1 != REG_NONE);
 
   code = opcode->opcode & 0x0FF;
-  insn_size = 1;
 
   f = m68hc11_new_insn (1);
   number_to_chars_bigendian (f, code, 1);
@@ -1872,7 +1880,6 @@
 {
   int i;
   char *f;
-  int insn_size = 1;
   long format;
   int move_insn = 0;
 
@@ -1892,7 +1899,6 @@
 
       number_to_chars_bigendian (f, page_code, 1);
       f++;
-      insn_size = 2;
     }
   else
     f = m68hc11_new_insn (1);
@@ -1908,13 +1914,13 @@
       move_insn = 1;
       if (format & M6812_OP_IDX)
 	{
-	  insn_size += build_indexed_byte (&operands[0], format, 1);
+	  build_indexed_byte (&operands[0], format, 1);
 	  i = 1;
 	  format &= ~M6812_OP_IDX;
 	}
       if (format & M6812_OP_IDX_P2)
 	{
-	  insn_size += build_indexed_byte (&operands[1], format, 1);
+	  build_indexed_byte (&operands[1], format, 1);
 	  i = 0;
 	  format &= ~M6812_OP_IDX_P2;
 	}
@@ -1922,7 +1928,6 @@
 
   if (format & (M6811_OP_DIRECT | M6811_OP_IMM8))
     {
-      insn_size++;
       fixup8 (&operands[i].exp,
 	      format & (M6811_OP_DIRECT | M6811_OP_IMM8 | M6812_OP_TRAP_ID),
 	      operands[i].mode);
@@ -1930,7 +1935,6 @@
     }
   else if (format & (M6811_OP_IMM16 | M6811_OP_IND16))
     {
-      insn_size += 2;
       fixup16 (&operands[i].exp, format & (M6811_OP_IMM16 | M6811_OP_IND16),
 	       operands[i].mode);
       i++;
@@ -1942,36 +1946,31 @@
       if ((format & M6811_OP_IY) && (operands[0].reg1 != REG_Y))
 	as_bad (_("Invalid indexed register, expecting register Y."));
 
-      insn_size++;
       fixup8 (&operands[0].exp, M6811_OP_IX, operands[0].mode);
       i = 1;
     }
   else if (format &
 	   (M6812_OP_IDX | M6812_OP_IDX_2 | M6812_OP_IDX_1 | M6812_OP_D_IDX))
     {
-      insn_size += build_indexed_byte (&operands[i], format, move_insn);
+      build_indexed_byte (&operands[i], format, move_insn);
       i++;
     }
   else if (format & M6812_OP_REG && current_architecture & cpu6812)
     {
-      insn_size += build_reg_mode (&operands[i], format);
+      build_reg_mode (&operands[i], format);
       i++;
     }
   if (format & M6811_OP_BITMASK)
     {
-      insn_size++;
       fixup8 (&operands[i].exp, M6811_OP_BITMASK, operands[i].mode);
       i++;
     }
   if (format & M6811_OP_JUMP_REL)
     {
-      insn_size++;
       fixup8 (&operands[i].exp, M6811_OP_JUMP_REL, operands[i].mode);
-      i++;
     }
   else if (format & M6812_OP_IND16_P2)
     {
-      insn_size += 2;
       fixup16 (&operands[1].exp, M6811_OP_IND16, operands[1].mode);
     }
 }
@@ -2288,7 +2287,7 @@
     }
 
   /* Identify a possible instruction alias.  There are some on the
-     68HC12 to emulate a fiew 68HC11 instructions.  */
+     68HC12 to emulate a few 68HC11 instructions.  */
   if (opc == NULL && (current_architecture & cpu6812))
     {
       int i;
@@ -2809,9 +2808,3 @@
 
   return 0;
 }
-
-int
-m68hc11_cleanup ()
-{
-  return 1;
-}
diff --git a/gas/config/tc-m68hc11.h b/gas/config/tc-m68hc11.h
index 8a1000d..6fcd8b1 100644
--- a/gas/config/tc-m68hc11.h
+++ b/gas/config/tc-m68hc11.h
@@ -1,5 +1,5 @@
 /* tc-m68hc11.h -- Header file for tc-m68hc11.c.
-   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -21,6 +21,10 @@
 #define TC_M68HC11
 #define TC_M68HC12
 
+#ifdef ANSI_PROTOTYPES
+struct fix;
+#endif
+
 /* Define TC_M68K so that we can use the MRI mode.  */
 #define TC_M68K
 
@@ -63,21 +67,23 @@
 #define LISTING_LHS_WIDTH 4	/* One word on the first line */
 #define LISTING_LHS_WIDTH_SECOND 4	/* One word on the second line */
 #define LISTING_LHS_CONT_LINES 4	/* And 4 lines max */
-#define LISTING_HEADER "M68HC11 GAS "
+#define LISTING_HEADER m68hc11_listing_header ()
+extern const char *m68hc11_listing_header PARAMS (());
 
 /* call md_pcrel_from_section, not md_pcrel_from */
 #define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from_section(FIXP, SEC)
+extern long md_pcrel_from_section PARAMS ((struct fix *fixp, segT sec));
 
 /* Permit temporary numeric labels.  */
 #define LOCAL_LABELS_FB 1
 
 #define DIFF_EXPR_OK		/* .-foo gets turned into PC relative relocs */
 
-extern void m68hc11_init_after_args PARAMS ((void));
 #define tc_init_after_args m68hc11_init_after_args
+extern void m68hc11_init_after_args PARAMS ((void));
 
-extern int m68hc11_parse_long_option PARAMS ((char *));
 #define md_parse_long_option m68hc11_parse_long_option
+extern int m68hc11_parse_long_option PARAMS ((char *));
 
 #define DWARF2_LINE_MIN_INSN_LENGTH 1
 
@@ -88,19 +94,13 @@
 
 /* Relax table to translate short relative branches (-128..127) into
    absolute branches.  */
-extern struct relax_type md_relax_table[];
 #define TC_GENERIC_RELAX_TABLE md_relax_table
-
-extern int m68hc11_cleanup PARAMS ((void));
+extern struct relax_type md_relax_table[];
 
 #define md_operand(x)
-#define md_after_pass_hook()	     m68hc11_cleanup()
-#define md_cleanup()		     m68hc11_cleanup()
-#define md_do_align(a,b,c,d,e)	     m68hc11_cleanup()
 #define tc_frob_label(sym) do {\
-  m68hc11_cleanup(); \
   S_SET_VALUE (sym, (valueT) frag_now_fix ()); \
 } while (0)
 
-#define tc_print_statistics m68hc11_print_statistics
+#define tc_print_statistics(FILE) m68hc11_print_statistics (FILE)
 extern void m68hc11_print_statistics PARAMS ((FILE *));
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index a0405852..acc22e2 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -3936,7 +3936,7 @@
 	  if (mips_trap)
 	    macro_build ((char *) NULL, &icnt, NULL, "teq", "s,t", 0, 0);
 	  else
-	      macro_build ((char *) NULL, &icnt, NULL, "break", "c", 7);
+	    macro_build ((char *) NULL, &icnt, NULL, "break", "c", 7);
 	  return;
 	}
 
@@ -3957,7 +3957,7 @@
 	  macro_build ((char *) NULL, &icnt, NULL,
 		       dbl ? "ddiv" : "div",
 		       "z,s,t", sreg, treg);
-	    macro_build ((char *) NULL, &icnt, NULL, "break", "c", 7);
+	  macro_build ((char *) NULL, &icnt, NULL, "break", "c", 7);
 	}
       expr1.X_add_number = -1;
       macro_build ((char *) NULL, &icnt, &expr1,
@@ -3996,7 +3996,7 @@
 	     that later insns are available for delay slot filling.  */
 	  --mips_opts.noreorder;
 
-	    macro_build ((char *) NULL, &icnt, NULL, "break", "c", 6);
+	  macro_build ((char *) NULL, &icnt, NULL, "break", "c", 6);
 	}
       macro_build ((char *) NULL, &icnt, NULL, s, "d", dreg);
       break;
@@ -4213,9 +4213,13 @@
 	}
       else if (mips_pic == SVR4_PIC && ! mips_big_got)
 	{
+	  int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT16;
+
 	  /* If this is a reference to an external symbol, and there
 	     is no constant, we want
 	       lw	$tempreg,<sym>($gp)	(BFD_RELOC_MIPS_GOT16)
+	     or if tempreg is PIC_CALL_REG
+	       lw	$tempreg,<sym>($gp)	(BFD_RELOC_MIPS_CALL16)
 	     For a local symbol, we want
 	       lw	$tempreg,<sym>($gp)	(BFD_RELOC_MIPS_GOT16)
 	       nop
@@ -4242,9 +4246,11 @@
 	  expr1.X_add_number = offset_expr.X_add_number;
 	  offset_expr.X_add_number = 0;
 	  frag_grow (32);
+	  if (expr1.X_add_number == 0 && tempreg == PIC_CALL_REG)
+	    lw_reloc_type = (int) BFD_RELOC_MIPS_CALL16;
 	  macro_build ((char *) NULL, &icnt, &offset_expr,
 		       dbl ? "ld" : "lw",
-		       "t,o(b)", tempreg, (int) BFD_RELOC_MIPS_GOT16, GP);
+		       "t,o(b)", tempreg, lw_reloc_type, GP);
 	  if (expr1.X_add_number == 0)
 	    {
 	      int off;
@@ -4350,12 +4356,18 @@
       else if (mips_pic == SVR4_PIC)
 	{
 	  int gpdel;
+	  int lui_reloc_type = (int) BFD_RELOC_MIPS_GOT_HI16;
+	  int lw_reloc_type = (int) BFD_RELOC_MIPS_GOT_LO16;
 
 	  /* This is the large GOT case.  If this is a reference to an
 	     external symbol, and there is no constant, we want
 	       lui	$tempreg,<sym>		(BFD_RELOC_MIPS_GOT_HI16)
 	       addu	$tempreg,$tempreg,$gp
 	       lw	$tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_GOT_LO16)
+	     or if tempreg is PIC_CALL_REG
+	       lui	$tempreg,<sym>		(BFD_RELOC_MIPS_CALL_HI16)
+	       addu	$tempreg,$tempreg,$gp
+	       lw	$tempreg,<sym>($tempreg) (BFD_RELOC_MIPS_CALL_LO16)
 	     For a local symbol, we want
 	       lw	$tempreg,<sym>($gp)	(BFD_RELOC_MIPS_GOT16)
 	       nop
@@ -4394,8 +4406,13 @@
 	    gpdel = 4;
 	  else
 	    gpdel = 0;
+	  if (expr1.X_add_number == 0 && tempreg == PIC_CALL_REG)
+	    {
+	      lui_reloc_type = (int) BFD_RELOC_MIPS_CALL_HI16;
+	      lw_reloc_type = (int) BFD_RELOC_MIPS_CALL_LO16;
+	    }
 	  macro_build ((char *) NULL, &icnt, &offset_expr, "lui", "t,u",
-		       tempreg, (int) BFD_RELOC_MIPS_GOT_HI16);
+		       tempreg, lui_reloc_type);
 	  macro_build ((char *) NULL, &icnt, (expressionS *) NULL,
 		       ((bfd_arch_bits_per_address (stdoutput) == 32
 			 || ! ISA_HAS_64BIT_REGS (mips_opts.isa))
@@ -4403,8 +4420,7 @@
 		       "d,v,t", tempreg, tempreg, GP);
 	  macro_build ((char *) NULL, &icnt, &offset_expr,
 		       dbl ? "ld" : "lw",
-		       "t,o(b)", tempreg, (int) BFD_RELOC_MIPS_GOT_LO16,
-		       tempreg);
+		       "t,o(b)", tempreg, lw_reloc_type, tempreg);
 	  if (expr1.X_add_number == 0)
 	    {
 	      int off;
@@ -9057,6 +9073,7 @@
       g_switch_value = 0x7fffffff;
       break;
 
+#ifdef OBJ_ELF
       /* When generating ELF code, we permit -KPIC and -call_shared to
 	 select SVR4_PIC, and -non_shared to select no PIC.  This is
 	 intended to be compatible with Irix 5.  */
@@ -9090,6 +9107,7 @@
     case OPTION_XGOT:
       mips_big_got = 1;
       break;
+#endif /* OBJ_ELF */
 
     case 'G':
       if (! USE_GLOBAL_POINTER_OPT)
@@ -9107,6 +9125,7 @@
       g_switch_seen = 1;
       break;
 
+#ifdef OBJ_ELF
       /* The -32 and -64 options tell the assembler to output the 32
          bit or the 64 bit MIPS ELF format.  */
     case OPTION_32:
@@ -9128,6 +9147,7 @@
 	mips_64 = 1;
       }
       break;
+#endif /* OBJ_ELF */
 
     case OPTION_GP32:
       mips_gp32 = 1;
diff --git a/gas/config/tc-mips.h b/gas/config/tc-mips.h
index 561d5d7..72e734f 100644
--- a/gas/config/tc-mips.h
+++ b/gas/config/tc-mips.h
@@ -49,7 +49,7 @@
    relocation: */
 #define MAX_GPREL_OFFSET (0x7FF4)
 
-#define md_relax_frag(fragp, stretch) mips_relax_frag(fragp, stretch)
+#define md_relax_frag(segment, fragp, stretch) mips_relax_frag(fragp, stretch)
 extern int mips_relax_frag PARAMS ((struct frag *, long));
 
 #define md_undefined_symbol(name)	(0)
diff --git a/gas/config/tc-mn10300.c b/gas/config/tc-mn10300.c
index 51bc3fbe..21e8e42 100644
--- a/gas/config/tc-mn10300.c
+++ b/gas/config/tc-mn10300.c
@@ -1,5 +1,5 @@
 /* tc-mn10300.c -- Assembler code for the Matsushita 10300
-   Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation.
+   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -1963,9 +1963,11 @@
 
   md_number_to_chars (fixpos, value, size);
 
-  fixp->fx_done = 1;
-  return 0;
+  /* If a symbol remains, pass the fixup, as a reloc, onto the linker.  */
+  if (fixp->fx_addsy == NULL)
+    fixp->fx_done = 1;
 
+  return 0;
 }
 
 /* Return nonzero if the fixup in FIXP will require a relocation,
diff --git a/gas/config/tc-pdp11.c b/gas/config/tc-pdp11.c
new file mode 100644
index 0000000..0cde11c
--- /dev/null
+++ b/gas/config/tc-pdp11.c
@@ -0,0 +1,1617 @@
+/* tc-pdp11.c - pdp11-specific -
+   Copyright (C) 2001 Free Software Foundation, Inc.
+
+   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.  */
+
+/*
+  Apparently unused functions:
+    md_convert_frag
+    md_estimate_size_before_relax
+    md_create_short_jump
+    md_create_long_jump
+*/
+
+#include "as.h"
+#include "opcode/pdp11.h"
+
+static int set_option PARAMS ((char *arg));
+static int set_cpu_model PARAMS ((char *arg));
+static int set_machine_model PARAMS ((char *arg));
+
+#define TRUE 1
+#define FALSE 0
+
+/*
+ * A representation for PDP-11 machine code.
+ */
+struct pdp11_code
+{
+  char *error;
+  int code;
+  int additional;	/* is there an additional word? */
+  int word;		/* additional word, if any */
+  struct
+  {
+    bfd_reloc_code_real_type type;
+    expressionS exp;
+    int pc_rel;
+  } reloc;
+};
+
+/*
+ * Instruction set extensions.
+ *
+ * If you change this from an array to something else, please update
+ * the "PDP-11 instruction set extensions" comment in pdp11.h.
+ */
+int pdp11_extension[PDP11_EXT_NUM];
+
+/*
+ * Assembly options.
+ */
+
+#define ASM_OPT_PIC 1
+#define ASM_OPT_NUM 2
+
+int asm_option[ASM_OPT_NUM];
+
+/* These chars start a comment anywhere in a source file (except inside
+   another comment */
+CONST char comment_chars[] = "#/";
+
+/* These chars only start a comment at the beginning of a line.  */
+CONST char line_comment_chars[] = "#/";
+
+CONST char line_separator_chars[] = ";";
+
+/* Chars that can be used to separate mant from exp in floating point nums */
+CONST char EXP_CHARS[] = "eE";
+
+/* Chars that mean this number is a floating point constant */
+/* as in 0f123.456 */
+/* or    0H1.234E-12 (see exp chars above) */
+CONST char FLT_CHARS[] = "dDfFgGhH";
+
+void pseudo_even (int);
+void pseudo_bss (int);
+
+CONST pseudo_typeS md_pseudo_table[] =
+{
+  { "bss", pseudo_bss, 0 },
+  { "even", pseudo_even, 0 },
+  { 0, 0, 0 },
+};
+
+static void
+init_defaults ()
+{
+  static int first = 1;
+
+  if (first)
+    {
+      set_option ("all-extensions");
+      set_option ("pic");
+      first = 0;
+    }
+}
+
+static struct hash_control *insn_hash = NULL;
+
+void
+md_begin ()
+{
+  int i;
+
+  init_defaults ();
+
+  insn_hash = hash_new ();
+  if (insn_hash == NULL)
+    as_fatal ("Virtual memory exhausted");
+
+  for (i = 0; i < pdp11_num_opcodes; i++)
+    hash_insert (insn_hash, pdp11_opcodes[i].name, (PTR)(pdp11_opcodes + i));
+  for (i = 0; i < pdp11_num_aliases; i++)
+    hash_insert (insn_hash, pdp11_aliases[i].name, (PTR)(pdp11_aliases + i));
+}
+
+void
+md_number_to_chars (con, value, nbytes)
+     char con[];
+     valueT value;
+     int nbytes;
+{
+  /* On a PDP-11, 0x1234 is stored as "\x12\x34", and
+   * 0x12345678 is stored as "\x56\x78\x12\x34". It's
+   * anyones guess what 0x123456 would be stored like.
+   */
+
+  switch (nbytes)
+    {
+    case 0:
+      break;
+    case 1:
+      con[0] =  value       & 0xff;
+      break;
+    case 2:
+      con[0] =  value       & 0xff;
+      con[1] = (value >>  8) & 0xff;
+      break;
+    case 4:
+      con[0] = (value >> 16) & 0xff;
+      con[1] = (value >> 24) & 0xff;
+      con[2] =  value       & 0xff;
+      con[3] = (value >>  8) & 0xff;
+      break;
+    default:
+      BAD_CASE (nbytes);
+    }
+}
+
+/* Fix up some data or instructions after we find out the value of a symbol
+   that they reference.  */
+
+int				/* Knows about order of bytes in address.  */
+md_apply_fix (fixP, value)
+     fixS *fixP;
+     valueT *value;
+{
+  valueT code;
+  valueT mask;
+  char *buf;
+  int shift;
+  int size;
+
+  buf = fixP->fx_where + fixP->fx_frag->fr_literal;
+  size = fixP->fx_size;
+  code = md_chars_to_number (buf, size);
+
+  switch (fixP->fx_r_type)
+    {
+    case BFD_RELOC_16:
+    case BFD_RELOC_16_PCREL:
+      mask = 0xffff;
+      shift = 0;
+      break;
+    case BFD_RELOC_PDP11_DISP_8_PCREL:
+      mask = 0x00ff;
+      shift = 1;
+      break;
+    case BFD_RELOC_PDP11_DISP_6_PCREL:
+      mask = 0x003f;
+      shift = 1;
+      break;
+    default:
+      BAD_CASE (fixP->fx_r_type);
+    }
+
+  if (fixP->fx_addsy != NULL)
+    *value += symbol_get_bfdsym (fixP->fx_addsy)->section->vma;
+    /* *value += fixP->fx_addsy->bsym->section->vma; */
+
+  code &= ~mask;
+  code |= (*value >> shift) & mask;
+  number_to_chars_littleendian (buf, code, size);
+  return 0;
+}
+
+long
+md_chars_to_number (con, nbytes)
+     unsigned char con[];	/* Low order byte 1st.  */
+     int nbytes;		/* Number of bytes in the input.  */
+{
+  /* On a PDP-11, 0x1234 is stored as "\x12\x34", and
+   * 0x12345678 is stored as "\x56\x78\x12\x34". It's
+   * anyones guess what 0x123456 would be stored like.
+   */
+
+  switch (nbytes)
+    {
+    case 0:
+      return 0;
+    case 1:
+      return con[0];
+    case 2:
+      return (con[1] << BITS_PER_CHAR) | con[0];
+    case 4:
+      return
+	(((con[1] << BITS_PER_CHAR) | con[0]) << (2 * BITS_PER_CHAR)) |
+	 ((con[3] << BITS_PER_CHAR) | con[2]);
+    default:
+      BAD_CASE (nbytes);
+      return 0;
+    }
+}
+
+static char *
+skip_whitespace (char *str)
+{
+  while (*str == ' ' || *str == '\t')
+    str++;
+  return str;
+}
+
+static char *
+find_whitespace (char *str)
+{
+  while (*str != ' ' && *str != '\t' && *str != 0)
+    str++;
+  return str;
+}
+
+static char
+mklower (char c)
+{
+  if (isupper (c))
+    return tolower (c);
+  return c;
+}
+
+static char *
+parse_reg (char *str, struct pdp11_code *operand)
+{
+  str = skip_whitespace (str);
+  if (mklower (*str) == 'r')
+    {
+      str++;
+      switch (*str)
+	{
+	case '0': case '1': case '2': case '3':
+	case '4': case '5': case '6': case '7':
+	  operand->code = *str - '0';
+	  str++;
+	  break;
+	default:
+	  operand->error = "Bad register name";
+	  return str - 1;
+	}
+    }
+  else if (strncmp (str, "sp", 2) == 0 ||
+	   strncmp (str, "SP", 2) == 0)
+    {
+      operand->code = 6;
+      str += 2;
+    }
+  else if (strncmp (str, "pc", 2) == 0 ||
+	   strncmp (str, "PC", 2) == 0)
+    {
+      operand->code = 7;
+      str += 2;
+    }
+  else
+    {
+      operand->error = "Bad register name";
+      return str;
+    }
+
+  return str;
+}
+
+static char *
+parse_ac (char *str, struct pdp11_code *operand)
+{
+  str = skip_whitespace (str);
+  if (strncmp (str, "fr", 2) == 0 ||
+      strncmp (str, "FR", 2) == 0 ||
+      strncmp (str, "ac", 2) == 0 ||
+      strncmp (str, "AC", 2) == 0)
+    {
+      str += 2;
+      switch (*str)
+	{
+	case '0': case '1': case '2': case '3':
+	  operand->code = *str - '0';
+	  str++;
+	  break;
+	default:
+	  operand->error = "Bad register name";
+	  return str - 2;
+	}
+    }
+  else
+    {
+      operand->error = "Bad register name";
+      return str;
+    }
+
+  return str;
+}
+
+static char *
+parse_expression (char *str, struct pdp11_code *operand)
+{
+  char *save_input_line_pointer;
+  segT seg;
+
+  save_input_line_pointer = input_line_pointer;
+  input_line_pointer = str;
+  seg = expression (&operand->reloc.exp);
+  if (seg == NULL)
+    {
+      input_line_pointer = save_input_line_pointer;
+      operand->error = "Error in expression";
+      return str;
+    }
+
+  str = input_line_pointer;
+  input_line_pointer = save_input_line_pointer;
+
+  operand->reloc.pc_rel = 0;
+
+  if (operand->reloc.exp.X_op == O_constant)
+    {
+      if (*str == '.')
+	str++;
+      else
+	{
+	  /* FIXME: buffer overflow! */
+	  char buf[100];
+	  char *end;
+
+	  sprintf (buf, "%ld", operand->reloc.exp.X_add_number);
+	  operand->reloc.exp.X_add_number = strtol (buf, &end, 8);
+	}
+    }
+
+  return str;
+}
+
+static char *
+parse_op_no_deferred (char *str, struct pdp11_code *operand)
+{
+  str = skip_whitespace (str);
+
+  switch (*str)
+    {
+    case '(':				/* (rn) and (rn)+ */
+      str = parse_reg (str + 1, operand);
+      if (operand->error)
+	return str;
+      str = skip_whitespace (str);
+      if (*str != ')')
+	{
+	  operand->error = "Missing ')'";
+	  return str;
+	}
+      str++;
+      if (*str == '+')
+	{
+	  operand->code |= 020;
+	  str++;
+	}
+      else
+	{
+	  operand->code |= 010;
+	}
+      break;
+
+    case '#':				/* immediate */
+    case '$':
+      str = parse_expression (str + 1, operand);
+      if (operand->error)
+	return str;
+      operand->additional = TRUE;
+      operand->word = operand->reloc.exp.X_add_number;
+      switch (operand->reloc.exp.X_op)
+	{
+	case O_constant:
+	  break;
+	case O_symbol:
+	case O_add:
+	case O_subtract:
+	  operand->reloc.type = BFD_RELOC_16;
+	  operand->reloc.pc_rel = 0;
+	  break;
+	default:
+	  operand->error = "Error in expression";
+	  break;
+	}
+      operand->code = 027;
+      break;
+
+    default:				/* label, d(rn), -(rn) */
+      {
+	char *old = str;
+
+	if (strncmp (str, "-(", 2) == 0)	/* -(rn) */
+	  {
+	    str = parse_reg (str + 2, operand);
+	    if (operand->error)
+	      return str;
+	    str = skip_whitespace (str);
+	    if (*str != ')')
+	      {
+		operand->error = "Missing ')'";
+		return str;
+	      }
+	    operand->code |= 040;
+	    str++;
+	    break;
+	  }
+
+	str = parse_expression (str, operand);
+	if (operand->error)
+	  return str;
+
+	str = skip_whitespace (str);
+
+	if (*str != '(')		/* label */
+	  {
+	    if (operand->reloc.exp.X_op != O_symbol)
+	      {
+		operand->error = "Label expected";
+		return old;
+	      }
+	    operand->code = 067;
+	    operand->additional = 1;
+	    operand->word = 0;
+	    operand->reloc.type = BFD_RELOC_16_PCREL;
+	    operand->reloc.pc_rel = 1;
+	    break;
+	  }
+
+	str++;				/* d(rn) */
+	str = parse_reg (str, operand);
+	if (operand->error)
+	  return str;
+
+	str = skip_whitespace (str);
+
+	if (*str != ')')
+	  {
+	    operand->error = "Missing ')'";
+	    return str;
+	  }
+
+	str++;
+	operand->additional = TRUE;
+	operand->code |= 060;
+	switch (operand->reloc.exp.X_op)
+	  {
+	  case O_symbol:
+	    operand->word = 0;
+	    operand->reloc.pc_rel = 1;
+	    break;
+	  case O_constant:
+	    if ((operand->code & 7) == 7)
+	      {
+		operand->reloc.pc_rel = 1;
+		operand->word = operand->reloc.exp.X_add_number;
+	      }
+	    else
+	      {
+		operand->word = operand->reloc.exp.X_add_number;
+	      }
+	    break;
+	  default:
+	    BAD_CASE (operand->reloc.exp.X_op);
+	  }
+	break;
+      }
+    }
+
+  return str;
+}
+
+static char *
+parse_op (char *str, struct pdp11_code *operand)
+{
+  str = skip_whitespace (str);
+
+  str = parse_reg (str, operand);
+  if (!operand->error)
+    return str;
+  operand->error = NULL;
+
+  if (*str == '@' || *str == '*')
+    {
+      str = parse_op_no_deferred (str + 1, operand);
+      if (operand->error)
+	return str;
+      operand->code |= 010;
+    }
+  else
+    str = parse_op_no_deferred (str, operand);
+
+  return str;
+}
+
+static char *
+parse_separator (char *str, int *error)
+{
+  str = skip_whitespace (str);
+  *error = (*str != ',');
+  if (!*error)
+    str++;
+  return str;
+}
+
+void
+md_assemble (instruction_string)
+     char *instruction_string;
+{
+  CONST struct pdp11_opcode *op;
+  struct pdp11_code insn, op1, op2;
+  int error;
+  int size;
+  char *err = NULL;
+  char *str;
+  char *p;
+  char c;
+
+  str = skip_whitespace (instruction_string);
+  p = find_whitespace (str);
+  if (p - str == 0)
+    {
+      as_bad ("No instruction found");
+      return;
+    }
+
+  c = *p;
+  *p = '\0';
+  op = (struct pdp11_opcode *)hash_find (insn_hash, str);
+  *p = c;
+  if (op == 0)
+    {
+#if 0
+      op1.error = NULL;
+      op1.additional = FALSE;
+      op1.reloc.type = BFD_RELOC_NONE;
+      op1.code = 0;
+      op1.word = 0;
+      str = parse_expression (str, &op1);
+      if (op1.error)
+	{
+	  as_bad (op1.error);
+	  return;
+	}
+
+      {
+	char *to = frag_more (2);
+
+	md_number_to_chars (to, op1.code, 2);
+	if (insn.reloc.type != BFD_RELOC_NONE)
+	  fix_new_exp (frag_now, to - frag_now->fr_literal, 2,
+		       &insn.reloc.exp, insn.reloc.pc_rel, insn.reloc.type);
+      }
+#else
+      as_warn ("Unknown instruction");
+#endif
+
+      return;
+    }
+
+  if (!pdp11_extension[op->extension])
+    {
+      as_warn ("Unsupported instruction set extension: %s", op->name);
+      return;
+    }
+
+  insn.error = NULL;
+  insn.code = op->opcode;
+  insn.reloc.type = BFD_RELOC_NONE;
+  op1.error = NULL;
+  op1.additional = FALSE;
+  op1.reloc.type = BFD_RELOC_NONE;
+  op2.error = NULL;
+  op2.additional = FALSE;
+  op2.reloc.type = BFD_RELOC_NONE;
+
+  str = p;
+  size = 2;
+
+  switch (op->type)
+    {
+    case PDP11_OPCODE_NO_OPS:
+      str = skip_whitespace (str);
+      if (*str == 0)
+	str = "";
+      break;
+
+    case PDP11_OPCODE_IMM3:
+    case PDP11_OPCODE_IMM6:
+    case PDP11_OPCODE_IMM8:
+      str = skip_whitespace (str);
+      if (*str == '#' || *str == '$')
+	str++;
+      str = parse_expression (str, &op1);
+      if (op1.error)
+	break;
+      switch (op->type)
+	{
+	case PDP11_OPCODE_IMM3:
+	  if (op1.code & ~7)
+	    {
+	      op1.error = "3-bit immediate out of range";
+	      break;
+	    }
+	  break;
+	case PDP11_OPCODE_IMM6:
+	  if (op1.code & ~0x3f)
+	    {
+	      op1.error = "6-bit immediate out of range";
+	      break;
+	    }
+	  break;
+	case PDP11_OPCODE_IMM8:
+	  if (op1.code & ~0xff)
+	    {
+	      op1.error = "8-bit immediate out of range";
+	      break;
+	    }
+	  break;
+	}
+      insn.code |= op1.code;
+      break;
+
+    case PDP11_OPCODE_DISPL:
+      {
+	char *new;
+	new = parse_expression (str, &op1);
+	op1.code = 0;
+	op1.reloc.pc_rel = 1;
+	op1.reloc.type = BFD_RELOC_PDP11_DISP_8_PCREL;
+	if (op1.reloc.exp.X_op != O_symbol)
+	  {
+	    op1.error = "Symbol expected";
+	    break;
+	  }
+	if (op1.code & ~0xff)
+	  {
+	    err = "8-bit displacement out of range";
+	    break;
+	  }
+	str = new;
+	insn.code |= op1.code;
+	insn.reloc = op1.reloc;
+      }
+      break;
+
+    case PDP11_OPCODE_REG:
+      str = parse_reg (str, &op1);
+      if (op1.error)
+	break;
+      insn.code |= op1.code;
+      break;
+
+    case PDP11_OPCODE_OP:
+      str = parse_op (str, &op1);
+      if (op1.error)
+	break;
+      insn.code |= op1.code;
+      if (op1.additional)
+	size += 2;
+      break;
+
+    case PDP11_OPCODE_REG_OP:
+      str = parse_reg (str, &op2);
+      if (op2.error)
+	break;
+      insn.code |= op2.code << 6;
+      str = parse_separator (str, &error);
+      if (error)
+	{
+	  op2.error = "Missing ','";
+	  break;
+	}
+      str = parse_op (str, &op1);
+      if (op1.error)
+	break;
+      insn.code |= op1.code;
+      if (op1.additional)
+	size += 2;
+      break;
+
+    case PDP11_OPCODE_REG_OP_REV:
+      str = parse_op (str, &op1);
+      if (op1.error)
+	break;
+      insn.code |= op1.code;
+      if (op1.additional)
+	size += 2;
+      str = parse_separator (str, &error);
+      if (error)
+	{
+	  op2.error = "Missing ','";
+	  break;
+	}
+      str = parse_reg (str, &op2);
+      if (op2.error)
+	break;
+      insn.code |= op2.code << 6;
+      break;
+
+    case PDP11_OPCODE_AC_OP:
+      str = parse_ac (str, &op2);
+      if (op2.error)
+	break;
+      insn.code |= op2.code << 6;
+      str = parse_separator (str, &error);
+      if (error)
+	{
+	  op1.error = "Missing ','";
+	  break;
+	}
+      str = parse_op (str, &op1);
+      if (op1.error)
+	break;
+      insn.code |= op1.code;
+      if (op1.additional)
+	size += 2;
+      break;
+
+    case PDP11_OPCODE_OP_OP:
+      str = parse_op (str, &op1);
+      if (op1.error)
+	break;
+      insn.code |= op1.code << 6;
+      if (op1.additional)
+	size += 2;
+      str = parse_separator (str, &error);
+      if (error)
+	{
+	  op2.error = "Missing ','";
+	  break;
+	}
+      str = parse_op (str, &op2);
+      if (op2.error)
+	break;
+      insn.code |= op2.code;
+      if (op2.additional)
+	size += 2;
+      break;
+
+    case PDP11_OPCODE_REG_DISPL:
+      {
+	char *new;
+	str = parse_reg (str, &op2);
+	if (op2.error)
+	  break;
+	insn.code |= op2.code << 6;
+	str = parse_separator (str, &error);
+	if (error)
+	  {
+	    op1.error = "Missing ','";
+	    break;
+	  }
+	new = parse_expression (str, &op1);
+	op1.code = 0;
+	op1.reloc.pc_rel = 1;
+	op1.reloc.type = BFD_RELOC_PDP11_DISP_6_PCREL;
+	if (op1.reloc.exp.X_op != O_symbol)
+	  {
+	    op1.error = "Symbol expected";
+	    break;
+	  }
+	if (op1.code & ~0x3f)
+	  {
+	    err = "6-bit displacement out of range";
+	    break;
+	  }
+	str = new;
+	insn.code |= op1.code;
+	insn.reloc = op1.reloc;
+      }
+      break;
+
+    default:
+      BAD_CASE (op->type);
+    }
+
+  if (op1.error)
+    err = op1.error;
+  else if (op2.error)
+    err = op2.error;
+  else
+    {
+      str = skip_whitespace (str);
+      if (*str)
+	err = "Too many operands";
+    }
+
+  {
+    char *to = NULL;
+
+    if (err)
+      {
+	as_bad (err);
+	return;
+      }
+
+    to = frag_more (size);
+
+    md_number_to_chars (to, insn.code, 2);
+    if (insn.reloc.type != BFD_RELOC_NONE)
+      fix_new_exp (frag_now, to - frag_now->fr_literal, 2,
+		   &insn.reloc.exp, insn.reloc.pc_rel, insn.reloc.type);
+    to += 2;
+
+    if (op1.additional)
+      {
+	md_number_to_chars (to, op1.word, 2);
+	if (op1.reloc.type != BFD_RELOC_NONE)
+	  fix_new_exp (frag_now, to - frag_now->fr_literal, 2,
+		       &op1.reloc.exp, op1.reloc.pc_rel, op1.reloc.type);
+	to += 2;
+      }
+
+    if (op2.additional)
+      {
+	md_number_to_chars (to, op2.word, 2);
+	if (op2.reloc.type != BFD_RELOC_NONE)
+	  fix_new_exp (frag_now, to - frag_now->fr_literal, 2,
+		       &op2.reloc.exp, op2.reloc.pc_rel, op2.reloc.type);
+      }
+  }
+}
+
+int
+md_estimate_size_before_relax (fragP, segment)
+     fragS *fragP ATTRIBUTE_UNUSED;
+     segT segment ATTRIBUTE_UNUSED;
+{
+  return 0;
+}
+
+void
+md_convert_frag (headers, seg, fragP)
+     bfd *headers ATTRIBUTE_UNUSED;
+     segT seg ATTRIBUTE_UNUSED;
+     fragS *fragP ATTRIBUTE_UNUSED;
+{
+}
+
+CONST int md_short_jump_size = 2;
+CONST int md_long_jump_size = 4;
+
+void
+md_create_short_jump (ptr, from_addr, to_addr, frag, to_symbol)
+     char *ptr ATTRIBUTE_UNUSED;
+     addressT from_addr ATTRIBUTE_UNUSED;
+     addressT to_addr ATTRIBUTE_UNUSED;
+     fragS *frag ATTRIBUTE_UNUSED;
+     symbolS *to_symbol ATTRIBUTE_UNUSED;
+{
+}
+
+void
+md_create_long_jump (ptr, from_addr, to_addr, frag, to_symbol)
+     char *ptr ATTRIBUTE_UNUSED;
+     addressT from_addr ATTRIBUTE_UNUSED;
+     addressT to_addr ATTRIBUTE_UNUSED;
+     fragS *frag ATTRIBUTE_UNUSED;
+     symbolS *to_symbol ATTRIBUTE_UNUSED;
+{
+}
+
+static int
+set_option (arg)
+     char *arg;
+{
+  int yes = 1;
+
+  if (strcmp (arg, "all-extensions") == 0 ||
+      strcmp (arg, "all") == 0)
+    {
+      memset (pdp11_extension, ~0, sizeof pdp11_extension);
+      pdp11_extension[PDP11_NONE] = 0;
+      return 1;
+    }
+  else if (strcmp (arg, "no-extensions") == 0)
+    {
+      memset (pdp11_extension, 0, sizeof pdp11_extension);
+      pdp11_extension[PDP11_BASIC] = 1;
+      return 1;
+    }
+
+  if (strncmp (arg, "no-", 3) == 0)
+    {
+      yes = 0;
+      arg += 3;
+    }
+
+  if (strcmp (arg, "cis") == 0)			/* commersial instructions */
+    pdp11_extension[PDP11_CIS] = yes;
+  else if (strcmp (arg, "csm") == 0)		/* call supervisor mode */
+    pdp11_extension[PDP11_CSM] = yes;
+  else if (strcmp (arg, "eis") == 0)		/* extended instruction set */
+    pdp11_extension[PDP11_EIS] = pdp11_extension[PDP11_LEIS] = yes;
+  else if (strcmp (arg, "fis") == 0 ||		/* KEV11 floating-point */
+	   strcmp (arg, "kev11") == 0 ||
+	   strcmp (arg, "kev-11") == 0)
+    pdp11_extension[PDP11_FIS] = yes;
+  else if (strcmp (arg, "fpp") == 0 ||		/* FP-11 floating-point */
+	   strcmp (arg, "fpu") == 0 ||
+	   strcmp (arg, "fp11") == 0 ||
+	   strcmp (arg, "fp-11") == 0 ||
+	   strcmp (arg, "fpj11") == 0 ||
+	   strcmp (arg, "fp-j11") == 0 ||
+	   strcmp (arg, "fpj-11") == 0)
+    pdp11_extension[PDP11_FPP] = yes;
+  else if (strcmp (arg, "limited-eis") == 0)	/* limited extended insns */
+    {
+      pdp11_extension[PDP11_LEIS] = yes;
+      if (!pdp11_extension[PDP11_LEIS])
+	pdp11_extension[PDP11_EIS] = 0;
+    }
+  else if (strcmp (arg, "mfpt") == 0)		/* move from processor type */
+    pdp11_extension[PDP11_MFPT] = yes;
+  else if (strncmp (arg, "mproc", 5) == 0 ||	/* multiprocessor insns: */
+	   strncmp (arg, "multiproc", 9) == 0 )	/* TSTSET, WRTLCK */
+    pdp11_extension[PDP11_MPROC] = yes;
+  else if (strcmp (arg, "mxps") == 0)		/* move from/to proc status */
+    pdp11_extension[PDP11_MXPS] = yes;
+  else if (strcmp (arg, "pic") == 0)		/* position-independent code */
+    asm_option[ASM_OPT_PIC] = yes;
+  else if (strcmp (arg, "spl") == 0)		/* set priority level */
+    pdp11_extension[PDP11_SPL] = yes;
+  else if (strcmp (arg, "ucode") == 0 ||	/* microcode instructions: */
+	   strcmp (arg, "microcode") == 0)	/* LDUB, MED, XFC */
+    pdp11_extension[PDP11_UCODE] = yes;
+  else
+    return 0;
+
+  return 1;
+}
+
+static int
+set_cpu_model (arg)
+     char *arg;
+{
+  char buf[4];
+  char *model = buf;
+
+  if (arg[0] == 'k')
+    arg++;
+
+  *model++ = *arg++;
+
+  if (strchr ("abdx", model[-1]) == NULL)
+    return 0;
+
+  if (model[-1] == 'd')
+    {
+      if (arg[0] == 'f' ||
+	  arg[0] == 'j')
+	model[-1] = *arg++;
+    }
+  else if (model[-1] == 'x')
+    {
+      if (arg[0] == 't')
+	model[-1] = *arg++;
+    }
+
+  if (arg[0] == '-')
+    arg++;
+
+  if (strncmp (arg, "11", 2) != 0)
+    return 0;
+  arg += 2;
+
+  if (arg[0] == '-')
+    {
+      if (*++arg == 0)
+	return 0;
+    }
+
+  /* allow up to two revision letters */
+  if (arg[0] != 0)
+    *model++ = *arg++;
+  if (arg[0] != 0)
+    *model++ = *arg++;
+
+  *model++ = 0;
+
+  set_option ("no-extensions");
+
+  if (strncmp (buf, "a", 1) == 0)		/* KA11 (11/15/20) */
+    return 1; /* no extensions */
+
+  else if (strncmp (buf, "b", 1) == 0)		/* KB11 (11/45/50/55/70) */
+    return set_option ("eis") &&
+           set_option ("spl");
+
+  else if (strncmp (buf, "da", 2) == 0)		/* KD11-A (11/35/40) */
+    return set_option ("limited-eis");
+
+  else if (strncmp (buf, "db", 2) == 0 ||	/* KD11-B (11/05/10) */
+	   strncmp (buf, "dd", 2) == 0)		/* KD11-D (11/04) */
+    return 1; /* no extensions */
+
+  else if (strncmp (buf, "de", 2) == 0)		/* KD11-E (11/34) */
+    return set_option ("eis") &&
+           set_option ("mxps");
+
+  else if (strncmp (buf, "df", 2) == 0 ||	/* KD11-F (11/03) */
+	   strncmp (buf, "dh", 2) == 0 ||	/* KD11-H (11/03) */
+	   strncmp (buf, "dq", 2) == 0)		/* KD11-Q (11/03) */
+    return set_option ("limited-eis") &&
+           set_option ("mxps");
+
+  else if (strncmp (buf, "dk", 2) == 0)		/* KD11-K (11/60) */
+    return set_option ("eis") &&
+           set_option ("mxps") &&
+           set_option ("ucode");
+
+  else if (strncmp (buf, "dz", 2) == 0)		/* KD11-Z (11/44) */
+    return set_option ("csm") &&
+           set_option ("eis") &&
+           set_option ("mfpt") &&
+           set_option ("mxps") &&
+           set_option ("spl");
+
+  else if (strncmp (buf, "f", 1) == 0)		/* F11 (11/23/24) */
+    return set_option ("eis") &&
+           set_option ("mfpt") &&
+           set_option ("mxps");
+
+  else if (strncmp (buf, "j", 1) == 0)		/* J11 (11/53/73/83/84/93/94)*/
+    return set_option ("csm") &&
+           set_option ("eis") &&
+           set_option ("mfpt") &&
+           set_option ("multiproc") &&
+           set_option ("mxps") &&
+           set_option ("spl");
+
+  else if (strncmp (buf, "t", 1) == 0)		/* T11 (11/21) */
+    return set_option ("limited-eis") &&
+           set_option ("mxps");
+
+  else
+    return 0;
+}
+
+static int
+set_machine_model (arg)
+     char *arg;
+{
+  if (strncmp (arg, "pdp-11/", 7) != 0 &&
+      strncmp (arg, "pdp11/", 6) != 0 &&
+      strncmp (arg, "11/", 3) != 0)
+    return 0;
+
+  if (strncmp (arg, "pdp", 3) == 0)
+    arg += 3;
+  if (arg[0] == '-')
+    arg++;
+  if (strncmp (arg, "11/", 3) == 0)
+    arg += 3;
+
+  if (strcmp (arg, "03") == 0)			/* 11/03 */
+    return set_cpu_model ("kd11f");		/* KD11-F */
+
+  else if (strcmp (arg, "04") == 0)		/* 11/04 */
+    return set_cpu_model ("kd11d");		/* KD11-D */
+
+  else if (strcmp (arg, "05") == 0 ||		/* 11/05 or 11/10 */
+	   strcmp (arg, "10") == 0)
+    return set_cpu_model ("kd11b");		/* KD11-B */
+
+  else if (strcmp (arg, "15") == 0 ||		/* 11/15 or 11/20 */
+	   strcmp (arg, "20") == 0)
+    return set_cpu_model ("ka11");		/* KA11 */
+
+  else if (strcmp (arg, "21") == 0)		/* 11/21 */
+    return set_cpu_model ("t11");		/* T11 */
+
+  else if (strcmp (arg, "23") == 0 ||		/* 11/23 or 11/24 */
+	   strcmp (arg, "24") == 0)
+    return set_cpu_model ("f11");		/* F11 */
+
+  else if (strcmp (arg, "34") == 0 ||		/* 11/34 or 11/34a */
+           strcmp (arg, "34a") == 0)
+    return set_cpu_model ("kd11e");		/* KD11-E */
+
+  else if (strcmp (arg, "35") == 0 ||		/* 11/35 or 11/40 */
+	   strcmp (arg, "40") == 0)
+    return set_cpu_model ("kd11da");		/* KD11-A */
+
+  else if (strcmp (arg, "44") == 0)		/* 11/44 */
+    return set_cpu_model ("kd11dz");		/* KD11-Z */
+
+  else if (strcmp (arg, "45") == 0 ||		/* 11/45/50/55/70 */
+	   strcmp (arg, "50") == 0 ||
+	   strcmp (arg, "55") == 0 ||
+	   strcmp (arg, "70") == 0)
+    return set_cpu_model ("kb11");		/* KB11 */
+
+  else if (strcmp (arg, "60") == 0)		/* 11/60 */
+    return set_cpu_model ("kd11k");		/* KD11-K */ /* FPP? */
+
+  else if (strcmp (arg, "53") == 0 ||		/* 11/53/73/83/84/93/94 */
+	   strcmp (arg, "73") == 0 ||
+	   strcmp (arg, "83") == 0 ||
+	   strcmp (arg, "84") == 0 ||
+	   strcmp (arg, "93") == 0 ||
+	   strcmp (arg, "94") == 0)
+    return set_cpu_model ("j11") &&		/* J11 */
+           set_option ("fpp");			/* All J11 machines come */
+						/* with FPP installed.  */
+  else
+    return 0;
+}
+
+CONST char *md_shortopts = "m:";
+
+struct option md_longopts[] =
+{
+#define OPTION_CPU 257
+  { "cpu", required_argument, NULL, OPTION_CPU },
+#define OPTION_MACHINE 258
+  { "machine", required_argument, NULL, OPTION_MACHINE },
+#define OPTION_PIC 259
+  { "pic", no_argument, NULL, OPTION_PIC },
+  { NULL, no_argument, NULL, 0 }
+};
+
+size_t md_longopts_size = sizeof(md_longopts);
+
+/*
+ * md_parse_option
+ *	Invocation line includes a switch not recognized by the base assembler.
+ *	See if it's a processor-specific option.
+ */
+
+int
+md_parse_option (c, arg)
+     int c;
+     char *arg;
+{
+  init_defaults ();
+
+  switch (c)
+    {
+    case 'm':
+      if (set_option (arg))
+	return 1;
+      if (set_cpu_model (arg))
+	return 1;
+      if (set_machine_model (arg))
+	return 1;
+      break;
+
+    case OPTION_CPU:
+      if (set_cpu_model (arg))
+	return 1;
+      break;
+
+    case OPTION_MACHINE:
+      if (set_machine_model (arg))
+	return 1;
+      break;
+
+    case OPTION_PIC:
+      if (set_option ("pic"))
+	return 1;
+      break;
+
+    default:
+      break;
+    }
+
+  as_bad ("unrecognized option `-%c%s'", c, arg ? arg : "");
+
+  return 0;
+}
+
+/*
+One possible way of parsing options.
+
+enum
+{
+  OPTION_CSM,
+  OPTION_CIS,
+  ...
+};
+
+struct
+{
+  CONST char *pattern;
+  int opt;
+  CONST char *description;
+} options;
+
+static struct options extension_opts[] =
+{
+  { "Ncsm", OPTION_CSM,
+			"allow (disallow) CSM instruction" },
+  { "Ncis", OPTION_CIS,
+			"allow (disallow) commersial instruction set" },
+  { "Neis", OPTION_EIS,
+			"allow (disallow) extended instruction set" },
+  ...
+  { "all-extensions", OPTION_ALL_EXTENSIONS,
+			"allow all instruction set extensions\n\
+			(this is the default)" },
+  { "no-extensions", OPTION_NO_EXTENSIONS,
+			"disallow all instruction set extensions" },
+  { "pic", OPTION_PIC,
+			"position-independent code" },
+};
+
+static struct options cpu_opts[] =
+{
+  { "Ka_11_*", OPTION_KA11, "KA11 CPU. ..." },
+  { "Kb_11_*", OPTION_KB11, "KB11 CPU. ..." },
+  { "Kd_11_a*", OPTION_KD11A, "KD11-A CPU. ..." },
+  { "Kd_11_b*", OPTION_KD11B, "KD11-B CPU. ..." },
+  { "Kd_11_d*", OPTION_KD11D, "KD11-D CPU. ..." },
+  { "Kd_11_e*", OPTION_KD11E, "KD11-E CPU. ..." },
+  { "Kd_11_f*", OPTION_KD11F, "KD11-F CPU. ..." },
+  { "Kd_11_h*", OPTION_KD11H, "KD11-H CPU. ..." },
+  { "Kd_11_q*", OPTION_KD11Q, "KD11-Q CPU. ..." },
+  { "Kd_11_z*", OPTION_KD11Z, "KD11-Z CPU. ..." },
+  { "Df_11_*", OPTION_F11, "F11 CPU. ..." },
+  { "Dj_11_*", OPTION_J11, "J11 CPU. ..." },
+  { "Dt_11_*", OPTION_T11, "T11 CPU. ..." },
+};
+
+static struct options model_opts[] =
+{
+  { "P03", OPTION_PDP11_03, "same as ..." },
+  { "P04", OPTION_PDP11_04, "same as ..." },
+  { "P05", OPTION_PDP11_05, "same as ..." },
+  { "P10", OPTION_PDP11_10, "same as ..." },
+  { "P15", OPTION_PDP11_15, "same as ..." },
+  { "P20", OPTION_PDP11_20, "same as ..." },
+  { "P21", OPTION_PDP11_21, "same as ..." },
+  { "P24", OPTION_PDP11_24, "same as ..." },
+  { "P34", OPTION_PDP11_34, "same as ..." },
+  { "P34a", OPTION_PDP11_34A, "same as ..." },
+  { "P40", OPTION_PDP11_40, "same as ..." },
+  { "P44", OPTION_PDP11_44, "same as ..." },
+  { "P45", OPTION_PDP11_45, "same as ..." },
+  { "P50", OPTION_PDP11_50, "same as ..." },
+  { "P53", OPTION_PDP11_53, "same as ..." },
+  { "P55", OPTION_PDP11_55, "same as ..." },
+  { "P60", OPTION_PDP11_60, "same as ..." },
+  { "P70", OPTION_PDP11_70, "same as ..." },
+  { "P73", OPTION_PDP11_73, "same as ..." },
+  { "P83", OPTION_PDP11_83, "same as ..." },
+  { "P84", OPTION_PDP11_84, "same as ..." },
+  { "P93", OPTION_PDP11_93, "same as ..." },
+  { "P94", OPTION_PDP11_94, "same as ..." },
+};
+
+struct
+{
+  CONST char *title;
+  struct options *opts;
+  int num;
+} all_opts[] =
+{
+  { "PDP-11 instruction set extentions",
+    extension_opts,
+    sizeof extension_opts / sizeof extension_opts[0] },
+  { "PDP-11 CPU model options",
+    cpu_opts,
+    sizeof cpu_opts / sizeof cpu_opts[0] },
+  { "PDP-11 machine model options",
+    model_opts,
+    sizeof model_opts / sizeof model_opts[0] },
+};
+
+int
+parse_match (char *arg, char *pattern)
+{
+  int yes = 1;
+
+  while (*pattern)
+    {
+      switch (*pattern++)
+	{
+	case 'N':
+	  if (strncmp (arg, "no-") == 0)
+	    {
+	      yes = 0;
+	      arg += 3;
+	    }
+	  break;
+
+	case 'K':
+	  if (arg[0] == 'k')
+	    arg++;
+	  break;
+
+	case 'D':
+	  if (strncmp (arg, "kd", 2) == 0)
+	    arg +=2;
+	  break;
+
+	case 'P':
+	  if (strncmp (arg, "pdp-11/", 7) == 0)
+	    arg += 7;
+	  else if (strncmp (arg, "pdp11/", 6) == 0)
+	    arg += 6;
+	  else if (strncmp (arg, "11/", 3) == 0)
+	    arg += 3;
+	  break;
+
+	case '_':
+	  if (arg[0] == "-")
+	    {
+	      if (*++arg == 0)
+		return 0;
+	    }
+	  break;
+
+	case '*':
+	  return 1;
+
+	default:
+	  if (*arg++ != pattern[-1])
+	    return 0;
+	}
+    }
+
+  return arg[0] == 0;
+}
+
+int
+fprint_opt (stream, pattern)
+     FILE *stream;
+     CONST char *pattern;
+{
+  int n;
+
+  while (*pattern)
+    {
+      switch (*pattern++)
+	{
+	case 'N':
+	  n += fprintf (stream, "(no-)");
+	  break;
+
+	case 'K':
+	  n += fprintf (stream, "k");
+	  break;
+
+	case 'P':
+	  n += fprintf (stream "11/");
+	  break;
+
+	case 'D':
+	case '_':
+	case '*':
+	  break;
+
+	default:
+	  fputc (pattern[-1], stream);
+	  n++;
+	}
+    }
+
+  return n;
+}
+
+int
+parse_option (char *arg)
+{
+  int i, j;
+
+  for (i = 0; i < sizeof all_opts / sizeof all_opts[0]; i++)
+    {
+      for (j = 0; j < all_opts[i].num; j++)
+	{
+	  if (parse_match (arg, all_opts[i].opts[j].pattern))
+	    {
+	      set_option (all_opts[i].opts[j].opt);
+	      return 1;
+	    }
+	}
+    }
+
+  return 0;
+}
+
+static void
+fprint_space (stream, n)
+     FILE *stream;
+     int n;
+{
+  while (n--)
+    fputc (' ', stream);
+}
+
+void
+md_show_usage (stream)
+     FILE *stream;
+{
+  int i, j, n;
+
+  for (i = 0; i < sizeof all_opts / sizeof all_opts[0]; i++)
+    {
+      fprintf (stream "\n%s:\n\n", all_opts[i].title);
+
+      for (j = 0; j < all_opts[i].num; j++)
+	{
+	  fprintf (stream, "-m");
+	  n = fprintf_opt (stream, all_opts[i].opts[j].pattern);
+	  fprint_space (stream, 22 - n);
+	  fprintf (stream, "%s\n", all_opts[i].opts[j].description);
+	}
+    }
+}
+*/
+
+void
+md_show_usage (stream)
+     FILE *stream;
+{
+  fprintf (stream, "\
+\n\
+PDP-11 instruction set extentions:\n\
+\n\
+-m(no-)cis		allow (disallow) commersial instruction set\n\
+-m(no-)csm		allow (disallow) CSM instruction\n\
+-m(no-)eis		allow (disallow) full extended instruction set\n\
+-m(no-)fis		allow (disallow) KEV11 floating-point instructions\n\
+-m(no-)fpp		allow (disallow) FP-11 floating-point instructions\n\
+-m(no-)fpu		allow (disallow) FP-11 floating-point instructions\n\
+-m(no-)limited-eis	allow (disallow) limited extended instruction set\n\
+-m(no-)mfpt		allow (disallow) processor type instruction\n\
+-m(no-)multiproc	allow (disallow) multiprocessor instructions\n\
+-m(no-)mxps		allow (disallow) processor status instructions\n\
+-m(no-)spl		allow (disallow) SPL instruction\n\
+-m(no-)ucode		allow (disallow) microcode instructions\n\
+-mall-extensions	allow all instruction set extensions\n\
+			(this is the default)\n\
+-mno-extentions		disallow all instruction set extensions\n\
+-pic			generate position-indepenent code\n\
+\n\
+PDP-11 CPU model options:\n\
+\n\
+-mka11*			KA11 CPU.  base line instruction set only\n\
+-mkb11*			KB11 CPU.  enable full EIS and SPL\n\
+-mkd11a*		KD11-A CPU.  enable limited EIS\n\
+-mkd11b*		KD11-B CPU.  base line instruction set only\n\
+-mkd11d*		KD11-D CPU.  base line instruction set only\n\
+-mkd11e*		KD11-E CPU.  enable full EIS, MTPS, and MFPS\n\
+-mkd11f*		KD11-F CPU.  enable limited EIS, MTPS, and MFPS\n\
+-mkd11h*		KD11-H CPU.  enable limited EIS, MTPS, and MFPS\n\
+-mkd11q*		KD11-Q CPU.  enable limited EIS, MTPS, and MFPS\n\
+-mkd11k*		KD11-K CPU.  enable full EIS, MTPS, MFPS, LDUB, MED,\n\
+			XFC, and MFPT\n\
+-mkd11z*		KD11-Z CPU.  enable full EIS, MTPS, MFPS, MFPT, SPL,\n\
+			and CSM\n\
+-mf11*			F11 CPU.  enable full EIS, MFPS, MTPS, and MFPT\n\
+-mj11*			J11 CPU.  enable full EIS, MTPS, MFPS, MFPT, SPL,\n\
+			CSM, TSTSET, and WRTLCK\n\
+-mt11*			T11 CPU.  enable limited EIS, MTPS, and MFPS\n\
+\n\
+PDP-11 machine model options:\n\
+\n\
+-m11/03			same as -mkd11f\n\
+-m11/04			same as -mkd11d\n\
+-m11/05			same as -mkd11b\n\
+-m11/10			same as -mkd11b\n\
+-m11/15			same as -mka11\n\
+-m11/20			same as -mka11\n\
+-m11/21			same as -mt11\n\
+-m11/23			same as -mf11\n\
+-m11/24			same as -mf11\n\
+-m11/34			same as -mkd11e\n\
+-m11/34a		same as -mkd11e -mfpp\n\
+-m11/35			same as -mkd11a\n\
+-m11/40			same as -mkd11a\n\
+-m11/44			same as -mkd11z\n\
+-m11/45			same as -mkb11\n\
+-m11/50			same as -mkb11\n\
+-m11/53			same as -mj11\n\
+-m11/55			same as -mkb11\n\
+-m11/60			same as -mkd11k\n\
+-m11/70			same as -mkb11\n\
+-m11/73			same as -mj11\n\
+-m11/83			same as -mj11\n\
+-m11/84			same as -mj11\n\
+-m11/93			same as -mj11\n\
+-m11/94			same as -mj11\n\
+");
+}
+
+symbolS *
+md_undefined_symbol (name)
+     char *name ATTRIBUTE_UNUSED;
+{
+  return 0;
+}
+
+valueT
+md_section_align (segment, size)
+     segT segment ATTRIBUTE_UNUSED;
+     valueT size;
+{
+  return (size + 1) & ~1;
+}
+
+long
+md_pcrel_from (fixP)
+     fixS *fixP;
+{
+  return fixP->fx_frag->fr_address + fixP->fx_where + fixP->fx_size;
+}
+
+/* Translate internal representation of relocation info to BFD target
+   format.  */
+arelent *
+tc_gen_reloc (section, fixp)
+     asection *section ATTRIBUTE_UNUSED;
+     fixS *fixp;
+{
+  arelent *reloc;
+  bfd_reloc_code_real_type code;
+
+  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;
+
+  /* this is taken account for in md_apply_fix() */
+  reloc->addend = -symbol_get_bfdsym (fixp->fx_addsy)->section->vma;
+
+  switch (fixp->fx_r_type)
+    {
+    case BFD_RELOC_16:
+      if (fixp->fx_pcrel)
+	code = BFD_RELOC_16_PCREL;
+      else
+	code = BFD_RELOC_16;
+      break;
+
+    case BFD_RELOC_16_PCREL:
+      code = BFD_RELOC_16_PCREL;
+      break;
+
+    default:
+      BAD_CASE (fixp->fx_r_type);
+      return NULL;
+    }
+
+  reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
+
+  if (reloc->howto == NULL)
+    {
+      as_bad_where (fixp->fx_file, fixp->fx_line,
+		    "Can not represent %s relocation in this object file format",
+		    bfd_get_reloc_code_name (code));
+      return NULL;
+    }
+
+  return reloc;
+}
+
+void
+pseudo_bss (c)
+     int c ATTRIBUTE_UNUSED;
+{
+  int temp;
+
+  temp = get_absolute_expression ();
+  subseg_set (bss_section, temp);
+  demand_empty_rest_of_line ();
+}
+
+void
+pseudo_even (c)
+     int c ATTRIBUTE_UNUSED;
+{
+  int alignment = 1; /* 2^1 */
+  frag_align (alignment, 0, 1);
+  record_alignment (now_seg, alignment);
+}
+
+/* end of tc-pdp11.c */
diff --git a/gas/config/tc-pdp11.h b/gas/config/tc-pdp11.h
new file mode 100644
index 0000000..9d5c409
--- /dev/null
+++ b/gas/config/tc-pdp11.h
@@ -0,0 +1,33 @@
+/* tc-pdp11.h -- Header file for tc-pdp11.c.
+   Copyright (C) 2001 Free Software Foundation, Inc.
+
+   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.  */
+
+#define TC_PDP11 1
+
+#define TARGET_FORMAT "a.out-pdp11"
+#define TARGET_ARCH bfd_arch_pdp11
+#define TARGET_BYTES_BIG_ENDIAN 0
+
+#define LEX_TILDE (LEX_BEGIN_NAME | LEX_NAME)
+
+#define md_operand(x)
+
+long md_chars_to_number PARAMS ((unsigned char *, int));
+
+/* end of tc-pdp11.h */
diff --git a/gas/config/tc-s390.c b/gas/config/tc-s390.c
new file mode 100644
index 0000000..329ac1a
--- /dev/null
+++ b/gas/config/tc-s390.c
@@ -0,0 +1,1756 @@
+/* tc-s390.c -- Assemble for the S390
+   Copyright (C) 2000 Free Software Foundation, Inc.
+   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+
+   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 <ctype.h>
+#include "as.h"
+#include "subsegs.h"
+#include "struc-symbol.h"
+
+#include "opcode/s390.h"
+#include "elf/s390.h"
+
+/* The default architecture */
+#ifndef DEFAULT_ARCH
+#define DEFAULT_ARCH "s390"
+#endif
+static char *default_arch = DEFAULT_ARCH;
+/* Either 32 or 64, selects file format.  */
+static int s390_arch_size;
+/* Current architecture. Start with the smallest instruction set */
+static enum s390_opcode_arch_val current_architecture = S390_OPCODE_ESA;
+static int current_arch_mask = 1 << S390_OPCODE_ESA;
+static int current_arch_requested = 0;
+
+/* Whether to use user friendly register names. Default is true. */
+#ifndef TARGET_REG_NAMES_P
+#define TARGET_REG_NAMES_P true
+#endif
+
+static boolean reg_names_p = TARGET_REG_NAMES_P;
+
+/* Generic assembler global variables which must be defined by all
+   targets.  */
+
+const char comment_chars[] = "#";
+
+/* Characters which start a comment at the beginning of a line.  */
+const char line_comment_chars[] = "#";
+
+/* Characters which may be used to separate multiple commands on a
+   single line.  */
+const char line_separator_chars[] = ";";
+
+/* Characters which are used to indicate an exponent in a floating
+   point number.  */
+const char EXP_CHARS[] = "eE";
+
+/* Characters which mean that a number is a floating point constant,
+   as in 0d1.0.  */
+const char FLT_CHARS[] = "dD";
+
+/* The target specific pseudo-ops which we support.  */
+
+/* Define the prototypes for the pseudo-ops */
+static void s390_byte PARAMS ((int));
+static void s390_elf_cons PARAMS ((int));
+static void s390_bss PARAMS ((int));
+static void s390_insn PARAMS ((int));
+static void s390_literals PARAMS ((int));
+
+const pseudo_typeS md_pseudo_table[] =
+{
+  { "align", s_align_bytes, 0 },
+  /* Pseudo-ops which must be defined. */
+  { "bss",      s390_bss,       0 }, 
+  { "insn",     s390_insn,      0 },
+  /* Pseudo-ops which must be overridden.  */
+  { "byte",	s390_byte,	0 },
+  { "short",    s390_elf_cons,  2 },
+  { "long",	s390_elf_cons,	4 },
+  { "quad",     s390_elf_cons,  8 },
+  { "ltorg",    s390_literals,  0 },
+  { "string",   stringer,       2 },
+  { NULL,	NULL,		0 }
+};
+
+
+/* Structure to hold information about predefined registers.  */
+struct pd_reg
+  {
+    char *name;
+    int value;
+  };
+
+/* List of registers that are pre-defined:
+
+   Each access register has a predefined name of the form:
+     a<reg_num> which has the value <reg_num>.
+
+   Each control register has a predefined name of the form:
+     c<reg_num> which has the value <reg_num>.
+
+   Each general register has a predefined name of the form:
+     r<reg_num> which has the value <reg_num>.
+
+   Each floating point register a has predefined name of the form:
+     f<reg_num> which has the value <reg_num>.
+
+   There are individual registers as well:
+     sp     has the value 15
+     lit    has the value 12
+
+   The table is sorted. Suitable for searching by a binary search. */
+
+static const struct pd_reg pre_defined_registers[] =
+{
+  { "a0", 0 },     /* Access registers */
+  { "a1", 1 },
+  { "a10", 10 },
+  { "a11", 11 },
+  { "a12", 12 },
+  { "a13", 13 },
+  { "a14", 14 },
+  { "a15", 15 },
+  { "a2", 2 },
+  { "a3", 3 },
+  { "a4", 4 },
+  { "a5", 5 },
+  { "a6", 6 },
+  { "a7", 7 },
+  { "a8", 8 },
+  { "a9", 9 },
+
+  { "c0", 0 },     /* Control registers */
+  { "c1", 1 },
+  { "c10", 10 },
+  { "c11", 11 },
+  { "c12", 12 },
+  { "c13", 13 },
+  { "c14", 14 },
+  { "c15", 15 },
+  { "c2", 2 },
+  { "c3", 3 },
+  { "c4", 4 },
+  { "c5", 5 },
+  { "c6", 6 },
+  { "c7", 7 },
+  { "c8", 8 },
+  { "c9", 9 },
+
+  { "f0", 0 },     /* Floating point registers */
+  { "f1", 1 }, 
+  { "f10", 10 }, 
+  { "f11", 11 }, 
+  { "f12", 12 }, 
+  { "f13", 13 }, 
+  { "f14", 14 }, 
+  { "f15", 15 }, 
+  { "f2", 2 }, 
+  { "f3", 3 }, 
+  { "f4", 4 }, 
+  { "f5", 5 }, 
+  { "f6", 6 }, 
+  { "f7", 7 }, 
+  { "f8", 8 }, 
+  { "f9", 9 }, 
+
+  { "lit", 13 },   /* Pointer to literal pool */
+
+  { "r0", 0 },     /* General purpose registers */
+  { "r1", 1 },
+  { "r10", 10 },
+  { "r11", 11 },
+  { "r12", 12 },
+  { "r13", 13 },
+  { "r14", 14 },
+  { "r15", 15 },
+  { "r2", 2 },
+  { "r3", 3 },
+  { "r4", 4 },
+  { "r5", 5 },
+  { "r6", 6 },
+  { "r7", 7 },
+  { "r8", 8 },
+  { "r9", 9 },
+
+  { "sp", 15 },   /* Stack pointer */
+
+};
+
+#define REG_NAME_CNT (sizeof(pre_defined_registers) / sizeof(struct pd_reg))
+
+/* Given NAME, find the register number associated with that name, return
+   the integer value associated with the given name or -1 on failure.  */
+
+static int
+reg_name_search (regs, regcount, name)
+     const struct pd_reg *regs;
+     int regcount;
+     const char *name;
+{
+  int middle, low, high;
+  int cmp;
+
+  low = 0;
+  high = regcount - 1;
+
+  do
+    {
+      middle = (low + high) / 2;
+      cmp = strcasecmp (name, regs[middle].name);
+      if (cmp < 0)
+	high = middle - 1;
+      else if (cmp > 0)
+	low = middle + 1;
+      else
+	return regs[middle].value;
+    }
+  while (low <= high);
+
+  return -1;
+}
+
+
+/*
+ * Summary of register_name().
+ *
+ * in:	Input_line_pointer points to 1st char of operand.
+ *
+ * out:	A expressionS.
+ *      The operand may have been a register: in this case, X_op == O_register,
+ *      X_add_number is set to the register number, and truth is returned.
+ *	Input_line_pointer->(next non-blank) char after operand, or is in its
+ *      original state.
+ */
+
+static boolean
+register_name (expressionP)
+     expressionS *expressionP;
+{
+  int reg_number;
+  char *name;
+  char *start;
+  char c;
+
+  /* Find the spelling of the operand */
+  start = name = input_line_pointer;
+  if (name[0] == '%' && isalpha (name[1]))
+    name = ++input_line_pointer;
+  else
+    return false;
+
+  c = get_symbol_end ();
+  reg_number = reg_name_search (pre_defined_registers, REG_NAME_CNT, name);
+
+  /* look to see if it's in the register table */
+  if (reg_number >= 0) 
+    {
+      expressionP->X_op = O_register;
+      expressionP->X_add_number = reg_number;
+      
+      /* make the rest nice */
+      expressionP->X_add_symbol = NULL;
+      expressionP->X_op_symbol = NULL;
+      *input_line_pointer = c;   /* put back the delimiting char */
+      return true;
+    }
+  else
+    {
+      /* reset the line as if we had not done anything */
+      *input_line_pointer = c;   /* put back the delimiting char */
+      input_line_pointer = start; /* reset input_line pointer */
+      return false;
+    }
+}
+
+/* Local variables.  */
+
+/* Opformat hash table.  */
+static struct hash_control *s390_opformat_hash;
+
+/* Opcode hash table.  */
+static struct hash_control *s390_opcode_hash;
+
+/* Flags to set in the elf header */
+static flagword s390_flags = 0;
+
+symbolS *GOT_symbol;		/* Pre-defined "_GLOBAL_OFFSET_TABLE_" */
+
+#ifndef WORKING_DOT_WORD
+const int md_short_jump_size = 4;
+const int md_long_jump_size = 4;
+#endif
+
+CONST char *md_shortopts = "A:m:kVQ:";
+struct option md_longopts[] = {
+  {NULL, no_argument, NULL, 0}
+};
+size_t md_longopts_size = sizeof(md_longopts);
+
+/* Initialize the default opcode arch and word size from the default
+   architecture name.  */
+static void
+init_default_arch ()
+{
+  if (current_arch_requested)
+    return;
+  if (strcmp(default_arch, "s390") == 0) {
+    s390_arch_size = 32;
+    current_architecture = S390_OPCODE_ESA;
+  } else if (strcmp(default_arch, "s390x") == 0) {
+    s390_arch_size = 64;
+    current_architecture = S390_OPCODE_ESAME;
+  } else
+    as_fatal ("Invalid default architecture, broken assembler.");
+  current_arch_mask = 1 << current_architecture;
+}
+
+/* Called by TARGET_FORMAT.  */
+const char *
+s390_target_format ()
+{
+  /* We don't get a chance to initialize anything before we're called,
+     so handle that now.  */
+  if (! s390_arch_size)
+    init_default_arch ();
+
+  return s390_arch_size == 64 ? "elf64-s390" : "elf32-s390";
+}
+
+int
+md_parse_option (c, arg)
+     int c;
+     char *arg;
+{
+  switch (c) {
+    /* -k: Ignore for FreeBSD compatibility.  */
+  case 'k':
+    break;
+  case 'm':
+    if (arg != NULL && strcmp (arg, "regnames") == 0)
+      reg_names_p = true;
+    
+    else if (arg != NULL && strcmp (arg, "no-regnames") == 0)
+      reg_names_p = false;
+    
+    else {
+      as_bad (_("invalid switch -m%s"), arg);
+      return 0;
+    }
+    break;
+    
+  case 'A':
+    if (arg != NULL && strcmp (arg, "esa") == 0) {
+      current_architecture = S390_OPCODE_ESA;
+      s390_arch_size = 32;
+    } else if (arg != NULL && strcmp (arg, "esame") == 0) {
+      current_architecture = S390_OPCODE_ESAME;
+      s390_arch_size = 64;
+    } else
+      as_bad ("invalid architecture -A%s", arg);
+    current_arch_mask = 1 << current_architecture;
+    current_arch_requested = 1;
+    break;
+
+    /* -V: SVR4 argument to print version ID.  */
+  case 'V':
+    print_version_id ();
+    break;
+    
+    /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
+       should be emitted or not.  FIXME: Not implemented.  */
+  case 'Q':
+    break;
+    
+  default:
+    return 0;
+  }
+  
+  return 1;
+}
+
+void
+md_show_usage (stream)
+     FILE *stream;
+{
+  fprintf(stream, _("\
+          S390 options:\n\
+          -mregnames   \tAllow symbolic names for registers\n\
+          -mno-regnames\tDo not allow symbolic names for registers\n"));
+  fprintf(stream, _("\
+          -V       \tprint assembler version number\n\
+          -Qy, -Qn \tignored\n"));
+}
+
+/* This function is called when the assembler starts up.  It is called
+   after the options have been parsed and the output file has been
+   opened. */
+
+void
+md_begin ()
+{
+  register const struct s390_opcode *op;
+  const struct s390_opcode *op_end;
+  boolean dup_insn = false;
+  const char *retval;
+
+  /* Set the ELF flags if desired. */
+  if (s390_flags)
+    bfd_set_private_flags (stdoutput, s390_flags);
+
+  /* Insert the opcode formats into a hash table.  */
+  s390_opformat_hash = hash_new ();
+
+  op_end = s390_opformats + s390_num_opformats;
+  for (op = s390_opformats; op < op_end; op++) {
+    retval = hash_insert (s390_opformat_hash, op->name, (PTR) op);
+    if (retval != (const char *) NULL)
+      {
+	as_bad (_("Internal assembler error for instruction format %s"),
+		op->name);
+	dup_insn = true;
+      }
+  }
+
+  /* Insert the opcodes into a hash table.  */
+  s390_opcode_hash = hash_new ();
+
+  op_end = s390_opcodes + s390_num_opcodes;
+  for (op = s390_opcodes; op < op_end; op++) {
+    retval = hash_insert (s390_opcode_hash, op->name, (PTR) op);
+    if (retval != (const char *) NULL)
+      {
+	as_bad (_("Internal assembler error for instruction %s"), op->name);
+	dup_insn = true;
+      }
+  }
+  
+  if (dup_insn)
+    abort ();
+
+  record_alignment (text_section, 2);
+  record_alignment (data_section, 2);
+  record_alignment (bss_section, 2);
+
+}
+
+/* Called after all assembly has been done.  */
+void
+s390_md_end ()
+{
+  if (s390_arch_size == 64) {
+    bfd_set_arch_mach (stdoutput, bfd_arch_s390, bfd_mach_s390_esame);
+  } else {
+    bfd_set_arch_mach (stdoutput, bfd_arch_s390, bfd_mach_s390_esa);
+  }
+}
+
+void
+s390_align_code (fragP, count)
+     fragS *fragP;
+     int count;
+{
+  /* We use nop pattern 0x0707.  */
+  if (count > 0) {
+    memset(fragP->fr_literal + fragP->fr_fix, 0x07, count);
+    fragP->fr_var = count;
+  }
+}
+
+/* Insert an operand value into an instruction.  */
+
+static void
+s390_insert_operand (insn, operand, val, file, line)
+     unsigned char *insn;
+     const struct s390_operand *operand;
+     offsetT val;
+     char *file;
+     unsigned int line;
+{
+  addressT uval;
+  int offset;
+
+  if (operand->flags & (S390_OPERAND_SIGNED|S390_OPERAND_PCREL)) {
+    offsetT min, max;
+
+    max = ((offsetT) 1 << (operand->bits - 1)) - 1;
+    min = - ((offsetT) 1 << (operand->bits - 1));
+    /* Halve PCREL operands.  */
+    if (operand->flags & S390_OPERAND_PCREL)
+      val >>= 1;
+    /* Check for underflow / overflow.  */
+    if (val < min || val > max) {
+      const char *err =
+       "operand out of range (%s not between %ld and %ld)";
+      char buf[100];
+
+      if (operand->flags & S390_OPERAND_PCREL) {
+        val <<= 1;
+        min <<= 1;
+        max <<= 1;
+      }
+      sprint_value (buf, val);
+      if (file == (char *) NULL)
+        as_bad (err, buf, (int) min, (int) max);
+      else
+        as_bad_where (file, line, err, buf, (int) min, (int) max);
+      return;
+    }
+    /* val is ok, now restrict it to operand->bits bits.  */
+    uval = (addressT) val & ((((addressT) 1 << (operand->bits-1)) << 1) - 1);
+  } else {
+    addressT min, max;
+
+    max = (((addressT) 1 << (operand->bits - 1))<<1) - 1;
+    min = (offsetT) 0;
+    uval = (addressT) val;
+    /* Length x in an instructions has real length x+1.  */
+    if (operand->flags & S390_OPERAND_LENGTH)
+      uval--;
+    /* Check for underflow / overflow.  */
+    if (uval < min || uval > max) {
+      const char *err =
+        "operand out of range (%s not between %ld and %ld)";
+      char buf[100];
+    
+      if (operand->flags & S390_OPERAND_LENGTH) {
+        uval++;
+        min++;
+        max++;
+      }
+      sprint_value (buf, uval);
+      if (file == (char *) NULL)
+	as_bad (err, buf, (int) min, (int) max);
+      else
+	as_bad_where (file, line, err, buf, (int) min, (int) max);
+      return;
+    }
+  }
+
+  /* Insert fragments of the operand byte for byte.  */
+  offset = operand->shift + operand->bits;
+  uval <<= (-offset) & 7;
+  insn += (offset - 1)/8;
+  while (uval != 0) {
+    *insn-- |= uval;
+    uval >>= 8;
+  }
+}
+
+/* Structure used to hold suffixes.  */
+typedef enum {
+  ELF_SUFFIX_NONE = 0,
+  ELF_SUFFIX_GOT,
+  ELF_SUFFIX_PLT,
+  ELF_SUFFIX_GOTENT
+} elf_suffix_type;
+
+struct map_bfd {
+  char *string;
+  int length;
+  elf_suffix_type suffix;
+};
+
+/* Parse @got/@plt/@gotoff. and return the desired relocation.  */
+static elf_suffix_type
+s390_elf_suffix (str_p, exp_p)
+     char **str_p;
+     expressionS *exp_p;
+{
+  static struct map_bfd mapping[] = {
+    { "got", 3, ELF_SUFFIX_GOT  },
+    { "got12", 5, ELF_SUFFIX_GOT  },
+    { "plt", 3, ELF_SUFFIX_PLT  },
+    { "gotent", 6, ELF_SUFFIX_GOTENT },
+    { NULL,  0, ELF_SUFFIX_NONE }
+  };
+
+  struct map_bfd *ptr;
+  char *str = *str_p;
+  char *ident;
+  int len;
+
+  if (*str++ != '@')
+    return ELF_SUFFIX_NONE;
+
+  ident = str;
+  while (isalnum(*str))
+    str++;
+  len = str - ident;
+
+  for (ptr = &mapping[0]; ptr->length > 0; ptr++)
+    if (len == ptr->length &&
+	strncasecmp(ident, ptr->string, ptr->length) == 0) {
+      if (exp_p->X_add_number != 0)
+	as_warn (_("identifier+constant@%s means identifier@%s+constant"),
+		 ptr->string, ptr->string);
+      /* Now check for identifier@suffix+constant.  */
+      if (*str == '-' || *str == '+') {
+	  char *orig_line = input_line_pointer;
+	  expressionS new_exp;
+
+	  input_line_pointer = str;
+	  expression (&new_exp);
+
+          switch (new_exp.X_op) {
+	  case O_constant: /* X_add_number (a constant expression).  */
+	    exp_p->X_add_number += new_exp.X_add_number;
+	    str = input_line_pointer;
+	    break;
+	  case O_symbol:   /* X_add_symbol + X_add_number.  */
+	    /* this case is used for e.g. xyz@PLT+.Label.  */
+	    exp_p->X_add_number += new_exp.X_add_number;
+	    exp_p->X_op_symbol = new_exp.X_add_symbol;
+	    exp_p->X_op = O_add;
+	    str = input_line_pointer;
+	    break;
+	  case O_uminus:   /* (- X_add_symbol) + X_add_number.  */
+	    /* this case is used for e.g. xyz@PLT-.Label.  */
+	    exp_p->X_add_number += new_exp.X_add_number;
+	    exp_p->X_op_symbol = new_exp.X_add_symbol;
+	    exp_p->X_op = O_subtract;
+	    str = input_line_pointer;
+	    break;
+	  default:
+	    break;
+	  }
+
+	  /* If s390_elf_suffix has not been called with
+	     &input_line_pointer as first parameter, we have
+	     clobbered the input_line_pointer. We have to
+	     undo that.  */
+	  if (&input_line_pointer != str_p)
+	    input_line_pointer = orig_line;
+      }
+      *str_p = str;
+      return ptr->suffix;
+    }
+
+  return BFD_RELOC_UNUSED;
+}
+
+/* Structure used to hold a literal pool entry.  */
+struct s390_lpe {
+  struct s390_lpe *next;
+  expressionS ex;
+  FLONUM_TYPE floatnum;     /* used if X_op == O_big && X_add_number <= 0 */
+  LITTLENUM_TYPE bignum[4]; /* used if X_op == O_big && X_add_number > 0  */
+  int nbytes;
+  bfd_reloc_code_real_type reloc;
+  symbolS *sym;
+};
+
+static struct s390_lpe *lpe_free_list = NULL;
+static struct s390_lpe *lpe_list = NULL;
+static struct s390_lpe *lpe_list_tail = NULL;
+static symbolS *lp_sym = NULL;
+static int lp_count = 0;
+static int lpe_count = 0;
+
+static int
+s390_exp_compare(exp1, exp2)
+     expressionS *exp1;
+     expressionS *exp2;
+{
+  if (exp1->X_op != exp2->X_op)
+    return 0;
+
+  switch (exp1->X_op) {
+  case O_constant:   /* X_add_number must be equal.  */
+  case O_register:
+    return exp1->X_add_number == exp2->X_add_number;
+
+  case O_big:
+    as_bad(_("Can't handle O_big in s390_exp_compare")); 
+
+  case O_symbol:     /* X_add_symbol & X_add_number must be equal.  */
+  case O_symbol_rva:
+  case O_uminus:
+  case O_bit_not:
+  case O_logical_not:
+    return (exp1->X_add_symbol == exp2->X_add_symbol) &&
+           (exp1->X_add_number == exp2->X_add_number);
+
+  case O_multiply:   /* X_add_symbol,X_op_symbol&X_add_number must be equal.  */
+  case O_divide:
+  case O_modulus:
+  case O_left_shift:
+  case O_right_shift:
+  case O_bit_inclusive_or:
+  case O_bit_or_not:
+  case O_bit_exclusive_or:
+  case O_bit_and:
+  case O_add:
+  case O_subtract:
+  case O_eq:
+  case O_ne:
+  case O_lt:
+  case O_le:
+  case O_ge:
+  case O_gt:
+  case O_logical_and:
+  case O_logical_or:
+    return (exp1->X_add_symbol == exp2->X_add_symbol) &&
+           (exp1->X_op_symbol == exp2->X_op_symbol) &&
+           (exp1->X_add_number == exp2->X_add_number);
+  default:
+    return 0;
+  }
+}
+
+/* Test for @lit and if its present make an entry in the literal pool and
+   modify the current expression to be an offset into the literal pool.  */
+static elf_suffix_type
+s390_lit_suffix (str_p, exp_p, suffix)
+     char **str_p;
+     expressionS *exp_p;
+     elf_suffix_type suffix;
+{
+  bfd_reloc_code_real_type reloc;
+  char tmp_name[64];
+  char *str = *str_p;
+  char *ident;
+  struct s390_lpe *lpe;
+  int nbytes, len;
+
+  if (*str++ != ':')
+    return suffix;       /* No modification.  */
+ 
+  /* We look for a suffix of the form "@lit1", "@lit2", "@lit4" or "@lit8".  */
+  ident = str;
+  while (isalnum(*str))
+    str++;
+  len = str - ident;
+  if (len != 4 || strncasecmp(ident, "lit", 3) != 0 ||
+      (ident[3]!='1' && ident[3]!='2' && ident[3]!='4' && ident[3]!='8'))
+    return suffix;      /* no modification */
+  nbytes = ident[3] - '0';
+
+  reloc = BFD_RELOC_UNUSED;
+  if (suffix == ELF_SUFFIX_GOT) {
+    if (nbytes == 2)
+      reloc = BFD_RELOC_390_GOT16;
+    else if (nbytes == 4)
+      reloc = BFD_RELOC_32_GOT_PCREL;
+    else if (nbytes == 8)
+      reloc = BFD_RELOC_390_GOT64;
+  } else if (suffix == ELF_SUFFIX_PLT) {
+    if (nbytes == 4)
+      reloc = BFD_RELOC_390_PLT32;
+    else if (nbytes == 8)
+      reloc = BFD_RELOC_390_PLT64;
+  }
+
+  if (suffix != ELF_SUFFIX_NONE && reloc == BFD_RELOC_UNUSED) {
+    as_bad (_("Invalid suffix for literal pool entry"));
+  }
+
+  /* Search the pool if the new entry is a duplicate.  */
+  if (exp_p->X_op == O_big) {
+    /* Special processing for big numbers.  */
+    for (lpe = lpe_list; lpe != NULL; lpe = lpe->next) {
+      if (lpe->ex.X_op == O_big) {
+        if (exp_p->X_add_number <= 0 && lpe->ex.X_add_number <= 0) {
+          if (memcmp(&generic_floating_point_number, &lpe->floatnum,
+                     sizeof(FLONUM_TYPE)) == 0)
+            break;
+        } else if (exp_p->X_add_number == lpe->ex.X_add_number) {
+          if (memcmp(generic_bignum, lpe->bignum,
+              sizeof(LITTLENUM_TYPE)*exp_p->X_add_number) == 0)
+            break;
+        }
+      }
+    }
+  } else {
+    /* Processing for 'normal' data types.  */
+    for (lpe = lpe_list; lpe != NULL; lpe = lpe->next)
+      if (lpe->nbytes == nbytes && lpe->reloc == reloc &&
+          s390_exp_compare(exp_p, &lpe->ex) != 0)
+        break;
+  }
+  if (lpe == NULL) {   /* A new literal.  */
+    if (lpe_free_list != NULL) {
+      lpe = lpe_free_list;
+      lpe_free_list = lpe_free_list->next;
+    } else {
+      lpe = (struct s390_lpe *) xmalloc(sizeof(struct s390_lpe));
+    }
+    lpe->ex = *exp_p;
+    if (exp_p->X_op == O_big) {
+      if (exp_p->X_add_number <= 0)
+        lpe->floatnum = generic_floating_point_number;
+      else if (exp_p->X_add_number <= 4)
+        memcpy(lpe->bignum, generic_bignum,
+               exp_p->X_add_number*sizeof(LITTLENUM_TYPE));
+      else
+        as_bad(_("Big number is too big"));
+    }
+    lpe->nbytes = nbytes;
+    lpe->reloc = reloc;
+    /* Literal pool name defined ?  */
+    if (lp_sym == NULL) {
+      sprintf(tmp_name, ".L\001%i", lp_count);
+      lp_sym = symbol_make(tmp_name);
+    }
+    /* Make name for literal pool entry.  */
+    sprintf(tmp_name, ".L\001%i\002%i", lp_count, lpe_count);
+    lpe_count++;
+    lpe->sym = symbol_make(tmp_name);
+    /* Add to literal pool list.  */
+    lpe->next = NULL;
+    if (lpe_list_tail != NULL) {
+      lpe_list_tail->next = lpe;
+      lpe_list_tail = lpe;
+    } else
+      lpe_list = lpe_list_tail = lpe;
+  }
+
+  /* Now change exp_p to the offset into the literal pool.
+     Thats the expression: .L^Ax^By-.L^Ax   */
+  exp_p->X_add_symbol = lpe->sym;
+  exp_p->X_op_symbol = lp_sym;
+  exp_p->X_op = O_subtract;
+  exp_p->X_add_number = 0;
+
+  *str_p = str;
+
+  /* We change the suffix type to ELF_SUFFIX_NONE, because
+     the difference of two local labels is just a number.  */
+  return ELF_SUFFIX_NONE;
+}
+
+/* Like normal .long/.short/.word, except support @got, etc.
+   clobbers input_line_pointer, checks end-of-line.  */
+static void
+s390_elf_cons (nbytes)
+     register int nbytes;	/* 1=.byte, 2=.word, 4=.long */
+{
+  expressionS exp;
+  elf_suffix_type suffix;
+
+  if (is_it_end_of_statement ()) {
+    demand_empty_rest_of_line ();
+    return;
+  }
+
+  do {
+    expression (&exp);
+    if (exp.X_op == O_symbol && *input_line_pointer == '@' &&
+        (suffix=s390_elf_suffix(&input_line_pointer, &exp))!=ELF_SUFFIX_NONE) {
+      bfd_reloc_code_real_type reloc;
+      reloc_howto_type *reloc_howto;
+      int size;
+      char *where;
+
+      if (nbytes == 2 && suffix == ELF_SUFFIX_GOT)
+        reloc = BFD_RELOC_390_GOT16;
+      else if (nbytes == 4 && suffix == ELF_SUFFIX_GOT)
+        reloc = BFD_RELOC_32_GOT_PCREL;
+      else if (nbytes == 8 && suffix == ELF_SUFFIX_GOT)
+        reloc = BFD_RELOC_390_GOT64;
+      else if (nbytes == 4 && suffix == ELF_SUFFIX_PLT)
+        reloc = BFD_RELOC_390_PLT32;
+      else if (nbytes == 8 && suffix == ELF_SUFFIX_PLT)
+        reloc = BFD_RELOC_390_PLT64;
+      else
+        reloc = BFD_RELOC_UNUSED;
+
+      if (reloc != BFD_RELOC_UNUSED) {
+        reloc_howto = bfd_reloc_type_lookup (stdoutput, reloc);
+        size = bfd_get_reloc_size (reloc_howto);
+        if (size > nbytes)
+          as_bad (_("%s relocations do not fit in %d bytes"),
+                  reloc_howto->name, nbytes);
+        where = frag_more(nbytes);
+        md_number_to_chars (where, 0, size);
+        fix_new_exp (frag_now, where - frag_now->fr_literal, 
+                     size, &exp, reloc_howto->pc_relative, reloc);
+     } else
+       as_bad (_("relocation not applicable"));
+   } else
+     emit_expr (&exp, (unsigned int) nbytes);
+  } while (*input_line_pointer++ == ',');
+
+  input_line_pointer--;		/* Put terminator back into stream. */
+  demand_empty_rest_of_line ();
+}
+
+/* We need to keep a list of fixups.  We can't simply generate them as
+   we go, because that would require us to first create the frag, and
+   that would screw up references to ``.''.  */
+
+struct s390_fixup
+{
+  expressionS exp;
+  int opindex;
+  bfd_reloc_code_real_type reloc;
+};
+
+#define MAX_INSN_FIXUPS (4)
+
+/* This routine is called for each instruction to be assembled.  */
+
+char *
+md_gather_operands (str, insn, opcode)
+     char *str;
+     unsigned char *insn;
+     const struct s390_opcode *opcode;
+{
+  struct s390_fixup fixups[MAX_INSN_FIXUPS];
+  const struct s390_operand *operand;
+  const unsigned char *opindex_ptr;
+  elf_suffix_type suffix;
+  bfd_reloc_code_real_type reloc;
+  int skip_optional;
+  int parentheses;
+  char *f;
+  int fc, i;
+
+  while (isspace(*str)) str++;
+
+  parentheses = 0;
+  skip_optional = 0;
+
+  /* Gather the operands.  */
+  fc = 0;
+  for (opindex_ptr = opcode->operands; *opindex_ptr != 0; opindex_ptr++) {
+    expressionS ex;
+    char *hold;
+    
+    operand = s390_operands + *opindex_ptr;
+    
+    if (skip_optional && (operand->flags & S390_OPERAND_INDEX)) {
+      /* We do an early skip. For D(X,B) constructions the index
+         register is skipped (X is optional). For D(L,B) the base  
+         register will be the skipped operand, because L is NOT
+         optional.  */
+      skip_optional = 0;
+      continue;
+    }
+    
+    /* Gather the operand.  */
+    hold = input_line_pointer;
+    input_line_pointer = str;
+    
+    if (! register_name (&ex))    /* parse the operand */
+      expression (&ex);
+    
+    str = input_line_pointer;
+    input_line_pointer = hold;
+    
+    /* Write the operand to the insn.  */
+    if (ex.X_op == O_illegal)
+      as_bad (_("illegal operand"));
+    else if (ex.X_op == O_absent)
+      as_bad (_("missing operand"));
+    else if (ex.X_op == O_register || ex.X_op == O_constant) {
+	s390_lit_suffix (&str, &ex, ELF_SUFFIX_NONE);
+	if (ex.X_op != O_register && ex.X_op != O_constant) {
+	  /* We need to generate a fixup for the
+	     expression returned by s390_lit_suffix.  */
+	  if (fc >= MAX_INSN_FIXUPS)
+	    as_fatal (_("too many fixups"));
+	  fixups[fc].exp = ex;
+	  fixups[fc].opindex = *opindex_ptr;
+	  fixups[fc].reloc = BFD_RELOC_UNUSED;
+	  ++fc;
+	} else {
+          if ((operand->flags & S390_OPERAND_INDEX) && ex.X_add_number == 0)
+            as_warn("index register specified but zero");
+          if ((operand->flags & S390_OPERAND_BASE) && ex.X_add_number == 0)
+            as_warn("base register specified but zero");
+	  s390_insert_operand (insn, operand, ex.X_add_number, NULL, 0);
+        }
+    } else {
+      suffix = s390_elf_suffix (&str, &ex);
+      suffix = s390_lit_suffix (&str, &ex, suffix);
+      reloc = BFD_RELOC_UNUSED;
+      if (suffix == ELF_SUFFIX_GOT) {
+        if (operand->flags & S390_OPERAND_DISP)
+          reloc = BFD_RELOC_390_GOT12;
+        else if ((operand->flags & S390_OPERAND_SIGNED) &&
+                 (operand->bits == 16))
+          reloc = BFD_RELOC_390_GOT16;
+	else if ((operand->flags & S390_OPERAND_PCREL) &&
+		 (operand->bits == 32))
+	  reloc = BFD_RELOC_390_GOTENT;
+      } else if (suffix == ELF_SUFFIX_PLT) {
+        if ((operand->flags & S390_OPERAND_PCREL) &&
+            (operand->bits == 16))
+          reloc = BFD_RELOC_390_PLT16DBL;
+        else if ((operand->flags & S390_OPERAND_PCREL) &&
+                 (operand->bits == 32))
+          reloc = BFD_RELOC_390_PLT32DBL;
+      } else if (suffix == ELF_SUFFIX_GOTENT) {
+        if ((operand->flags & S390_OPERAND_PCREL) &&
+            (operand->bits == 32))
+          reloc = BFD_RELOC_390_GOTENT;
+      }
+
+      if (suffix != ELF_SUFFIX_NONE && reloc == BFD_RELOC_UNUSED)
+        as_bad (_("invalid operand suffix"));
+      /* We need to generate a fixup of type 'reloc' for this
+         expression.  */
+      if (fc >= MAX_INSN_FIXUPS)
+	as_fatal (_("too many fixups"));
+      fixups[fc].exp = ex;
+      fixups[fc].opindex = *opindex_ptr;
+      fixups[fc].reloc = reloc;
+      ++fc;
+    }
+ 
+    /* Check the next character. The call to expression has advanced
+       str past any whitespace.  */
+    if (operand->flags & S390_OPERAND_DISP) {
+      /* After a displacement a block in parentheses can start.  */
+      if (*str != '(') {
+	/* Check if parethesed block can be skipped. If the next
+	   operand is neiter an optional operand nor a base register
+	   then we have a syntax error.  */
+	operand = s390_operands + *(++opindex_ptr);
+	if (!(operand->flags & (S390_OPERAND_INDEX|S390_OPERAND_BASE)))
+	  as_bad (_("syntax error; missing '(' after displacement"));
+	
+	/* Ok, skip all operands until S390_OPERAND_BASE.  */
+	while (!(operand->flags & S390_OPERAND_BASE))
+	  operand = s390_operands + *(++opindex_ptr);
+	
+	/* If there is a next operand it must be seperated by a comma.  */
+	if (opindex_ptr[1] != '\0') {
+	  if (*str++ != ',')
+	    as_bad(_("syntax error; expected ,"));
+	}
+      } else { /* We found an opening parentheses.  */
+	str++;
+	for (f = str; *f != '\0'; f++)
+	  if (*f == ',' || *f == ')')
+	    break;
+	/* If there is no comma until the closing parentheses OR
+           there is a comma right after the opening parentheses,
+	   we have to skip optional operands.  */
+        if (*f == ',' && f == str) {  /* comma directly after '(' ? */
+          skip_optional = 1;
+          str++;
+        } else
+          skip_optional = (*f != ',');
+      }
+    } else if (operand->flags & S390_OPERAND_BASE) {
+      /* After the base register the parenthesed block ends.  */
+      if (*str++ != ')')
+	as_bad(_("syntax error; missing ')' after base register"));
+      skip_optional = 0;
+      /* If there is a next operand it must be seperated by a comma.  */
+      if (opindex_ptr[1] != '\0') {
+	if (*str++ != ',')
+	  as_bad(_("syntax error; expected ,"));
+      }
+    } else {
+      /* We can find an 'early' closing parentheses in e.g. D(L) instead
+         of D(L,B).  In this case the base register has to be skipped.  */
+      if (*str == ')') {
+	operand = s390_operands + *(++opindex_ptr);
+	if (!(operand->flags & S390_OPERAND_BASE))
+	  as_bad (_("syntax error; ')' not allowed here"));
+	str++;
+      }
+      /* If there is a next operand it must be seperated by a comma.  */
+      if (opindex_ptr[1] != '\0') {
+	if (*str++ != ',')
+	  as_bad(_("syntax error; expected ,"));
+      }
+    }
+  }
+
+  while (isspace (*str))
+    ++str;
+
+  if (*str != '\0') {
+    char *linefeed;
+
+    if ((linefeed = strchr(str, '\n')) != NULL)
+      *linefeed = '\0';
+    as_bad (_("junk at end of line: `%s'"), str);
+    if (linefeed != NULL)
+      *linefeed = '\n';
+  }
+
+  /* Write out the instruction.  */
+  f = frag_more (opcode->oplen);
+  memcpy(f, insn, opcode->oplen);
+
+  /* Create any fixups.  At this point we do not use a
+     bfd_reloc_code_real_type, but instead just use the
+     BFD_RELOC_UNUSED plus the operand index.  This lets us easily
+     handle fixups for any operand type, although that is admittedly
+     not a very exciting feature.  We pick a BFD reloc type in
+     md_apply_fix3.  */
+  for (i = 0; i < fc; i++) {
+    operand = s390_operands + fixups[i].opindex;
+
+    if (fixups[i].reloc != BFD_RELOC_UNUSED) {
+      reloc_howto_type *reloc_howto;
+      fixS *fixP;
+      int size;
+      
+      reloc_howto = bfd_reloc_type_lookup (stdoutput, fixups[i].reloc);
+      if (!reloc_howto)
+	abort ();
+      
+      size = bfd_get_reloc_size (reloc_howto);
+      
+      if (size < 1 || size > 4)
+	abort();
+      
+      fixP = fix_new_exp (frag_now, 
+			  f - frag_now->fr_literal + (operand->shift/8), 
+			  size, &fixups[i].exp, reloc_howto->pc_relative,
+			  fixups[i].reloc);
+      /* Turn off overflow checking in fixup_segment. This is necessary
+         because fixup_segment will signal an overflow for large 4 byte
+         quantities for GOT12 relocations.  */
+      if (fixups[i].reloc == BFD_RELOC_390_GOT12 ||
+          fixups[i].reloc == BFD_RELOC_390_GOT16)
+        fixP->fx_no_overflow = 1;
+    } else
+      fix_new_exp (frag_now, f - frag_now->fr_literal, 4, &fixups[i].exp,
+		   (operand->flags & S390_OPERAND_PCREL) != 0,
+		   ((bfd_reloc_code_real_type)
+		    (fixups[i].opindex + (int) BFD_RELOC_UNUSED)));
+  }
+  return str;
+}
+
+/* This routine is called for each instruction to be assembled.  */
+
+void
+md_assemble (str)
+     char *str;
+{
+  const struct s390_opcode *opcode;
+  unsigned char insn[6];
+  char *s;
+
+  /* Get the opcode.  */
+  for (s = str; *s != '\0' && ! isspace (*s); s++)
+    ;
+  if (*s != '\0')
+    *s++ = '\0';
+
+  /* Look up the opcode in the hash table.  */
+  opcode = (struct s390_opcode *) hash_find (s390_opcode_hash, str);
+  if (opcode == (const struct s390_opcode *) NULL) {
+    as_bad (_("Unrecognized opcode: `%s'"), str);
+    return;
+  } else if (!(opcode->architecture & current_arch_mask)) {
+    as_bad("Opcode %s not available in this architecture", str);
+    return;
+  }
+
+  memcpy(insn, opcode->opcode, sizeof(insn));
+  md_gather_operands(s, insn, opcode);
+}
+
+#ifndef WORKING_DOT_WORD
+/* Handle long and short jumps. We don't support these */
+void
+md_create_short_jump (ptr, from_addr, to_addr, frag, to_symbol)
+     char *ptr;
+     addressT from_addr, to_addr;
+     fragS *frag;
+     symbolS *to_symbol;
+{
+  abort ();
+}
+
+void
+md_create_long_jump (ptr, from_addr, to_addr, frag, to_symbol)
+     char *ptr;
+     addressT from_addr, to_addr;
+     fragS *frag;
+     symbolS *to_symbol;
+{
+  abort ();
+}
+#endif
+
+void
+s390_bss (ignore)
+     int ignore ATTRIBUTE_UNUSED;
+{
+  /* We don't support putting frags in the BSS segment, we fake it
+     by marking in_bss, then looking at s_skip for clues.  */
+
+  subseg_set (bss_section, 0);
+  demand_empty_rest_of_line ();
+}
+
+/* Pseudo-op handling.  */
+
+void
+s390_insn(ignore)
+     int ignore ATTRIBUTE_UNUSED;
+{
+  expressionS exp;
+  const struct s390_opcode *opformat;
+  unsigned char insn[6];
+  char *s;
+
+  /* Get the opcode format.  */
+  s = input_line_pointer;
+  while (*s != '\0' && *s != ',' && ! isspace (*s))
+    s++;
+  if (*s != ',')
+    as_bad (_("Invalid .insn format\n"));
+  *s++ = '\0';
+
+  /* Look up the opcode in the hash table.  */
+  opformat = (struct s390_opcode *)
+    hash_find (s390_opformat_hash, input_line_pointer);
+  if (opformat == (const struct s390_opcode *) NULL) {
+    as_bad (_("Unrecognized opcode format: `%s'"), input_line_pointer);
+    return;
+  }
+  input_line_pointer = s;
+  expression (&exp);
+  if (exp.X_op == O_constant) {
+    if (opformat->oplen == 4 ||
+	(opformat->oplen == 2 && exp.X_op < 0x10000))
+      md_number_to_chars (insn, exp.X_add_number, opformat->oplen);
+    else
+      as_bad(_("Invalid .insn format\n"));
+  } else if (exp.X_op == O_big) {
+    if (exp.X_add_number > 0 && 
+	opformat->oplen == 6 &&
+	generic_bignum[3] == 0) {
+      md_number_to_chars (insn, generic_bignum[2], 2);
+      md_number_to_chars (&insn[2], generic_bignum[1], 2);
+      md_number_to_chars (&insn[4], generic_bignum[0], 2);
+    } else
+      as_bad(_("Invalid .insn format\n"));
+  } else
+    as_bad (_("second operand of .insn not a constant\n"));
+  if (*input_line_pointer++ != ',')
+    as_bad (_("missing comma after insn constant\n"));
+
+  if ((s = strchr(input_line_pointer, '\n')) != NULL)
+    *s = '\0';
+  input_line_pointer = md_gather_operands (input_line_pointer, insn, opformat);
+  if (s != NULL)
+    *s = '\n';
+  demand_empty_rest_of_line ();
+}
+
+/* The .byte pseudo-op.  This is similar to the normal .byte
+   pseudo-op, but it can also take a single ASCII string.  */
+
+static void
+s390_byte (ignore)
+     int ignore ATTRIBUTE_UNUSED;
+{
+  if (*input_line_pointer != '\"')
+    {
+      cons (1);
+      return;
+    }
+
+  /* Gather characters.  A real double quote is doubled.  Unusual
+     characters are not permitted.  */
+  ++input_line_pointer;
+  while (1)
+    {
+      char c;
+
+      c = *input_line_pointer++;
+
+      if (c == '\"')
+	{
+	  if (*input_line_pointer != '\"')
+	    break;
+	  ++input_line_pointer;
+	}
+
+      FRAG_APPEND_1_CHAR (c);
+    }
+
+  demand_empty_rest_of_line ();
+}
+
+/* The .ltorg pseudo-op.This emits all literals defined since the last
+   .ltorg or the invocation of gas. Literals are defined with the 
+   @lit suffix.  */
+
+static void
+s390_literals (ignore)
+     int ignore ATTRIBUTE_UNUSED;
+{
+  struct s390_lpe *lpe;
+
+  if (lp_sym == NULL || lpe_count == 0)
+    return;     /* nothing to be done */
+
+  /* Emit symbol for start of literal pool.  */
+  S_SET_SEGMENT (lp_sym, now_seg);
+  S_SET_VALUE (lp_sym, (valueT) frag_now_fix ());
+  lp_sym->sy_frag = frag_now;
+
+  while (lpe_list) {
+    lpe = lpe_list;
+    lpe_list = lpe_list->next;
+    S_SET_SEGMENT (lpe->sym, now_seg);
+    S_SET_VALUE (lpe->sym, (valueT) frag_now_fix ());
+    lpe->sym->sy_frag = frag_now;
+
+    /* Emit literal pool entry.  */
+    if (lpe->reloc != BFD_RELOC_UNUSED) {
+      reloc_howto_type *reloc_howto = 
+              bfd_reloc_type_lookup (stdoutput, lpe->reloc);
+      int size = bfd_get_reloc_size (reloc_howto);
+      char *where;
+
+      if (size > lpe->nbytes)
+        as_bad (_("%s relocations do not fit in %d bytes"),
+                reloc_howto->name, lpe->nbytes);
+      where = frag_more(lpe->nbytes);
+      md_number_to_chars (where, 0, size);
+      fix_new_exp (frag_now, where - frag_now->fr_literal,
+                   size, &lpe->ex, reloc_howto->pc_relative, lpe->reloc);
+   } else {
+      if (lpe->ex.X_op == O_big) {
+        if (lpe->ex.X_add_number <= 0)
+          generic_floating_point_number = lpe->floatnum;
+        else
+          memcpy(generic_bignum, lpe->bignum,
+                 lpe->ex.X_add_number*sizeof(LITTLENUM_TYPE));
+     }
+     emit_expr (&lpe->ex, lpe->nbytes);
+   }
+
+    lpe->next = lpe_free_list;
+    lpe_free_list = lpe;
+  }
+  lpe_list_tail = NULL;
+  lp_sym = NULL;
+  lp_count++;
+  lpe_count = 0;
+}
+
+/* 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];
+  char *t;
+  int i;
+
+  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 * 2;
+
+  for (i = 0; i < prec; i++)
+    {
+      md_number_to_chars (litp, (valueT) words[i], 2);
+      litp += 2;
+    }
+     
+  return NULL;
+}
+
+/* Align a section (I don't know why this is machine dependent).  */
+
+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));
+}
+
+/* We don't have any form of relaxing.  */
+
+int
+md_estimate_size_before_relax (fragp, seg)
+     fragS *fragp ATTRIBUTE_UNUSED;
+     asection *seg ATTRIBUTE_UNUSED;
+{
+  abort ();
+  return 0;
+}
+
+/* Convert a machine dependent frag.  We never generate these.  */
+
+void
+md_convert_frag (abfd, sec, fragp)
+     bfd *abfd ATTRIBUTE_UNUSED;
+     asection *sec ATTRIBUTE_UNUSED;
+     fragS *fragp ATTRIBUTE_UNUSED;
+{
+  abort ();
+}
+
+symbolS *
+md_undefined_symbol (name)
+     char *name;
+{
+  if (*name == '_' && *(name+1) == 'G'
+      && strcmp(name, "_GLOBAL_OFFSET_TABLE_") == 0)
+   {
+     if(!GOT_symbol)
+      {
+        if(symbol_find(name))
+          as_bad(_("GOT already in symbol table"));
+        GOT_symbol = symbol_new (name, undefined_section,
+                                 (valueT) 0, &zero_address_frag);
+      }
+     return GOT_symbol;
+   }
+  return 0;
+}
+
+/* Functions concerning relocs.  */
+
+/* The location from which a PC relative jump should be calculated,
+   given a PC relative reloc.  */
+
+long
+md_pcrel_from_section (fixp, sec)
+     fixS *fixp;
+     segT sec ATTRIBUTE_UNUSED;
+{
+  return fixp->fx_frag->fr_address + fixp->fx_where;
+}
+
+/* Here we decide which fixups can be adjusted to make them relative to
+   the beginning of the section instead of the symbol.  Basically we need
+   to make sure that the dynamic relocations are done correctly, so in
+   some cases we force the original symbol to be used.  */
+int
+tc_s390_fix_adjustable(fixP)
+     fixS * fixP;
+{
+  /* Prevent all adjustments to global symbols.  */
+  if (S_IS_EXTERN (fixP->fx_addsy))
+    return 0;
+  if (S_IS_WEAK (fixP->fx_addsy))
+    return 0;
+  /* adjust_reloc_syms doesn't know about the GOT.  */
+  if (fixP->fx_r_type == BFD_RELOC_32_GOTOFF
+      || fixP->fx_r_type == BFD_RELOC_390_PLT16DBL
+      || fixP->fx_r_type == BFD_RELOC_390_PLT32
+      || fixP->fx_r_type == BFD_RELOC_390_PLT32DBL
+      || fixP->fx_r_type == BFD_RELOC_390_PLT64
+      || fixP->fx_r_type == BFD_RELOC_390_GOT12
+      || fixP->fx_r_type == BFD_RELOC_390_GOT16
+      || fixP->fx_r_type == BFD_RELOC_32_GOT_PCREL
+      || fixP->fx_r_type == BFD_RELOC_390_GOT64
+      || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
+      || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
+    return 0;
+  return 1;
+}
+
+/* Apply a fixup to the object code.  This is called for all the
+   fixups we generated by the call to fix_new_exp, above.  In the call
+   above we used a reloc code which was the largest legal reloc code
+   plus the operand index.  Here we undo that to recover the operand
+   index.  At this point all symbol values should be fully resolved,
+   and we attempt to completely resolve the reloc.  If we can not do
+   that, we determine the correct reloc code and put it back in the
+   fixup.  */
+
+int
+md_apply_fix3 (fixp, valuep, seg)
+     fixS *fixp;
+     valueT *valuep;
+     segT seg ATTRIBUTE_UNUSED;
+{
+  char *where;
+  valueT value;
+
+  value = *valuep;
+  where = fixp->fx_frag->fr_literal + fixp->fx_where;
+
+  if (fixp->fx_subsy != NULL) {
+    if (!S_IS_DEFINED (fixp->fx_subsy))
+      as_bad_where (fixp->fx_file, fixp->fx_line,
+		    _("unresolved fx_subsy symbol that must be resolved"));
+    value -= S_GET_VALUE(fixp->fx_subsy);
+  }
+
+  if (fixp->fx_addsy != NULL) {
+    /* `*valuep' may contain the value of the symbol on which the reloc
+       will be based; we have to remove it.  */
+    if (fixp->fx_addsy->sy_used_in_reloc
+	&& S_GET_SEGMENT (fixp->fx_addsy) != absolute_section
+	&& S_GET_SEGMENT (fixp->fx_addsy) != undefined_section
+	&& ! bfd_is_com_section (S_GET_SEGMENT (fixp->fx_addsy)))
+      value -= S_GET_VALUE (fixp->fx_addsy);
+
+    if (fixp->fx_pcrel)
+      value += fixp->fx_frag->fr_address + fixp->fx_where;
+  } else {
+    fixp->fx_done = 1;
+  }
+
+  if ((int) fixp->fx_r_type >= (int) BFD_RELOC_UNUSED) {
+    const struct s390_operand *operand;
+    int opindex;
+    
+    opindex = (int) fixp->fx_r_type - (int) BFD_RELOC_UNUSED;
+    operand = &s390_operands[opindex];
+    
+    if (fixp->fx_done) {
+      /* Insert the fully resolved operand value.  */
+      s390_insert_operand (where, operand, (offsetT) value,
+			   fixp->fx_file, fixp->fx_line);
+      return 1;
+    }
+    
+    /* Determine a BFD reloc value based on the operand information.
+       We are only prepared to turn a few of the operands into
+       relocs.  */
+    fixp->fx_offset = value;
+    if (operand->bits == 12 && operand->shift == 20) {
+      fixp->fx_size = 2;
+      fixp->fx_where += 2;
+      fixp->fx_r_type = BFD_RELOC_390_12;
+    } else if (operand->bits == 12 && operand->shift == 36) {
+      fixp->fx_size = 2;
+      fixp->fx_where += 4;
+      fixp->fx_r_type = BFD_RELOC_390_12;
+    } else if (operand->bits == 8 && operand->shift == 8) {
+      fixp->fx_size = 1;
+      fixp->fx_where += 1;
+      fixp->fx_r_type = BFD_RELOC_8;
+    } else if (operand->bits == 16 && operand->shift == 16) {
+      fixp->fx_size = 2;
+      fixp->fx_where += 2;
+      if (operand->flags & S390_OPERAND_PCREL) {
+        fixp->fx_r_type = BFD_RELOC_390_PC16DBL;
+        fixp->fx_offset += 2;
+      } else
+	fixp->fx_r_type = BFD_RELOC_16;
+    } else if (operand->bits == 32 && operand->shift == 16 &&
+              (operand->flags & S390_OPERAND_PCREL)) {
+      fixp->fx_size = 4;
+      fixp->fx_where += 2;
+      fixp->fx_offset += 2;
+      fixp->fx_r_type = BFD_RELOC_390_PC32DBL;
+    } else {
+      char *sfile;
+      unsigned int sline;
+      
+      /* Use expr_symbol_where to see if this is an expression
+	 symbol.  */
+      if (expr_symbol_where (fixp->fx_addsy, &sfile, &sline))
+	as_bad_where (fixp->fx_file, fixp->fx_line,
+		      _("unresolved expression that must be resolved"));
+      else
+	as_bad_where (fixp->fx_file, fixp->fx_line,
+		      _("unsupported relocation type"));
+      fixp->fx_done = 1;
+      return 1;
+    }
+  } else {
+    switch (fixp->fx_r_type) {
+    case BFD_RELOC_8:
+      if (fixp->fx_pcrel)
+        abort ();
+      if (fixp->fx_done)
+        md_number_to_chars (where, value, 1);
+      break;
+    case BFD_RELOC_390_12:
+    case BFD_RELOC_390_GOT12:
+      if (fixp->fx_done) {
+        unsigned short mop;
+        mop = bfd_getb16 ((unsigned char *) where);
+        mop |= (unsigned short) (value & 0xfff);
+        bfd_putb16 ((bfd_vma) mop, (unsigned char *) where);
+      } 
+      break;
+    
+    case BFD_RELOC_16:
+    case BFD_RELOC_GPREL16:
+    case BFD_RELOC_16_GOT_PCREL:
+    case BFD_RELOC_16_GOTOFF:
+      if (fixp->fx_pcrel)
+        as_bad_where (fixp->fx_file, fixp->fx_line,
+                      "cannot emit PC relative %s relocation%s%s",
+                      bfd_get_reloc_code_name (fixp->fx_r_type),
+                      fixp->fx_addsy != NULL ? " against " : "",
+                      (fixp->fx_addsy != NULL
+                       ? S_GET_NAME (fixp->fx_addsy)
+                       : ""));
+      if (fixp->fx_done)
+        md_number_to_chars (where, value, 2);
+      break;
+    case BFD_RELOC_390_GOT16:
+      if (fixp->fx_done)
+        md_number_to_chars (where, value, 2);
+      break;
+    case BFD_RELOC_390_PC16DBL:
+    case BFD_RELOC_390_PLT16DBL:
+      value += 2;
+      if (fixp->fx_done)
+        md_number_to_chars (where, (offsetT) value >> 1, 2);
+      break;
+
+    case BFD_RELOC_32:
+      if (fixp->fx_pcrel)
+	fixp->fx_r_type = BFD_RELOC_32_PCREL;
+      else
+	fixp->fx_r_type = BFD_RELOC_32;
+      if (fixp->fx_done)
+        md_number_to_chars (where, value, 4);
+      break;
+    case BFD_RELOC_32_PCREL:
+    case BFD_RELOC_32_BASEREL:
+      fixp->fx_r_type = BFD_RELOC_32_PCREL;
+      if (fixp->fx_done)
+        md_number_to_chars (where, value, 4);
+      break;
+    case BFD_RELOC_32_GOT_PCREL:
+    case BFD_RELOC_390_PLT32:
+      if (fixp->fx_done)
+        md_number_to_chars (where, value, 4);
+      break;
+    case BFD_RELOC_390_PC32DBL:
+    case BFD_RELOC_390_PLT32DBL:
+    case BFD_RELOC_390_GOTPCDBL:
+    case BFD_RELOC_390_GOTENT:
+      value += 2;
+      if (fixp->fx_done)
+        md_number_to_chars (where, (offsetT) value >> 1, 4);
+      break;
+
+    case BFD_RELOC_32_GOTOFF:
+      if (fixp->fx_done)
+        md_number_to_chars (where, value, sizeof(int));
+      break;
+
+    case BFD_RELOC_390_GOT64:
+    case BFD_RELOC_390_PLT64:
+      if (fixp->fx_done)
+        md_number_to_chars (where, value, 8);
+      break;
+
+    case BFD_RELOC_64:
+      if (fixp->fx_pcrel)
+        fixp->fx_r_type = BFD_RELOC_64_PCREL;
+      else
+        fixp->fx_r_type = BFD_RELOC_64;
+      if (fixp->fx_done)
+        md_number_to_chars (where, value, 8);
+      break;
+
+    case BFD_RELOC_64_PCREL:
+      fixp->fx_r_type = BFD_RELOC_64_PCREL;
+      if (fixp->fx_done)
+        md_number_to_chars (where, value, 8);
+      break;
+
+    case BFD_RELOC_VTABLE_INHERIT:
+    case BFD_RELOC_VTABLE_ENTRY:
+      fixp->fx_done = 0;
+      return 1;
+
+    default: {
+	const char *reloc_name = bfd_get_reloc_code_name(fixp->fx_r_type);
+	if (reloc_name != NULL)
+	  fprintf(stderr, "Gas failure, reloc type %s\n", reloc_name);
+	else
+	  fprintf(stderr, "Gas failure, reloc type #%i\n", fixp->fx_r_type);
+	fflush(stderr);
+	abort ();
+      }
+    }
+
+    fixp->fx_offset = value;
+  }
+
+  return 1;
+}
+
+/* Generate a reloc for a fixup.  */
+
+arelent *
+tc_gen_reloc (seg, fixp)
+     asection *seg ATTRIBUTE_UNUSED;
+     fixS *fixp;
+{
+  bfd_reloc_code_real_type code;
+  arelent *reloc;
+
+  code = fixp->fx_r_type;
+  if (GOT_symbol && fixp->fx_addsy == GOT_symbol) {
+    if ((s390_arch_size == 32 && code == BFD_RELOC_32_PCREL) ||
+        (s390_arch_size == 64 && code == BFD_RELOC_64_PCREL))
+      code = BFD_RELOC_390_GOTPC;
+    if (code == BFD_RELOC_390_PC32DBL)
+      code = BFD_RELOC_390_GOTPCDBL;
+  }
+
+  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, code);
+  if (reloc->howto == NULL)
+    {
+      as_bad_where (fixp->fx_file, fixp->fx_line,
+                    _("cannot represent relocation type %s"),
+                    bfd_get_reloc_code_name (code));
+      /* Set howto to a garbage value so that we can keep going.  */
+      reloc->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32);
+      assert (reloc->howto != NULL);
+    }
+  reloc->addend = fixp->fx_offset;
+
+  return reloc;
+}
+
diff --git a/gas/config/tc-s390.h b/gas/config/tc-s390.h
new file mode 100644
index 0000000..954fa18
--- /dev/null
+++ b/gas/config/tc-s390.h
@@ -0,0 +1,113 @@
+/* tc-s390.h -- Header file for tc-s390.c.
+   Copyright (C) 2000 Free Software Foundation, Inc.
+   Written by Martin Schwidefsky (schwidefsky@de.ibm.com).
+
+   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. */
+
+#define TC_S390
+
+#ifdef ANSI_PROTOTYPES
+struct fix;
+#endif
+
+#ifndef BFD_ASSEMBLER
+ #error S390 support requires BFD_ASSEMBLER
+#endif
+
+/* This expression evaluates to false if the relocation is for a local object
+   for which we still want to do the relocation at runtime.  True if we
+   are willing to perform this relocation while building the .o file.
+   This is only used for pcrel relocations, so GOTOFF does not need to be
+   checked here.  I am not sure if some of the others are ever used with
+   pcrel, but it is easier to be safe than sorry. */
+
+#define TC_RELOC_RTSYM_LOC_FIXUP(FIX)  \
+  ((FIX)->fx_addsy == NULL \
+   || (! S_IS_EXTERNAL ((FIX)->fx_addsy) \
+       && ! S_IS_WEAK ((FIX)->fx_addsy) \
+       && S_IS_DEFINED ((FIX)->fx_addsy) \
+       && ! S_IS_COMMON ((FIX)->fx_addsy)))
+
+#define tc_fix_adjustable(X)  tc_s390_fix_adjustable(X)
+extern int tc_s390_fix_adjustable PARAMS ((struct fix *));
+
+/* The target BFD architecture.  */
+#define TARGET_ARCH bfd_arch_s390
+extern enum bfd_architecture s390_arch PARAMS ((void));
+
+/* The target BFD format.  */
+#define TARGET_FORMAT s390_target_format()
+
+/* Set the endianness we are using. */
+#define TARGET_BYTES_BIG_ENDIAN 1
+
+/* Whether or not the target is big endian */
+extern int target_big_endian;
+
+/* Permit temporary numeric labels.  */
+#define LOCAL_LABELS_FB 1
+
+/* $ is used to refer to the current location.  */
+/* #define DOLLAR_DOT */
+
+/* We need to be able to make relocations involving the difference of
+   two symbols.  This includes the difference of two symbols when
+   one of them is undefined (this comes up in PIC code generation). 
+ */
+#define UNDEFINED_DIFFERENCE_OK
+
+/* foo-. gets turned into PC relative relocs */
+#define DIFF_EXPR_OK
+
+/* We don't need to handle .word strangely.  */
+#define WORKING_DOT_WORD
+
+/* We set the fx_done field appropriately in md_apply_fix.  */
+#define TC_HANDLES_FX_DONE
+
+#define md_number_to_chars           number_to_chars_bigendian
+
+#define md_do_align(n, fill, len, max, around)                          \
+if ((n) && !need_pass_2 && (fill == 0) &&                               \
+    (bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE) != 0) {     \
+  char *p;                                                              \
+  p = frag_var (rs_align_code, 15, 1, (relax_substateT) max,            \
+                (symbolS *) 0, (offsetT) (n), (char *) 0);              \
+  *p = 0x07;                                                            \
+  goto around;                                                          \
+}
+
+extern void s390_align_code PARAMS ((fragS *, int));
+
+#define HANDLE_ALIGN(fragP)						\
+if (fragP->fr_type == rs_align_code) 					\
+  s390_align_code (fragP, (fragP->fr_next->fr_address			\
+			   - fragP->fr_address				\
+			   - fragP->fr_fix));
+
+/* call md_apply_fix3 with segment instead of md_apply_fix */
+#define MD_APPLY_FIX3
+
+/* call md_pcrel_from_section, not md_pcrel_from */
+#define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from_section(FIXP, SEC)
+extern long md_pcrel_from_section PARAMS ((struct fix *, segT));
+
+#define md_operand(x)
+
+extern void s390_md_end PARAMS ((void));
+#define md_end() s390_md_end ()
diff --git a/gas/config/tc-sh.c b/gas/config/tc-sh.c
index 275415a..6f35784 100644
--- a/gas/config/tc-sh.c
+++ b/gas/config/tc-sh.c
@@ -1,5 +1,6 @@
 /* tc-sh.c -- Assemble code for the Hitachi Super-H
-   Copyright (C) 1993, 94, 95, 96, 97, 98, 99, 2000 Free Software Foundation.
+   Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+   Free Software Foundation.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -92,8 +93,12 @@
   {"uses", s_uses, 0},
   {"uaword", s_uacons, 2},
   {"ualong", s_uacons, 4},
-  { "file", dwarf2_directive_file, 0 },
-  { "loc", dwarf2_directive_loc, 0 },
+  {"uaquad", s_uacons, 8},
+  {"2byte", s_uacons, 2},
+  {"4byte", s_uacons, 4},
+  {"8byte", s_uacons, 8},
+  {"file", dwarf2_directive_file, 0 },
+  {"loc", dwarf2_directive_loc, 0 },
   {0, 0, 0}
 };
 
diff --git a/gas/config/tc-tic54x.h b/gas/config/tc-tic54x.h
index b43cce1..d162da6 100644
--- a/gas/config/tc-tic54x.h
+++ b/gas/config/tc-tic54x.h
@@ -108,7 +108,7 @@
 tic54x_estimate_size_before_relax(f,s)
 extern int tic54x_estimate_size_before_relax(fragS *, segT);
 
-#define md_relax_frag(f,s) tic54x_relax_frag(f,s)
+#define md_relax_frag(seg, f,s) tic54x_relax_frag(f,s)
 extern int tic54x_relax_frag(fragS *, long);
 
 #define md_convert_frag(b,s,f)	tic54x_convert_frag(b,s,f)
diff --git a/gas/config/te-ia64aix.h b/gas/config/te-ia64aix.h
new file mode 100644
index 0000000..8937023
--- /dev/null
+++ b/gas/config/te-ia64aix.h
@@ -0,0 +1,4 @@
+#define TE_AIX50
+#define LOCAL_LABELS_FB 1
+
+#include "obj-format.h"
diff --git a/gas/configure b/gas/configure
index a0f4dfe..d79fbf2 100755
--- a/gas/configure
+++ b/gas/configure
@@ -774,6 +774,7 @@
   
 
 
+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),
 # so one script is as good as another.  But avoid the broken or
 # incompatible versions:
@@ -786,7 +787,7 @@
 # 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:790: checking for a BSD compatible install" >&5
+echo "configure:791: 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
@@ -839,7 +840,7 @@
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:843: checking whether build environment is sane" >&5
+echo "configure:844: checking whether build environment is sane" >&5
 # Just in case
 sleep 1
 echo timestamp > conftestfile
@@ -896,7 +897,7 @@
 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:900: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:901: 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
@@ -925,7 +926,7 @@
 
 PACKAGE=gas
 
-VERSION=2.10.91
+VERSION=${BFD_VERSION}
 
 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
   { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
@@ -942,7 +943,7 @@
 
 missing_dir=`cd $ac_aux_dir && pwd`
 echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:946: checking for working aclocal" >&5
+echo "configure:947: 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.
@@ -955,7 +956,7 @@
 fi
 
 echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:959: checking for working autoconf" >&5
+echo "configure:960: 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.
@@ -968,7 +969,7 @@
 fi
 
 echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:972: checking for working automake" >&5
+echo "configure:973: 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.
@@ -981,7 +982,7 @@
 fi
 
 echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:985: checking for working autoheader" >&5
+echo "configure:986: 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.
@@ -994,7 +995,7 @@
 fi
 
 echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:998: checking for working makeinfo" >&5
+echo "configure:999: 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.
@@ -1080,7 +1081,7 @@
 # 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:1084: checking for $ac_word" >&5
+echo "configure:1085: 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
@@ -1110,7 +1111,7 @@
   # 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:1114: checking for $ac_word" >&5
+echo "configure:1115: 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
@@ -1161,7 +1162,7 @@
       # 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:1165: checking for $ac_word" >&5
+echo "configure:1166: 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
@@ -1193,7 +1194,7 @@
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1197: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1198: 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.
@@ -1204,12 +1205,12 @@
 
 cat > conftest.$ac_ext << EOF
 
-#line 1208 "configure"
+#line 1209 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1213: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1214: \"$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
@@ -1235,12 +1236,12 @@
   { 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:1239: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1240: 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:1244: checking whether we are using GNU C" >&5
+echo "configure:1245: 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
@@ -1249,7 +1250,7 @@
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1253: \"$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:1254: \"$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
@@ -1268,7 +1269,7 @@
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1272: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1273: 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
@@ -1311,7 +1312,7 @@
 if test "$ac_cv_prog_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:1315: checking for ld used by GCC" >&5
+echo "configure:1316: checking for ld used by GCC" >&5
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return which upsets mingw
@@ -1341,10 +1342,10 @@
   esac
 elif test "$with_gnu_ld" = yes; then
   echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:1345: checking for GNU ld" >&5
+echo "configure:1346: checking for GNU ld" >&5
 else
   echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:1348: checking for non-GNU ld" >&5
+echo "configure:1349: checking for non-GNU ld" >&5
 fi
 if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1379,7 +1380,7 @@
 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:1383: checking if the linker ($LD) is GNU ld" >&5
+echo "configure:1384: checking if the linker ($LD) is GNU ld" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1396,7 +1397,7 @@
 
 
 echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
-echo "configure:1400: checking for $LD option to reload object files" >&5
+echo "configure:1401: 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
@@ -1408,7 +1409,7 @@
 test -n "$reload_flag" && reload_flag=" $reload_flag"
 
 echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-echo "configure:1412: checking for BSD-compatible nm" >&5
+echo "configure:1413: checking for BSD-compatible nm" >&5
 if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1446,7 +1447,7 @@
 echo "$ac_t""$NM" 1>&6
 
 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1450: checking whether ln -s works" >&5
+echo "configure:1451: 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
@@ -1467,7 +1468,7 @@
 fi
 
 echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
-echo "configure:1471: checking how to recognise dependant libraries" >&5
+echo "configure:1472: 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
@@ -1610,13 +1611,13 @@
 deplibs_check_method=$lt_cv_deplibs_check_method
 
 echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-echo "configure:1614: checking for object suffix" >&5
+echo "configure:1615: 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:1620: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1621: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   for ac_file in conftest.*; do
     case $ac_file in
     *.c) ;;
@@ -1636,7 +1637,7 @@
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:1640: checking for executable suffix" >&5
+echo "configure:1641: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1646,7 +1647,7 @@
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:1650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:1651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
       *.c | *.o | *.obj | *.ilk | *.pdb) ;;
@@ -1679,7 +1680,7 @@
 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:1683: checking for ${ac_tool_prefix}file" >&5
+echo "configure:1684: 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
@@ -1741,7 +1742,7 @@
 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:1745: checking for file" >&5
+echo "configure:1746: 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
@@ -1812,7 +1813,7 @@
 # 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:1816: checking for $ac_word" >&5
+echo "configure:1817: 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
@@ -1844,7 +1845,7 @@
   # 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:1848: checking for $ac_word" >&5
+echo "configure:1849: 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
@@ -1879,7 +1880,7 @@
 # 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:1883: checking for $ac_word" >&5
+echo "configure:1884: 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
@@ -1911,7 +1912,7 @@
   # 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:1915: checking for $ac_word" >&5
+echo "configure:1916: 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
@@ -1978,8 +1979,8 @@
 case "$host" in
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 1982 "configure"' > conftest.$ac_ext
-  if { (eval echo configure:1983: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  echo '#line 1983 "configure"' > conftest.$ac_ext
+  if { (eval echo configure:1984: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     case "`/usr/bin/file conftest.o`" in
     *32-bit*)
       LD="${LD-ld} -32"
@@ -2000,7 +2001,7 @@
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -belf"
   echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-echo "configure:2004: checking whether the C compiler needs -belf" >&5
+echo "configure:2005: 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
@@ -2013,14 +2014,14 @@
 cross_compiling=$ac_cv_prog_cc_cross
 
      cat > conftest.$ac_ext <<EOF
-#line 2017 "configure"
+#line 2018 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2025: \"$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
@@ -2279,6 +2280,8 @@
       powerpcle*)	cpu_type=ppc endian=little ;;
       powerpc*)		cpu_type=ppc endian=big ;;
       rs6000*)		cpu_type=ppc ;;
+      s390x*)		cpu_type=s390 arch=s390x ;;
+      s390*)		cpu_type=s390 arch=s390 ;;
       sparclite*)	cpu_type=sparc arch=sparclite ;;
       sparclet*)	cpu_type=sparc arch=sparclet ;;
       sparc64*)		cpu_type=sparc arch=v9-64 ;;
@@ -2385,7 +2388,6 @@
 			    fmt=elf bfd_gas=yes ;;
       i386-*-freebsdaout* | i386-*-freebsd[12].* | i386-*-freebsd[12])
                             fmt=aout em=386bsd ;;
-      i386-*-freebsd*)	    fmt=elf bfd_gas=yes ;;
       i386-*-coff | i386-*-sysv* | i386-*-sco3.2v5*coff | i386-*-isc*)
                           fmt=coff ;;
       i386-*-sco3.2v5*)      fmt=elf
@@ -2433,6 +2435,7 @@
       i960-*-elf*)	    fmt=elf ;;
 
       ia64-*-elf*)	    fmt=elf ;;
+      ia64-*-aix*)	    fmt=elf em=ia64aix ;;
       ia64-*-linux-gnu*)    fmt=elf em=linux ;;
       ia64-*-hpux*)	    fmt=elf em=hpux ;;
 
@@ -2524,12 +2527,15 @@
       ppc-*-netware*)       fmt=elf em=ppcnw ;;
       ppc-*-vxworks*)       fmt=elf ;;
 
+      s390x-*-linux-gnu*)   fmt=elf em=linux ;;
+      s390-*-linux-gnu*)    fmt=elf em=linux ;;
+
       sh-*-linux*)	    fmt=elf em=linux ;;
       sh-*-elf*)	    fmt=elf ;;
-      sh-*-coff*)           fmt=coff ;;
+      sh-*-coff*)           fmt=coff bfd_gas=yes;;
       sh-*-pe*)             fmt=coff em=pe bfd_gas=yes;;
       sh-*-rtemself*)       fmt=elf ;;
-      sh-*-rtems*)	    fmt=coff ;;
+      sh-*-rtems*)	    fmt=coff bfd_gas=yes;;
 
       ns32k-pc532-mach* | ns32k-pc532-ux*)    fmt=aout em=pc532mach ;;
       ns32k-pc532-netbsd* | ns32k-pc532-lites*)  fmt=aout em=nbsd532 ;;
@@ -2586,6 +2592,7 @@
 
       *-*-aout | *-*-scout)
 			    fmt=aout ;;
+      *-*-freebsd*)	    fmt=elf bfd_gas=yes ;;
       *-*-nindy*)
 			    fmt=bout ;;
       *-*-bsd*)
@@ -2623,6 +2630,7 @@
       ia64*-*)	bfd_gas=yes ;;
       mips-*)	bfd_gas=yes ;;
       ns32k-*)	bfd_gas=yes ;;
+      pdp11-*)	bfd_gas=yes ;;
       ppc-*)	bfd_gas=yes ;;
       sparc-*)	bfd_gas=yes ;;
       strongarm-*)	bfd_gas=yes ;;
@@ -2672,6 +2680,15 @@
 	esac
 	;;
 
+      s390)
+       if test $this_target = $target ; then
+	  cat >> confdefs.h <<EOF
+#define DEFAULT_ARCH "${arch}"
+EOF
+
+       fi
+       ;;
+
       mips)
 	echo ${extra_objects} | grep -s "itbl-parse.o" 
 	if test $? -ne 0 ; then
@@ -2792,6 +2809,7 @@
 # is emulated.
 case ${target_cpu} in
   vax | tahoe )	atof=${target_cpu} ;;
+  pdp11)	atof=vax ;;
   *)		atof=ieee ;;
 esac
 
@@ -2893,9 +2911,9 @@
 for em in . $emulations ; do
   case $em in
     .)	continue ;;
-    mipsbelf | mipslelf)
+    mipsbelf | mipslelf | mipself)
 	fmt=elf   file=mipself ;;
-    mipsbecoff | mipslecoff)
+    mipsbecoff | mipslecoff | mipsecoff)
 	fmt=ecoff file=mipsecoff ;;
     *coff)
 	fmt=coff  file=$em ;;
@@ -3080,7 +3098,7 @@
 # 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:3084: checking for $ac_word" >&5
+echo "configure:3102: 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
@@ -3110,7 +3128,7 @@
   # 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:3114: checking for $ac_word" >&5
+echo "configure:3132: 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
@@ -3161,7 +3179,7 @@
       # 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:3165: checking for $ac_word" >&5
+echo "configure:3183: 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
@@ -3193,7 +3211,7 @@
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:3197: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:3215: 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.
@@ -3204,12 +3222,12 @@
 
 cat > conftest.$ac_ext << EOF
 
-#line 3208 "configure"
+#line 3226 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:3213: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3231: \"$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
@@ -3235,12 +3253,12 @@
   { 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:3239: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:3257: 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:3244: checking whether we are using GNU C" >&5
+echo "configure:3262: 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
@@ -3249,7 +3267,7 @@
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:3253: \"$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:3271: \"$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
@@ -3268,7 +3286,7 @@
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:3272: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:3290: 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
@@ -3305,7 +3323,7 @@
 # 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:3309: checking for $ac_word" >&5
+echo "configure:3327: 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
@@ -3336,7 +3354,7 @@
 test -n "$YACC" || YACC="yacc"
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:3340: checking how to run the C preprocessor" >&5
+echo "configure:3358: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -3351,13 +3369,13 @@
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 3355 "configure"
+#line 3373 "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:3361: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3379: \"$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
   :
@@ -3368,13 +3386,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 3372 "configure"
+#line 3390 "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:3378: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3396: \"$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
   :
@@ -3385,13 +3403,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 3389 "configure"
+#line 3407 "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:3395: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3413: \"$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
   :
@@ -3421,7 +3439,7 @@
 # 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:3425: checking for $ac_word" >&5
+echo "configure:3443: 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
@@ -3454,7 +3472,7 @@
 # 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:3458: checking for $ac_word" >&5
+echo "configure:3476: 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
@@ -3488,7 +3506,7 @@
   *) ac_lib=l ;;
   esac
   echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
-echo "configure:3492: checking for yywrap in -l$ac_lib" >&5
+echo "configure:3510: 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
@@ -3496,7 +3514,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-l$ac_lib  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3500 "configure"
+#line 3518 "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
@@ -3507,7 +3525,7 @@
 yywrap()
 ; return 0; }
 EOF
-if { (eval echo configure:3511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3529: \"$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
@@ -3530,7 +3548,7 @@
 fi
 
 echo $ac_n "checking lex output file root""... $ac_c" 1>&6
-echo "configure:3534: checking lex output file root" >&5
+echo "configure:3552: 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
@@ -3551,7 +3569,7 @@
 LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
 
 echo $ac_n "checking whether yytext is a pointer""... $ac_c" 1>&6
-echo "configure:3555: checking whether yytext is a pointer" >&5
+echo "configure:3573: 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
@@ -3563,14 +3581,14 @@
 ac_save_LIBS="$LIBS"
 LIBS="$LIBS $LEXLIB"
 cat > conftest.$ac_ext <<EOF
-#line 3567 "configure"
+#line 3585 "configure"
 #include "confdefs.h"
 `cat $LEX_OUTPUT_ROOT.c`
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:3574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3592: \"$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
@@ -3596,7 +3614,7 @@
 # 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:3600: checking for $ac_word" >&5
+echo "configure:3618: 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
@@ -3624,12 +3642,12 @@
 fi
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:3628: checking for ANSI C header files" >&5
+echo "configure:3646: 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 3633 "configure"
+#line 3651 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -3637,7 +3655,7 @@
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3641: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3659: \"$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*
@@ -3654,7 +3672,7 @@
 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 3658 "configure"
+#line 3676 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -3672,7 +3690,7 @@
 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 3676 "configure"
+#line 3694 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -3693,7 +3711,7 @@
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 3697 "configure"
+#line 3715 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -3704,7 +3722,7 @@
 exit (0); }
 
 EOF
-if { (eval echo configure:3708: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -3728,12 +3746,12 @@
 fi
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:3732: checking for working const" >&5
+echo "configure:3750: 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 3737 "configure"
+#line 3755 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -3782,7 +3800,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3786: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3804: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -3803,21 +3821,21 @@
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:3807: checking for inline" >&5
+echo "configure:3825: 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 3814 "configure"
+#line 3832 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:3821: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3839: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -3843,12 +3861,12 @@
 esac
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:3847: checking for off_t" >&5
+echo "configure:3865: 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 3852 "configure"
+#line 3870 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3876,12 +3894,12 @@
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:3880: checking for size_t" >&5
+echo "configure:3898: 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 3885 "configure"
+#line 3903 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3911,19 +3929,19 @@
 # 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:3915: checking for working alloca.h" >&5
+echo "configure:3933: 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 3920 "configure"
+#line 3938 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:3927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3945: \"$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
@@ -3944,12 +3962,12 @@
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:3948: checking for alloca" >&5
+echo "configure:3966: 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 3953 "configure"
+#line 3971 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -3977,7 +3995,7 @@
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:3981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3999: \"$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
@@ -4009,12 +4027,12 @@
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:4013: checking whether alloca needs Cray hooks" >&5
+echo "configure:4031: 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 4018 "configure"
+#line 4036 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -4039,12 +4057,12 @@
 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:4043: checking for $ac_func" >&5
+echo "configure:4061: 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 4048 "configure"
+#line 4066 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4067,7 +4085,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:4071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4089: \"$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
@@ -4094,7 +4112,7 @@
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:4098: checking stack direction for C alloca" >&5
+echo "configure:4116: 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
@@ -4102,7 +4120,7 @@
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 4106 "configure"
+#line 4124 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -4121,7 +4139,7 @@
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:4125: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4143: \"$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
@@ -4146,17 +4164,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4150: checking for $ac_hdr" >&5
+echo "configure:4168: 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 4155 "configure"
+#line 4173 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4160: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4178: \"$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*
@@ -4185,12 +4203,12 @@
 for ac_func in getpagesize
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4189: checking for $ac_func" >&5
+echo "configure:4207: 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 4194 "configure"
+#line 4212 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4213,7 +4231,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:4217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4235: \"$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
@@ -4238,7 +4256,7 @@
 done
 
 echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:4242: checking for working mmap" >&5
+echo "configure:4260: 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
@@ -4246,7 +4264,7 @@
   ac_cv_func_mmap_fixed_mapped=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 4250 "configure"
+#line 4268 "configure"
 #include "confdefs.h"
 
 /* Thanks to Mike Haertel and Jim Avera for this test.
@@ -4386,7 +4404,7 @@
 }
 
 EOF
-if { (eval echo configure:4390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4408: \"$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
@@ -4414,17 +4432,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4418: checking for $ac_hdr" >&5
+echo "configure:4436: 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 4423 "configure"
+#line 4441 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4428: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4446: \"$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*
@@ -4454,12 +4472,12 @@
 __argz_count __argz_stringify __argz_next
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4458: checking for $ac_func" >&5
+echo "configure:4476: 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 4463 "configure"
+#line 4481 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4482,7 +4500,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:4486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4504: \"$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
@@ -4511,12 +4529,12 @@
      for ac_func in stpcpy
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4515: checking for $ac_func" >&5
+echo "configure:4533: 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 4520 "configure"
+#line 4538 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4539,7 +4557,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:4543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4561: \"$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
@@ -4573,19 +4591,19 @@
 
    if test $ac_cv_header_locale_h = yes; then
     echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:4577: checking for LC_MESSAGES" >&5
+echo "configure:4595: 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 4582 "configure"
+#line 4600 "configure"
 #include "confdefs.h"
 #include <locale.h>
 int main() {
 return LC_MESSAGES
 ; return 0; }
 EOF
-if { (eval echo configure:4589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4607: \"$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
@@ -4606,7 +4624,7 @@
     fi
   fi
    echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:4610: checking whether NLS is requested" >&5
+echo "configure:4628: 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"
@@ -4626,7 +4644,7 @@
 EOF
 
       echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:4630: checking whether included gettext is requested" >&5
+echo "configure:4648: 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"
@@ -4645,17 +4663,17 @@
 
 	ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:4649: checking for libintl.h" >&5
+echo "configure:4667: 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 4654 "configure"
+#line 4672 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4659: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4677: \"$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*
@@ -4672,19 +4690,19 @@
 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:4676: checking for gettext in libc" >&5
+echo "configure:4694: 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 4681 "configure"
+#line 4699 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 int main() {
 return (int) gettext ("")
 ; return 0; }
 EOF
-if { (eval echo configure:4688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4706: \"$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
@@ -4700,7 +4718,7 @@
 
 	   if test "$gt_cv_func_gettext_libc" != "yes"; then
 	     echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
-echo "configure:4704: checking for bindtextdomain in -lintl" >&5
+echo "configure:4722: 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
@@ -4708,7 +4726,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4712 "configure"
+#line 4730 "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
@@ -4719,7 +4737,7 @@
 bindtextdomain()
 ; return 0; }
 EOF
-if { (eval echo configure:4723: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4741: \"$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
@@ -4735,19 +4753,19 @@
 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:4739: checking for gettext in libintl" >&5
+echo "configure:4757: 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 4744 "configure"
+#line 4762 "configure"
 #include "confdefs.h"
 
 int main() {
 return (int) gettext ("")
 ; return 0; }
 EOF
-if { (eval echo configure:4751: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4769: \"$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
@@ -4775,7 +4793,7 @@
 	      # 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:4779: checking for $ac_word" >&5
+echo "configure:4797: 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
@@ -4809,12 +4827,12 @@
 		for ac_func in dcgettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4813: checking for $ac_func" >&5
+echo "configure:4831: 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 4818 "configure"
+#line 4836 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4837,7 +4855,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:4841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4859: \"$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
@@ -4864,7 +4882,7 @@
 		# 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:4868: checking for $ac_word" >&5
+echo "configure:4886: 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
@@ -4900,7 +4918,7 @@
 		# 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:4904: checking for $ac_word" >&5
+echo "configure:4922: 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
@@ -4932,7 +4950,7 @@
 fi
 
 		cat > conftest.$ac_ext <<EOF
-#line 4936 "configure"
+#line 4954 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -4940,7 +4958,7 @@
 			       return _nl_msg_cat_cntr
 ; return 0; }
 EOF
-if { (eval echo configure:4944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   CATOBJEXT=.gmo
 		   DATADIRNAME=share
@@ -4972,7 +4990,7 @@
         # 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:4976: checking for $ac_word" >&5
+echo "configure:4994: 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
@@ -5006,7 +5024,7 @@
         # 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:5010: checking for $ac_word" >&5
+echo "configure:5028: 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
@@ -5042,7 +5060,7 @@
         # 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:5046: checking for $ac_word" >&5
+echo "configure:5064: 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
@@ -5132,7 +5150,7 @@
        LINGUAS=
      else
        echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:5136: checking for catalogs to be installed" >&5
+echo "configure:5154: checking for catalogs to be installed" >&5
        NEW_LINGUAS=
        for lang in ${LINGUAS=$ALL_LINGUAS}; do
          case "$ALL_LINGUAS" in
@@ -5160,17 +5178,17 @@
       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:5164: checking for linux/version.h" >&5
+echo "configure:5182: 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 5169 "configure"
+#line 5187 "configure"
 #include "confdefs.h"
 #include <linux/version.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5174: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5192: \"$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*
@@ -5233,7 +5251,7 @@
   
 
 echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:5237: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:5255: 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"
@@ -5258,7 +5276,7 @@
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:5262: checking for executable suffix" >&5
+echo "configure:5280: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5268,7 +5286,7 @@
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:5272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:5290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
       *.c | *.o | *.obj | *.ilk | *.pdb) ;;
@@ -5293,17 +5311,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5297: checking for $ac_hdr" >&5
+echo "configure:5315: 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 5302 "configure"
+#line 5320 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5307: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5325: \"$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*
@@ -5333,7 +5351,7 @@
 # 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:5337: checking whether compiling a cross-assembler" >&5
+echo "configure:5355: checking whether compiling a cross-assembler" >&5
 if test "${host}" = "${target}"; then
   cross_gas=no
 else
@@ -5348,19 +5366,19 @@
 # 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:5352: checking for working alloca.h" >&5
+echo "configure:5370: 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 5357 "configure"
+#line 5375 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:5364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5382: \"$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
@@ -5381,12 +5399,12 @@
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:5385: checking for alloca" >&5
+echo "configure:5403: 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 5390 "configure"
+#line 5408 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -5414,7 +5432,7 @@
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:5418: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5436: \"$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
@@ -5446,12 +5464,12 @@
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:5450: checking whether alloca needs Cray hooks" >&5
+echo "configure:5468: 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 5455 "configure"
+#line 5473 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -5476,12 +5494,12 @@
 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:5480: checking for $ac_func" >&5
+echo "configure:5498: 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 5485 "configure"
+#line 5503 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -5504,7 +5522,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:5508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5526: \"$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
@@ -5531,7 +5549,7 @@
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:5535: checking stack direction for C alloca" >&5
+echo "configure:5553: 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
@@ -5539,7 +5557,7 @@
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 5543 "configure"
+#line 5561 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -5558,7 +5576,7 @@
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:5562: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5580: \"$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
@@ -5580,21 +5598,21 @@
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:5584: checking for inline" >&5
+echo "configure:5602: 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 5591 "configure"
+#line 5609 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:5598: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5616: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -5624,12 +5642,12 @@
 for ac_func in unlink remove
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5628: checking for $ac_func" >&5
+echo "configure:5646: 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 5633 "configure"
+#line 5651 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -5652,7 +5670,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:5656: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5674: \"$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
@@ -5681,12 +5699,12 @@
 for ac_func in sbrk
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5685: checking for $ac_func" >&5
+echo "configure:5703: 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 5690 "configure"
+#line 5708 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -5709,7 +5727,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:5713: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5731: \"$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
@@ -5744,7 +5762,7 @@
   ;;
 *-ncr-sysv4.3*)
   echo $ac_n "checking for _mwvalidcheckl in -lmw""... $ac_c" 1>&6
-echo "configure:5748: checking for _mwvalidcheckl in -lmw" >&5
+echo "configure:5766: 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
@@ -5752,7 +5770,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lmw  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5756 "configure"
+#line 5774 "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
@@ -5763,7 +5781,7 @@
 _mwvalidcheckl()
 ; return 0; }
 EOF
-if { (eval echo configure:5767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5785: \"$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
@@ -5784,7 +5802,7 @@
 fi
 
   echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:5788: checking for main in -lm" >&5
+echo "configure:5806: 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
@@ -5792,14 +5810,14 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5796 "configure"
+#line 5814 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:5803: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5821: \"$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
@@ -5822,7 +5840,7 @@
   ;;
 *)
   echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:5826: checking for main in -lm" >&5
+echo "configure:5844: 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
@@ -5830,14 +5848,14 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5834 "configure"
+#line 5852 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:5841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5859: \"$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
@@ -5868,12 +5886,12 @@
 # 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:5872: checking for working assert macro" >&5
+echo "configure:5890: 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 5877 "configure"
+#line 5895 "configure"
 #include "confdefs.h"
 #include <assert.h>
 #include <stdio.h>
@@ -5889,7 +5907,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:5893: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gas_cv_assert_ok=yes
 else
@@ -5930,12 +5948,12 @@
 "
 
 echo $ac_n "checking whether declaration is required for strstr""... $ac_c" 1>&6
-echo "configure:5934: checking whether declaration is required for strstr" >&5
+echo "configure:5952: 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 5939 "configure"
+#line 5957 "configure"
 #include "confdefs.h"
 $gas_test_headers
 int main() {
@@ -5946,7 +5964,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:5950: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5968: \"$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
@@ -5967,12 +5985,12 @@
 
 
 echo $ac_n "checking whether declaration is required for malloc""... $ac_c" 1>&6
-echo "configure:5971: checking whether declaration is required for malloc" >&5
+echo "configure:5989: 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 5976 "configure"
+#line 5994 "configure"
 #include "confdefs.h"
 $gas_test_headers
 int main() {
@@ -5983,7 +6001,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:5987: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6005: \"$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
@@ -6004,12 +6022,12 @@
 
 
 echo $ac_n "checking whether declaration is required for free""... $ac_c" 1>&6
-echo "configure:6008: checking whether declaration is required for free" >&5
+echo "configure:6026: 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 6013 "configure"
+#line 6031 "configure"
 #include "confdefs.h"
 $gas_test_headers
 int main() {
@@ -6020,7 +6038,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:6024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6042: \"$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
@@ -6041,12 +6059,12 @@
 
 
 echo $ac_n "checking whether declaration is required for sbrk""... $ac_c" 1>&6
-echo "configure:6045: checking whether declaration is required for sbrk" >&5
+echo "configure:6063: 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 6050 "configure"
+#line 6068 "configure"
 #include "confdefs.h"
 $gas_test_headers
 int main() {
@@ -6057,7 +6075,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:6061: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6079: \"$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
@@ -6078,12 +6096,12 @@
 
 
 echo $ac_n "checking whether declaration is required for environ""... $ac_c" 1>&6
-echo "configure:6082: checking whether declaration is required for environ" >&5
+echo "configure:6100: 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 6087 "configure"
+#line 6105 "configure"
 #include "confdefs.h"
 $gas_test_headers
 int main() {
@@ -6094,7 +6112,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:6098: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6116: \"$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
@@ -6118,12 +6136,12 @@
 # for it?
 
 echo $ac_n "checking whether declaration is required for errno""... $ac_c" 1>&6
-echo "configure:6122: checking whether declaration is required for errno" >&5
+echo "configure:6140: 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 6127 "configure"
+#line 6145 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_ERRNO_H
@@ -6138,7 +6156,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:6142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6160: \"$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
diff --git a/gas/configure.in b/gas/configure.in
index ad46b8f..b6823c4 100644
--- a/gas/configure.in
+++ b/gas/configure.in
@@ -11,7 +11,10 @@
 AC_CANONICAL_SYSTEM
 AC_ISC_POSIX
 
-AM_INIT_AUTOMAKE(gas, 2.10.91)
+changequote(,)dnl
+BFD_VERSION=`sed -n -e 's/^.._INIT_AUTOMAKE.*,[ 	]*\([^ 	]*\)[ 	]*).*/\1/p' < ${srcdir}/../bfd/configure.in`
+changequote([,])dnl
+AM_INIT_AUTOMAKE(gas, ${BFD_VERSION})
 
 AM_PROG_LIBTOOL
 
@@ -139,6 +142,8 @@
       powerpcle*)	cpu_type=ppc endian=little ;;
       powerpc*)		cpu_type=ppc endian=big ;;
       rs6000*)		cpu_type=ppc ;;
+      s390x*)		cpu_type=s390 arch=s390x ;;
+      s390*)		cpu_type=s390 arch=s390 ;;
       sparclite*)	cpu_type=sparc arch=sparclite ;;
       sparclet*)	cpu_type=sparc arch=sparclet ;;
       sparc64*)		cpu_type=sparc arch=v9-64 ;;
@@ -247,7 +252,6 @@
       i386-*-freebsdaout* | i386-*-freebsd[12].* | i386-*-freebsd[12])
                             fmt=aout em=386bsd ;;
 changequote([,])dnl
-      i386-*-freebsd*)	    fmt=elf bfd_gas=yes ;;
       i386-*-coff | i386-*-sysv* | i386-*-sco3.2v5*coff | i386-*-isc*)
                           fmt=coff ;;
       i386-*-sco3.2v5*)      fmt=elf
@@ -290,6 +294,7 @@
       i960-*-elf*)	    fmt=elf ;;
 
       ia64-*-elf*)	    fmt=elf ;;
+      ia64-*-aix*)	    fmt=elf em=ia64aix ;;
       ia64-*-linux-gnu*)    fmt=elf em=linux ;;
       ia64-*-hpux*)	    fmt=elf em=hpux ;;
 
@@ -377,12 +382,15 @@
       ppc-*-netware*)       fmt=elf em=ppcnw ;;
       ppc-*-vxworks*)       fmt=elf ;;
 
+      s390x-*-linux-gnu*)   fmt=elf em=linux ;;
+      s390-*-linux-gnu*)    fmt=elf em=linux ;;
+
       sh-*-linux*)	    fmt=elf em=linux ;;
       sh-*-elf*)	    fmt=elf ;;
-      sh-*-coff*)           fmt=coff ;;
+      sh-*-coff*)           fmt=coff bfd_gas=yes;;
       sh-*-pe*)             fmt=coff em=pe bfd_gas=yes;;
       sh-*-rtemself*)       fmt=elf ;;
-      sh-*-rtems*)	    fmt=coff ;;
+      sh-*-rtems*)	    fmt=coff bfd_gas=yes;;
 
       ns32k-pc532-mach* | ns32k-pc532-ux*)    fmt=aout em=pc532mach ;;
       ns32k-pc532-netbsd* | ns32k-pc532-lites*)  fmt=aout em=nbsd532 ;;
@@ -439,6 +447,7 @@
 
       *-*-aout | *-*-scout)
 			    fmt=aout ;;
+      *-*-freebsd*)	    fmt=elf bfd_gas=yes ;;
       *-*-nindy*)
 			    fmt=bout ;;
       *-*-bsd*)
@@ -474,6 +483,7 @@
       ia64*-*)	bfd_gas=yes ;;
       mips-*)	bfd_gas=yes ;;
       ns32k-*)	bfd_gas=yes ;;
+      pdp11-*)	bfd_gas=yes ;;
       ppc-*)	bfd_gas=yes ;;
       sparc-*)	bfd_gas=yes ;;
       strongarm-*)	bfd_gas=yes ;;
@@ -523,6 +533,12 @@
 	esac
 	;;
 
+      s390)
+       if test $this_target = $target ; then
+	  AC_DEFINE_UNQUOTED(DEFAULT_ARCH, "${arch}", [Default architecture.])
+       fi
+       ;;
+
       mips)
 	echo ${extra_objects} | grep -s "itbl-parse.o" 
 	if test $? -ne 0 ; then
@@ -637,6 +653,7 @@
 # is emulated.
 case ${target_cpu} in
   vax | tahoe )	atof=${target_cpu} ;;
+  pdp11)	atof=vax ;;
   *)		atof=ieee ;;
 esac
 
@@ -717,9 +734,9 @@
 for em in . $emulations ; do
   case $em in
     .)	continue ;;
-    mipsbelf | mipslelf)
+    mipsbelf | mipslelf | mipself)
 	fmt=elf   file=mipself ;;
-    mipsbecoff | mipslecoff)
+    mipsbecoff | mipslecoff | mipsecoff)
 	fmt=ecoff file=mipsecoff ;;
     *coff)
 	fmt=coff  file=$em ;;
diff --git a/gas/doc/Makefile.am b/gas/doc/Makefile.am
index 60761a4..95b02b7 100644
--- a/gas/doc/Makefile.am
+++ b/gas/doc/Makefile.am
@@ -32,6 +32,7 @@
 	c-m68k.texi \
 	c-mips.texi \
 	c-ns32k.texi \
+	c-pdp11.texi \
 	c-pj.texi \
 	c-sh.texi \
 	c-sparc.texi \
diff --git a/gas/doc/Makefile.in b/gas/doc/Makefile.in
index 5f9b258..a76d109 100644
--- a/gas/doc/Makefile.in
+++ b/gas/doc/Makefile.in
@@ -142,6 +142,7 @@
 	c-m68k.texi \
 	c-mips.texi \
 	c-ns32k.texi \
+	c-pdp11.texi \
 	c-pj.texi \
 	c-sh.texi \
 	c-sparc.texi \
@@ -175,7 +176,7 @@
 
 DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
 
-TAR = gtar
+TAR = tar
 GZIP_ENV = --best
 all: all-redirect
 .SUFFIXES:
diff --git a/gas/doc/all.texi b/gas/doc/all.texi
index 22742b4..26658c6 100644
--- a/gas/doc/all.texi
+++ b/gas/doc/all.texi
@@ -42,6 +42,7 @@
 @set M680X0
 @set MCORE
 @set MIPS
+@set PDP11
 @set PJ
 @set SH
 @set SPARC
diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo
index fb80ca5..3bc9681 100644
--- a/gas/doc/as.texinfo
+++ b/gas/doc/as.texinfo
@@ -546,6 +546,37 @@
 @end table
 @end ifset
 
+@ifset PDP11
+
+For details about the PDP-11 machine dependent features options,
+see @ref{PDP-11-Options}.
+
+@table @code
+@item -mpic | -mno-pic
+Generate position-independent (or position-dependent) code.  The
+default is @code{-mpic}.
+
+@item -mall
+@itemx -mall-extensions
+Enable all instruction set extensions.  This is the default.
+
+@item -mno-extensions
+Disable all instruction set extensions.
+
+@item -m@var{extension} | -mno-@var{extension}
+Enable (or disable) a particular instruction set extension.
+
+@item -m@var{cpu}
+Enable the instruction set extensions supported by a particular CPU, and
+disable all other extensions.
+
+@item -m@var{machine}
+Enable the instruction set extensions supported by a particular machine
+model, and disable all other extensions.
+@end table
+
+@end ifset
+
 @ifset PJ
 The following options are available when @value{AS} is configured for
 a picoJava processor.
@@ -1667,6 +1698,9 @@
 @ifset I960
 @samp{#} on the i960;
 @end ifset
+@ifset PDP11
+@samp{;} for the PDP-11;
+@end ifset
 @ifset PJ
 @samp{;} for picoJava;
 @end ifset
@@ -4606,7 +4640,9 @@
 
 If no flags are specified, the default flags depend upon the section name.  If
 the section name is not recognized, the default will be for the section to be
-loaded and writable.
+loaded and writable.  Note the @code{n} and @code{w} flags remove attributes
+from the section, rather than adding them, so if they are used on their own it
+will be as if no flags had been specified at all.
 
 If the optional argument to the @code{.section} directive is not quoted, it is
 taken as a subsegment number (@pxref{Sub-Sections}).
@@ -5271,6 +5307,9 @@
 @ifset SH
 * SH-Dependent::                Hitachi SH Dependent Features
 @end ifset
+@ifset PDP11
+* PDP-11-Dependent::            PDP-11 Dependent Features
+@end ifset
 @ifset PJ
 * PJ-Dependent::                picoJava Dependent Features
 @end ifset
@@ -5389,6 +5428,10 @@
 @include c-ns32k.texi
 @end ifset
 
+@ifset PDP11
+@include c-pdp11.texi
+@end ifset
+
 @ifset PJ
 @include c-pj.texi
 @end ifset
diff --git a/gas/doc/c-i386.texi b/gas/doc/c-i386.texi
index 110d560..5f5eeda 100644
--- a/gas/doc/c-i386.texi
+++ b/gas/doc/c-i386.texi
@@ -26,7 +26,7 @@
 * i386-Regs::                   Register Naming
 * i386-Prefixes::               Instruction Prefixes
 * i386-Memory::                 Memory References
-* i386-jumps::                  Handling of Jump Instructions
+* i386-Jumps::                  Handling of Jump Instructions
 * i386-Float::                  Floating Point
 * i386-SIMD::                   Intel's MMX and AMD's 3DNow! SIMD Operations
 * i386-16bit::                  Writing 16-bit Code
@@ -488,7 +488,7 @@
 Other addressing modes remain unchanged in x86-64 architecture, except
 registers used are 64-bit instead of 32-bit.
 
-@node i386-jumps
+@node i386-Jumps
 @section Handling of Jump Instructions
 
 @cindex jump optimization, i386
@@ -498,11 +498,11 @@
 Jump instructions are always optimized to use the smallest possible
 displacements.  This is accomplished by using byte (8-bit) displacement
 jumps whenever the target is sufficiently close.  If a byte displacement
-is insufficient a long (32-bit) displacement is used.  We do not support
+is insufficient a long displacement is used.  We do not support
 word (16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump
 instruction with the @samp{data16} instruction prefix), since the 80386
 insists upon masking @samp{%eip} to 16 bits after the word displacement
-is added.
+is added. (See also @pxref{i386-Arch})
 
 Note that the @samp{jcxz}, @samp{jecxz}, @samp{loop}, @samp{loopz},
 @samp{loope}, @samp{loopnz} and @samp{loopne} instructions only come in byte
@@ -696,13 +696,33 @@
 @item @samp{sledgehammer}
 @end multitable
 
-Apart from the warning, there is only one other effect on
-@code{@value{AS}} operation;  If you specify a CPU other than
+Apart from the warning, there are only two other effects on
+@code{@value{AS}} operation;  Firstly, if you specify a CPU other than
 @samp{i486}, then shift by one instructions such as @samp{sarl $1, %eax}
 will automatically use a two byte opcode sequence.  The larger three
 byte opcode sequence is used on the 486 (and when no architecture is
 specified) because it executes faster on the 486.  Note that you can
 explicitly request the two byte opcode by writing @samp{sarl %eax}.
+Secondly, if you specify @samp{i8086}, @samp{i186}, or @samp{i286},
+@emph{and} @samp{.code16} or @samp{.code16gcc} then byte offset
+conditional jumps will be promoted when necessary to a two instruction
+sequence consisting of a conditional jump of the opposite sense around
+an unconditional jump to the target.
+
+Following the CPU architecture, you may specify @samp{jumps} or
+@samp{nojumps} to control automatic promotion of conditional jumps.
+@samp{jumps} is the default, and enables jump promotion;  All external
+jumps will be of the long variety, and file-local jumps will be promoted
+as necessary.  (@pxref{i386-Jumps})  @samp{nojumps} leaves external
+conditional jumps as byte offset jumps, and warns about file-local
+conditional jumps that @code{@value{AS}} promotes.
+Unconditional jumps are treated as for @samp{jumps}.
+
+For example
+
+@smallexample
+ .arch i8086,nojumps
+@end smallexample
 
 @node i386-Notes
 @section Notes
diff --git a/gas/doc/c-pdp11.texi b/gas/doc/c-pdp11.texi
new file mode 100644
index 0000000..4ddd9e3
--- /dev/null
+++ b/gas/doc/c-pdp11.texi
@@ -0,0 +1,354 @@
+@c Copyright (C) 2001 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 PDP-11-Dependent
+@chapter PDP-11 Dependent Features
+@end ifset
+@ifclear GENERIC
+@node Machine Dependencies
+@chapter PDP-11 Dependent Features
+@end ifclear
+
+@cindex PDP-11 support
+
+@menu
+* PDP-11-Options::		Options
+* PDP-11-Pseudos::		Assembler Directives
+* PDP-11-Syntax::		DEC Syntax versus BSD Syntax
+* PDP-11-Mnemonics::		Instruction Naming
+* PDP-11-Synthetic::		Synthetic Instructions
+@end menu
+
+@node PDP-11-Options
+@section Options
+
+@cindex options for PDP-11
+
+The PDP-11 version of @code{@value{AS}} has a rich set of machine
+dependent options.
+
+@subsection Code Generation Options
+
+@table @code
+@cindex -mpic
+@cindex -mno-pic
+@item -mpic | -mno-pic
+Generate position-independent (or position-dependent) code.
+
+The default is to generate position-independent code.
+@end table
+
+@subsection Instruction Set Extention Options
+
+These options enables or disables the use of extensions over the base
+line instruction set as introduced by the first PDP-11 CPU: the KA11.
+Most options come in two variants: a @code{-m}@var{extension} that
+enables @var{extension}, and a @code{-mno-}@var{extension} that disables
+@var{extension}.
+
+The default is to enable all extensions.
+
+@table @code
+@cindex -mall
+@cindex -mall-extensions
+@item -mall | -mall-extensions
+Enable all instruction set extensions.
+
+@cindex -mno-extensions
+@item -mno-extensions
+Disable all instruction set extensions.
+
+@cindex -mcis
+@cindex -mno-cis
+@item -mcis | -mno-cis
+Enable (or disable) the use of the commersial instruction set, which
+consists of these instructions: @code{ADDNI}, @code{ADDN}, @code{ADDPI},
+@code{ADDP}, @code{ASHNI}, @code{ASHN}, @code{ASHPI}, @code{ASHP},
+@code{CMPCI}, @code{CMPC}, @code{CMPNI}, @code{CMPN}, @code{CMPPI},
+@code{CMPP}, @code{CVTLNI}, @code{CVTLN}, @code{CVTLPI}, @code{CVTLP},
+@code{CVTNLI}, @code{CVTNL}, @code{CVTNPI}, @code{CVTNP}, @code{CVTPLI},
+@code{CVTPL}, @code{CVTPNI}, @code{CVTPN}, @code{DIVPI}, @code{DIVP},
+@code{L2DR}, @code{L3DR}, @code{LOCCI}, @code{LOCC}, @code{MATCI},
+@code{MATC}, @code{MOVCI}, @code{MOVC}, @code{MOVRCI}, @code{MOVRC},
+@code{MOVTCI}, @code{MOVTC}, @code{MULPI}, @code{MULP}, @code{SCANCI},
+@code{SCANC}, @code{SKPCI}, @code{SKPC}, @code{SPANCI}, @code{SPANC},
+@code{SUBNI}, @code{SUBN}, @code{SUBPI}, and @code{SUBP}.
+
+@cindex -mcsm
+@cindex -mno-csm
+@item -mcsm | -mno-csm
+Enable (or disable) the use of the @code{CSM} instruction.
+
+@cindex -meis
+@cindex -mno-eis
+@item -meis | -mno-eis
+Enable (or disable) the use of the extended instruction set, which
+consists of these instructions: @code{ASHC}, @code{ASH}, @code{DIV},
+@code{MARK}, @code{MUL}, @code{RTT}, @code{SOB} @code{SXT}, and
+@code{XOR}.
+
+@cindex -mfis
+@cindex -mno-fis
+@cindex -mkev11
+@cindex -mkev11
+@cindex -mno-kev11
+@item -mfis | -mkev11
+@itemx -mno-fis | -mno-kev11
+Enable (or diasble) the use of the KEV11 floating-point instructions:
+@code{FADD}, @code{FDIV}, @code{FMUL}, and @code{FSUB}.
+
+@cindex -mfpp
+@cindex -mno-fpp
+@cindex -mfpu
+@cindex -mno-fpu
+@cindex -mfp-11
+@cindex -mno-fp-11
+@item -mfpp | -mfpu | -mfp-11
+@itemx -mno-fpp | -mno-fpu | -mno-fp-11
+Enable (or disable) the use of FP-11 floating-point instructions:
+@code{ABSF}, @code{ADDF}, @code{CFCC}, @code{CLRF}, @code{CMPF},
+@code{DIVF}, @code{LDCFF}, @code{LDCIF}, @code{LDEXP}, @code{LDF},
+@code{LDFPS}, @code{MODF}, @code{MULF}, @code{NEGF}, @code{SETD},
+@code{SETF}, @code{SETI}, @code{SETL}, @code{STCFF}, @code{STCFI},
+@code{STEXP}, @code{STF}, @code{STFPS}, @code{STST}, @code{SUBF}, and
+@code{TSTF}.
+
+@cindex -mlimited-eis
+@cindex -mno-limited-eis
+@item -mlimited-eis | -mno-limited-eis
+Enable (or disable) the use of the limited extended instruction set:
+@code{MARK}, @code{RTT}, @code{SOB}, @code{SXT}, and @code{XOR}.
+
+The -mno-limited-eis options also implies -mno-eis.
+
+@cindex -mmfpt
+@cindex -mno-mfpt
+@item -mmfpt | -mno-mfpt
+Enable (or disable) the use of the @code{MFPT} instruction.
+
+@cindex -mmutiproc
+@cindex -mno-mutiproc
+@item -mmultiproc | -mno-multiproc
+Enable (or disable) the use of multiprocessor instructions: @code{TSTSET} and
+@code{WRTLCK}.
+
+@cindex -mmxps
+@cindex -mno-mxps
+@item -mmxps | -mno-mxps
+Enable (or disable) the use of the @code{MFPS} and @code{MTPS} instructions.
+
+@cindex -mspl
+@cindex -mno-spl
+@item -mspl | -mno-spl
+Enable (or disable) the use of the @code{SPL} instruction.
+
+@cindex -mmicrocode
+@cindex -mno-microcode
+Enable (or disable) the use of the microcode instructions: @code{LDUB},
+@code{MED}, and @code{XFC}.
+@end table
+
+@subsection CPU Model Options
+
+These options enable the instruction set extensions supported by a
+particular CPU, and disables all other extensions.
+
+@table @code
+@cindex -mka11
+@item -mka11
+KA11 CPU.  Base line instruction set only.
+
+@cindex -mkb11
+@item -mkb11
+KB11 CPU.  Enable extended instruction set and @code{SPL}.
+
+@cindex -mkd11a
+@item -mkd11a
+KD11-A CPU.  Enable limited extended instruction set.
+
+@cindex -mkd11b
+@item -mkd11b
+KD11-B CPU.  Base line instruction set only.
+
+@cindex -mkd11d
+@item -mkd11d
+KD11-D CPU.  Base line instruction set only.
+
+@cindex -mkd11e
+@item -mkd11e
+KD11-E CPU.  Enable extended instruction set, @code{MFPS}, and @code{MTPS}.
+
+@cindex -mkd11f
+@cindex -mkd11h
+@cindex -mkd11q
+@item -mkd11f | -mkd11h | -mkd11q
+KD11-F, KD11-H, or KD11-Q CPU.  Enable limited extended instruction set,
+@code{MFPS}, and @code{MTPS}.
+
+@cindex -mkd11k
+@item -mkd11k
+KD11-K CPU.  Enable extended instruction set, @code{LDUB}, @code{MED},
+@code{MFPS}, @code{MFPT}, @code{MTPS}, and @code{XFC}.
+
+@cindex -mkd11z
+@item -mkd11z
+KD11-Z CPU.  Enable extended instruction set, @code{CSM}, @code{MFPS},
+@code{MFPT}, @code{MTPS}, and @code{SPL}.
+
+@cindex -mf11
+@item -mf11
+F11 CPU.  Enable extended instruction set, @code{MFPS}, @code{MFPT}, and
+@code{MTPS}.
+
+@cindex -mj11
+@item -mj11
+J11 CPU.  Enable extended instruction set, @code{CSM}, @code{MFPS},
+@code{MFPT}, @code{MTPS}, @code{SPL}, @code{TSTSET}, and @code{WRTLCK}.
+
+@cindex -mt11
+@item -mt11
+T11 CPU.  Enable limited extended instruction set, @code{MFPS}, and
+@code{MTPS}.
+@end table
+
+@subsection Machine Model Options
+
+These options enable the instruction set extensions supported by a
+particular machine model, and disables all other extensions.
+
+@table @code
+@cindex -m11/03
+@item -m11/03
+Same as @code{-mkd11f}.
+
+@cindex -m11/04
+@item -m11/04
+Same as @code{-mkd11d}.
+
+@cindex -m11/05
+@cindex -m11/10
+@item -m11/05 | -m11/10
+Same as @code{-mkd11b}.
+
+@cindex -m11/15
+@cindex -m11/20
+@item -m11/15 | -m11/20
+Same as @code{-mka11}.
+
+@cindex -m11/21
+@item -m11/21
+Same as @code{-mt11}.
+
+@cindex -m11/23
+@cindex -m11/24
+@item -m11/23 | -m11/24
+Same as @code{-mf11}.
+
+@cindex -m11/34
+@item -m11/34
+Same as @code{-mkd11e}.
+
+@cindex -m11/34a
+@item -m11/34a
+Ame as @code{-mkd11e} @code{-mfpp}.
+
+@cindex -m11/35
+@cindex -m11/40
+@item -m11/35 | -m11/40
+Same as @code{-mkd11a}.
+
+@cindex -m11/44
+@item -m11/44
+Same as @code{-mkd11z}.
+
+@cindex -m11/45
+@cindex -m11/50
+@cindex -m11/55
+@cindex -m11/70
+@item -m11/45 | -m11/50 | -m11/55 | -m11/70
+Same as @code{-mkb11}.
+
+@cindex -m11/53
+@cindex -m11/73
+@cindex -m11/83
+@cindex -m11/84
+@cindex -m11/93
+@cindex -m11/94
+@item -m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94
+Same as @code{-mj11}.
+
+@cindex -m11/60
+@item -m11/60
+Same as @code{-mkd11k}.
+@end table
+
+@node PDP-11-Pseudos
+@section Assembler Directives
+
+The PDP-11 version of @code{@value{AS}} has a few machine
+dependent assembler directives.
+
+@table @code
+@item .bss
+Switch to the @code{bss} section.
+
+@item .even
+Align the location counter to an even number.
+@end table
+
+@node PDP-11-Syntax
+@section PDP-11 Assembly Language Syntax
+
+@cindex PDP-11 syntax
+
+@cindex DEC syntax
+@cindex BSD syntax
+@code{@value{AS}} supports both DEC syntax and BSD syntax.  The only
+difference is that in DEC syntax, a @code{#} character is used to denote
+an immediate constants, while in BSD syntax the character for this
+purpose is @code{$}.
+
+@cindex PDP-11 general-purpose register syntax
+eneral-purpose registers are named @code{r0} through @code{r7}.
+Mnemonic alternatives for @code{r6} and @code{r7} are @code{sp} and
+@code{pc}, respectively.
+
+@cindex PDP-11 floating-point register syntax
+Floating-point registers are named @code{ac0} through @code{ac3}, or
+alternatively @code{fr0} through @code{fr3}.
+
+@cindex PDP-11 comments
+Comments are started with a @code{#} or a @code{/} character, and extend
+to the end of the line.  (FIXME: clash with immediates?)
+
+@node PDP-11-Mnemonics
+@section Instruction Naming
+
+@cindex PDP-11 instruction naming
+
+Some instructions have alternative names.
+
+@table @code
+@item BCC
+@code{BHIS}
+
+@item BCS
+@code{BLO}
+
+@item L2DR
+@code{L2D}
+
+@item L3DR
+@code{L3D}
+
+@item SYS
+@code{TRAP}
+@end table
+
+@node PDP-11-Synthetic
+@section Synthetic Instructions
+
+The @code{JBR} and @code{J}@var{CC} synthetic instructions are not
+supported yet.
diff --git a/gas/doc/internals.texi b/gas/doc/internals.texi
index a42bc0f..5f203ca 100644
--- a/gas/doc/internals.texi
+++ b/gas/doc/internals.texi
@@ -1166,9 +1166,10 @@
 
 @item md_relax_frag
 @cindex md_relax_frag
-This macro may be defined to relax a frag.  GAS will call this with the frag
-and the change in size of all previous frags; @code{md_relax_frag} should
-return the change in size of the frag.  @xref{Relaxation}.
+This macro may be defined to relax a frag.  GAS will call this with the
+segment, the frag, and the change in size of all previous frags;
+@code{md_relax_frag} should return the change in size of the frag.
+@xref{Relaxation}.
 
 @item TC_GENERIC_RELAX_TABLE
 @cindex TC_GENERIC_RELAX_TABLE
diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c
index 0068f7a..8d84e07 100644
--- a/gas/dwarf2dbg.c
+++ b/gas/dwarf2dbg.c
@@ -1284,7 +1284,7 @@
 dwarf2_directive_file (dummy)
      int dummy ATTRIBUTE_UNUSED;
 {
-  as_fatal (_("dwarf2 is not supported for this object file format"));
+  s_app_file (0);
 }
 
 void
diff --git a/gas/expr.c b/gas/expr.c
index 21c3d67..2df2f63 100644
--- a/gas/expr.c
+++ b/gas/expr.c
@@ -1,5 +1,5 @@
 /* expr.c -operands, expressions-
-   Copyright (C) 1987, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000
+   Copyright (C) 1987, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001
    Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
@@ -41,7 +41,7 @@
 static void current_location PARAMS ((expressionS *));
 static void clean_up_expression PARAMS ((expressionS * expressionP));
 static segT operand PARAMS ((expressionS *));
-static operatorT operator PARAMS ((void));
+static operatorT operator PARAMS ((int *));
 
 extern const char EXP_CHARS[], FLT_CHARS[];
 
@@ -1552,17 +1552,19 @@
   }
 }
 
-/* Return the encoding for the operator at INPUT_LINE_POINTER.
-   Advance INPUT_LINE_POINTER to the last character in the operator
-   (i.e., don't change it for a single character operator).  */
+/* Return the encoding for the operator at INPUT_LINE_POINTER, and
+   sets NUM_CHARS to the number of characters in the operator.
+   Does not advance INPUT_LINE_POINTER.  */
 
 static inline operatorT
-operator ()
+operator (num_chars)
+     int *num_chars;
 {
   int c;
   operatorT ret;
 
   c = *input_line_pointer & 0xff;
+  *num_chars = 1;
 
   if (is_end_of_line[c])
     return O_illegal;
@@ -1587,14 +1589,14 @@
 	  ret = O_le;
 	  break;
 	}
-      ++input_line_pointer;
+      *num_chars = 2;
       return ret;
 
     case '=':
       if (input_line_pointer[1] != '=')
 	return op_encoding[c];
 
-      ++input_line_pointer;
+      *num_chars = 2;
       return O_eq;
 
     case '>':
@@ -1609,7 +1611,7 @@
 	  ret = O_ge;
 	  break;
 	}
-      ++input_line_pointer;
+      *num_chars = 2;
       return ret;
 
     case '!':
@@ -1620,21 +1622,21 @@
 	    return O_bit_inclusive_or;
 	  return op_encoding[c];
 	}
-      ++input_line_pointer;
+      *num_chars = 2;
       return O_bit_exclusive_or;
 
     case '|':
       if (input_line_pointer[1] != '|')
 	return op_encoding[c];
 
-      ++input_line_pointer;
+      *num_chars = 2;
       return O_logical_or;
 
     case '&':
       if (input_line_pointer[1] != '&')
 	return op_encoding[c];
 
-      ++input_line_pointer;
+      *num_chars = 2;
       return O_logical_and;
     }
 
@@ -1653,6 +1655,7 @@
   expressionS right;
   operatorT op_left;
   operatorT op_right;
+  int op_chars;
 
   know (rank >= 0);
 
@@ -1661,12 +1664,12 @@
   /* operand () gobbles spaces.  */
   know (*input_line_pointer != ' ');
 
-  op_left = operator ();
+  op_left = operator (&op_chars);
   while (op_left != O_illegal && op_rank[(int) op_left] > rank)
     {
       segT rightseg;
 
-      input_line_pointer++;	/* -> after 1st character of operator.  */
+      input_line_pointer += op_chars;	/* -> after operator.  */
 
       rightseg = expr (op_rank[(int) op_left], &right);
       if (right.X_op == O_absent)
@@ -1706,7 +1709,7 @@
 	       )
 	as_bad (_("operation combines symbols in different segments"));
 
-      op_right = operator ();
+      op_right = operator (&op_chars);
 
       know (op_right == O_illegal
 	    || op_rank[(int) op_right] <= op_rank[(int) op_left]);
diff --git a/gas/po/POTFILES.in b/gas/po/POTFILES.in
index 30dab30..11518ed 100644
--- a/gas/po/POTFILES.in
+++ b/gas/po/POTFILES.in
@@ -92,10 +92,14 @@
 config/tc-mn10300.h
 config/tc-ns32k.c
 config/tc-ns32k.h
+config/tc-pdp11.c
+config/tc-pdp11.h
 config/tc-pj.c
 config/tc-pj.h
 config/tc-ppc.c
 config/tc-ppc.h
+config/tc-s390.c
+config/tc-s390.h
 config/tc-sh.c
 config/tc-sh.h
 config/tc-sparc.c
diff --git a/gas/po/gas.pot b/gas/po/gas.pot
index 4428b64..ff99b25 100644
--- a/gas/po/gas.pot
+++ b/gas/po/gas.pot
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2001-01-11 12:04-0800\n"
+"POT-Creation-Date: 2001-02-18 15:18-0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -264,7 +264,7 @@
 msgstr ""
 
 #: as.c:528
-msgid "Copyright 2000 Free Software Foundation, Inc.\n"
+msgid "Copyright 2001 Free Software Foundation, Inc.\n"
 msgstr ""
 
 #: as.c:529 gasp.c:3621
@@ -354,7 +354,7 @@
 #. * This should never happen.
 #.
 #: atof-generic.c:437 config/tc-a29k.c:544 config/tc-i860.c:340
-#: config/tc-i860.c:832 config/tc-m68k.c:3176 config/tc-m68k.c:3205
+#: config/tc-i860.c:832 config/tc-m68k.c:3186 config/tc-m68k.c:3215
 #: config/tc-sparc.c:2543
 msgid "failed sanity check."
 msgstr ""
@@ -627,17 +627,17 @@
 msgid "Symbol %s already defined"
 msgstr ""
 
-#: config/obj-coff.c:4176 config/tc-i960.c:3215
+#: config/obj-coff.c:4176 config/tc-i960.c:3214
 #, c-format
 msgid "No 'bal' entry point for leafproc %s"
 msgstr ""
 
-#: config/obj-coff.c:4255 write.c:2575
+#: config/obj-coff.c:4255 write.c:2589
 #, c-format
 msgid "Negative of non-absolute symbol %s"
 msgstr ""
 
-#: config/obj-coff.c:4276 write.c:2589
+#: config/obj-coff.c:4276 write.c:2603
 msgid "callj to difference of 2 symbols"
 msgstr ""
 
@@ -649,7 +649,7 @@
 #. This is a COBR instruction.  They have only a 13-bit
 #. displacement and are only to be used for local branches:
 #. flag as error, don't generate relocation.
-#: config/obj-coff.c:4411 config/tc-i960.c:3235 write.c:2733
+#: config/obj-coff.c:4411 config/tc-i960.c:3234 write.c:2747
 msgid "can't use COBR format with external label"
 msgstr ""
 
@@ -658,7 +658,7 @@
 msgid "Value of %ld too large for field of %d bytes at 0x%lx"
 msgstr ""
 
-#: config/obj-coff.c:4504 write.c:2823
+#: config/obj-coff.c:4504 write.c:2837
 #, c-format
 msgid "Signed .word overflow; switch may be too large; %ld at 0x%lx"
 msgstr ""
@@ -680,7 +680,7 @@
 msgid ".COMMon length (%d.) <0! Ignored."
 msgstr ""
 
-#: config/obj-elf.c:325 config/tc-alpha.c:4335 config/tc-sparc.c:3694
+#: config/obj-elf.c:325 config/tc-alpha.c:4331 config/tc-sparc.c:3694
 #: config/tc-v850.c:282
 msgid "Ignoring attempt to re-define symbol"
 msgstr ""
@@ -694,7 +694,7 @@
 msgid "Common alignment negative; 0 assumed"
 msgstr ""
 
-#: config/obj-elf.c:375 config/tc-m32r.c:1286 config/tc-ppc.c:1518
+#: config/obj-elf.c:375 config/tc-m32r.c:1287 config/tc-ppc.c:1518
 #: config/tc-v850.c:382
 msgid "Common alignment not a power of 2"
 msgstr ""
@@ -977,7 +977,7 @@
 msgstr ""
 
 #. Probably a memory allocation problem?  Give up now.
-#: config/tc-a29k.c:330 config/tc-hppa.c:1412 config/tc-mips.c:1030
+#: config/tc-a29k.c:330 config/tc-hppa.c:1437 config/tc-mips.c:1030
 #: config/tc-mips.c:1072 config/tc-sparc.c:846
 msgid "Broken assembler.  No assembly attempted."
 msgstr ""
@@ -985,13 +985,14 @@
 #: config/tc-a29k.c:375 config/tc-avr.c:1124 config/tc-d10v.c:532
 #: config/tc-d30v.c:552 config/tc-h8300.c:296 config/tc-h8500.c:294
 #: config/tc-mcore.c:655 config/tc-mn10200.c:954 config/tc-mn10300.c:1335
-#: config/tc-ppc.c:1974 config/tc-sh.c:838 config/tc-tic80.c:282
-#: config/tc-v850.c:2076 config/tc-w65.c:248 config/tc-z8k.c:336
+#: config/tc-ppc.c:1974 config/tc-s390.c:964 config/tc-sh.c:843
+#: config/tc-tic80.c:282 config/tc-v850.c:2076 config/tc-w65.c:248
+#: config/tc-z8k.c:336
 msgid "missing operand"
 msgstr ""
 
 #: config/tc-a29k.c:415 config/tc-cris.c:913 config/tc-cris.c:921
-#: config/tc-hppa.c:1545 config/tc-i860.c:431 config/tc-i860.c:448
+#: config/tc-hppa.c:1572 config/tc-i860.c:431 config/tc-i860.c:448
 #: config/tc-sparc.c:1408 config/tc-sparc.c:1414
 #, c-format
 msgid "Unknown opcode: `%s'"
@@ -1043,33 +1044,33 @@
 msgid "Invalid register in & expression"
 msgstr ""
 
-#: config/tc-alpha.c:837
+#: config/tc-alpha.c:827
 #, c-format
 msgid "internal error: can't hash opcode `%s': %s"
 msgstr ""
 
-#: config/tc-alpha.c:871
+#: config/tc-alpha.c:861
 #, c-format
 msgid "internal error: can't hash macro `%s': %s"
 msgstr ""
 
-#: config/tc-alpha.c:954 config/tc-i960.c:2700
+#: config/tc-alpha.c:945 config/tc-i960.c:2700
 msgid "syntax error"
 msgstr ""
 
-#: config/tc-alpha.c:1028 config/tc-arm.c:6629 config/tc-h8300.c:1373
-#: config/tc-h8500.c:1197 config/tc-hppa.c:3939 config/tc-i860.c:931
-#: config/tc-m68hc11.c:478 config/tc-m68k.c:4179 config/tc-m88k.c:1105
+#: config/tc-alpha.c:1019 config/tc-arm.c:6643 config/tc-h8300.c:1373
+#: config/tc-h8500.c:1197 config/tc-hppa.c:3990 config/tc-i860.c:931
+#: config/tc-m68hc11.c:481 config/tc-m68k.c:4189 config/tc-m88k.c:1105
 #: config/tc-ns32k.c:1663 config/tc-sparc.c:2830 config/tc-z8k.c:1324
 msgid "Bad call to MD_ATOF()"
 msgstr ""
 
-#: config/tc-alpha.c:1078
+#: config/tc-alpha.c:1069
 #, c-format
 msgid "Unknown CPU identifier `%s'"
 msgstr ""
 
-#: config/tc-alpha.c:1122
+#: config/tc-alpha.c:1113
 msgid ""
 "Alpha options:\n"
 "-32addr\t\t\ttreat addresses as 32-bit values\n"
@@ -1080,293 +1081,294 @@
 "\t\t\tthese variants include PALcode opcodes\n"
 msgstr ""
 
-#: config/tc-alpha.c:1132
+#: config/tc-alpha.c:1123
 msgid ""
 "VMS options:\n"
 "-+\t\t\thash encode (don't truncate) names longer than 64 characters\n"
 "-H\t\t\tshow new symbol after hash truncation\n"
 msgstr ""
 
-#: config/tc-alpha.c:1305
+#: config/tc-alpha.c:1296
 #, c-format
 msgid "unhandled relocation type %s"
 msgstr ""
 
-#: config/tc-alpha.c:1318
+#: config/tc-alpha.c:1309
 msgid "non-absolute expression in constant field"
 msgstr ""
 
-#: config/tc-alpha.c:1332
+#: config/tc-alpha.c:1323
 #, c-format
 msgid "type %d reloc done?\n"
 msgstr ""
 
-#: config/tc-alpha.c:1383 config/tc-alpha.c:1390 config/tc-mips.c:7356
+#: config/tc-alpha.c:1374 config/tc-alpha.c:1381 config/tc-mips.c:7372
 msgid "Used $at without \".set noat\""
 msgstr ""
 
-#: config/tc-alpha.c:1572
+#: config/tc-alpha.c:1564
 #, c-format
 msgid "cannot represent `%s' relocation in object file"
 msgstr ""
 
-#: config/tc-alpha.c:1579
+#: config/tc-alpha.c:1571
 #, c-format
 msgid "internal error? cannot generate `%s' relocation"
 msgstr ""
 
-#: config/tc-alpha.c:1633
+#: config/tc-alpha.c:1625
 #, c-format
 msgid "frame reg expected, using $%d."
 msgstr ""
 
-#: config/tc-alpha.c:1758
+#: config/tc-alpha.c:1752
 #, c-format
 msgid "No !literal!%d was found"
 msgstr ""
 
 #. only support one relocation op per insn
-#: config/tc-alpha.c:1946
+#: config/tc-alpha.c:1939
 msgid "More than one relocation op per insn"
 msgstr ""
 
-#: config/tc-alpha.c:1963
+#: config/tc-alpha.c:1956
 msgid "No relocation operand"
 msgstr ""
 
-#: config/tc-alpha.c:1969
+#: config/tc-alpha.c:1962
 #, c-format
 msgid "No !sequence-number after !%s"
 msgstr ""
 
-#: config/tc-alpha.c:1982
+#: config/tc-alpha.c:1975
 #, c-format
 msgid "Unknown relocation operand: !%s"
 msgstr ""
 
-#: config/tc-alpha.c:1995
+#: config/tc-alpha.c:1989
 #, c-format
 msgid "Bad sequence number: !%s!%s"
 msgstr ""
 
-#: config/tc-alpha.c:2346
+#: config/tc-alpha.c:2341
 #, c-format
 msgid "operand out of range (%s not between %d and %d)"
 msgstr ""
 
-#: config/tc-alpha.c:2445 config/tc-d10v.c:621 config/tc-d30v.c:640
+#: config/tc-alpha.c:2440 config/tc-d10v.c:621 config/tc-d30v.c:640
 #: config/tc-mn10200.c:1009 config/tc-mn10300.c:1406 config/tc-ppc.c:1940
-#: config/tc-ppc.c:2048 config/tc-ppc.c:2060 config/tc-v850.c:1856
-#: config/tc-v850.c:1879 config/tc-v850.c:2099
+#: config/tc-ppc.c:2048 config/tc-ppc.c:2060 config/tc-s390.c:971
+#: config/tc-s390.c:1014 config/tc-v850.c:1856 config/tc-v850.c:1879
+#: config/tc-v850.c:2099
 msgid "too many fixups"
 msgstr ""
 
-#: config/tc-alpha.c:2660 config/tc-alpha.c:2729
+#: config/tc-alpha.c:2656 config/tc-alpha.c:2725
 #, c-format
 msgid "inappropriate arguments for opcode `%s'"
 msgstr ""
 
-#: config/tc-alpha.c:2662 config/tc-alpha.c:2731
+#: config/tc-alpha.c:2658 config/tc-alpha.c:2727
 #, c-format
 msgid "opcode `%s' not supported for target %s"
 msgstr ""
 
-#: config/tc-alpha.c:2666 config/tc-alpha.c:2734 config/tc-avr.c:1090
+#: config/tc-alpha.c:2662 config/tc-alpha.c:2730 config/tc-avr.c:1090
 #, c-format
 msgid "unknown opcode `%s'"
 msgstr ""
 
-#: config/tc-alpha.c:2706 config/tc-alpha.c:2773 config/tc-alpha.c:3284
-#: config/tc-alpha.c:3344 config/tc-alpha.c:3396 config/tc-alpha.c:3471
-#: config/tc-alpha.c:3556 config/tc-alpha.c:3682 config/tc-alpha.c:3859
-#: config/tc-alpha.c:3916 config/tc-alpha.c:4026 config/tc-alpha.c:4133
-#: config/tc-alpha.c:4210
+#: config/tc-alpha.c:2702 config/tc-alpha.c:2768 config/tc-alpha.c:3280
+#: config/tc-alpha.c:3340 config/tc-alpha.c:3392 config/tc-alpha.c:3467
+#: config/tc-alpha.c:3552 config/tc-alpha.c:3678 config/tc-alpha.c:3855
+#: config/tc-alpha.c:3912 config/tc-alpha.c:4022 config/tc-alpha.c:4129
+#: config/tc-alpha.c:4206
 #, c-format
 msgid "Cannot use !%s!%d with %s"
 msgstr ""
 
-#: config/tc-alpha.c:2794
+#: config/tc-alpha.c:2789
 msgid "can not resolve expression"
 msgstr ""
 
-#: config/tc-alpha.c:2936 config/tc-alpha.c:3128
+#: config/tc-alpha.c:2931 config/tc-alpha.c:3124
 msgid "overflow in literal (.lita) table"
 msgstr ""
 
-#: config/tc-alpha.c:2943 config/tc-alpha.c:2966 config/tc-alpha.c:3141
-#: config/tc-alpha.c:3485 config/tc-alpha.c:3563 config/tc-alpha.c:3611
-#: config/tc-alpha.c:3711 config/tc-alpha.c:3936 config/tc-alpha.c:4048
+#: config/tc-alpha.c:2938 config/tc-alpha.c:2961 config/tc-alpha.c:3137
+#: config/tc-alpha.c:3481 config/tc-alpha.c:3559 config/tc-alpha.c:3607
+#: config/tc-alpha.c:3707 config/tc-alpha.c:3932 config/tc-alpha.c:4044
 msgid "macro requires $at register while noat in effect"
 msgstr ""
 
-#: config/tc-alpha.c:2945 config/tc-alpha.c:2968 config/tc-alpha.c:3143
+#: config/tc-alpha.c:2940 config/tc-alpha.c:2963 config/tc-alpha.c:3139
 msgid "macro requires $at while $at in use"
 msgstr ""
 
-#: config/tc-alpha.c:3090 expr.c:83 read.c:3164
+#: config/tc-alpha.c:3086 expr.c:83 read.c:3164
 msgid "bignum invalid; zero assumed"
 msgstr ""
 
-#: config/tc-alpha.c:3092 expr.c:85 read.c:3166 read.c:3499 read.c:4397
+#: config/tc-alpha.c:3088 expr.c:85 read.c:3166 read.c:3499 read.c:4397
 msgid "floating point number invalid; zero assumed"
 msgstr ""
 
-#: config/tc-alpha.c:3097
+#: config/tc-alpha.c:3093
 msgid "can't handle expression"
 msgstr ""
 
-#: config/tc-alpha.c:3134
+#: config/tc-alpha.c:3130
 msgid "overflow in literal (.lit8) table"
 msgstr ""
 
-#: config/tc-alpha.c:3306
+#: config/tc-alpha.c:3302
 #, c-format
 msgid "bad instruction format for lda !%s!%ld"
 msgstr ""
 
-#: config/tc-alpha.c:4306 config/tc-ppc.c:1467 config/tc-ppc.c:3689
+#: config/tc-alpha.c:4302 config/tc-ppc.c:1467 config/tc-ppc.c:3689
 #: read.c:1369
 #, c-format
 msgid ".COMMon length (%ld.) <0! Ignored."
 msgstr ""
 
-#: config/tc-alpha.c:4344 config/tc-alpha.c:4353 config/tc-ppc.c:3726
+#: config/tc-alpha.c:4340 config/tc-alpha.c:4349 config/tc-ppc.c:3726
 #: read.c:1393
 #, c-format
 msgid "Length of .comm \"%s\" is already %ld. Not changed to %ld."
 msgstr ""
 
-#: config/tc-alpha.c:4455 ecoff.c:3087
+#: config/tc-alpha.c:4451 ecoff.c:3087
 msgid ".ent directive has no name"
 msgstr ""
 
-#: config/tc-alpha.c:4463
+#: config/tc-alpha.c:4459
 msgid "nested .ent directives"
 msgstr ""
 
-#: config/tc-alpha.c:4499 ecoff.c:3035
+#: config/tc-alpha.c:4495 ecoff.c:3035
 msgid ".end directive has no name"
 msgstr ""
 
-#: config/tc-alpha.c:4508
+#: config/tc-alpha.c:4504
 msgid ".end directive names different symbol than .ent"
 msgstr ""
 
-#: config/tc-alpha.c:4585
+#: config/tc-alpha.c:4581
 #, c-format
 msgid "Invalid argument %d to .prologue."
 msgstr ""
 
-#: config/tc-alpha.c:4677
+#: config/tc-alpha.c:4673
 msgid "ECOFF debugging is disabled."
 msgstr ""
 
-#: config/tc-alpha.c:4698
+#: config/tc-alpha.c:4694
 msgid "Unknown section directive"
 msgstr ""
 
-#: config/tc-alpha.c:4734
+#: config/tc-alpha.c:4730
 msgid ".ent directive has no symbol"
 msgstr ""
 
-#: config/tc-alpha.c:4761
+#: config/tc-alpha.c:4757
 msgid "Bad .frame directive 1./2. param"
 msgstr ""
 
-#: config/tc-alpha.c:4773
+#: config/tc-alpha.c:4769
 msgid "Bad .frame directive 3./4. param"
 msgstr ""
 
-#: config/tc-alpha.c:4798
+#: config/tc-alpha.c:4794
 msgid ".pdesc directive not in link (.link) section"
 msgstr ""
 
-#: config/tc-alpha.c:4806
+#: config/tc-alpha.c:4802
 msgid ".pdesc has no matching .ent"
 msgstr ""
 
-#: config/tc-alpha.c:4817
+#: config/tc-alpha.c:4813
 msgid ".pdesc directive has no entry symbol"
 msgstr ""
 
-#: config/tc-alpha.c:4830
+#: config/tc-alpha.c:4826
 msgid "No comma after .pdesc <entryname>"
 msgstr ""
 
-#: config/tc-alpha.c:4853
+#: config/tc-alpha.c:4849
 msgid "unknown procedure kind"
 msgstr ""
 
-#: config/tc-alpha.c:4947
+#: config/tc-alpha.c:4942
 msgid ".name directive not in link (.link) section"
 msgstr ""
 
-#: config/tc-alpha.c:4955
+#: config/tc-alpha.c:4950
 msgid ".name directive has no symbol"
 msgstr ""
 
-#: config/tc-alpha.c:4989
+#: config/tc-alpha.c:4984
 msgid "No symbol after .linkage"
 msgstr ""
 
-#: config/tc-alpha.c:5017
+#: config/tc-alpha.c:5012
 msgid "No symbol after .code_address"
 msgstr ""
 
-#: config/tc-alpha.c:5050 ecoff.c:3253
+#: config/tc-alpha.c:5045 ecoff.c:3253
 msgid "Bad .mask directive"
 msgstr ""
 
-#: config/tc-alpha.c:5071 ecoff.c:3183
+#: config/tc-alpha.c:5066 ecoff.c:3183
 msgid "Bad .fmask directive"
 msgstr ""
 
-#: config/tc-alpha.c:5241 config/tc-arm.c:1593 read.c:2150 read.c:2737
+#: config/tc-alpha.c:5236 config/tc-arm.c:1593 read.c:2150 read.c:2737
 #: stabs.c:464
 #, c-format
 msgid "Expected comma after name \"%s\""
 msgstr ""
 
 #. *symbol_get_obj (symbolP) = (signed char) temp;
-#: config/tc-alpha.c:5252
+#: config/tc-alpha.c:5247
 #, c-format
 msgid "unhandled: .proc %s,%d"
 msgstr ""
 
-#: config/tc-alpha.c:5287
+#: config/tc-alpha.c:5282
 #, c-format
 msgid "Tried to .set unrecognized mode `%s'"
 msgstr ""
 
 #. not fatal, but it might not work in the end
-#: config/tc-alpha.c:5304
+#: config/tc-alpha.c:5299
 msgid "File overrides no-base-register option."
 msgstr ""
 
-#: config/tc-alpha.c:5321
+#: config/tc-alpha.c:5316
 #, c-format
 msgid "Bad base register, using $%d."
 msgstr ""
 
-#: config/tc-alpha.c:5343
+#: config/tc-alpha.c:5338
 #, c-format
 msgid "Alignment too large: %d. assumed"
 msgstr ""
 
-#: config/tc-alpha.c:5347 config/tc-d30v.c:2219
+#: config/tc-alpha.c:5342 config/tc-d30v.c:2219
 msgid "Alignment negative: 0 assumed"
 msgstr ""
 
-#: config/tc-alpha.c:5662
+#: config/tc-alpha.c:5654
 #, c-format
 msgid "Chose GP value of %lx\n"
 msgstr ""
 
-#: config/tc-arc.c:1618 config/tc-arm.c:7532
+#: config/tc-arc.c:1608 config/tc-arm.c:7546
 msgid "md_estimate_size_before_relax\n"
 msgstr ""
 
-#: config/tc-arc.c:1630
+#: config/tc-arc.c:1620
 msgid "md_convert_frag\n"
 msgstr ""
 
@@ -1398,7 +1400,7 @@
 msgid "Invalid syntax for .req directive."
 msgstr ""
 
-#: config/tc-arm.c:1506 config/tc-mips.c:9916 read.c:2035
+#: config/tc-arm.c:1506 config/tc-mips.c:9936 read.c:2035
 #, c-format
 msgid "Alignment too large: %d. assumed."
 msgstr ""
@@ -1407,7 +1409,7 @@
 msgid "Alignment negative. 0 assumed."
 msgstr ""
 
-#: config/tc-arm.c:1643 config/tc-m32r.c:417 read.c:2795 read.c:4857
+#: config/tc-arm.c:1643 config/tc-m32r.c:418 read.c:2795 read.c:4857
 #, c-format
 msgid "symbol `%s' already defined"
 msgstr ""
@@ -1492,12 +1494,12 @@
 msgstr ""
 
 #: config/tc-arm.c:2125 config/tc-arm.c:2578 config/tc-arm.c:3438
-#: config/tc-arm.c:4358
+#: config/tc-arm.c:4372
 msgid "pre-indexed expression expected"
 msgstr ""
 
 #: config/tc-arm.c:2138 config/tc-arm.c:2591 config/tc-arm.c:3449
-#: config/tc-arm.c:4370 config/tc-arm.c:4716
+#: config/tc-arm.c:4384 config/tc-arm.c:4730
 msgid "missing ]"
 msgstr ""
 
@@ -1555,8 +1557,8 @@
 msgid "Warning: Instruction unpredictable when using r15"
 msgstr ""
 
-#: config/tc-arm.c:3063 config/tc-arm.c:3255 config/tc-arm.c:5503
-#: config/tc-arm.c:5536 config/tc-arm.c:5546
+#: config/tc-arm.c:3063 config/tc-arm.c:3255 config/tc-arm.c:5517
+#: config/tc-arm.c:5550 config/tc-arm.c:5560
 msgid "immediate value out of range"
 msgstr ""
 
@@ -1610,7 +1612,7 @@
 msgid "Invalid immediate shift"
 msgstr ""
 
-#: config/tc-arm.c:3930 config/tc-arm.c:4400
+#: config/tc-arm.c:3930 config/tc-arm.c:4414
 msgid "Constant expression expected"
 msgstr ""
 
@@ -1638,390 +1640,395 @@
 msgid "Address expected"
 msgstr ""
 
-#: config/tc-arm.c:4326 config/tc-arm.c:4341 config/tc-arm.c:4379
+#: config/tc-arm.c:4328 config/tc-arm.c:4359
+#, c-format
+msgid "Rn and Rd must be different in %s"
+msgstr ""
+
+#: config/tc-arm.c:4332 config/tc-arm.c:4348 config/tc-arm.c:4393
 #, c-format
 msgid "%s register same as write-back base"
 msgstr ""
 
-#: config/tc-arm.c:4328 config/tc-arm.c:4343 config/tc-arm.c:4381
+#: config/tc-arm.c:4334 config/tc-arm.c:4350 config/tc-arm.c:4395
 msgid "destination"
 msgstr ""
 
-#: config/tc-arm.c:4328 config/tc-arm.c:4343 config/tc-arm.c:4381
+#: config/tc-arm.c:4334 config/tc-arm.c:4350 config/tc-arm.c:4395
 msgid "source"
 msgstr ""
 
-#: config/tc-arm.c:4420
+#: config/tc-arm.c:4434
 msgid "literal pool insertion failed"
 msgstr ""
 
-#: config/tc-arm.c:4459
+#: config/tc-arm.c:4473
 msgid "Pre-increment instruction with translate"
 msgstr ""
 
-#: config/tc-arm.c:4500
+#: config/tc-arm.c:4514
 msgid "Bad range in register list"
 msgstr ""
 
-#: config/tc-arm.c:4508 config/tc-arm.c:4517 config/tc-arm.c:4559
+#: config/tc-arm.c:4522 config/tc-arm.c:4531 config/tc-arm.c:4573
 #, c-format
 msgid "Warning: Duplicated register (r%d) in register list"
 msgstr ""
 
-#: config/tc-arm.c:4520
+#: config/tc-arm.c:4534
 msgid "Warning: Register range not in ascending order"
 msgstr ""
 
-#: config/tc-arm.c:4532
+#: config/tc-arm.c:4546
 msgid "Missing `}'"
 msgstr ""
 
-#: config/tc-arm.c:4548
+#: config/tc-arm.c:4562
 msgid "invalid register mask"
 msgstr ""
 
-#: config/tc-arm.c:4569 config/tc-avr.c:852 config/tc-cris.c:2733
+#: config/tc-arm.c:4583 config/tc-avr.c:852 config/tc-cris.c:2733
 #: config/tc-d10v.c:1560 config/tc-d30v.c:1865 config/tc-mips.c:3230
-#: config/tc-mips.c:4162 config/tc-mips.c:4947 config/tc-mips.c:5493
-#: config/tc-ppc.c:4854 config/tc-v850.c:2385
+#: config/tc-mips.c:4162 config/tc-mips.c:4963 config/tc-mips.c:5509
+#: config/tc-ppc.c:4853 config/tc-v850.c:2385
 msgid "expression too complex"
 msgstr ""
 
-#: config/tc-arm.c:4608
+#: config/tc-arm.c:4622
 msgid "r15 not allowed as base register"
 msgstr ""
 
-#: config/tc-arm.c:4676 config/tc-arm.c:4690
+#: config/tc-arm.c:4690 config/tc-arm.c:4704
 msgid "r15 not allowed in swap"
 msgstr ""
 
-#: config/tc-arm.c:4788
+#: config/tc-arm.c:4802
 msgid "Use of r15 in bx in ARM mode is not really useful"
 msgstr ""
 
-#: config/tc-arm.c:5044 config/tc-v850.c:1959 config/tc-v850.c:1980
+#: config/tc-arm.c:5058 config/tc-v850.c:1959 config/tc-v850.c:1980
 msgid "constant expression expected"
 msgstr ""
 
-#: config/tc-arm.c:5050
+#: config/tc-arm.c:5064
 msgid "Constant value required for number of registers"
 msgstr ""
 
-#: config/tc-arm.c:5058
+#: config/tc-arm.c:5072
 msgid "number of registers must be in the range [1:4]"
 msgstr ""
 
-#: config/tc-arm.c:5119
+#: config/tc-arm.c:5133
 msgid "R15 not allowed as base register with write-back"
 msgstr ""
 
-#: config/tc-arm.c:5367
+#: config/tc-arm.c:5381
 msgid "lo register required"
 msgstr ""
 
-#: config/tc-arm.c:5375
+#: config/tc-arm.c:5389
 msgid "hi register required"
 msgstr ""
 
-#: config/tc-arm.c:5445
+#: config/tc-arm.c:5459
 msgid "dest and source1 must be the same register"
 msgstr ""
 
-#: config/tc-arm.c:5452
+#: config/tc-arm.c:5466
 msgid "subtract valid only on lo regs"
 msgstr ""
 
-#: config/tc-arm.c:5476
+#: config/tc-arm.c:5490
 msgid "invalid Hi register with immediate"
 msgstr ""
 
-#: config/tc-arm.c:5514
+#: config/tc-arm.c:5528
 msgid "invalid immediate value for stack adjust"
 msgstr ""
 
-#: config/tc-arm.c:5525
+#: config/tc-arm.c:5539
 msgid "invalid immediate for address calculation"
 msgstr ""
 
-#: config/tc-arm.c:5612
+#: config/tc-arm.c:5626
 msgid "source1 and dest must be same register"
 msgstr ""
 
-#: config/tc-arm.c:5646
+#: config/tc-arm.c:5660
 msgid "Invalid immediate for shift"
 msgstr ""
 
-#: config/tc-arm.c:5725
+#: config/tc-arm.c:5739
 msgid "only lo regs allowed with immediate"
 msgstr ""
 
-#: config/tc-arm.c:5744
+#: config/tc-arm.c:5758
 msgid "invalid immediate"
 msgstr ""
 
-#: config/tc-arm.c:5798
+#: config/tc-arm.c:5812
 msgid "expected ']'"
 msgstr ""
 
-#: config/tc-arm.c:5865
+#: config/tc-arm.c:5879
 msgid "byte or halfword not valid for base register"
 msgstr ""
 
-#: config/tc-arm.c:5870
+#: config/tc-arm.c:5884
 msgid "R15 based store not allowed"
 msgstr ""
 
-#: config/tc-arm.c:5875
+#: config/tc-arm.c:5889
 msgid "Invalid base register for register offset"
 msgstr ""
 
-#: config/tc-arm.c:5893
+#: config/tc-arm.c:5907
 msgid "invalid offset"
 msgstr ""
 
-#: config/tc-arm.c:5904
+#: config/tc-arm.c:5918
 msgid "invalid base register in load/store"
 msgstr ""
 
-#: config/tc-arm.c:5928
+#: config/tc-arm.c:5942
 msgid "Invalid offset"
 msgstr ""
 
-#: config/tc-arm.c:6003
+#: config/tc-arm.c:6017
 msgid "dest and source1 one must be the same register"
 msgstr ""
 
-#: config/tc-arm.c:6011
+#: config/tc-arm.c:6025
 msgid "Rs and Rd must be different in MUL"
 msgstr ""
 
-#: config/tc-arm.c:6155
+#: config/tc-arm.c:6169
 msgid ""
 "Inserted missing '!': load/store multiple always writes back base register"
 msgstr ""
 
-#: config/tc-arm.c:6171 config/tc-arm.c:6271
+#: config/tc-arm.c:6185 config/tc-arm.c:6285
 msgid "Expression too complex"
 msgstr ""
 
-#: config/tc-arm.c:6177
+#: config/tc-arm.c:6191
 msgid "only lo-regs valid in load/store multiple"
 msgstr ""
 
-#: config/tc-arm.c:6223
+#: config/tc-arm.c:6237
 msgid "Syntax: ldrs[b] Rd, [Rb, Ro]"
 msgstr ""
 
-#: config/tc-arm.c:6287
+#: config/tc-arm.c:6301
 msgid "invalid register list to push/pop instruction"
 msgstr ""
 
-#: config/tc-arm.c:6429 config/tc-cris.c:664
+#: config/tc-arm.c:6443 config/tc-cris.c:664
 msgid "Virtual memory exhausted"
 msgstr ""
 
-#: config/tc-arm.c:6835
+#: config/tc-arm.c:6849
 #, c-format
 msgid "invalid constant (%lx) after fixup"
 msgstr ""
 
-#: config/tc-arm.c:6871
+#: config/tc-arm.c:6885
 #, c-format
 msgid "Unable to compute ADRL instructions for PC offset of 0x%lx"
 msgstr ""
 
-#: config/tc-arm.c:6901
+#: config/tc-arm.c:6915
 #, c-format
 msgid "bad immediate value for offset (%ld)"
 msgstr ""
 
-#: config/tc-arm.c:6923 config/tc-arm.c:6945
+#: config/tc-arm.c:6937 config/tc-arm.c:6959
 msgid "invalid literal constant: pool needs to be closer"
 msgstr ""
 
-#: config/tc-arm.c:6925
+#: config/tc-arm.c:6939
 #, c-format
 msgid "bad immediate value for half-word offset (%ld)"
 msgstr ""
 
-#: config/tc-arm.c:6962
+#: config/tc-arm.c:6976
 msgid "shift expression is too large"
 msgstr ""
 
-#: config/tc-arm.c:6981 config/tc-arm.c:6990
+#: config/tc-arm.c:6995 config/tc-arm.c:7004
 msgid "Invalid swi expression"
 msgstr ""
 
-#: config/tc-arm.c:7000
+#: config/tc-arm.c:7014
 msgid "Invalid expression in load/store multiple"
 msgstr ""
 
-#: config/tc-arm.c:7053
+#: config/tc-arm.c:7067
 msgid "gas can't handle same-section branch dest >= 0x04000000"
 msgstr ""
 
-#: config/tc-arm.c:7062
+#: config/tc-arm.c:7076
 msgid "out of range branch"
 msgstr ""
 
-#: config/tc-arm.c:7095 config/tc-arm.c:7111 config/tc-mips.c:9743
+#: config/tc-arm.c:7109 config/tc-arm.c:7125 config/tc-mips.c:9763
 msgid "Branch out of range"
 msgstr ""
 
-#: config/tc-arm.c:7134
+#: config/tc-arm.c:7148
 msgid "Branch with link out of range"
 msgstr ""
 
-#: config/tc-arm.c:7201
+#: config/tc-arm.c:7215
 msgid "Illegal value for co-processor offset"
 msgstr ""
 
-#: config/tc-arm.c:7225
+#: config/tc-arm.c:7239
 #, c-format
 msgid "Invalid offset, target not word aligned (0x%08X)"
 msgstr ""
 
-#: config/tc-arm.c:7231 config/tc-arm.c:7240 config/tc-arm.c:7247
-#: config/tc-arm.c:7254 config/tc-arm.c:7261
+#: config/tc-arm.c:7245 config/tc-arm.c:7254 config/tc-arm.c:7261
+#: config/tc-arm.c:7268 config/tc-arm.c:7275
 #, c-format
 msgid "Invalid offset, value too big (0x%08lX)"
 msgstr ""
 
-#: config/tc-arm.c:7300
+#: config/tc-arm.c:7314
 msgid "Invalid immediate for stack address calculation"
 msgstr ""
 
-#: config/tc-arm.c:7309
+#: config/tc-arm.c:7323
 #, c-format
 msgid "Invalid immediate for address calculation (value = 0x%08lX)"
 msgstr ""
 
-#: config/tc-arm.c:7319
+#: config/tc-arm.c:7333
 msgid "Invalid 8bit immediate"
 msgstr ""
 
-#: config/tc-arm.c:7327
+#: config/tc-arm.c:7341
 msgid "Invalid 3bit immediate"
 msgstr ""
 
-#: config/tc-arm.c:7343
+#: config/tc-arm.c:7357
 #, c-format
 msgid "Invalid immediate: %ld is too large"
 msgstr ""
 
-#: config/tc-arm.c:7358
+#: config/tc-arm.c:7372
 #, c-format
 msgid "Illegal Thumb shift value: %ld"
 msgstr ""
 
-#: config/tc-arm.c:7372 config/tc-mn10300.c:1961
+#: config/tc-arm.c:7386 config/tc-mn10300.c:1961
 #, c-format
 msgid "Bad relocation fixup type (%d)"
 msgstr ""
 
-#: config/tc-arm.c:7445
+#: config/tc-arm.c:7459
 msgid "Literal referenced across section boundary (Implicit dump?)"
 msgstr ""
 
-#: config/tc-arm.c:7458
+#: config/tc-arm.c:7472
 #, c-format
 msgid "Internal_relocation (type %d) not fixed up (IMMEDIATE)"
 msgstr ""
 
-#: config/tc-arm.c:7464
+#: config/tc-arm.c:7478
 msgid "ADRL used for a symbol not defined in the same file"
 msgstr ""
 
-#: config/tc-arm.c:7469
+#: config/tc-arm.c:7483
 #, c-format
 msgid "Internal_relocation (type %d) not fixed up (OFFSET_IMM)"
 msgstr ""
 
-#: config/tc-arm.c:7490 config/tc-cris.c:2672 config/tc-mcore.c:2109
+#: config/tc-arm.c:7504 config/tc-cris.c:2672 config/tc-mcore.c:2109
 #: config/tc-ns32k.c:2369
 msgid "<unknown>"
 msgstr ""
 
-#: config/tc-arm.c:7493
+#: config/tc-arm.c:7507
 #, c-format
 msgid "Cannot represent %s relocation in this object file format"
 msgstr ""
 
-#: config/tc-arm.c:7514 config/tc-mips.c:11261 config/tc-sh.c:3177
+#: config/tc-arm.c:7528 config/tc-mips.c:11281 config/tc-sh.c:3182
 #, c-format
 msgid "Can not represent %s relocation in this object file format"
 msgstr ""
 
-#: config/tc-arm.c:7611
+#: config/tc-arm.c:7625
 #, c-format
 msgid "No operator -- statement `%s'\n"
 msgstr ""
 
-#: config/tc-arm.c:7629
+#: config/tc-arm.c:7643
 msgid "selected processor does not support this opcode"
 msgstr ""
 
-#: config/tc-arm.c:7675
+#: config/tc-arm.c:7689
 #, c-format
 msgid "Opcode `%s' must have suffix from list: <%s>"
 msgstr ""
 
-#: config/tc-arm.c:7706
+#: config/tc-arm.c:7720
 msgid "Warning: Use of the 'nv' conditional is deprecated\n"
 msgstr ""
 
-#: config/tc-arm.c:7723
+#: config/tc-arm.c:7737
 #, c-format
 msgid "Opcode `%s' is unconditional\n"
 msgstr ""
 
-#: config/tc-arm.c:7747
+#: config/tc-arm.c:7761
 #, c-format
 msgid "Opcode `%s' must have suffix from <%s>\n"
 msgstr ""
 
-#: config/tc-arm.c:7838
+#: config/tc-arm.c:7852
 #, c-format
 msgid "register '%s' does not exist\n"
 msgstr ""
 
-#: config/tc-arm.c:7843
+#: config/tc-arm.c:7857
 #, c-format
 msgid "ignoring redefinition of register alias '%s'"
 msgstr ""
 
-#: config/tc-arm.c:7849
+#: config/tc-arm.c:7863
 #, c-format
 msgid ""
 "ignoring redefinition of register alias '%s' to non-existant register '%s'"
 msgstr ""
 
-#: config/tc-arm.c:7853
+#: config/tc-arm.c:7867
 msgid "ignoring incomplete .req pseuso op"
 msgstr ""
 
-#: config/tc-arm.c:7860
+#: config/tc-arm.c:7874
 #, c-format
 msgid "bad instruction `%s'"
 msgstr ""
 
-#: config/tc-arm.c:8035
+#: config/tc-arm.c:8049
 #, c-format
 msgid "Unrecognised APCS switch -m%s"
 msgstr ""
 
-#: config/tc-arm.c:8192 config/tc-arm.c:8205 config/tc-arm.c:8218
-#: config/tc-arm.c:8231 config/tc-arm.c:8237
+#: config/tc-arm.c:8206 config/tc-arm.c:8219 config/tc-arm.c:8232
+#: config/tc-arm.c:8245 config/tc-arm.c:8251
 #, c-format
 msgid "Invalid architecture variant -m%s"
 msgstr ""
 
-#: config/tc-arm.c:8244
+#: config/tc-arm.c:8258
 #, c-format
 msgid "Invalid processor variant -m%s"
 msgstr ""
 
-#: config/tc-arm.c:8267
+#: config/tc-arm.c:8281
 msgid ""
 " ARM Specific Assembler Options:\n"
 "  -m[arm][<processor name>] select processor variant\n"
@@ -2037,7 +2044,7 @@
 "  -k                        generate PIC code.\n"
 msgstr ""
 
-#: config/tc-arm.c:8279
+#: config/tc-arm.c:8293
 msgid ""
 "  -mapcs-32, -mapcs-26      specify which ARM Procedure Calling Standard to "
 "use\n"
@@ -2046,17 +2053,17 @@
 "  -mapcs-reentrant          the code is position independent/reentrant\n"
 msgstr ""
 
-#: config/tc-arm.c:8286
+#: config/tc-arm.c:8300
 msgid "  -moabi                    support the old ELF ABI\n"
 msgstr ""
 
-#: config/tc-arm.c:8290
+#: config/tc-arm.c:8304
 msgid ""
 "  -EB                       assemble code for a big endian cpu\n"
 "  -EL                       assemble code for a little endian cpu\n"
 msgstr ""
 
-#: config/tc-arm.c:8443
+#: config/tc-arm.c:8457
 #, c-format
 msgid "%s: unexpected function type: %d"
 msgstr ""
@@ -2102,8 +2109,8 @@
 msgstr ""
 
 #: config/tc-avr.c:372 config/tc-d10v.c:313 config/tc-d30v.c:366
-#: config/tc-mips.c:8789 config/tc-mn10200.c:375 config/tc-pj.c:356
-#: config/tc-ppc.c:4518 config/tc-sh.c:2058 config/tc-v850.c:1291
+#: config/tc-mips.c:8805 config/tc-mn10200.c:375 config/tc-pj.c:356
+#: config/tc-ppc.c:4518 config/tc-sh.c:2063 config/tc-v850.c:1291
 msgid "bad call to md_atof"
 msgstr ""
 
@@ -2197,7 +2204,7 @@
 msgstr ""
 
 #: config/tc-avr.c:1060 config/tc-d10v.c:1495 config/tc-d30v.c:1807
-#: config/tc-mn10200.c:1254 config/tc-mn10300.c:1810 config/tc-ppc.c:5161
+#: config/tc-mn10200.c:1254 config/tc-mn10300.c:1810 config/tc-ppc.c:5160
 #: config/tc-v850.c:2301
 #, c-format
 msgid "reloc %d not supported by object file format"
@@ -2205,7 +2212,7 @@
 
 #: config/tc-avr.c:1084 config/tc-d10v.c:1102 config/tc-d10v.c:1116
 #: config/tc-h8300.c:1239 config/tc-h8500.c:1098 config/tc-mcore.c:988
-#: config/tc-pj.c:265 config/tc-sh.c:1640 config/tc-z8k.c:1195
+#: config/tc-pj.c:265 config/tc-sh.c:1645 config/tc-z8k.c:1195
 msgid "can't find opcode "
 msgstr ""
 
@@ -2415,8 +2422,8 @@
 msgstr ""
 
 #: config/tc-d10v.c:530 config/tc-d30v.c:550 config/tc-mn10200.c:951
-#: config/tc-mn10300.c:1332 config/tc-ppc.c:1972 config/tc-tic80.c:278
-#: config/tc-v850.c:2073
+#: config/tc-mn10300.c:1332 config/tc-ppc.c:1972 config/tc-s390.c:962
+#: config/tc-tic80.c:278 config/tc-v850.c:2073
 msgid "illegal operand"
 msgstr ""
 
@@ -2485,7 +2492,7 @@
 msgid "bad opcode or operands"
 msgstr ""
 
-#: config/tc-d10v.c:1353 config/tc-m68k.c:4286
+#: config/tc-d10v.c:1353 config/tc-m68k.c:4296
 msgid "value out of range"
 msgstr ""
 
@@ -2653,11 +2660,11 @@
 msgid "Instruction %s not allowed in a delay slot."
 msgstr ""
 
-#: config/tc-fr30.c:380 config/tc-m32r.c:1555
+#: config/tc-fr30.c:381 config/tc-m32r.c:1557
 msgid "Addend to unresolved symbol not on word boundary."
 msgstr ""
 
-#: config/tc-fr30.c:538 config/tc-i960.c:772 config/tc-m32r.c:1864
+#: config/tc-fr30.c:539 config/tc-i960.c:772 config/tc-m32r.c:1866
 msgid "Bad call to md_atof()"
 msgstr ""
 
@@ -2733,8 +2740,8 @@
 msgid "invalid operands"
 msgstr ""
 
-#: config/tc-h8300.c:1250 config/tc-h8500.c:1104 config/tc-mips.c:7984
-#: config/tc-sh.c:1877 config/tc-w65.c:740 config/tc-z8k.c:1205
+#: config/tc-h8300.c:1250 config/tc-h8500.c:1104 config/tc-mips.c:8000
+#: config/tc-sh.c:1882 config/tc-w65.c:740 config/tc-z8k.c:1205
 msgid "unknown opcode"
 msgstr ""
 
@@ -2742,12 +2749,12 @@
 msgid "mismatch between opcode size and operand size"
 msgstr ""
 
-#: config/tc-h8300.c:1307 config/tc-h8500.c:1131 config/tc-sh.c:2013
+#: config/tc-h8300.c:1307 config/tc-h8500.c:1131 config/tc-sh.c:2018
 #: config/tc-w65.c:770 config/tc-z8k.c:1258
 msgid "call to tc_crawl_symbol_chain \n"
 msgstr ""
 
-#: config/tc-h8300.c:1321 config/tc-h8500.c:1145 config/tc-sh.c:2020
+#: config/tc-h8300.c:1321 config/tc-h8500.c:1145 config/tc-sh.c:2025
 #: config/tc-w65.c:784 config/tc-z8k.c:1272
 msgid "call to tc_headers_hook \n"
 msgstr ""
@@ -2792,789 +2799,801 @@
 msgid "@Rn needs word register"
 msgstr ""
 
-#: config/tc-h8500.c:838 config/tc-sh.c:1357
+#: config/tc-h8500.c:838 config/tc-sh.c:1362
 #, c-format
 msgid "unhandled %d\n"
 msgstr ""
 
-#: config/tc-h8500.c:866 config/tc-sh.c:1382
+#: config/tc-h8500.c:866 config/tc-sh.c:1387
 #, c-format
 msgid "operand must be absolute in range %d..%d"
 msgstr ""
 
-#: config/tc-h8500.c:955 config/tc-sh.c:1580
+#: config/tc-h8500.c:955 config/tc-sh.c:1585
 #, c-format
 msgid "failed for %d\n"
 msgstr ""
 
-#: config/tc-h8500.c:1120 config/tc-sh.c:1681 config/tc-sh.c:1926
+#: config/tc-h8500.c:1120 config/tc-sh.c:1686 config/tc-sh.c:1931
 #: config/tc-w65.c:759
 msgid "invalid operands for opcode"
 msgstr ""
 
 #. Simple range checking for FIELD againt HIGH and LOW bounds.
 #. IGNORE is used to suppress the error message.
-#: config/tc-hppa.c:1119
+#: config/tc-hppa.c:1144
 #, c-format
 msgid "Field out of range [%d..%d] (%d)."
 msgstr ""
 
 #. Simple alignment checking for FIELD againt ALIGN (a power of two).
 #. IGNORE is used to suppress the error message.
-#: config/tc-hppa.c:1133
+#: config/tc-hppa.c:1158
 #, c-format
 msgid "Field not properly aligned [%d] (%d)."
 msgstr ""
 
-#: config/tc-hppa.c:1162
+#: config/tc-hppa.c:1187
 msgid "Missing .exit\n"
 msgstr ""
 
-#: config/tc-hppa.c:1165
+#: config/tc-hppa.c:1190
 msgid "Missing .procend\n"
 msgstr ""
 
-#: config/tc-hppa.c:1345
+#: config/tc-hppa.c:1370
 msgid "Invalid field selector.  Assuming F%%."
 msgstr ""
 
-#: config/tc-hppa.c:1372 config/tc-hppa.c:6839 config/tc-hppa.c:6845
-#: config/tc-hppa.c:6851 config/tc-hppa.c:6857 config/tc-mn10300.c:924
+#: config/tc-hppa.c:1397 config/tc-hppa.c:6889 config/tc-hppa.c:6895
+#: config/tc-hppa.c:6901 config/tc-hppa.c:6907 config/tc-mn10300.c:924
 #: config/tc-mn10300.c:2133
 msgid "could not set architecture and machine"
 msgstr ""
 
-#: config/tc-hppa.c:1378
+#: config/tc-hppa.c:1403
 msgid "-R option not supported on this target."
 msgstr ""
 
-#: config/tc-hppa.c:1394 config/tc-sparc.c:802 config/tc-sparc.c:838
+#: config/tc-hppa.c:1419 config/tc-sparc.c:802 config/tc-sparc.c:838
 #, c-format
 msgid "Internal error: can't hash `%s': %s\n"
 msgstr ""
 
-#: config/tc-hppa.c:1402 config/tc-i860.c:190
+#: config/tc-hppa.c:1427 config/tc-i860.c:190
 #, c-format
 msgid "internal error: losing opcode: `%s' \"%s\"\n"
 msgstr ""
 
-#: config/tc-hppa.c:1471 config/tc-hppa.c:6978 config/tc-hppa.c:7033
+#: config/tc-hppa.c:1498 config/tc-hppa.c:7028 config/tc-hppa.c:7085
 msgid "Missing function name for .PROC (corrupted label chain)"
 msgstr ""
 
-#: config/tc-hppa.c:1474 config/tc-hppa.c:7036
+#: config/tc-hppa.c:1501 config/tc-hppa.c:7088
 msgid "Missing function name for .PROC"
 msgstr ""
 
-#: config/tc-hppa.c:1582 config/tc-hppa.c:4812
+#: config/tc-hppa.c:1609 config/tc-hppa.c:4869
 msgid "could not update architecture and machine"
 msgstr ""
 
-#: config/tc-hppa.c:1789
+#: config/tc-hppa.c:1816
 msgid "Invalid Indexed Load Completer."
 msgstr ""
 
-#: config/tc-hppa.c:1794
+#: config/tc-hppa.c:1821
 msgid "Invalid Indexed Load Completer Syntax."
 msgstr ""
 
-#: config/tc-hppa.c:1830
+#: config/tc-hppa.c:1857
 msgid "Invalid Short Load/Store Completer."
 msgstr ""
 
-#: config/tc-hppa.c:1889 config/tc-hppa.c:1894
+#: config/tc-hppa.c:1916 config/tc-hppa.c:1921
 msgid "Invalid Store Bytes Short Completer"
 msgstr ""
 
-#: config/tc-hppa.c:2205 config/tc-hppa.c:2211
+#: config/tc-hppa.c:2232 config/tc-hppa.c:2238
 msgid "Invalid left/right combination completer"
 msgstr ""
 
-#: config/tc-hppa.c:2260 config/tc-hppa.c:2267
+#: config/tc-hppa.c:2287 config/tc-hppa.c:2294
 msgid "Invalid permutation completer"
 msgstr ""
 
-#: config/tc-hppa.c:2368
+#: config/tc-hppa.c:2395
 #, c-format
 msgid "Invalid Add Condition: %s"
 msgstr ""
 
-#: config/tc-hppa.c:2379 config/tc-hppa.c:2389
+#: config/tc-hppa.c:2406 config/tc-hppa.c:2416
 #, c-format
 msgid "Invalid Add and Branch Condition: %c"
 msgstr ""
 
-#: config/tc-hppa.c:2410
+#: config/tc-hppa.c:2437
 msgid "Invalid Compare/Subtract Condition"
 msgstr ""
 
-#: config/tc-hppa.c:2450
+#: config/tc-hppa.c:2477
 #, c-format
 msgid "Invalid Bit Branch Condition: %c"
 msgstr ""
 
-#: config/tc-hppa.c:2536
+#: config/tc-hppa.c:2563
 #, c-format
 msgid "Invalid Compare/Subtract Condition: %s"
 msgstr ""
 
-#: config/tc-hppa.c:2548
+#: config/tc-hppa.c:2575
 #, c-format
 msgid "Invalid Compare/Subtract Condition: %c"
 msgstr ""
 
-#: config/tc-hppa.c:2563
+#: config/tc-hppa.c:2590
 msgid "Invalid Compare and Branch Condition."
 msgstr ""
 
-#: config/tc-hppa.c:2659
+#: config/tc-hppa.c:2686
 msgid "Invalid Logical Instruction Condition."
 msgstr ""
 
-#: config/tc-hppa.c:2714
+#: config/tc-hppa.c:2741
 msgid "Invalid Shift/Extract/Deposit Condition."
 msgstr ""
 
-#: config/tc-hppa.c:2826
+#: config/tc-hppa.c:2853
 msgid "Invalid Unit Instruction Condition."
 msgstr ""
 
-#: config/tc-hppa.c:3174 config/tc-hppa.c:3205 config/tc-hppa.c:3238
-#: config/tc-hppa.c:3270
+#: config/tc-hppa.c:3230 config/tc-hppa.c:3262 config/tc-hppa.c:3293
+#: config/tc-hppa.c:3323
 msgid "Branch to unaligned address"
 msgstr ""
 
-#: config/tc-hppa.c:3450
+#: config/tc-hppa.c:3501
 msgid "Invalid SFU identifier"
 msgstr ""
 
-#: config/tc-hppa.c:3500
+#: config/tc-hppa.c:3551
 msgid "Invalid COPR identifier"
 msgstr ""
 
-#: config/tc-hppa.c:3629
+#: config/tc-hppa.c:3680
 msgid "Invalid Floating Point Operand Format."
 msgstr ""
 
-#: config/tc-hppa.c:3746 config/tc-hppa.c:3766 config/tc-hppa.c:3786
-#: config/tc-hppa.c:3806 config/tc-hppa.c:3826
+#: config/tc-hppa.c:3797 config/tc-hppa.c:3817 config/tc-hppa.c:3837
+#: config/tc-hppa.c:3857 config/tc-hppa.c:3877
 msgid "Invalid register for single precision fmpyadd or fmpysub"
 msgstr ""
 
-#: config/tc-hppa.c:3883
+#: config/tc-hppa.c:3934
 #, c-format
 msgid "Invalid operands %s"
 msgstr ""
 
-#: config/tc-hppa.c:4001
+#: config/tc-hppa.c:4052
 #, c-format
 msgid "Cannot handle fixup at %s:%d"
 msgstr ""
 
-#: config/tc-hppa.c:4296
+#: config/tc-hppa.c:4353
 msgid "  -Q                      ignored\n"
 msgstr ""
 
-#: config/tc-hppa.c:4300
+#: config/tc-hppa.c:4357
 msgid "  -c                      print a warning if a comment is found\n"
 msgstr ""
 
-#: config/tc-hppa.c:4366
+#: config/tc-hppa.c:4423
 #, c-format
 msgid "no hppa_fixup entry for fixup type 0x%x at %s:%d"
 msgstr ""
 
-#: config/tc-hppa.c:4533
+#: config/tc-hppa.c:4590
 msgid "Unknown relocation encountered in md_apply_fix."
 msgstr ""
 
-#: config/tc-hppa.c:4676 config/tc-hppa.c:4701
+#: config/tc-hppa.c:4733 config/tc-hppa.c:4758
 #, c-format
 msgid "Undefined register: '%s'."
 msgstr ""
 
-#: config/tc-hppa.c:4735
+#: config/tc-hppa.c:4792
 #, c-format
 msgid "Non-absolute symbol: '%s'."
 msgstr ""
 
-#: config/tc-hppa.c:4750
+#: config/tc-hppa.c:4807
 #, c-format
 msgid "Undefined absolute constant: '%s'."
 msgstr ""
 
-#: config/tc-hppa.c:4851
+#: config/tc-hppa.c:4908
 #, c-format
 msgid "Invalid FP Compare Condition: %s"
 msgstr ""
 
-#: config/tc-hppa.c:4907
+#: config/tc-hppa.c:4964
 #, c-format
 msgid "Invalid FTEST completer: %s"
 msgstr ""
 
-#: config/tc-hppa.c:4974 config/tc-hppa.c:5012
+#: config/tc-hppa.c:5031 config/tc-hppa.c:5069
 #, c-format
 msgid "Invalid FP Operand Format: %3s"
 msgstr ""
 
-#: config/tc-hppa.c:5091
+#: config/tc-hppa.c:5148
 msgid "Bad segment in expression."
 msgstr ""
 
-#: config/tc-hppa.c:5150
+#: config/tc-hppa.c:5207
 msgid "Bad segment (should be absolute)."
 msgstr ""
 
-#: config/tc-hppa.c:5193
+#: config/tc-hppa.c:5250
 #, c-format
 msgid "Invalid argument location: %s\n"
 msgstr ""
 
-#: config/tc-hppa.c:5224
+#: config/tc-hppa.c:5281
 #, c-format
 msgid "Invalid argument description: %d"
 msgstr ""
 
-#: config/tc-hppa.c:5247
+#: config/tc-hppa.c:5304
 #, c-format
 msgid "Invalid Nullification: (%c)"
 msgstr ""
 
-#: config/tc-hppa.c:5983
+#: config/tc-hppa.c:6040
 #, c-format
 msgid "Invalid .CALL argument: %s"
 msgstr ""
 
-#: config/tc-hppa.c:6114
+#: config/tc-hppa.c:6162
 msgid ".callinfo is not within a procedure definition"
 msgstr ""
 
-#: config/tc-hppa.c:6134
+#: config/tc-hppa.c:6182
 #, c-format
 msgid "FRAME parameter must be a multiple of 8: %d\n"
 msgstr ""
 
-#: config/tc-hppa.c:6153
+#: config/tc-hppa.c:6201
 msgid "Value for ENTRY_GR must be in the range 3..18\n"
 msgstr ""
 
-#: config/tc-hppa.c:6165
+#: config/tc-hppa.c:6213
 msgid "Value for ENTRY_FR must be in the range 12..21\n"
 msgstr ""
 
-#: config/tc-hppa.c:6175
+#: config/tc-hppa.c:6223
 msgid "Value for ENTRY_SR must be 3\n"
 msgstr ""
 
-#: config/tc-hppa.c:6231
+#: config/tc-hppa.c:6279
 #, c-format
 msgid "Invalid .CALLINFO argument: %s"
 msgstr ""
 
-#: config/tc-hppa.c:6342
+#: config/tc-hppa.c:6390
 msgid "The .ENTER pseudo-op is not supported"
 msgstr ""
 
-#: config/tc-hppa.c:6358
+#: config/tc-hppa.c:6406
 msgid "Misplaced .entry. Ignored."
 msgstr ""
 
-#: config/tc-hppa.c:6362
+#: config/tc-hppa.c:6410
 msgid "Missing .callinfo."
 msgstr ""
 
-#: config/tc-hppa.c:6426
+#: config/tc-hppa.c:6476
 msgid ".REG expression must be a register"
 msgstr ""
 
-#: config/tc-hppa.c:6442 read.c:4728
+#: config/tc-hppa.c:6492 read.c:4728
 msgid "bad or irreducible absolute expression; zero assumed"
 msgstr ""
 
-#: config/tc-hppa.c:6453
+#: config/tc-hppa.c:6503
 msgid ".REG must use a label"
 msgstr ""
 
-#: config/tc-hppa.c:6455
+#: config/tc-hppa.c:6505
 msgid ".EQU must use a label"
 msgstr ""
 
-#: config/tc-hppa.c:6508
+#: config/tc-hppa.c:6558
 msgid ".EXIT must appear within a procedure"
 msgstr ""
 
-#: config/tc-hppa.c:6512
+#: config/tc-hppa.c:6562
 msgid "Missing .callinfo"
 msgstr ""
 
-#: config/tc-hppa.c:6516
+#: config/tc-hppa.c:6566
 msgid "No .ENTRY for this .EXIT"
 msgstr ""
 
-#: config/tc-hppa.c:6543
+#: config/tc-hppa.c:6593
 #, c-format
 msgid "Cannot define export symbol: %s\n"
 msgstr ""
 
-#: config/tc-hppa.c:6601
+#: config/tc-hppa.c:6651
 #, c-format
 msgid "Using ENTRY rather than CODE in export directive for %s"
 msgstr ""
 
-#: config/tc-hppa.c:6718
+#: config/tc-hppa.c:6768
 #, c-format
 msgid "Undefined .EXPORT/.IMPORT argument (ignored): %s"
 msgstr ""
 
-#: config/tc-hppa.c:6800
+#: config/tc-hppa.c:6850
 msgid "Missing label name on .LABEL"
 msgstr ""
 
-#: config/tc-hppa.c:6805
+#: config/tc-hppa.c:6855
 msgid "extra .LABEL arguments ignored."
 msgstr ""
 
-#: config/tc-hppa.c:6822
+#: config/tc-hppa.c:6872
 msgid "The .LEAVE pseudo-op is not supported"
 msgstr ""
 
-#: config/tc-hppa.c:6861
+#: config/tc-hppa.c:6911
 msgid "Unrecognized .LEVEL argument\n"
 msgstr ""
 
-#: config/tc-hppa.c:6897
+#: config/tc-hppa.c:6947
 #, c-format
 msgid "Cannot define static symbol: %s\n"
 msgstr ""
 
-#: config/tc-hppa.c:6932
+#: config/tc-hppa.c:6982
 msgid "Nested procedures"
 msgstr ""
 
-#: config/tc-hppa.c:6942
+#: config/tc-hppa.c:6992
 msgid "Cannot allocate unwind descriptor\n"
 msgstr ""
 
-#: config/tc-hppa.c:7040
+#: config/tc-hppa.c:7092
 msgid "misplaced .procend"
 msgstr ""
 
-#: config/tc-hppa.c:7043
+#: config/tc-hppa.c:7095
 msgid "Missing .callinfo for this procedure"
 msgstr ""
 
-#: config/tc-hppa.c:7046
+#: config/tc-hppa.c:7098
 msgid "Missing .EXIT for a .ENTRY"
 msgstr ""
 
-#: config/tc-hppa.c:7084
+#: config/tc-hppa.c:7136
 msgid "Not in a space.\n"
 msgstr ""
 
-#: config/tc-hppa.c:7087
+#: config/tc-hppa.c:7139
 msgid "Not in a subspace.\n"
 msgstr ""
 
-#: config/tc-hppa.c:7178
+#: config/tc-hppa.c:7230
 msgid "Invalid .SPACE argument"
 msgstr ""
 
-#: config/tc-hppa.c:7225
+#: config/tc-hppa.c:7277
 msgid "Can't change spaces within a procedure definition. Ignored"
 msgstr ""
 
-#: config/tc-hppa.c:7354
+#: config/tc-hppa.c:7406
 #, c-format
 msgid "Undefined space: '%s' Assuming space number = 0."
 msgstr ""
 
-#: config/tc-hppa.c:7378
+#: config/tc-hppa.c:7430
 msgid "Must be in a space before changing or declaring subspaces.\n"
 msgstr ""
 
-#: config/tc-hppa.c:7382
+#: config/tc-hppa.c:7434
 msgid "Can't change subspaces within a procedure definition. Ignored"
 msgstr ""
 
-#: config/tc-hppa.c:7417
+#: config/tc-hppa.c:7469
 msgid "Parameters of an existing subspace can't be modified"
 msgstr ""
 
-#: config/tc-hppa.c:7468
+#: config/tc-hppa.c:7520
 msgid "Alignment must be a power of 2"
 msgstr ""
 
-#: config/tc-hppa.c:7510
+#: config/tc-hppa.c:7562
 msgid "FIRST not supported as a .SUBSPACE argument"
 msgstr ""
 
-#: config/tc-hppa.c:7512
+#: config/tc-hppa.c:7564
 msgid "Invalid .SUBSPACE argument"
 msgstr ""
 
-#: config/tc-hppa.c:7692
+#: config/tc-hppa.c:7744
 #, c-format
 msgid "Internal error: Unable to find containing space for %s."
 msgstr ""
 
-#: config/tc-hppa.c:7731
+#: config/tc-hppa.c:7783
 #, c-format
 msgid "Out of memory: could not allocate new space chain entry: %s\n"
 msgstr ""
 
-#: config/tc-hppa.c:7817
+#: config/tc-hppa.c:7869
 #, c-format
 msgid "Out of memory: could not allocate new subspace chain entry: %s\n"
 msgstr ""
 
-#: config/tc-hppa.c:8511
+#: config/tc-hppa.c:8563
 #, c-format
 msgid "Symbol '%s' could not be created."
 msgstr ""
 
-#: config/tc-hppa.c:8515
+#: config/tc-hppa.c:8567
 msgid "No memory for symbol name."
 msgstr ""
 
-#: config/tc-i386.c:581
+#: config/tc-i386.c:599
 #, c-format
 msgid "%s shortened to %s"
 msgstr ""
 
-#: config/tc-i386.c:636
+#: config/tc-i386.c:654
 msgid "same type of prefix used twice"
 msgstr ""
 
-#: config/tc-i386.c:654
+#: config/tc-i386.c:672
 msgid "64bit mode not supported on this CPU."
 msgstr ""
 
-#: config/tc-i386.c:658
+#: config/tc-i386.c:676
 msgid "32bit mode not supported on this CPU."
 msgstr ""
 
-#: config/tc-i386.c:691
+#: config/tc-i386.c:709
 msgid "bad argument to syntax directive."
 msgstr ""
 
-#: config/tc-i386.c:734
+#: config/tc-i386.c:753
 #, c-format
 msgid "no such architecture: `%s'"
 msgstr ""
 
-#: config/tc-i386.c:739
+#: config/tc-i386.c:758
 msgid "missing cpu architecture"
 msgstr ""
 
-#: config/tc-i386.c:812 config/tc-i386.c:835 config/tc-m68k.c:3802
+#: config/tc-i386.c:772
+#, c-format
+msgid "no such architecture modifier: `%s'"
+msgstr ""
+
+#: config/tc-i386.c:826 config/tc-i386.c:4571
+msgid "Unknown architecture"
+msgstr ""
+
+#: config/tc-i386.c:861 config/tc-i386.c:884 config/tc-m68k.c:3812
 #, c-format
 msgid "Internal Error:  Can't hash %s: %s"
 msgstr ""
 
-#: config/tc-i386.c:1088
+#: config/tc-i386.c:1137
 msgid "There are no unsigned pc-relative relocations"
 msgstr ""
 
-#: config/tc-i386.c:1095 config/tc-i386.c:4622
+#: config/tc-i386.c:1144 config/tc-i386.c:4727
 #, c-format
 msgid "can not do %d byte pc-relative relocation"
 msgstr ""
 
-#: config/tc-i386.c:1112
+#: config/tc-i386.c:1161
 #, c-format
 msgid "can not do %s %d byte relocation"
 msgstr ""
 
-#: config/tc-i386.c:1221 config/tc-i386.c:1314
+#: config/tc-i386.c:1271 config/tc-i386.c:1364
 #, c-format
 msgid "no such instruction: `%s'"
 msgstr ""
 
-#: config/tc-i386.c:1230
+#: config/tc-i386.c:1280
 #, c-format
 msgid "invalid character %s in mnemonic"
 msgstr ""
 
-#: config/tc-i386.c:1237
+#: config/tc-i386.c:1287
 msgid "expecting prefix; got nothing"
 msgstr ""
 
-#: config/tc-i386.c:1239
+#: config/tc-i386.c:1289
 msgid "expecting mnemonic; got nothing"
 msgstr ""
 
-#: config/tc-i386.c:1257
+#: config/tc-i386.c:1307
 #, c-format
 msgid "redundant %s prefix"
 msgstr ""
 
-#: config/tc-i386.c:1325
+#: config/tc-i386.c:1375
 #, c-format
 msgid "`%s' is not supported on `%s'"
 msgstr ""
 
-#: config/tc-i386.c:1330
+#: config/tc-i386.c:1380
 msgid "use .code16 to ensure correct addressing mode"
 msgstr ""
 
-#: config/tc-i386.c:1338
+#: config/tc-i386.c:1388
 #, c-format
 msgid "expecting string instruction after `%s'"
 msgstr ""
 
-#: config/tc-i386.c:1359
+#: config/tc-i386.c:1409
 #, c-format
 msgid "invalid character %s before operand %d"
 msgstr ""
 
-#: config/tc-i386.c:1373
+#: config/tc-i386.c:1423
 #, c-format
 msgid "unbalanced parenthesis in operand %d."
 msgstr ""
 
-#: config/tc-i386.c:1376
+#: config/tc-i386.c:1426
 #, c-format
 msgid "unbalanced brackets in operand %d."
 msgstr ""
 
-#: config/tc-i386.c:1385
+#: config/tc-i386.c:1435
 #, c-format
 msgid "invalid character %s in operand %d"
 msgstr ""
 
-#: config/tc-i386.c:1412
+#: config/tc-i386.c:1462
 #, c-format
 msgid "spurious operands; (%d operands/instruction max)"
 msgstr ""
 
-#: config/tc-i386.c:1435
+#: config/tc-i386.c:1485
 msgid "expecting operand after ','; got nothing"
 msgstr ""
 
-#: config/tc-i386.c:1440
+#: config/tc-i386.c:1490
 msgid "expecting operand before ','; got nothing"
 msgstr ""
 
 #. We found no match.
-#: config/tc-i386.c:1782
+#: config/tc-i386.c:1838
 #, c-format
 msgid "suffix or operands invalid for `%s'"
 msgstr ""
 
-#: config/tc-i386.c:1793
+#: config/tc-i386.c:1849
 #, c-format
 msgid "indirect %s without `*'"
 msgstr ""
 
 #. Warn them that a data or address size prefix doesn't
 #. affect assembly of the next line of code.
-#: config/tc-i386.c:1801
+#: config/tc-i386.c:1857
 #, c-format
 msgid "stand-alone `%s' prefix"
 msgstr ""
 
-#: config/tc-i386.c:1837 config/tc-i386.c:1852
+#: config/tc-i386.c:1893 config/tc-i386.c:1908
 msgid "`%s' operand %d must use `%%es' segment"
 msgstr ""
 
-#: config/tc-i386.c:1867
+#: config/tc-i386.c:1923
 msgid "Extended register `%%%s' available only in 64bit mode."
 msgstr ""
 
 #. Prohibit these changes in the 64bit mode, since
 #. the lowering is more complicated.
-#: config/tc-i386.c:1938 config/tc-i386.c:1989 config/tc-i386.c:2004
-#: config/tc-i386.c:2032 config/tc-i386.c:2060
+#: config/tc-i386.c:1994 config/tc-i386.c:2045 config/tc-i386.c:2060
+#: config/tc-i386.c:2088 config/tc-i386.c:2116
 msgid "Incorrect register `%%%s' used with`%c' suffix"
 msgstr ""
 
-#: config/tc-i386.c:1944 config/tc-i386.c:1994 config/tc-i386.c:2065
+#: config/tc-i386.c:2000 config/tc-i386.c:2050 config/tc-i386.c:2121
 msgid "using `%%%s' instead of `%%%s' due to `%c' suffix"
 msgstr ""
 
-#: config/tc-i386.c:1957 config/tc-i386.c:1975 config/tc-i386.c:2019
-#: config/tc-i386.c:2046
+#: config/tc-i386.c:2013 config/tc-i386.c:2031 config/tc-i386.c:2075
+#: config/tc-i386.c:2102
 msgid "`%%%s' not allowed with `%s%c'"
 msgstr ""
 
-#: config/tc-i386.c:2106
+#: config/tc-i386.c:2162
 msgid "no instruction mnemonic suffix given; can't determine immediate size"
 msgstr ""
 
-#: config/tc-i386.c:2132
+#: config/tc-i386.c:2188
 #, c-format
 msgid ""
 "no instruction mnemonic suffix given; can't determine immediate size %x %c"
 msgstr ""
 
-#: config/tc-i386.c:2157
+#: config/tc-i386.c:2213
 msgid ""
 "no instruction mnemonic suffix given and no register operands; can't size "
 "instruction"
 msgstr ""
 
-#: config/tc-i386.c:2205
+#: config/tc-i386.c:2261
 msgid "64bit operations available only in 64bit modes."
 msgstr ""
 
 #. Reversed arguments on faddp, fsubp, etc.
-#: config/tc-i386.c:2273
+#: config/tc-i386.c:2329
 msgid "translating to `%s %%%s,%%%s'"
 msgstr ""
 
 #. Extraneous `l' suffix on fp insn.
-#: config/tc-i386.c:2280
+#: config/tc-i386.c:2336
 msgid "translating to `%s %%%s'"
 msgstr ""
 
-#: config/tc-i386.c:2551
+#: config/tc-i386.c:2609
 msgid "you can't `pop %%cs'"
 msgstr ""
 
 #. UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc.
-#: config/tc-i386.c:2584
+#: config/tc-i386.c:2642
 #, c-format
 msgid "translating to `%sp'"
 msgstr ""
 
-#: config/tc-i386.c:2627
+#: config/tc-i386.c:2685
 msgid ""
 "Can't encode registers '%%%s' in the instruction requiring REX prefix.\n"
 msgstr ""
 
-#: config/tc-i386.c:2679 config/tc-i386.c:2751 config/tc-i386.c:2798
+#: config/tc-i386.c:2732 config/tc-i386.c:2806 config/tc-i386.c:2853
 msgid "skipping prefixes on this instruction"
 msgstr ""
 
-#: config/tc-i386.c:2819
+#: config/tc-i386.c:2874
 msgid "16-bit jump out of range"
 msgstr ""
 
-#: config/tc-i386.c:2828
+#: config/tc-i386.c:2883
 #, c-format
 msgid "can't handle non absolute segment in `%s'"
 msgstr ""
 
-#: config/tc-i386.c:3085
+#: config/tc-i386.c:3140
 msgid "only 1 or 2 immediate operands are allowed"
 msgstr ""
 
-#: config/tc-i386.c:3115 config/tc-i386.c:3353
+#: config/tc-i386.c:3170 config/tc-i386.c:3408
 msgid "GOT relocations not supported in 16 bit mode"
 msgstr ""
 
-#: config/tc-i386.c:3152 config/tc-i386.c:3389
+#: config/tc-i386.c:3207 config/tc-i386.c:3444
 msgid "bad reloc specifier in expression"
 msgstr ""
 
-#: config/tc-i386.c:3170 config/tc-i386.c:3424
+#: config/tc-i386.c:3225 config/tc-i386.c:3482
 #, c-format
 msgid "ignoring junk `%s' after expression"
 msgstr ""
 
 #. Missing or bad expr becomes absolute 0.
-#: config/tc-i386.c:3177
+#: config/tc-i386.c:3232
 #, c-format
 msgid "missing or invalid immediate expression `%s' taken as 0"
 msgstr ""
 
-#: config/tc-i386.c:3208 config/tc-i386.c:3454
+#: config/tc-i386.c:3263 config/tc-i386.c:3512
 #, c-format
 msgid "unimplemented segment %s in operand"
 msgstr ""
 
-#: config/tc-i386.c:3210 config/tc-i386.c:3456
+#: config/tc-i386.c:3265 config/tc-i386.c:3514
 #, c-format
 msgid "unimplemented segment type %d in operand"
 msgstr ""
 
-#: config/tc-i386.c:3252 config/tc-i386.c:5392
+#: config/tc-i386.c:3307 config/tc-i386.c:5495
 #, c-format
 msgid "expecting scale factor of 1, 2, 4, or 8: got `%s'"
 msgstr ""
 
-#: config/tc-i386.c:3258
+#: config/tc-i386.c:3313
 #, c-format
 msgid "scale factor of %d without an index register"
 msgstr ""
 
 #. Missing or bad expr becomes absolute 0.
-#: config/tc-i386.c:3435
+#: config/tc-i386.c:3493
 #, c-format
 msgid "missing or invalid displacement expression `%s' taken as 0"
 msgstr ""
 
-#: config/tc-i386.c:3541
+#: config/tc-i386.c:3599
 #, c-format
 msgid "`%s' is not a valid base/index expression"
 msgstr ""
 
-#: config/tc-i386.c:3545
+#: config/tc-i386.c:3603
 #, c-format
 msgid "`%s' is not a valid %s bit base/index expression"
 msgstr ""
 
-#: config/tc-i386.c:3620
+#: config/tc-i386.c:3678
 #, c-format
 msgid "bad memory operand `%s'"
 msgstr ""
 
-#: config/tc-i386.c:3635
+#: config/tc-i386.c:3693
 #, c-format
 msgid "junk `%s' after register"
 msgstr ""
 
-#: config/tc-i386.c:3644 config/tc-i386.c:3759 config/tc-i386.c:3795
+#: config/tc-i386.c:3702 config/tc-i386.c:3817 config/tc-i386.c:3853
 #, c-format
 msgid "bad register name `%s'"
 msgstr ""
 
-#: config/tc-i386.c:3652
+#: config/tc-i386.c:3710
 msgid "immediate operand illegal with absolute jump"
 msgstr ""
 
-#: config/tc-i386.c:3674
+#: config/tc-i386.c:3732
 #, c-format
 msgid "too many memory references for `%s'"
 msgstr ""
 
-#: config/tc-i386.c:3752
+#: config/tc-i386.c:3810
 #, c-format
 msgid "expecting `,' or `)' after index register in `%s'"
 msgstr ""
 
-#: config/tc-i386.c:3774
+#: config/tc-i386.c:3832
 #, c-format
 msgid "expecting `)' after scale factor in `%s'"
 msgstr ""
 
-#: config/tc-i386.c:3781
+#: config/tc-i386.c:3839
 #, c-format
 msgid "expecting index register or scale factor after `,'; got '%c'"
 msgstr ""
 
-#: config/tc-i386.c:3788
+#: config/tc-i386.c:3846
 #, c-format
 msgid "expecting `,' or `)' after base register in `%s'"
 msgstr ""
 
 #. It's not a memory operand; argh!
-#: config/tc-i386.c:3829
+#: config/tc-i386.c:3887
 #, c-format
 msgid "invalid char %s beginning operand %d `%s'"
 msgstr ""
 
-#: config/tc-i386.c:4267
+#: config/tc-i386.c:4061
+msgid "long jump required"
+msgstr ""
+
+#: config/tc-i386.c:4367
 msgid "Bad call to md_atof ()"
 msgstr ""
 
-#: config/tc-i386.c:4431 config/tc-sparc.c:548
-#, c-format
-msgid "No compiled in support for %d bit object file format"
+#: config/tc-i386.c:4524
+msgid "No compiled in support for x86_64"
 msgstr ""
 
-#: config/tc-i386.c:4449
+#: config/tc-i386.c:4545
 msgid ""
 "  -Q                      ignored\n"
 "  -V                      print assembler version number\n"
@@ -3583,67 +3602,63 @@
 "  -s                      ignored\n"
 msgstr ""
 
-#: config/tc-i386.c:4456
+#: config/tc-i386.c:4552
 msgid "  -q                      quieten some warnings\n"
 msgstr ""
 
-#: config/tc-i386.c:4475
-msgid "Unknown architecture"
-msgstr ""
-
-#: config/tc-i386.c:4515
+#: config/tc-i386.c:4611 config/tc-s390.c:1446
 msgid "GOT already in symbol table"
 msgstr ""
 
-#: config/tc-i386.c:4636
+#: config/tc-i386.c:4741
 #, c-format
 msgid "can not do %d byte relocation"
 msgstr ""
 
-#: config/tc-i386.c:4697
+#: config/tc-i386.c:4801 config/tc-s390.c:1746
 #, c-format
 msgid "cannot represent relocation type %s"
 msgstr ""
 
-#: config/tc-i386.c:4994
+#: config/tc-i386.c:5097
 #, c-format
 msgid "too many memory references for '%s'"
 msgstr ""
 
-#: config/tc-i386.c:5157
+#: config/tc-i386.c:5260
 #, c-format
 msgid "Unknown operand modifier `%s'\n"
 msgstr ""
 
-#: config/tc-i386.c:5364
+#: config/tc-i386.c:5467
 #, c-format
 msgid "`%s' is not a valid segment register"
 msgstr ""
 
-#: config/tc-i386.c:5374 config/tc-i386.c:5495
+#: config/tc-i386.c:5477 config/tc-i386.c:5598
 msgid "Register scaling only allowed in memory operands."
 msgstr ""
 
-#: config/tc-i386.c:5405
+#: config/tc-i386.c:5508
 msgid "Too many register references in memory operand.\n"
 msgstr ""
 
-#: config/tc-i386.c:5474
+#: config/tc-i386.c:5577
 #, c-format
 msgid "Syntax error. Expecting a constant. Got `%s'.\n"
 msgstr ""
 
-#: config/tc-i386.c:5544
+#: config/tc-i386.c:5647
 #, c-format
 msgid "Unrecognized token '%s'"
 msgstr ""
 
-#: config/tc-i386.c:5561
+#: config/tc-i386.c:5664
 #, c-format
 msgid "Unexpected token `%s'\n"
 msgstr ""
 
-#: config/tc-i386.c:5705
+#: config/tc-i386.c:5808
 #, c-format
 msgid "Unrecognized token `%s'\n"
 msgstr ""
@@ -3900,106 +3915,110 @@
 msgid "ignoring unrecognized .endian type `%s'"
 msgstr ""
 
-#: config/tc-i960.c:3064
+#: config/tc-i960.c:3063
 #, c-format
 msgid "leafproc symbol '%s' undefined"
 msgstr ""
 
-#: config/tc-i960.c:3074
+#: config/tc-i960.c:3073
 #, c-format
 msgid "Warning: making leafproc entries %s and %s both global\n"
 msgstr ""
 
-#: config/tc-i960.c:3183
+#: config/tc-i960.c:3182
 msgid "option --link-relax is only supported in b.out format"
 msgstr ""
 
-#: config/tc-i960.c:3226
+#: config/tc-i960.c:3225
 msgid "callj to difference of two symbols"
 msgstr ""
 
-#: config/tc-ia64.c:4077
+#: config/tc-ia64.c:988
+msgid "Unwind directive not followed by an instruction."
+msgstr ""
+
+#: config/tc-ia64.c:4243
 msgid "Register name expected"
 msgstr ""
 
-#: config/tc-ia64.c:4082 config/tc-ia64.c:4368
+#: config/tc-ia64.c:4248 config/tc-ia64.c:4534
 msgid "Comma expected"
 msgstr ""
 
-#: config/tc-ia64.c:4090
+#: config/tc-ia64.c:4256
 msgid "Register value annotation ignored"
 msgstr ""
 
-#: config/tc-ia64.c:4114
+#: config/tc-ia64.c:4280
 msgid "Directive invalid within a bundle"
 msgstr ""
 
-#: config/tc-ia64.c:4181
+#: config/tc-ia64.c:4347
 msgid "Missing predicate relation type"
 msgstr ""
 
-#: config/tc-ia64.c:4197
+#: config/tc-ia64.c:4363
 msgid "Unrecognized predicate relation type"
 msgstr ""
 
-#: config/tc-ia64.c:4217 config/tc-ia64.c:4242
+#: config/tc-ia64.c:4383 config/tc-ia64.c:4408
 msgid "Predicate register expected"
 msgstr ""
 
-#: config/tc-ia64.c:4229
+#: config/tc-ia64.c:4395
 msgid "Duplicate predicate register ignored"
 msgstr ""
 
-#: config/tc-ia64.c:4251
+#: config/tc-ia64.c:4417
 msgid "Bad register range"
 msgstr ""
 
-#: config/tc-ia64.c:4279
+#: config/tc-ia64.c:4445
 msgid "Predicate source and target required"
 msgstr ""
 
-#: config/tc-ia64.c:4281 config/tc-ia64.c:4293
+#: config/tc-ia64.c:4447 config/tc-ia64.c:4459
 msgid "Use of p0 is not valid in this context"
 msgstr ""
 
-#: config/tc-ia64.c:4288
+#: config/tc-ia64.c:4454
 msgid "At least two PR arguments expected"
 msgstr ""
 
-#: config/tc-ia64.c:4302
+#: config/tc-ia64.c:4468
 msgid "At least one PR argument expected"
 msgstr ""
 
-#: config/tc-ia64.c:4338
+#: config/tc-ia64.c:4504
 #, c-format
 msgid "Inserting \"%s\" into entry hint table failed: %s"
 msgstr ""
 
 #. FIXME -- need 62-bit relocation type
-#: config/tc-ia64.c:4758
+#: config/tc-ia64.c:4924
 msgid "62-bit relocation not yet implemented"
 msgstr ""
 
-#: config/tc-ia64.c:4820
+#: config/tc-ia64.c:4986
 msgid "lower 16 bits of mask ignored"
 msgstr ""
 
-#: config/tc-ia64.c:5317
+#: config/tc-ia64.c:5489
 msgid "Value truncated to 62 bits"
 msgstr ""
 
-#: config/tc-ia64.c:5668
+#: config/tc-ia64.c:5840
 msgid ""
 "Additional NOP may be necessary to workaround Itanium processor A/B step "
 "errata"
 msgstr ""
 
-#: config/tc-ia64.c:5849
+#: config/tc-ia64.c:6022
 #, c-format
 msgid "Unrecognized option '-x%s'"
 msgstr ""
 
-#: config/tc-ia64.c:5877
+#: config/tc-ia64.c:6050
 msgid ""
 "IA-64 options:\n"
 "  -milp32|-milp64|-mlp64|-mp64\tselect data model (default -mlp64)\n"
@@ -4009,33 +4028,33 @@
 "  -xdebug\t\t  debug dependency violation checker\n"
 msgstr ""
 
-#: config/tc-ia64.c:6147 config/tc-mips.c:1014
+#: config/tc-ia64.c:6320 config/tc-mips.c:1014
 msgid "Could not set architecture and machine"
 msgstr ""
 
-#: config/tc-ia64.c:6223
+#: config/tc-ia64.c:6396
 msgid "Explicit stops are ignored in auto mode"
 msgstr ""
 
-#: config/tc-ia64.c:6273
+#: config/tc-ia64.c:6446
 msgid "Found '{' after explicit switch to automatic mode"
 msgstr ""
 
-#: config/tc-ia64.c:6686
+#: config/tc-ia64.c:6859
 #, c-format
 msgid "Unhandled dependency %s for %s (%s), note %d"
 msgstr ""
 
-#: config/tc-ia64.c:7962
+#: config/tc-ia64.c:8135
 #, c-format
 msgid "Unrecognized dependency specifier %d\n"
 msgstr ""
 
-#: config/tc-ia64.c:8753
+#: config/tc-ia64.c:8926
 msgid "Only the first path encountering the conflict is reported"
 msgstr ""
 
-#: config/tc-ia64.c:8756
+#: config/tc-ia64.c:8929
 msgid "This is the location of the conflicting usage"
 msgstr ""
 
@@ -4115,91 +4134,91 @@
 msgid "  -cpu-desc              provide runtime cpu description file\n"
 msgstr ""
 
-#: config/tc-m32r.c:688
+#: config/tc-m32r.c:689
 msgid "Instructions write to the same destination register."
 msgstr ""
 
-#: config/tc-m32r.c:696
+#: config/tc-m32r.c:697
 msgid "Instructions do not use parallel execution pipelines."
 msgstr ""
 
-#: config/tc-m32r.c:703
+#: config/tc-m32r.c:704
 msgid "Instructions share the same execution pipeline"
 msgstr ""
 
-#: config/tc-m32r.c:773 config/tc-m32r.c:870
+#: config/tc-m32r.c:774 config/tc-m32r.c:871
 #, c-format
 msgid "not a 16 bit instruction '%s'"
 msgstr ""
 
-#: config/tc-m32r.c:780 config/tc-m32r.c:877 config/tc-m32r.c:1033
+#: config/tc-m32r.c:781 config/tc-m32r.c:878 config/tc-m32r.c:1034
 #, c-format
 msgid "unknown instruction '%s'"
 msgstr ""
 
-#: config/tc-m32r.c:789 config/tc-m32r.c:884 config/tc-m32r.c:1040
+#: config/tc-m32r.c:790 config/tc-m32r.c:885 config/tc-m32r.c:1041
 #, c-format
 msgid "instruction '%s' is for the M32RX only"
 msgstr ""
 
-#: config/tc-m32r.c:798 config/tc-m32r.c:893
+#: config/tc-m32r.c:799 config/tc-m32r.c:894
 #, c-format
 msgid "instruction '%s' cannot be executed in parallel."
 msgstr ""
 
-#: config/tc-m32r.c:854 config/tc-m32r.c:918 config/tc-m32r.c:1090
+#: config/tc-m32r.c:855 config/tc-m32r.c:919 config/tc-m32r.c:1091
 msgid "internal error: lookup/get operands failed"
 msgstr ""
 
-#: config/tc-m32r.c:903
+#: config/tc-m32r.c:904
 #, c-format
 msgid "'%s': only the NOP instruction can be issued in parallel on the m32r"
 msgstr ""
 
-#: config/tc-m32r.c:932
+#: config/tc-m32r.c:933
 #, c-format
 msgid ""
 "%s: output of 1st instruction is the same as an input to 2nd instruction - "
 "is this intentional ?"
 msgstr ""
 
-#: config/tc-m32r.c:936
+#: config/tc-m32r.c:937
 #, c-format
 msgid ""
 "%s: output of 2nd instruction is the same as an input to 1st instruction - "
 "is this intentional ?"
 msgstr ""
 
-#: config/tc-m32r.c:1250 config/tc-ppc.c:1459 config/tc-ppc.c:3681 read.c:1358
+#: config/tc-m32r.c:1251 config/tc-ppc.c:1459 config/tc-ppc.c:3681 read.c:1358
 msgid "Expected comma after symbol-name: rest of line ignored."
 msgstr ""
 
-#: config/tc-m32r.c:1260
+#: config/tc-m32r.c:1261
 #, c-format
 msgid ".SCOMMon length (%ld.) <0! Ignored."
 msgstr ""
 
-#: config/tc-m32r.c:1274 config/tc-ppc.c:1481 config/tc-ppc.c:2392
+#: config/tc-m32r.c:1275 config/tc-ppc.c:1481 config/tc-ppc.c:2392
 #: config/tc-ppc.c:3705
 msgid "ignoring bad alignment"
 msgstr ""
 
-#: config/tc-m32r.c:1301 config/tc-ppc.c:1492 config/tc-ppc.c:3717 read.c:1382
+#: config/tc-m32r.c:1302 config/tc-ppc.c:1492 config/tc-ppc.c:3717 read.c:1382
 #: read.c:2108
 #, c-format
 msgid "Ignoring attempt to re-define symbol `%s'."
 msgstr ""
 
-#: config/tc-m32r.c:1310
+#: config/tc-m32r.c:1311
 #, c-format
 msgid "Length of .scomm \"%s\" is already %ld. Not changed to %ld."
 msgstr ""
 
-#: config/tc-m32r.c:1786
+#: config/tc-m32r.c:1788
 msgid "Unmatched high/shigh reloc"
 msgstr ""
 
-#: config/tc-m68hc11.c:305
+#: config/tc-m68hc11.c:308
 #, c-format
 msgid ""
 "Motorola 68HC11/68HC12 options:\n"
@@ -4215,55 +4234,55 @@
 "                          (used for testing)\n"
 msgstr ""
 
-#: config/tc-m68hc11.c:346
+#: config/tc-m68hc11.c:349
 #, c-format
 msgid "Default target `%s' is not supported."
 msgstr ""
 
 #. Dump the opcode statistics table.
-#: config/tc-m68hc11.c:365
+#: config/tc-m68hc11.c:368
 msgid "Name   # Modes  Min ops  Max ops  Modes mask  # Used\n"
 msgstr ""
 
-#: config/tc-m68hc11.c:415
+#: config/tc-m68hc11.c:418
 #, c-format
 msgid "Option `%s' is not recognized."
 msgstr ""
 
-#: config/tc-m68hc11.c:636
+#: config/tc-m68hc11.c:639
 msgid "#<imm8>"
 msgstr ""
 
-#: config/tc-m68hc11.c:645
+#: config/tc-m68hc11.c:648
 msgid "#<imm16>"
 msgstr ""
 
-#: config/tc-m68hc11.c:654 config/tc-m68hc11.c:663
+#: config/tc-m68hc11.c:657 config/tc-m68hc11.c:666
 msgid "<imm8>,X"
 msgstr ""
 
-#: config/tc-m68hc11.c:681
+#: config/tc-m68hc11.c:684
 msgid "*<abs8>"
 msgstr ""
 
-#: config/tc-m68hc11.c:693
+#: config/tc-m68hc11.c:696
 msgid "#<mask>"
 msgstr ""
 
-#: config/tc-m68hc11.c:703
+#: config/tc-m68hc11.c:706
 #, c-format
 msgid "symbol%d"
 msgstr ""
 
-#: config/tc-m68hc11.c:705
+#: config/tc-m68hc11.c:708
 msgid "<abs>"
 msgstr ""
 
-#: config/tc-m68hc11.c:724
+#: config/tc-m68hc11.c:727
 msgid "<label>"
 msgstr ""
 
-#: config/tc-m68hc11.c:740
+#: config/tc-m68hc11.c:743
 #, c-format
 msgid ""
 "# Example of `%s' instructions\n"
@@ -4271,243 +4290,243 @@
 "_start:\n"
 msgstr ""
 
-#: config/tc-m68hc11.c:788
+#: config/tc-m68hc11.c:791
 #, c-format
 msgid "Instruction `%s' is not recognized."
 msgstr ""
 
-#: config/tc-m68hc11.c:793
+#: config/tc-m68hc11.c:796
 #, c-format
 msgid "Instruction formats for `%s':"
 msgstr ""
 
-#: config/tc-m68hc11.c:926
+#: config/tc-m68hc11.c:929
 #, c-format
 msgid "Immediate operand is not allowed for operand %d."
 msgstr ""
 
-#: config/tc-m68hc11.c:952
+#: config/tc-m68hc11.c:955
 msgid "Indirect indexed addressing is not valid for 68HC11."
 msgstr ""
 
-#: config/tc-m68hc11.c:972
+#: config/tc-m68hc11.c:975
 msgid "Spurious `,' or bad indirect register addressing mode."
 msgstr ""
 
-#: config/tc-m68hc11.c:988
+#: config/tc-m68hc11.c:991
 msgid "Missing second register or offset for indexed-indirect mode."
 msgstr ""
 
-#: config/tc-m68hc11.c:998
+#: config/tc-m68hc11.c:1001
 msgid "Missing second register for indexed-indirect mode."
 msgstr ""
 
-#: config/tc-m68hc11.c:1014
+#: config/tc-m68hc11.c:1017
 msgid "Missing `]' to close indexed-indirect mode."
 msgstr ""
 
-#: config/tc-m68hc11.c:1058
+#: config/tc-m68hc11.c:1061
 msgid "Illegal operand."
 msgstr ""
 
-#: config/tc-m68hc11.c:1063
+#: config/tc-m68hc11.c:1066
 msgid "Missing operand."
 msgstr ""
 
-#: config/tc-m68hc11.c:1115
+#: config/tc-m68hc11.c:1118
 msgid "Pre-increment mode is not valid for 68HC11"
 msgstr ""
 
-#: config/tc-m68hc11.c:1128
+#: config/tc-m68hc11.c:1131
 msgid "Wrong register in register indirect mode."
 msgstr ""
 
-#: config/tc-m68hc11.c:1136
+#: config/tc-m68hc11.c:1139
 msgid "Missing `]' to close register indirect operand."
 msgstr ""
 
-#: config/tc-m68hc11.c:1153
+#: config/tc-m68hc11.c:1156
 msgid "Post-decrement mode is not valid for 68HC11."
 msgstr ""
 
-#: config/tc-m68hc11.c:1161
+#: config/tc-m68hc11.c:1164
 msgid "Post-increment mode is not valid for 68HC11."
 msgstr ""
 
-#: config/tc-m68hc11.c:1178
+#: config/tc-m68hc11.c:1181
 msgid "Invalid indexed indirect mode."
 msgstr ""
 
-#: config/tc-m68hc11.c:1272
+#: config/tc-m68hc11.c:1275
 #, c-format
 msgid "Trap id `%ld' is out of range."
 msgstr ""
 
-#: config/tc-m68hc11.c:1276
+#: config/tc-m68hc11.c:1279
 msgid "Trap id must be within [0x30..0x39] or [0x40..0xff]."
 msgstr ""
 
-#: config/tc-m68hc11.c:1283
+#: config/tc-m68hc11.c:1286
 #, c-format
 msgid "Operand out of 8-bit range: `%ld'."
 msgstr ""
 
-#: config/tc-m68hc11.c:1290
+#: config/tc-m68hc11.c:1293
 msgid "The trap id must be a constant."
 msgstr ""
 
-#: config/tc-m68hc11.c:1315
+#: config/tc-m68hc11.c:1318
 #, c-format
 msgid "Operand `%x' not recognized in fixup8."
 msgstr ""
 
-#: config/tc-m68hc11.c:1335
+#: config/tc-m68hc11.c:1338
 #, c-format
 msgid "Operand out of 16-bit range: `%ld'."
 msgstr ""
 
-#: config/tc-m68hc11.c:1356
+#: config/tc-m68hc11.c:1359
 #, c-format
 msgid "Operand `%x' not recognized in fixup16."
 msgstr ""
 
-#: config/tc-m68hc11.c:1374
+#: config/tc-m68hc11.c:1377
 #, c-format
 msgid "Unexpected branch conversion with `%x'"
 msgstr ""
 
-#: config/tc-m68hc11.c:1463 config/tc-m68hc11.c:1592
+#: config/tc-m68hc11.c:1464 config/tc-m68hc11.c:1591
 #, c-format
 msgid "Operand out of range for a relative branch: `%ld'"
 msgstr ""
 
-#: config/tc-m68hc11.c:1560
+#: config/tc-m68hc11.c:1559
 msgid "Invalid register for dbcc/tbcc instruction."
 msgstr ""
 
-#: config/tc-m68hc11.c:1651
+#: config/tc-m68hc11.c:1650
 #, c-format
 msgid "Increment/decrement value is out of range: `%ld'."
 msgstr ""
 
-#: config/tc-m68hc11.c:1662
+#: config/tc-m68hc11.c:1661
 msgid "Expecting a register."
 msgstr ""
 
-#: config/tc-m68hc11.c:1677
+#: config/tc-m68hc11.c:1676
 msgid "Invalid register for post/pre increment."
 msgstr ""
 
-#: config/tc-m68hc11.c:1707
+#: config/tc-m68hc11.c:1706
 msgid "Invalid register."
 msgstr ""
 
-#: config/tc-m68hc11.c:1714
+#: config/tc-m68hc11.c:1713
 #, c-format
 msgid "Offset out of 16-bit range: %ld."
 msgstr ""
 
-#: config/tc-m68hc11.c:1719
+#: config/tc-m68hc11.c:1718
 #, c-format
 msgid "Offset out of 5-bit range for movw/movb insn: %ld."
 msgstr ""
 
-#: config/tc-m68hc11.c:1774
+#: config/tc-m68hc11.c:1784
 msgid "Expecting register D for indexed indirect mode."
 msgstr ""
 
-#: config/tc-m68hc11.c:1776
+#: config/tc-m68hc11.c:1786
 msgid "Indexed indirect mode is not allowed for movb/movw."
 msgstr ""
 
-#: config/tc-m68hc11.c:1793
+#: config/tc-m68hc11.c:1803
 msgid "Invalid accumulator register."
 msgstr ""
 
-#: config/tc-m68hc11.c:1818
+#: config/tc-m68hc11.c:1828
 msgid "Invalid indexed register."
 msgstr ""
 
-#: config/tc-m68hc11.c:1826
+#: config/tc-m68hc11.c:1836
 msgid "Addressing mode not implemented yet."
 msgstr ""
 
-#: config/tc-m68hc11.c:1841
+#: config/tc-m68hc11.c:1851
 msgid "Invalid source register for this instruction, use 'tfr'."
 msgstr ""
 
-#: config/tc-m68hc11.c:1843
+#: config/tc-m68hc11.c:1853
 msgid "Invalid source register."
 msgstr ""
 
-#: config/tc-m68hc11.c:1848
+#: config/tc-m68hc11.c:1858
 msgid "Invalid destination register for this instruction, use 'tfr'."
 msgstr ""
 
-#: config/tc-m68hc11.c:1850
+#: config/tc-m68hc11.c:1860
 msgid "Invalid destination register."
 msgstr ""
 
-#: config/tc-m68hc11.c:1939
+#: config/tc-m68hc11.c:1945
 msgid "Invalid indexed register, expecting register X."
 msgstr ""
 
-#: config/tc-m68hc11.c:1941
+#: config/tc-m68hc11.c:1947
 msgid "Invalid indexed register, expecting register Y."
 msgstr ""
 
-#: config/tc-m68hc11.c:2238
+#: config/tc-m68hc11.c:2239
 msgid "No instruction or missing opcode."
 msgstr ""
 
-#: config/tc-m68hc11.c:2303
+#: config/tc-m68hc11.c:2304
 #, c-format
 msgid "Opcode `%s' is not recognized."
 msgstr ""
 
-#: config/tc-m68hc11.c:2325
+#: config/tc-m68hc11.c:2326
 #, c-format
 msgid "Garbage at end of instruction: `%s'."
 msgstr ""
 
-#: config/tc-m68hc11.c:2348
+#: config/tc-m68hc11.c:2349
 #, c-format
 msgid "Invalid operand for `%s'"
 msgstr ""
 
-#: config/tc-m68hc11.c:2405
+#: config/tc-m68hc11.c:2406
 #, c-format
 msgid "Relocation %d is not supported by object file format."
 msgstr ""
 
-#: config/tc-m68hc11.c:2571
+#: config/tc-m68hc11.c:2587
 msgid "bra or bsr with undefined symbol."
 msgstr ""
 
-#: config/tc-m68hc11.c:2683
+#: config/tc-m68hc11.c:2698
 #, c-format
 msgid "Subtype %d is not recognized."
 msgstr ""
 
-#: config/tc-m68hc11.c:2720
+#: config/tc-m68hc11.c:2735
 msgid "Expression too complex."
 msgstr ""
 
-#: config/tc-m68hc11.c:2749
+#: config/tc-m68hc11.c:2764
 msgid "Value out of 16-bit range."
 msgstr ""
 
-#: config/tc-m68hc11.c:2772
+#: config/tc-m68hc11.c:2787
 #, c-format
 msgid "Value %ld too large for 8-bit PC-relative branch."
 msgstr ""
 
-#: config/tc-m68hc11.c:2779
+#: config/tc-m68hc11.c:2794
 #, c-format
 msgid "Auto increment/decrement offset '%ld' is out of range."
 msgstr ""
 
-#: config/tc-m68hc11.c:2790
+#: config/tc-m68hc11.c:2805
 #, c-format
 msgid "Line %d: unknown relocation type: 0x%x."
 msgstr ""
@@ -4536,318 +4555,323 @@
 msgid "Can not do %d byte pic relocation"
 msgstr ""
 
-#: config/tc-m68k.c:919 config/tc-mips.c:11242
+#: config/tc-m68k.c:885
+#, c-format
+msgid "Unable to produce reloc against symbol '%s'"
+msgstr ""
+
+#: config/tc-m68k.c:929 config/tc-mips.c:11262
 #, c-format
 msgid "Cannot make %s relocation PC relative"
 msgstr ""
 
-#: config/tc-m68k.c:1032 config/tc-tahoe.c:1503 config/tc-vax.c:1766
+#: config/tc-m68k.c:1042 config/tc-tahoe.c:1503 config/tc-vax.c:1766
 msgid "No operator"
 msgstr ""
 
-#: config/tc-m68k.c:1062 config/tc-tahoe.c:1520 config/tc-vax.c:1783
+#: config/tc-m68k.c:1072 config/tc-tahoe.c:1520 config/tc-vax.c:1783
 msgid "Unknown operator"
 msgstr ""
 
-#: config/tc-m68k.c:1837
+#: config/tc-m68k.c:1847
 msgid "invalid instruction for this architecture; needs "
 msgstr ""
 
-#: config/tc-m68k.c:1842
+#: config/tc-m68k.c:1852
 msgid "fpu (68040, 68060 or 68881/68882)"
 msgstr ""
 
-#: config/tc-m68k.c:1845
+#: config/tc-m68k.c:1855
 msgid "mmu (68030 or 68851)"
 msgstr ""
 
-#: config/tc-m68k.c:1848
+#: config/tc-m68k.c:1858
 msgid "68020 or higher"
 msgstr ""
 
-#: config/tc-m68k.c:1851
+#: config/tc-m68k.c:1861
 msgid "68000 or higher"
 msgstr ""
 
-#: config/tc-m68k.c:1854
+#: config/tc-m68k.c:1864
 msgid "68010 or higher"
 msgstr ""
 
-#: config/tc-m68k.c:1883
+#: config/tc-m68k.c:1893
 msgid "operands mismatch"
 msgstr ""
 
-#: config/tc-m68k.c:1940 config/tc-m68k.c:1946 config/tc-m68k.c:1952
+#: config/tc-m68k.c:1950 config/tc-m68k.c:1956 config/tc-m68k.c:1962
 msgid "operand out of range"
 msgstr ""
 
-#: config/tc-m68k.c:2009
+#: config/tc-m68k.c:2019
 #, c-format
 msgid "Bignum too big for %c format; truncated"
 msgstr ""
 
-#: config/tc-m68k.c:2077
+#: config/tc-m68k.c:2087
 msgid "displacement too large for this architecture; needs 68020 or higher"
 msgstr ""
 
-#: config/tc-m68k.c:2187
+#: config/tc-m68k.c:2197
 msgid ""
 "scale factor invalid on this architecture; needs cpu32 or 68020 or higher"
 msgstr ""
 
-#: config/tc-m68k.c:2192
+#: config/tc-m68k.c:2202
 msgid "invalid index size for coldfire"
 msgstr ""
 
-#: config/tc-m68k.c:2245
+#: config/tc-m68k.c:2255
 msgid "Forcing byte displacement"
 msgstr ""
 
-#: config/tc-m68k.c:2247
+#: config/tc-m68k.c:2257
 msgid "byte displacement out of range"
 msgstr ""
 
-#: config/tc-m68k.c:2294 config/tc-m68k.c:2332
+#: config/tc-m68k.c:2304 config/tc-m68k.c:2342
 msgid "invalid operand mode for this architecture; needs 68020 or higher"
 msgstr ""
 
-#: config/tc-m68k.c:2318 config/tc-m68k.c:2352
+#: config/tc-m68k.c:2328 config/tc-m68k.c:2362
 msgid ":b not permitted; defaulting to :w"
 msgstr ""
 
-#: config/tc-m68k.c:2429
+#: config/tc-m68k.c:2439
 msgid "unsupported byte value; use a different suffix"
 msgstr ""
 
-#: config/tc-m68k.c:2443
+#: config/tc-m68k.c:2453
 msgid "unknown/incorrect operand"
 msgstr ""
 
-#: config/tc-m68k.c:2476 config/tc-m68k.c:2484 config/tc-m68k.c:2491
-#: config/tc-m68k.c:2498
+#: config/tc-m68k.c:2486 config/tc-m68k.c:2494 config/tc-m68k.c:2501
+#: config/tc-m68k.c:2508
 msgid "out of range"
 msgstr ""
 
-#: config/tc-m68k.c:2548
+#: config/tc-m68k.c:2558
 msgid "Can't use long branches on 68000/68010/5200"
 msgstr ""
 
-#: config/tc-m68k.c:2658
+#: config/tc-m68k.c:2668
 msgid "Expression out of range, using 0"
 msgstr ""
 
-#: config/tc-m68k.c:2770 config/tc-m68k.c:2786
+#: config/tc-m68k.c:2780 config/tc-m68k.c:2796
 msgid "Floating point register in register list"
 msgstr ""
 
-#: config/tc-m68k.c:2776
+#: config/tc-m68k.c:2786
 msgid "Wrong register in floating-point reglist"
 msgstr ""
 
-#: config/tc-m68k.c:2792
+#: config/tc-m68k.c:2802
 msgid "incorrect register in reglist"
 msgstr ""
 
-#: config/tc-m68k.c:2798
+#: config/tc-m68k.c:2808
 msgid "wrong register in floating-point reglist"
 msgstr ""
 
-#: config/tc-m68k.c:2874
+#: config/tc-m68k.c:2884
 msgid "failed sanity check"
 msgstr ""
 
 #. ERROR
-#: config/tc-m68k.c:3239
+#: config/tc-m68k.c:3249
 msgid "Extra )"
 msgstr ""
 
 #. ERROR
-#: config/tc-m68k.c:3250
+#: config/tc-m68k.c:3260
 msgid "Missing )"
 msgstr ""
 
-#: config/tc-m68k.c:3267
+#: config/tc-m68k.c:3277
 msgid "Missing operand"
 msgstr ""
 
-#: config/tc-m68k.c:3599
+#: config/tc-m68k.c:3609
 #, c-format
 msgid "%s -- statement `%s' ignored"
 msgstr ""
 
-#: config/tc-m68k.c:3643
+#: config/tc-m68k.c:3653
 #, c-format
 msgid "Don't know how to figure width of %c in md_assemble()"
 msgstr ""
 
-#: config/tc-m68k.c:3811 config/tc-m68k.c:3849
+#: config/tc-m68k.c:3821 config/tc-m68k.c:3859
 #, c-format
 msgid "Internal Error: Can't find %s in hash table"
 msgstr ""
 
-#: config/tc-m68k.c:3814 config/tc-m68k.c:3852
+#: config/tc-m68k.c:3824 config/tc-m68k.c:3862
 #, c-format
 msgid "Internal Error: Can't hash %s: %s"
 msgstr ""
 
-#: config/tc-m68k.c:3980
+#: config/tc-m68k.c:3990
 #, c-format
 msgid "unrecognized default cpu `%s' ???"
 msgstr ""
 
-#: config/tc-m68k.c:3992
+#: config/tc-m68k.c:4002
 msgid "68040 and 68851 specified; mmu instructions may assemble incorrectly"
 msgstr ""
 
-#: config/tc-m68k.c:4012
+#: config/tc-m68k.c:4022
 msgid "options for 68881 and no-68881 both given"
 msgstr ""
 
-#: config/tc-m68k.c:4014
+#: config/tc-m68k.c:4024
 msgid "options for 68851 and no-68851 both given"
 msgstr ""
 
-#: config/tc-m68k.c:4085
+#: config/tc-m68k.c:4095
 #, c-format
 msgid "text label `%s' aligned to odd boundary"
 msgstr ""
 
-#: config/tc-m68k.c:4302
+#: config/tc-m68k.c:4312
 msgid "invalid byte branch offset"
 msgstr ""
 
-#: config/tc-m68k.c:4360
+#: config/tc-m68k.c:4370
 msgid "short branch with zero offset: use :w"
 msgstr ""
 
-#: config/tc-m68k.c:4896 config/tc-m68k.c:4907
+#: config/tc-m68k.c:4905 config/tc-m68k.c:4916
 msgid "expression out of range: defaulting to 1"
 msgstr ""
 
-#: config/tc-m68k.c:4939
+#: config/tc-m68k.c:4948
 msgid "expression out of range: defaulting to 0"
 msgstr ""
 
-#: config/tc-m68k.c:4972 config/tc-m68k.c:4984
+#: config/tc-m68k.c:4981 config/tc-m68k.c:4993
 #, c-format
 msgid "Can't deal with expression; defaulting to %ld"
 msgstr ""
 
-#: config/tc-m68k.c:4998
+#: config/tc-m68k.c:5007
 msgid "expression doesn't fit in BYTE"
 msgstr ""
 
-#: config/tc-m68k.c:5002
+#: config/tc-m68k.c:5011
 msgid "expression doesn't fit in WORD"
 msgstr ""
 
-#: config/tc-m68k.c:5095
+#: config/tc-m68k.c:5104
 #, c-format
 msgid "%s: unrecognized processor name"
 msgstr ""
 
-#: config/tc-m68k.c:5160
+#: config/tc-m68k.c:5169
 msgid "bad coprocessor id"
 msgstr ""
 
-#: config/tc-m68k.c:5166
+#: config/tc-m68k.c:5175
 msgid "unrecognized fopt option"
 msgstr ""
 
-#: config/tc-m68k.c:5300
+#: config/tc-m68k.c:5309
 #, c-format
 msgid "option `%s' may not be negated"
 msgstr ""
 
-#: config/tc-m68k.c:5311
+#: config/tc-m68k.c:5320
 #, c-format
 msgid "option `%s' not recognized"
 msgstr ""
 
-#: config/tc-m68k.c:5344
+#: config/tc-m68k.c:5353
 msgid "bad format of OPT NEST=depth"
 msgstr ""
 
-#: config/tc-m68k.c:5407
+#: config/tc-m68k.c:5416
 msgid "missing label"
 msgstr ""
 
-#: config/tc-m68k.c:5431 config/tc-m68k.c:5460
+#: config/tc-m68k.c:5440 config/tc-m68k.c:5469
 msgid "bad register list"
 msgstr ""
 
-#: config/tc-m68k.c:5433
+#: config/tc-m68k.c:5442
 #, c-format
 msgid "bad register list: %s"
 msgstr ""
 
-#: config/tc-m68k.c:5531
+#: config/tc-m68k.c:5540
 msgid "restore without save"
 msgstr ""
 
-#: config/tc-m68k.c:5708 config/tc-m68k.c:6057
+#: config/tc-m68k.c:5717 config/tc-m68k.c:6066
 msgid "syntax error in structured control directive"
 msgstr ""
 
-#: config/tc-m68k.c:5759
+#: config/tc-m68k.c:5768
 msgid "missing condition code in structured control directive"
 msgstr ""
 
-#: config/tc-m68k.c:6091
+#: config/tc-m68k.c:6100
 msgid "missing then"
 msgstr ""
 
-#: config/tc-m68k.c:6173
+#: config/tc-m68k.c:6182
 msgid "else without matching if"
 msgstr ""
 
-#: config/tc-m68k.c:6207
+#: config/tc-m68k.c:6216
 msgid "endi without matching if"
 msgstr ""
 
-#: config/tc-m68k.c:6248
+#: config/tc-m68k.c:6257
 msgid "break outside of structured loop"
 msgstr ""
 
-#: config/tc-m68k.c:6287
+#: config/tc-m68k.c:6296
 msgid "next outside of structured loop"
 msgstr ""
 
-#: config/tc-m68k.c:6339
+#: config/tc-m68k.c:6348
 msgid "missing ="
 msgstr ""
 
-#: config/tc-m68k.c:6377
+#: config/tc-m68k.c:6386
 msgid "missing to or downto"
 msgstr ""
 
-#: config/tc-m68k.c:6413 config/tc-m68k.c:6447 config/tc-m68k.c:6657
+#: config/tc-m68k.c:6422 config/tc-m68k.c:6456 config/tc-m68k.c:6666
 msgid "missing do"
 msgstr ""
 
-#: config/tc-m68k.c:6550
+#: config/tc-m68k.c:6559
 msgid "endf without for"
 msgstr ""
 
-#: config/tc-m68k.c:6606
+#: config/tc-m68k.c:6615
 msgid "until without repeat"
 msgstr ""
 
-#: config/tc-m68k.c:6693
+#: config/tc-m68k.c:6702
 msgid "endw without while"
 msgstr ""
 
-#: config/tc-m68k.c:6817
+#: config/tc-m68k.c:6826
 #, c-format
 msgid "unrecognized option `%s'"
 msgstr ""
 
-#: config/tc-m68k.c:6862
+#: config/tc-m68k.c:6871
 #, c-format
 msgid "unrecognized architecture specification `%s'"
 msgstr ""
 
-#: config/tc-m68k.c:6932
+#: config/tc-m68k.c:6941
 msgid ""
 "680X0 options:\n"
 "-l\t\t\tuse 1 word for refs to undefined symbols [default 2]\n"
@@ -4860,7 +4884,7 @@
 "\t\t\t[default yes for 68020, 68030, and cpu32]\n"
 msgstr ""
 
-#: config/tc-m68k.c:6942
+#: config/tc-m68k.c:6951
 msgid ""
 "-m68851 | -mno-68851\n"
 "\t\t\ttarget has/lacks memory-management unit coprocessor\n"
@@ -4873,7 +4897,7 @@
 "--bitwise-or\t\tdo not treat `|' as a comment character\n"
 msgstr ""
 
-#: config/tc-m68k.c:6952
+#: config/tc-m68k.c:6961
 msgid ""
 "--base-size-default-16\tbase reg without size is 16 bits\n"
 "--base-size-default-32\tbase reg without size is 32 bits (default)\n"
@@ -4881,12 +4905,12 @@
 "--disp-size-default-32\tdisplacement with unknown size is 32 bits (default)\n"
 msgstr ""
 
-#: config/tc-m68k.c:6987
+#: config/tc-m68k.c:6996
 #, c-format
 msgid "Error %s in %s\n"
 msgstr ""
 
-#: config/tc-m68k.c:6991
+#: config/tc-m68k.c:7000
 #, c-format
 msgid "Opcode(%d.%s): "
 msgstr ""
@@ -5174,7 +5198,7 @@
 msgid "pc-relative"
 msgstr ""
 
-#: config/tc-mcore.c:2419 config/tc-pj.c:569 config/tc-sh.c:3326
+#: config/tc-mcore.c:2419 config/tc-pj.c:569 config/tc-sh.c:3331
 #, c-format
 msgid "Cannot represent relocation type %s"
 msgstr ""
@@ -5211,7 +5235,7 @@
 msgid "returned from mips_ip(%s) insn_opcode = 0x%x\n"
 msgstr ""
 
-#: config/tc-mips.c:1782 config/tc-mips.c:11374
+#: config/tc-mips.c:1782 config/tc-mips.c:11394
 msgid "extended instruction in delay slot"
 msgstr ""
 
@@ -5241,8 +5265,8 @@
 msgid "Number larger than 64 bits"
 msgstr ""
 
-#: config/tc-mips.c:3304 config/tc-mips.c:3376 config/tc-mips.c:5055
-#: config/tc-mips.c:5106 config/tc-mips.c:5642 config/tc-mips.c:5705
+#: config/tc-mips.c:3304 config/tc-mips.c:3376 config/tc-mips.c:5071
+#: config/tc-mips.c:5122 config/tc-mips.c:5658 config/tc-mips.c:5721
 msgid "PIC code offset overflow (max 16 signed bits)"
 msgstr ""
 
@@ -5257,8 +5281,8 @@
 msgstr ""
 
 #: config/tc-mips.c:3627 config/tc-mips.c:3701 config/tc-mips.c:3804
-#: config/tc-mips.c:3859 config/tc-mips.c:6742 config/tc-mips.c:6751
-#: config/tc-mips.c:6759 config/tc-mips.c:6868
+#: config/tc-mips.c:3859 config/tc-mips.c:6758 config/tc-mips.c:6767
+#: config/tc-mips.c:6775 config/tc-mips.c:6884
 msgid "Unsupported large constant"
 msgstr ""
 
@@ -5272,234 +5296,234 @@
 msgid "Divide by zero."
 msgstr ""
 
-#: config/tc-mips.c:4626
+#: config/tc-mips.c:4642
 msgid "MIPS PIC call to register other than $25"
 msgstr ""
 
-#: config/tc-mips.c:4631 config/tc-mips.c:4743
+#: config/tc-mips.c:4647 config/tc-mips.c:4759
 msgid "No .cprestore pseudo-op used in PIC code"
 msgstr ""
 
-#: config/tc-mips.c:4816 config/tc-mips.c:4905 config/tc-mips.c:5393
-#: config/tc-mips.c:5434 config/tc-mips.c:5452 config/tc-mips.c:6081
+#: config/tc-mips.c:4832 config/tc-mips.c:4921 config/tc-mips.c:5409
+#: config/tc-mips.c:5450 config/tc-mips.c:5468 config/tc-mips.c:6097
 msgid "opcode not supported on this processor"
 msgstr ""
 
-#: config/tc-mips.c:5912 config/tc-mips.c:6636
+#: config/tc-mips.c:5928 config/tc-mips.c:6652
 msgid "Macro used $at after \".set noat\""
 msgstr ""
 
-#: config/tc-mips.c:6052 config/tc-mips.c:6070
+#: config/tc-mips.c:6068 config/tc-mips.c:6086
 msgid "rotate count too large"
 msgstr ""
 
-#: config/tc-mips.c:6121
+#: config/tc-mips.c:6137
 #, c-format
 msgid "Instruction %s: result is always false"
 msgstr ""
 
-#: config/tc-mips.c:6290
+#: config/tc-mips.c:6306
 #, c-format
 msgid "Instruction %s: result is always true"
 msgstr ""
 
-#: config/tc-mips.c:6429 config/tc-mips.c:6456 config/tc-mips.c:6528
-#: config/tc-mips.c:6553
+#: config/tc-mips.c:6445 config/tc-mips.c:6472 config/tc-mips.c:6544
+#: config/tc-mips.c:6569
 msgid "operand overflow"
 msgstr ""
 
 #. FIXME: Check if this is one of the itbl macros, since they
 #. are added dynamically.
-#: config/tc-mips.c:6632
+#: config/tc-mips.c:6648
 #, c-format
 msgid "Macro %s not implemented yet"
 msgstr ""
 
-#: config/tc-mips.c:6902
+#: config/tc-mips.c:6918
 #, c-format
 msgid "internal: bad mips opcode (mask error): %s %s"
 msgstr ""
 
-#: config/tc-mips.c:6958
+#: config/tc-mips.c:6974
 #, c-format
 msgid "internal: bad mips opcode (unknown operand type `%c'): %s %s"
 msgstr ""
 
-#: config/tc-mips.c:6965
+#: config/tc-mips.c:6981
 #, c-format
 msgid "internal: bad mips opcode (bits 0x%lx undefined): %s %s"
 msgstr ""
 
-#: config/tc-mips.c:7073
+#: config/tc-mips.c:7089
 #, c-format
 msgid "opcode not supported on this processor: %s (%s)"
 msgstr ""
 
-#: config/tc-mips.c:7144
+#: config/tc-mips.c:7160
 #, c-format
 msgid "Improper shift amount (%ld)"
 msgstr ""
 
-#: config/tc-mips.c:7170 config/tc-mips.c:8324 config/tc-mips.c:8439
+#: config/tc-mips.c:7186 config/tc-mips.c:8340 config/tc-mips.c:8455
 #, c-format
 msgid "Invalid value for `%s' (%lu)"
 msgstr ""
 
-#: config/tc-mips.c:7188
+#: config/tc-mips.c:7204
 #, c-format
 msgid "Illegal break code (%ld)"
 msgstr ""
 
-#: config/tc-mips.c:7202
+#: config/tc-mips.c:7218
 #, c-format
 msgid "Illegal lower break code (%ld)"
 msgstr ""
 
-#: config/tc-mips.c:7215
+#: config/tc-mips.c:7231
 #, c-format
 msgid "Illegal 20-bit code (%ld)"
 msgstr ""
 
-#: config/tc-mips.c:7227
+#: config/tc-mips.c:7243
 #, c-format
 msgid "Coproccesor code > 25 bits (%ld)"
 msgstr ""
 
-#: config/tc-mips.c:7240
+#: config/tc-mips.c:7256
 #, c-format
 msgid "Illegal 19-bit code (%ld)"
 msgstr ""
 
-#: config/tc-mips.c:7252
+#: config/tc-mips.c:7268
 #, c-format
 msgid "Invalidate performance regster (%ld)"
 msgstr ""
 
-#: config/tc-mips.c:7289
+#: config/tc-mips.c:7305
 #, c-format
 msgid "Invalid register number (%d)"
 msgstr ""
 
-#: config/tc-mips.c:7453
+#: config/tc-mips.c:7469
 #, c-format
 msgid "Invalid float register number (%d)"
 msgstr ""
 
-#: config/tc-mips.c:7463
+#: config/tc-mips.c:7479
 #, c-format
 msgid "Float register should be even, was %d"
 msgstr ""
 
-#: config/tc-mips.c:7514
+#: config/tc-mips.c:7530
 msgid "absolute expression required"
 msgstr ""
 
-#: config/tc-mips.c:7575
+#: config/tc-mips.c:7591
 #, c-format
 msgid "Bad floating point constant: %s"
 msgstr ""
 
-#: config/tc-mips.c:7697
+#: config/tc-mips.c:7713
 msgid "Can't use floating point insn in this section"
 msgstr ""
 
-#: config/tc-mips.c:7751
+#: config/tc-mips.c:7767
 msgid "16 bit expression not in range 0..65535"
 msgstr ""
 
-#: config/tc-mips.c:7788
+#: config/tc-mips.c:7804
 msgid "16 bit expression not in range -32768..32767"
 msgstr ""
 
-#: config/tc-mips.c:7859
+#: config/tc-mips.c:7875
 msgid "lui expression not in range 0..65535"
 msgstr ""
 
-#: config/tc-mips.c:7883
+#: config/tc-mips.c:7899
 #, c-format
 msgid "invalid condition code register $fcc%d"
 msgstr ""
 
-#: config/tc-mips.c:7908
+#: config/tc-mips.c:7924
 msgid "invalid coprocessor sub-selection value (0-7)"
 msgstr ""
 
-#: config/tc-mips.c:7913
+#: config/tc-mips.c:7929
 #, c-format
 msgid "bad char = '%c'\n"
 msgstr ""
 
-#: config/tc-mips.c:7926 config/tc-mips.c:8464
+#: config/tc-mips.c:7942 config/tc-mips.c:8480
 msgid "illegal operands"
 msgstr ""
 
-#: config/tc-mips.c:7993
+#: config/tc-mips.c:8009
 msgid "unrecognized opcode"
 msgstr ""
 
-#: config/tc-mips.c:8102
+#: config/tc-mips.c:8118
 #, c-format
 msgid "invalid register number (%d)"
 msgstr ""
 
-#: config/tc-mips.c:8183
+#: config/tc-mips.c:8199
 msgid "used $at without \".set noat\""
 msgstr ""
 
-#: config/tc-mips.c:8358
+#: config/tc-mips.c:8374
 msgid "can't parse register list"
 msgstr ""
 
-#: config/tc-mips.c:8392 config/tc-mips.c:8422
+#: config/tc-mips.c:8408 config/tc-mips.c:8438
 msgid "invalid register list"
 msgstr ""
 
-#: config/tc-mips.c:8590
+#: config/tc-mips.c:8606
 msgid "extended operand requested but not required"
 msgstr ""
 
-#: config/tc-mips.c:8592
+#: config/tc-mips.c:8608
 msgid "invalid unextended operand value"
 msgstr ""
 
-#: config/tc-mips.c:8620
+#: config/tc-mips.c:8636
 msgid "operand value out of range for instruction"
 msgstr ""
 
-#: config/tc-mips.c:9005
+#: config/tc-mips.c:9021
 #, c-format
 msgid "invalid architecture -mcpu=%s"
 msgstr ""
 
-#: config/tc-mips.c:9054
+#: config/tc-mips.c:9070
 msgid "-G may not be used with embedded PIC code"
 msgstr ""
 
-#: config/tc-mips.c:9066
+#: config/tc-mips.c:9083
 msgid "-call_shared is supported only for ELF format"
 msgstr ""
 
-#: config/tc-mips.c:9072 config/tc-mips.c:10158 config/tc-mips.c:10332
+#: config/tc-mips.c:9089 config/tc-mips.c:10178 config/tc-mips.c:10352
 msgid "-G may not be used with SVR4 PIC code"
 msgstr ""
 
-#: config/tc-mips.c:9081
+#: config/tc-mips.c:9098
 msgid "-non_shared is supported only for ELF format"
 msgstr ""
 
-#: config/tc-mips.c:9097
+#: config/tc-mips.c:9115
 msgid "-G is not supported for this configuration"
 msgstr ""
 
-#: config/tc-mips.c:9102
+#: config/tc-mips.c:9120
 msgid "-G may not be used with SVR4 or embedded PIC code"
 msgstr ""
 
-#: config/tc-mips.c:9126
+#: config/tc-mips.c:9145
 msgid "No compiled in support for 64 bit object file format"
 msgstr ""
 
-#: config/tc-mips.c:9218
+#: config/tc-mips.c:9238
 msgid ""
 "MIPS options:\n"
 "-membedded-pic\t\tgenerate embedded position independent code\n"
@@ -5510,7 +5534,7 @@
 "\t\t\timplicitly with the gp register [default 8]\n"
 msgstr ""
 
-#: config/tc-mips.c:9226
+#: config/tc-mips.c:9246
 msgid ""
 "-mips1\t\t\tgenerate MIPS ISA I instructions\n"
 "-mips2\t\t\tgenerate MIPS ISA II instructions\n"
@@ -5522,20 +5546,20 @@
 "-mcpu=CPU\t\tgenerate code for CPU, where CPU is one of:\n"
 msgstr ""
 
-#: config/tc-mips.c:9257
+#: config/tc-mips.c:9277
 msgid ""
 "-mCPU\t\t\tequivalent to -mcpu=CPU.\n"
 "-no-mCPU\t\tdon't generate code specific to CPU.\n"
 "\t\t\tFor -mCPU and -no-mCPU, CPU must be one of:\n"
 msgstr ""
 
-#: config/tc-mips.c:9270
+#: config/tc-mips.c:9290
 msgid ""
 "-mips16\t\t\tgenerate mips16 instructions\n"
 "-no-mips16\t\tdo not generate mips16 instructions\n"
 msgstr ""
 
-#: config/tc-mips.c:9273
+#: config/tc-mips.c:9293
 msgid ""
 "-O0\t\t\tremove unneeded NOPs, do not swap branches\n"
 "-O\t\t\tremove unneeded NOPs and swap branches\n"
@@ -5544,7 +5568,7 @@
 "--break, --no-trap\tbreak exception on div by 0 and mult overflow\n"
 msgstr ""
 
-#: config/tc-mips.c:9280
+#: config/tc-mips.c:9300
 msgid ""
 "-KPIC, -call_shared\tgenerate SVR4 position independent code\n"
 "-non_shared\t\tdo not generate position independent code\n"
@@ -5553,170 +5577,170 @@
 "-64\t\t\tcreate 64 bit object file\n"
 msgstr ""
 
-#: config/tc-mips.c:9337
+#: config/tc-mips.c:9357
 #, c-format
 msgid "Unsupported reloc size %d"
 msgstr ""
 
-#: config/tc-mips.c:9440
+#: config/tc-mips.c:9460
 msgid "Unmatched %%hi reloc"
 msgstr ""
 
-#: config/tc-mips.c:9563
+#: config/tc-mips.c:9583
 msgid "Invalid PC relative reloc"
 msgstr ""
 
-#: config/tc-mips.c:9673 config/tc-sparc.c:3101 config/tc-sparc.c:3108
+#: config/tc-mips.c:9693 config/tc-sparc.c:3101 config/tc-sparc.c:3108
 #: config/tc-sparc.c:3115 config/tc-sparc.c:3122 config/tc-sparc.c:3129
 #: config/tc-sparc.c:3138 config/tc-sparc.c:3149 config/tc-sparc.c:3175
 #: config/tc-sparc.c:3203 write.c:992 write.c:1056
 msgid "relocation overflow"
 msgstr ""
 
-#: config/tc-mips.c:9689
+#: config/tc-mips.c:9709
 #, c-format
 msgid "Branch to odd address (%lx)"
 msgstr ""
 
-#: config/tc-mips.c:9853
+#: config/tc-mips.c:9873
 #, c-format
 msgid "%08lx  UNDEFINED\n"
 msgstr ""
 
-#: config/tc-mips.c:9919
+#: config/tc-mips.c:9939
 msgid "Alignment negative: 0 assumed."
 msgstr ""
 
-#: config/tc-mips.c:10007
+#: config/tc-mips.c:10027
 msgid "No read only data section in this object file format"
 msgstr ""
 
-#: config/tc-mips.c:10030
+#: config/tc-mips.c:10050
 msgid "Global pointers not supported; recompile -G 0"
 msgstr ""
 
-#: config/tc-mips.c:10116
+#: config/tc-mips.c:10136
 #, c-format
 msgid "%s: no such section"
 msgstr ""
 
-#: config/tc-mips.c:10153
+#: config/tc-mips.c:10173
 #, c-format
 msgid ".option pic%d not supported"
 msgstr ""
 
-#: config/tc-mips.c:10164
+#: config/tc-mips.c:10184
 #, c-format
 msgid "Unrecognized option \"%s\""
 msgstr ""
 
-#: config/tc-mips.c:10227
+#: config/tc-mips.c:10247
 msgid "`noreorder' must be set before `nomacro'"
 msgstr ""
 
-#: config/tc-mips.c:10269
+#: config/tc-mips.c:10289
 msgid "unknown ISA level"
 msgstr ""
 
-#: config/tc-mips.c:10291
+#: config/tc-mips.c:10311
 msgid ".set pop with no .set push"
 msgstr ""
 
-#: config/tc-mips.c:10315
+#: config/tc-mips.c:10335
 #, c-format
 msgid "Tried to set unrecognized symbol: %s\n"
 msgstr ""
 
-#: config/tc-mips.c:10365
+#: config/tc-mips.c:10385
 msgid ".cpload not in noreorder section"
 msgstr ""
 
-#: config/tc-mips.c:10447
+#: config/tc-mips.c:10467
 msgid "Unsupported use of .gpword"
 msgstr ""
 
-#: config/tc-mips.c:10584
+#: config/tc-mips.c:10604
 msgid "expected `$'"
 msgstr ""
 
-#: config/tc-mips.c:10592
+#: config/tc-mips.c:10612
 msgid "Bad register number"
 msgstr ""
 
-#: config/tc-mips.c:10608
+#: config/tc-mips.c:10628
 msgid "Unrecognized register name"
 msgstr ""
 
-#: config/tc-mips.c:10807
+#: config/tc-mips.c:10827
 msgid "unsupported PC relative reference to different section"
 msgstr ""
 
-#: config/tc-mips.c:10916
+#: config/tc-mips.c:10936
 msgid "unsupported relocation"
 msgstr ""
 
-#: config/tc-mips.c:11020
+#: config/tc-mips.c:11040
 msgid "AT used after \".set noat\" or macro used after \".set nomacro\""
 msgstr ""
 
-#: config/tc-mips.c:11083
+#: config/tc-mips.c:11103
 msgid "Double check fx_r_type in tc-mips.c:tc_gen_reloc"
 msgstr ""
 
-#: config/tc-mips.c:11596
+#: config/tc-mips.c:11616
 msgid "missing `.end' at end of assembly"
 msgstr ""
 
-#: config/tc-mips.c:11611
+#: config/tc-mips.c:11631
 msgid "Expected simple number."
 msgstr ""
 
-#: config/tc-mips.c:11637
+#: config/tc-mips.c:11657
 #, c-format
 msgid " *input_line_pointer == '%c' 0x%02x\n"
 msgstr ""
 
-#: config/tc-mips.c:11639
+#: config/tc-mips.c:11659
 msgid "Invalid number"
 msgstr ""
 
-#: config/tc-mips.c:11693
+#: config/tc-mips.c:11713
 msgid ".end not in text section"
 msgstr ""
 
-#: config/tc-mips.c:11697
+#: config/tc-mips.c:11717
 msgid ".end directive without a preceding .ent directive."
 msgstr ""
 
-#: config/tc-mips.c:11706
+#: config/tc-mips.c:11726
 msgid ".end symbol does not match .ent symbol."
 msgstr ""
 
-#: config/tc-mips.c:11709
+#: config/tc-mips.c:11729
 msgid ".end directive missing or unknown symbol"
 msgstr ""
 
-#: config/tc-mips.c:11784
+#: config/tc-mips.c:11804
 msgid ".ent or .aent not in text section."
 msgstr ""
 
-#: config/tc-mips.c:11787
+#: config/tc-mips.c:11807
 msgid "missing `.end'"
 msgstr ""
 
-#: config/tc-mips.c:11820 ecoff.c:3205
+#: config/tc-mips.c:11840 ecoff.c:3205
 msgid ".frame outside of .ent"
 msgstr ""
 
-#: config/tc-mips.c:11831 ecoff.c:3216
+#: config/tc-mips.c:11851 ecoff.c:3216
 msgid "Bad .frame directive"
 msgstr ""
 
-#: config/tc-mips.c:11861
+#: config/tc-mips.c:11881
 msgid ".mask/.fmask outside of .ent"
 msgstr ""
 
-#: config/tc-mips.c:11868
+#: config/tc-mips.c:11888
 msgid "Bad .mask/.fmask directive"
 msgstr ""
 
@@ -5727,13 +5751,13 @@
 msgstr ""
 
 #: config/tc-mn10200.c:807 config/tc-mn10300.c:953 config/tc-ppc.c:1736
-#: config/tc-v850.c:1728
+#: config/tc-s390.c:1161 config/tc-v850.c:1728
 #, c-format
 msgid "Unrecognized opcode: `%s'"
 msgstr ""
 
 #: config/tc-mn10200.c:1050 config/tc-mn10300.c:1476 config/tc-ppc.c:2097
-#: config/tc-v850.c:2152
+#: config/tc-s390.c:1091 config/tc-v850.c:2152
 #, c-format
 msgid "junk at end of line: `%s'"
 msgstr ""
@@ -5946,12 +5970,12 @@
 "-big\t\t\tgenerate big endian code\n"
 msgstr ""
 
-#: config/tc-pj.c:458 config/tc-sh.c:2899 config/tc-sh.c:2906
-#: config/tc-sh.c:2913 config/tc-sh.c:2920
+#: config/tc-pj.c:458 config/tc-sh.c:2904 config/tc-sh.c:2911
+#: config/tc-sh.c:2918 config/tc-sh.c:2925
 msgid "pcrel too far"
 msgstr ""
 
-#: config/tc-pj.c:526 config/tc-sh.c:3011
+#: config/tc-pj.c:526 config/tc-sh.c:3016
 msgid "offset out of range"
 msgstr ""
 
@@ -5963,7 +5987,7 @@
 msgid "estimate size\n"
 msgstr ""
 
-#: config/tc-ppc.c:926
+#: config/tc-ppc.c:926 config/tc-s390.c:356
 #, c-format
 msgid "invalid switch -m%s"
 msgstr ""
@@ -6008,7 +6032,7 @@
 msgid "Neither Power nor PowerPC opcodes were selected."
 msgstr ""
 
-#: config/tc-ppc.c:1117
+#: config/tc-ppc.c:1117 config/tc-s390.c:442
 #, c-format
 msgid "Internal assembler error for instruction %s"
 msgstr ""
@@ -6022,7 +6046,7 @@
 msgid "identifier+constant@got means identifier@got+constant"
 msgstr ""
 
-#: config/tc-ppc.c:1400 config/tc-sh.c:341 config/tc-sh.c:369
+#: config/tc-ppc.c:1400 config/tc-sh.c:346 config/tc-sh.c:374
 #, c-format
 msgid "%s relocations do not fit in %d bytes\n"
 msgstr ""
@@ -6171,141 +6195,226 @@
 msgid "warning: symbol %s has no csect"
 msgstr ""
 
-#: config/tc-ppc.c:4662
+#: config/tc-ppc.c:4661
 msgid "symbol in .toc does not match any .tc"
 msgstr ""
 
-#: config/tc-ppc.c:4956 config/tc-v850.c:2431
+#: config/tc-ppc.c:4955 config/tc-s390.c:1592 config/tc-v850.c:2431
 msgid "unresolved expression that must be resolved"
 msgstr ""
 
-#: config/tc-ppc.c:4959
+#: config/tc-ppc.c:4958 config/tc-s390.c:1595
 msgid "unsupported relocation type"
 msgstr ""
 
-#: config/tc-ppc.c:5021
+#: config/tc-ppc.c:5020
 #, c-format
 msgid "cannot emit PC relative %s relocation against %s"
 msgstr ""
 
-#: config/tc-ppc.c:5026
+#: config/tc-ppc.c:5025
 #, c-format
 msgid "cannot emit PC relative %s relocation"
 msgstr ""
 
-#: config/tc-ppc.c:5088
+#: config/tc-ppc.c:5087
 msgid "must branch to an address a multiple of 4"
 msgstr ""
 
-#: config/tc-ppc.c:5092
+#: config/tc-ppc.c:5091
 #, c-format
 msgid "@local or @plt branch destination is too far away, %ld bytes"
 msgstr ""
 
-#: config/tc-ppc.c:5116
+#: config/tc-ppc.c:5115
 #, c-format
 msgid "Gas failure, reloc value %d\n"
 msgstr ""
 
-#: config/tc-sh.c:878
+#: config/tc-s390.c:395
+msgid ""
+"          S390 options:\n"
+"          -mregnames   \tAllow symbolic names for registers\n"
+"          -mno-regnames\tDo not allow symbolic names for registers\n"
+msgstr ""
+
+#: config/tc-s390.c:399
+msgid ""
+"          -V       \tprint assembler version number\n"
+"          -Qy, -Qn \tignored\n"
+msgstr ""
+
+#: config/tc-s390.c:428
+#, c-format
+msgid "Internal assembler error for instruction format %s"
+msgstr ""
+
+#: config/tc-s390.c:604
+#, c-format
+msgid "identifier+constant@%s means identifier@%s+constant"
+msgstr ""
+
+#: config/tc-s390.c:683
+msgid "Can't handle O_big in s390_exp_compare"
+msgstr ""
+
+#: config/tc-s390.c:764
+msgid "Invalid suffix for literal pool entry"
+msgstr ""
+
+#: config/tc-s390.c:805
+msgid "Big number is too big"
+msgstr ""
+
+#: config/tc-s390.c:881 config/tc-s390.c:1330
+#, c-format
+msgid "%s relocations do not fit in %d bytes"
+msgstr ""
+
+#: config/tc-s390.c:888
+msgid "relocation not applicable"
+msgstr ""
+
+#: config/tc-s390.c:1010
+msgid "invalid operand suffix"
+msgstr ""
+
+#: config/tc-s390.c:1031
+msgid "syntax error; missing '(' after displacement"
+msgstr ""
+
+#: config/tc-s390.c:1040 config/tc-s390.c:1064 config/tc-s390.c:1078
+msgid "syntax error; expected ,"
+msgstr ""
+
+#: config/tc-s390.c:1059
+msgid "syntax error; missing ')' after base register"
+msgstr ""
+
+#: config/tc-s390.c:1072
+msgid "syntax error; ')' not allowed here"
+msgstr ""
+
+#: config/tc-s390.c:1222 config/tc-s390.c:1239 config/tc-s390.c:1248
+msgid "Invalid .insn format\n"
+msgstr ""
+
+#: config/tc-s390.c:1229
+#, c-format
+msgid "Unrecognized opcode format: `%s'"
+msgstr ""
+
+#: config/tc-s390.c:1250
+msgid "second operand of .insn not a constant\n"
+msgstr ""
+
+#: config/tc-s390.c:1252
+msgid "missing comma after insn constant\n"
+msgstr ""
+
+#: config/tc-s390.c:1521
+msgid "unresolved fx_subsy symbol that must be resolved"
+msgstr ""
+
+#: config/tc-sh.c:883
 msgid "illegal register after @-"
 msgstr ""
 
-#: config/tc-sh.c:894
+#: config/tc-sh.c:899
 msgid "must be @(r0,...)"
 msgstr ""
 
-#: config/tc-sh.c:910
+#: config/tc-sh.c:915
 msgid "syntax error in @(r0,...)"
 msgstr ""
 
-#: config/tc-sh.c:943 config/tc-sh.c:948
+#: config/tc-sh.c:948 config/tc-sh.c:953
 msgid "syntax error in @(disp,[Rn, gbr, pc])"
 msgstr ""
 
-#: config/tc-sh.c:953
+#: config/tc-sh.c:958
 msgid "expecting )"
 msgstr ""
 
-#: config/tc-sh.c:962
+#: config/tc-sh.c:967
 msgid "illegal register after @"
 msgstr ""
 
-#: config/tc-sh.c:1523
+#: config/tc-sh.c:1528
 #, c-format
 msgid "Invalid register: 'r%d'"
 msgstr ""
 
-#: config/tc-sh.c:1686
+#: config/tc-sh.c:1691
 msgid "insn can't be combined with parallel processing insn"
 msgstr ""
 
-#: config/tc-sh.c:1693 config/tc-sh.c:1704
+#: config/tc-sh.c:1698 config/tc-sh.c:1709
 msgid "multiple movx specifications"
 msgstr ""
 
-#: config/tc-sh.c:1698 config/tc-sh.c:1725
+#: config/tc-sh.c:1703 config/tc-sh.c:1730
 msgid "multiple movy specifications"
 msgstr ""
 
-#: config/tc-sh.c:1706
+#: config/tc-sh.c:1711
 msgid "invalid movx address register"
 msgstr ""
 
-#: config/tc-sh.c:1712 config/tc-sh.c:1717
+#: config/tc-sh.c:1717 config/tc-sh.c:1722
 msgid "invalid movx dsp register"
 msgstr ""
 
-#: config/tc-sh.c:1734 config/tc-sh.c:1739
+#: config/tc-sh.c:1739 config/tc-sh.c:1744
 msgid "invalid movy dsp register"
 msgstr ""
 
-#: config/tc-sh.c:1743
+#: config/tc-sh.c:1748
 msgid "invalid movy address register"
 msgstr ""
 
-#: config/tc-sh.c:1749
+#: config/tc-sh.c:1754
 msgid "dsp immediate shift value not constant"
 msgstr ""
 
-#: config/tc-sh.c:1756 config/tc-sh.c:1769
+#: config/tc-sh.c:1761 config/tc-sh.c:1774
 msgid "multiple parallel processing specifications"
 msgstr ""
 
-#: config/tc-sh.c:1762
+#: config/tc-sh.c:1767
 msgid "multiple condition specifications"
 msgstr ""
 
-#: config/tc-sh.c:1778
+#: config/tc-sh.c:1783
 msgid "insn cannot be combined with pmuls"
 msgstr ""
 
-#: config/tc-sh.c:1795
+#: config/tc-sh.c:1800
 msgid "bad padd / psub pmuls output operand"
 msgstr ""
 
-#: config/tc-sh.c:1805
+#: config/tc-sh.c:1810
 msgid "condition not followed by conditionalizable insn"
 msgstr ""
 
-#: config/tc-sh.c:1815
+#: config/tc-sh.c:1820
 msgid "unrecognized characters at end of parallel processing insn"
 msgstr ""
 
-#: config/tc-sh.c:1931
+#: config/tc-sh.c:1936
 #, c-format
 msgid "excess operands: '%s'"
 msgstr ""
 
-#: config/tc-sh.c:2099
+#: config/tc-sh.c:2104
 msgid ".uses pseudo-op seen when not relaxing"
 msgstr ""
 
-#: config/tc-sh.c:2105
+#: config/tc-sh.c:2110
 msgid "bad .uses format"
 msgstr ""
 
-#: config/tc-sh.c:2166
+#: config/tc-sh.c:2171
 msgid ""
 "SH options:\n"
 "-little\t\t\tgenerate little endian code\n"
@@ -6314,61 +6423,61 @@
 "-dsp\t\t\tenable sh-dsp insns, and disable sh3e / sh4 insns.\n"
 msgstr ""
 
-#: config/tc-sh.c:2177 config/tc-w65.c:862
+#: config/tc-sh.c:2182 config/tc-w65.c:862
 msgid "call to tc_Nout_fix_to_chars \n"
 msgstr ""
 
-#: config/tc-sh.c:2261
+#: config/tc-sh.c:2266
 msgid ".uses does not refer to a local symbol in the same section"
 msgstr ""
 
-#: config/tc-sh.c:2280
+#: config/tc-sh.c:2285
 msgid "can't find fixup pointed to by .uses"
 msgstr ""
 
-#: config/tc-sh.c:2303
+#: config/tc-sh.c:2308
 msgid ".uses target does not refer to a local symbol in the same section"
 msgstr ""
 
-#: config/tc-sh.c:2401
+#: config/tc-sh.c:2406
 msgid "displacement overflows 12-bit field"
 msgstr ""
 
-#: config/tc-sh.c:2404
+#: config/tc-sh.c:2409
 #, c-format
 msgid "displacement to defined symbol %s overflows 12-bit field"
 msgstr ""
 
-#: config/tc-sh.c:2408
+#: config/tc-sh.c:2413
 #, c-format
 msgid "displacement to undefined symbol %s overflows 12-bit field"
 msgstr ""
 
-#: config/tc-sh.c:2486
+#: config/tc-sh.c:2491
 msgid "displacement overflows 8-bit field"
 msgstr ""
 
-#: config/tc-sh.c:2489
+#: config/tc-sh.c:2494
 #, c-format
 msgid "displacement to defined symbol %s overflows 8-bit field"
 msgstr ""
 
-#: config/tc-sh.c:2493
+#: config/tc-sh.c:2498
 #, c-format
 msgid "displacement to undefined symbol %s overflows 8-bit field "
 msgstr ""
 
-#: config/tc-sh.c:2506
+#: config/tc-sh.c:2511
 #, c-format
 msgid "overflow in branch to %s; converted into longer instruction sequence"
 msgstr ""
 
-#: config/tc-sh.c:2581 config/tc-sh.c:2629 config/tc-sparc.c:4084
+#: config/tc-sh.c:2586 config/tc-sh.c:2634 config/tc-sparc.c:4084
 #: config/tc-sparc.c:4109
 msgid "misaligned data"
 msgstr ""
 
-#: config/tc-sh.c:3003
+#: config/tc-sh.c:3008
 msgid "misaligned offset"
 msgstr ""
 
@@ -6390,6 +6499,11 @@
 msgid "invalid architecture -A%s"
 msgstr ""
 
+#: config/tc-sparc.c:548
+#, c-format
+msgid "No compiled in support for %d bit object file format"
+msgstr ""
+
 #: config/tc-sparc.c:585
 msgid "Unrecognized option following -K"
 msgstr ""
@@ -7908,8 +8022,8 @@
 msgid "Unassigned file number %ld"
 msgstr ""
 
-#: dwarf2dbg.c:1255 dwarf2dbg.c:1263 dwarf2dbg.c:1271 dwarf2dbg.c:1284
-#: dwarf2dbg.c:1291
+#: dwarf2dbg.c:1258 dwarf2dbg.c:1266 dwarf2dbg.c:1274 dwarf2dbg.c:1287
+#: dwarf2dbg.c:1294
 msgid "dwarf2 is not supported for this object file format"
 msgstr ""
 
@@ -8178,31 +8292,31 @@
 msgid "Bad expression"
 msgstr ""
 
-#: expr.c:1674
+#: expr.c:1677
 msgid "missing operand; zero assumed"
 msgstr ""
 
-#: expr.c:1707
+#: expr.c:1710
 msgid "operation combines symbols in different segments"
 msgstr ""
 
-#: expr.c:1724
+#: expr.c:1727
 msgid "left operand is a bignum; integer 0 assumed"
 msgstr ""
 
-#: expr.c:1726
+#: expr.c:1729
 msgid "left operand is a float; integer 0 assumed"
 msgstr ""
 
-#: expr.c:1735
+#: expr.c:1738
 msgid "right operand is a bignum; integer 0 assumed"
 msgstr ""
 
-#: expr.c:1737
+#: expr.c:1740
 msgid "right operand is a float; integer 0 assumed"
 msgstr ""
 
-#: expr.c:1793 symbols.c:1089
+#: expr.c:1796 symbols.c:1089
 msgid "division by zero"
 msgstr ""
 
@@ -8665,34 +8779,34 @@
 msgid "Error: "
 msgstr ""
 
-#: messages.c:413 messages.c:429
+#: messages.c:413 messages.c:433
 msgid "Fatal error: "
 msgstr ""
 
-#: messages.c:446
+#: messages.c:450
 msgid "Internal error!\n"
 msgstr ""
 
-#: messages.c:448
+#: messages.c:452
 #, c-format
 msgid "Assertion failure in %s at %s line %d.\n"
 msgstr ""
 
-#: messages.c:451
+#: messages.c:455
 #, c-format
 msgid "Assertion failure at %s line %d.\n"
 msgstr ""
 
-#: messages.c:452 messages.c:471
+#: messages.c:456 messages.c:475
 msgid "Please report this bug.\n"
 msgstr ""
 
-#: messages.c:466
+#: messages.c:470
 #, c-format
 msgid "Internal error, aborting at %s line %d in %s\n"
 msgstr ""
 
-#: messages.c:469
+#: messages.c:473
 #, c-format
 msgid "Internal error, aborting at %s line %d\n"
 msgstr ""
@@ -9152,36 +9266,36 @@
 msgid "local label %s is not defined"
 msgstr ""
 
-#: write.c:2187
+#: write.c:2201
 #, c-format
 msgid "alignment padding (%lu bytes) not a multiple of %ld"
 msgstr ""
 
-#: write.c:2297
+#: write.c:2311
 #, c-format
 msgid ".word %s-%s+%s didn't fit"
 msgstr ""
 
-#: write.c:2378
+#: write.c:2392
 msgid "attempt to .org backwards ignored"
 msgstr ""
 
-#: write.c:2402
+#: write.c:2416
 msgid ".space specifies non-absolute value"
 msgstr ""
 
-#: write.c:2406
+#: write.c:2420
 msgid ".space or .fill with negative value, ignored"
 msgstr ""
 
-#: write.c:2657
+#: write.c:2671
 #, c-format
 msgid ""
 "Subtraction of two symbols in different sections \"%s\" {%s section} - "
 "\"%s\" {%s section} at file address %s."
 msgstr ""
 
-#: write.c:2811
+#: write.c:2825
 #, c-format
 msgid "Value of %s too large for field of %d bytes at %s"
 msgstr ""
diff --git a/gas/symbols.c b/gas/symbols.c
index fba40cf..fc2e7a5 100644
--- a/gas/symbols.c
+++ b/gas/symbols.c
@@ -1,5 +1,5 @@
 /* symbols.c -symbol table-
-   Copyright (C) 1987, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000
+   Copyright (C) 1987, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001
    Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
@@ -1530,7 +1530,7 @@
   int label_number;
   int instance_number;
   char *type;
-  const char *message_format = _("\"%d\" (instance number %d of a %s label)");
+  const char *message_format;
   int index = 0;
 
 #ifdef LOCAL_LABEL_PREFIX
@@ -1554,6 +1554,7 @@
   for (instance_number = 0, p++; isdigit ((unsigned char) *p); ++p)
     instance_number = (10 * instance_number) + *p - '0';
 
+  message_format = _("\"%d\" (instance number %d of a %s label)");
   symbol_decode = obstack_alloc (&notes, strlen (message_format) + 30);
   sprintf (symbol_decode, message_format, label_number, instance_number, type);
 
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 1d8f6c8..66f06e0 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,40 @@
+2001-02-26  H.J. Lu  <hjl@gnu.org>
+
+	* gas/ia64/opc-a-err.l: Change "Operand [3|4]" to "Operand [34]".
+
+2001-02-23  H.J. Lu  <hjl@gnu.org>
+
+	* gas/ia64/opc-a-err.l: Fix "cmp4.lt.or".
+
+	* gas/ia64/opc-a.pl: Add tests for pseudo-ops for "cmp" and
+	"cmp4".
+	* gas/ia64/opc-a.s: Rebuilt.
+	* gas/ia64/opc-a.d: Likewise.
+
+2001-02-17  Chris Demetriou  <cgd@broadcom.com>
+
+	* gas/mips/mips32.d: Remove ELF dependencies.  This test
+	wasn't meant to be ELF specific, and doesn't have to be.
+	* gas/mips/mips64.d: Likewise.
+
+2001-02-17  Chris Demetriou  <cgd@broadcom.com>
+
+	* gas/mips/mips.exp: Don't attempt the elf_e_flags family of
+	tests if not ELF; they test ELF-specific features.
+
+2001-02-08  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
+
+	* gas/mri/mri.exp: Don't execute the M68K specific tests 
+	on m6811-elf and m6812-elf targets, still run the generic MRI tests.
+
+2001-02-04  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
+
+	* gas/m68hc11/malis.s: New test to verify compliance with Motorola
+	Assembly Language Input Standard.
+	* gas/m68hc11/malis.d: New file.
+	* gas/m68hc11/malis-include.s: New file.
+	* gas/m68hc11/all.exp: Add the new test.
+
 2001-01-12  Alan Modra  <alan@linuxcare.com.au>
 
 	* gas/i386/i386.exp (gas_64_check): Correct target string.
diff --git a/gas/testsuite/gas/ia64/opc-a-err.l b/gas/testsuite/gas/ia64/opc-a-err.l
index 571a825..167659f 100644
--- a/gas/testsuite/gas/ia64/opc-a-err.l
+++ b/gas/testsuite/gas/ia64/opc-a-err.l
@@ -14,5 +14,5 @@
 .*:18: Error: Operand 2 of `xor' should be .*
 .*:20: Error: Operand 2 of `andcm' should be .*
 .*:21: Error: Operand 2 of `andcm' should be .*
-.*:23: Error: Operand 3 of `cmp4.lt.or' should be r0
-.*:24: Error: Operand 3 of `cmp4.lt.or' should be r0
+.*:23: Error: Operand [34] of `cmp4.lt.or' should be r0
+.*:24: Error: Operand [34] of `cmp4.lt.or' should be r0
diff --git a/gas/testsuite/gas/ia64/opc-a.d b/gas/testsuite/gas/ia64/opc-a.d
index 132900b..9a2a82f 100644
--- a/gas/testsuite/gas/ia64/opc-a.d
+++ b/gas/testsuite/gas/ia64/opc-a.d
@@ -151,140 +151,212 @@
  2f6:	30 18 10 84 70 60 	            cmp\.eq\.or\.andcm p3,p2=r3,r4
  2fc:	30 20 08 e5       	            cmp\.eq\.or\.andcm p3,p2=3,r4
  300:	00 10 00 08 43 30 	\[MII\]       cmp\.eq\.and p2,p3=r0,r4
- 306:	20 00 10 86 68 40 	            cmp\.eq\.or p2,p3=r0,r4
- 30c:	00 20 0c e1       	            cmp\.eq\.or\.andcm p2,p3=r0,r4
- 310:	00 10 02 08 43 34 	\[MII\]       cmp\.ne\.or p2,p3=r0,r4
- 316:	20 04 10 86 60 60 	            cmp\.ne\.and p2,p3=r0,r4
- 31c:	08 20 08 e1       	            cmp\.ne\.or\.andcm p3,p2=r0,r4
- 320:	00 10 02 08 43 30 	\[MII\]       cmp\.ne\.and p2,p3=r0,r4
- 326:	20 04 10 86 68 40 	            cmp\.ne\.or p2,p3=r0,r4
- 32c:	08 20 0c e1       	            cmp\.ne\.or\.andcm p2,p3=r0,r4
- 330:	00 10 00 08 43 34 	\[MII\]       cmp\.eq\.or p2,p3=r0,r4
- 336:	20 00 10 86 60 60 	            cmp\.eq\.and p2,p3=r0,r4
- 33c:	00 20 08 e1       	            cmp\.eq\.or\.andcm p3,p2=r0,r4
- 340:	00 10 02 08 43 32 	\[MII\]       cmp\.lt\.and p2,p3=r0,r4
- 346:	20 04 10 86 6c 40 	            cmp\.lt\.or p2,p3=r0,r4
- 34c:	08 20 0c e9       	            cmp\.lt\.or\.andcm p2,p3=r0,r4
- 350:	00 10 00 08 43 36 	\[MII\]       cmp\.ge\.or p2,p3=r0,r4
- 356:	20 00 10 86 64 60 	            cmp\.ge\.and p2,p3=r0,r4
- 35c:	00 20 08 e9       	            cmp\.ge\.or\.andcm p3,p2=r0,r4
- 360:	00 10 02 08 03 32 	\[MII\]       cmp\.le\.and p2,p3=r0,r4
- 366:	20 04 10 06 6c 40 	            cmp\.le\.or p2,p3=r0,r4
- 36c:	08 20 0c e8       	            cmp\.le\.or\.andcm p2,p3=r0,r4
- 370:	00 10 00 08 03 36 	\[MII\]       cmp\.gt\.or p2,p3=r0,r4
- 376:	20 00 10 06 64 60 	            cmp\.gt\.and p2,p3=r0,r4
- 37c:	00 20 08 e8       	            cmp\.gt\.or\.andcm p3,p2=r0,r4
- 380:	00 10 00 08 03 32 	\[MII\]       cmp\.gt\.and p2,p3=r0,r4
- 386:	20 00 10 06 6c 40 	            cmp\.gt\.or p2,p3=r0,r4
- 38c:	00 20 0c e8       	            cmp\.gt\.or\.andcm p2,p3=r0,r4
- 390:	00 10 02 08 03 36 	\[MII\]       cmp\.le\.or p2,p3=r0,r4
- 396:	20 04 10 06 64 60 	            cmp\.le\.and p2,p3=r0,r4
- 39c:	08 20 08 e8       	            cmp\.le\.or\.andcm p3,p2=r0,r4
- 3a0:	00 10 00 08 43 32 	\[MII\]       cmp\.ge\.and p2,p3=r0,r4
- 3a6:	20 00 10 86 6c 40 	            cmp\.ge\.or p2,p3=r0,r4
- 3ac:	00 20 0c e9       	            cmp\.ge\.or\.andcm p2,p3=r0,r4
- 3b0:	00 10 02 08 43 36 	\[MII\]       cmp\.lt\.or p2,p3=r0,r4
- 3b6:	20 04 10 86 64 60 	            cmp\.lt\.and p2,p3=r0,r4
- 3bc:	08 20 08 e9       	            cmp\.lt\.or\.andcm p3,p2=r0,r4
- 3c0:	00 10 0c 08 83 38 	\[MII\]       cmp4\.eq p2,p3=r3,r4
- 3c6:	20 18 10 06 73 60 	            cmp4\.eq p2,p3=3,r4
- 3cc:	30 20 08 e2       	            cmp4\.eq p3,p2=r3,r4
- 3d0:	00 18 0c 08 82 39 	\[MII\]       cmp4\.eq p3,p2=3,r4
- 3d6:	20 18 10 06 61 40 	            cmp4\.lt p2,p3=r3,r4
- 3dc:	30 20 0c c6       	            cmp4\.lt p2,p3=3,r4
- 3e0:	00 18 10 06 82 30 	\[MII\]       cmp4\.lt p3,p2=r4,r3
- 3e6:	20 10 10 06 63 40 	            cmp4\.lt p2,p3=2,r4
- 3ec:	40 18 0c c2       	            cmp4\.lt p2,p3=r4,r3
- 3f0:	00 18 08 08 82 31 	\[MII\]       cmp4\.lt p3,p2=2,r4
- 3f6:	30 18 10 04 61 60 	            cmp4\.lt p3,p2=r3,r4
- 3fc:	30 20 08 c6       	            cmp4\.lt p3,p2=3,r4
- 400:	00 10 0c 08 83 34 	\[MII\]       cmp4\.ltu p2,p3=r3,r4
- 406:	20 18 10 06 6b 60 	            cmp4\.ltu p2,p3=3,r4
- 40c:	40 18 08 d2       	            cmp4\.ltu p3,p2=r4,r3
- 410:	00 10 08 08 83 35 	\[MII\]       cmp4\.ltu p2,p3=2,r4
- 416:	20 20 0c 06 69 60 	            cmp4\.ltu p2,p3=r4,r3
- 41c:	20 20 08 d6       	            cmp4\.ltu p3,p2=2,r4
- 420:	00 18 0c 08 82 34 	\[MII\]       cmp4\.ltu p3,p2=r3,r4
- 426:	30 18 10 04 6b 40 	            cmp4\.ltu p3,p2=3,r4
- 42c:	38 20 0c e2       	            cmp4\.eq\.unc p2,p3=r3,r4
- 430:	00 10 0e 08 83 39 	\[MII\]       cmp4\.eq\.unc p2,p3=3,r4
- 436:	30 1c 10 04 71 60 	            cmp4\.eq\.unc p3,p2=r3,r4
- 43c:	38 20 08 e6       	            cmp4\.eq\.unc p3,p2=3,r4
- 440:	00 10 0e 08 83 30 	\[MII\]       cmp4\.lt\.unc p2,p3=r3,r4
- 446:	20 1c 10 06 63 60 	            cmp4\.lt\.unc p2,p3=3,r4
- 44c:	48 18 08 c2       	            cmp4\.lt\.unc p3,p2=r4,r3
- 450:	00 10 0a 08 83 31 	\[MII\]       cmp4\.lt\.unc p2,p3=2,r4
- 456:	20 24 0c 06 61 60 	            cmp4\.lt\.unc p2,p3=r4,r3
- 45c:	28 20 08 c6       	            cmp4\.lt\.unc p3,p2=2,r4
- 460:	00 18 0e 08 82 30 	\[MII\]       cmp4\.lt\.unc p3,p2=r3,r4
- 466:	30 1c 10 04 63 40 	            cmp4\.lt\.unc p3,p2=3,r4
- 46c:	38 20 0c d2       	            cmp4\.ltu\.unc p2,p3=r3,r4
- 470:	00 10 0e 08 83 35 	\[MII\]       cmp4\.ltu\.unc p2,p3=3,r4
- 476:	30 24 0c 04 69 40 	            cmp4\.ltu\.unc p3,p2=r4,r3
- 47c:	28 20 0c d6       	            cmp4\.ltu\.unc p2,p3=2,r4
- 480:	00 10 12 06 83 34 	\[MII\]       cmp4\.ltu\.unc p2,p3=r4,r3
- 486:	30 14 10 04 6b 60 	            cmp4\.ltu\.unc p3,p2=2,r4
- 48c:	38 20 08 d2       	            cmp4\.ltu\.unc p3,p2=r3,r4
- 490:	00 18 0e 08 82 35 	\[MII\]       cmp4\.ltu\.unc p3,p2=3,r4
- 496:	20 18 10 86 61 40 	            cmp4\.eq\.and p2,p3=r3,r4
- 49c:	30 20 0c c7       	            cmp4\.eq\.and p2,p3=3,r4
- 4a0:	00 10 0c 08 c3 34 	\[MII\]       cmp4\.eq\.or p2,p3=r3,r4
- 4a6:	20 18 10 86 6b 40 	            cmp4\.eq\.or p2,p3=3,r4
- 4ac:	30 20 0c e3       	            cmp4\.eq\.or\.andcm p2,p3=r3,r4
- 4b0:	00 10 0c 08 c3 39 	\[MII\]       cmp4\.eq\.or\.andcm p2,p3=3,r4
- 4b6:	20 1c 10 86 69 40 	            cmp4\.ne\.or p2,p3=r3,r4
- 4bc:	38 20 0c d7       	            cmp4\.ne\.or p2,p3=3,r4
- 4c0:	00 10 0e 08 c3 30 	\[MII\]       cmp4\.ne\.and p2,p3=r3,r4
- 4c6:	20 1c 10 86 63 60 	            cmp4\.ne\.and p2,p3=3,r4
- 4cc:	38 20 08 e3       	            cmp4\.ne\.or\.andcm p3,p2=r3,r4
- 4d0:	00 18 0e 08 c2 39 	\[MII\]       cmp4\.ne\.or\.andcm p3,p2=3,r4
- 4d6:	20 1c 10 86 61 40 	            cmp4\.ne\.and p2,p3=r3,r4
- 4dc:	38 20 0c c7       	            cmp4\.ne\.and p2,p3=3,r4
- 4e0:	00 10 0e 08 c3 34 	\[MII\]       cmp4\.ne\.or p2,p3=r3,r4
- 4e6:	20 1c 10 86 6b 40 	            cmp4\.ne\.or p2,p3=3,r4
- 4ec:	38 20 0c e3       	            cmp4\.ne\.or\.andcm p2,p3=r3,r4
- 4f0:	00 10 0e 08 c3 39 	\[MII\]       cmp4\.ne\.or\.andcm p2,p3=3,r4
- 4f6:	20 18 10 86 69 40 	            cmp4\.eq\.or p2,p3=r3,r4
- 4fc:	30 20 0c d7       	            cmp4\.eq\.or p2,p3=3,r4
- 500:	00 10 0c 08 c3 30 	\[MII\]       cmp4\.eq\.and p2,p3=r3,r4
- 506:	20 18 10 86 63 60 	            cmp4\.eq\.and p2,p3=3,r4
- 50c:	30 20 08 e3       	            cmp4\.eq\.or\.andcm p3,p2=r3,r4
- 510:	00 18 0c 08 c2 39 	\[MII\]       cmp4\.eq\.or\.andcm p3,p2=3,r4
- 516:	20 00 10 86 61 40 	            cmp4\.eq\.and p2,p3=r0,r4
- 51c:	00 20 0c d3       	            cmp4\.eq\.or p2,p3=r0,r4
- 520:	00 10 00 08 c3 38 	\[MII\]       cmp4\.eq\.or\.andcm p2,p3=r0,r4
- 526:	20 04 10 86 69 40 	            cmp4\.ne\.or p2,p3=r0,r4
- 52c:	08 20 0c c3       	            cmp4\.ne\.and p2,p3=r0,r4
- 530:	00 18 02 08 c2 38 	\[MII\]       cmp4\.ne\.or\.andcm p3,p2=r0,r4
- 536:	20 04 10 86 61 40 	            cmp4\.ne\.and p2,p3=r0,r4
- 53c:	08 20 0c d3       	            cmp4\.ne\.or p2,p3=r0,r4
- 540:	00 10 02 08 c3 38 	\[MII\]       cmp4\.ne\.or\.andcm p2,p3=r0,r4
- 546:	20 00 10 86 69 40 	            cmp4\.eq\.or p2,p3=r0,r4
- 54c:	00 20 0c c3       	            cmp4\.eq\.and p2,p3=r0,r4
- 550:	00 18 00 08 c2 38 	\[MII\]       cmp4\.eq\.or\.andcm p3,p2=r0,r4
- 556:	20 04 10 86 65 40 	            cmp4\.lt\.and p2,p3=r0,r4
- 55c:	08 20 0c db       	            cmp4\.lt\.or p2,p3=r0,r4
- 560:	00 10 02 08 c3 3a 	\[MII\]       cmp4\.lt\.or\.andcm p2,p3=r0,r4
- 566:	20 00 10 86 6d 40 	            cmp4\.ge\.or p2,p3=r0,r4
- 56c:	00 20 0c cb       	            cmp4\.ge\.and p2,p3=r0,r4
- 570:	00 18 00 08 c2 3a 	\[MII\]       cmp4\.ge\.or\.andcm p3,p2=r0,r4
- 576:	20 04 10 06 65 40 	            cmp4\.le\.and p2,p3=r0,r4
- 57c:	08 20 0c da       	            cmp4\.le\.or p2,p3=r0,r4
- 580:	00 10 02 08 83 3a 	\[MII\]       cmp4\.le\.or\.andcm p2,p3=r0,r4
- 586:	20 00 10 06 6d 40 	            cmp4\.gt\.or p2,p3=r0,r4
- 58c:	00 20 0c ca       	            cmp4\.gt\.and p2,p3=r0,r4
- 590:	00 18 00 08 82 3a 	\[MII\]       cmp4\.gt\.or\.andcm p3,p2=r0,r4
- 596:	20 00 10 06 65 40 	            cmp4\.gt\.and p2,p3=r0,r4
- 59c:	00 20 0c da       	            cmp4\.gt\.or p2,p3=r0,r4
- 5a0:	00 10 00 08 83 3a 	\[MII\]       cmp4\.gt\.or\.andcm p2,p3=r0,r4
- 5a6:	20 04 10 06 6d 40 	            cmp4\.le\.or p2,p3=r0,r4
- 5ac:	08 20 0c ca       	            cmp4\.le\.and p2,p3=r0,r4
- 5b0:	00 18 02 08 82 3a 	\[MII\]       cmp4\.le\.or\.andcm p3,p2=r0,r4
- 5b6:	20 00 10 86 65 40 	            cmp4\.ge\.and p2,p3=r0,r4
- 5bc:	00 20 0c db       	            cmp4\.ge\.or p2,p3=r0,r4
- 5c0:	00 10 00 08 c3 3a 	\[MII\]       cmp4\.ge\.or\.andcm p2,p3=r0,r4
- 5c6:	20 04 10 86 6d 40 	            cmp4\.lt\.or p2,p3=r0,r4
- 5cc:	08 20 0c cb       	            cmp4\.lt\.and p2,p3=r0,r4
- 5d0:	01 18 02 08 c2 3a 	\[MII\]       cmp4\.lt\.or\.andcm p3,p2=r0,r4
- 5d6:	00 00 00 02 00 00 	            nop\.i 0x0
- 5dc:	00 00 04 00       	            nop\.i 0x0;;
+ 306:	20 20 00 86 60 40 	            cmp\.eq\.and p2,p3=r4,r0
+ 30c:	00 20 0c d1       	            cmp\.eq\.or p2,p3=r0,r4
+ 310:	00 10 10 00 43 34 	\[MII\]       cmp\.eq\.or p2,p3=r4,r0
+ 316:	20 00 10 86 70 40 	            cmp\.eq\.or\.andcm p2,p3=r0,r4
+ 31c:	40 00 0c e1       	            cmp\.eq\.or\.andcm p2,p3=r4,r0
+ 320:	00 10 02 08 43 34 	\[MII\]       cmp\.ne\.or p2,p3=r0,r4
+ 326:	20 24 00 86 68 40 	            cmp\.ne\.or p2,p3=r4,r0
+ 32c:	08 20 0c c1       	            cmp\.ne\.and p2,p3=r0,r4
+ 330:	00 10 12 00 43 30 	\[MII\]       cmp\.ne\.and p2,p3=r4,r0
+ 336:	30 04 10 84 70 60 	            cmp\.ne\.or\.andcm p3,p2=r0,r4
+ 33c:	48 00 08 e1       	            cmp\.ne\.or\.andcm p3,p2=r4,r0
+ 340:	00 10 02 08 43 30 	\[MII\]       cmp\.ne\.and p2,p3=r0,r4
+ 346:	20 24 00 86 60 40 	            cmp\.ne\.and p2,p3=r4,r0
+ 34c:	08 20 0c d1       	            cmp\.ne\.or p2,p3=r0,r4
+ 350:	00 10 12 00 43 34 	\[MII\]       cmp\.ne\.or p2,p3=r4,r0
+ 356:	20 04 10 86 70 40 	            cmp\.ne\.or\.andcm p2,p3=r0,r4
+ 35c:	48 00 0c e1       	            cmp\.ne\.or\.andcm p2,p3=r4,r0
+ 360:	00 10 00 08 43 34 	\[MII\]       cmp\.eq\.or p2,p3=r0,r4
+ 366:	20 20 00 86 68 40 	            cmp\.eq\.or p2,p3=r4,r0
+ 36c:	00 20 0c c1       	            cmp\.eq\.and p2,p3=r0,r4
+ 370:	00 10 10 00 43 30 	\[MII\]       cmp\.eq\.and p2,p3=r4,r0
+ 376:	30 00 10 84 70 60 	            cmp\.eq\.or\.andcm p3,p2=r0,r4
+ 37c:	40 00 08 e1       	            cmp\.eq\.or\.andcm p3,p2=r4,r0
+ 380:	00 10 02 08 43 32 	\[MII\]       cmp\.lt\.and p2,p3=r0,r4
+ 386:	20 00 10 06 64 40 	            cmp\.gt\.and p2,p3=r0,r4
+ 38c:	08 20 0c d9       	            cmp\.lt\.or p2,p3=r0,r4
+ 390:	00 10 00 08 03 36 	\[MII\]       cmp\.gt\.or p2,p3=r0,r4
+ 396:	20 04 10 86 74 40 	            cmp\.lt\.or\.andcm p2,p3=r0,r4
+ 39c:	00 20 0c e8       	            cmp\.gt\.or\.andcm p2,p3=r0,r4
+ 3a0:	00 10 00 08 43 36 	\[MII\]       cmp\.ge\.or p2,p3=r0,r4
+ 3a6:	20 04 10 06 6c 40 	            cmp\.le\.or p2,p3=r0,r4
+ 3ac:	00 20 0c c9       	            cmp\.ge\.and p2,p3=r0,r4
+ 3b0:	00 10 02 08 03 32 	\[MII\]       cmp\.le\.and p2,p3=r0,r4
+ 3b6:	30 00 10 84 74 60 	            cmp\.ge\.or\.andcm p3,p2=r0,r4
+ 3bc:	08 20 08 e8       	            cmp\.le\.or\.andcm p3,p2=r0,r4
+ 3c0:	00 10 02 08 03 32 	\[MII\]       cmp\.le\.and p2,p3=r0,r4
+ 3c6:	20 00 10 86 64 40 	            cmp\.ge\.and p2,p3=r0,r4
+ 3cc:	08 20 0c d8       	            cmp\.le\.or p2,p3=r0,r4
+ 3d0:	00 10 00 08 43 36 	\[MII\]       cmp\.ge\.or p2,p3=r0,r4
+ 3d6:	20 04 10 06 74 40 	            cmp\.le\.or\.andcm p2,p3=r0,r4
+ 3dc:	00 20 0c e9       	            cmp\.ge\.or\.andcm p2,p3=r0,r4
+ 3e0:	00 10 00 08 03 36 	\[MII\]       cmp\.gt\.or p2,p3=r0,r4
+ 3e6:	20 04 10 86 6c 40 	            cmp\.lt\.or p2,p3=r0,r4
+ 3ec:	00 20 0c c8       	            cmp\.gt\.and p2,p3=r0,r4
+ 3f0:	00 10 02 08 43 32 	\[MII\]       cmp\.lt\.and p2,p3=r0,r4
+ 3f6:	30 00 10 04 74 60 	            cmp\.gt\.or\.andcm p3,p2=r0,r4
+ 3fc:	08 20 08 e9       	            cmp\.lt\.or\.andcm p3,p2=r0,r4
+ 400:	00 10 00 08 03 32 	\[MII\]       cmp\.gt\.and p2,p3=r0,r4
+ 406:	20 04 10 86 64 40 	            cmp\.lt\.and p2,p3=r0,r4
+ 40c:	00 20 0c d8       	            cmp\.gt\.or p2,p3=r0,r4
+ 410:	00 10 02 08 43 36 	\[MII\]       cmp\.lt\.or p2,p3=r0,r4
+ 416:	20 00 10 06 74 40 	            cmp\.gt\.or\.andcm p2,p3=r0,r4
+ 41c:	08 20 0c e9       	            cmp\.lt\.or\.andcm p2,p3=r0,r4
+ 420:	00 10 02 08 03 36 	\[MII\]       cmp\.le\.or p2,p3=r0,r4
+ 426:	20 00 10 86 6c 40 	            cmp\.ge\.or p2,p3=r0,r4
+ 42c:	08 20 0c c8       	            cmp\.le\.and p2,p3=r0,r4
+ 430:	00 10 00 08 43 32 	\[MII\]       cmp\.ge\.and p2,p3=r0,r4
+ 436:	30 04 10 04 74 60 	            cmp\.le\.or\.andcm p3,p2=r0,r4
+ 43c:	00 20 08 e9       	            cmp\.ge\.or\.andcm p3,p2=r0,r4
+ 440:	00 10 00 08 43 32 	\[MII\]       cmp\.ge\.and p2,p3=r0,r4
+ 446:	20 04 10 06 64 40 	            cmp\.le\.and p2,p3=r0,r4
+ 44c:	00 20 0c d9       	            cmp\.ge\.or p2,p3=r0,r4
+ 450:	00 10 02 08 03 36 	\[MII\]       cmp\.le\.or p2,p3=r0,r4
+ 456:	20 00 10 86 74 40 	            cmp\.ge\.or\.andcm p2,p3=r0,r4
+ 45c:	08 20 0c e8       	            cmp\.le\.or\.andcm p2,p3=r0,r4
+ 460:	00 10 02 08 43 36 	\[MII\]       cmp\.lt\.or p2,p3=r0,r4
+ 466:	20 00 10 06 6c 40 	            cmp\.gt\.or p2,p3=r0,r4
+ 46c:	08 20 0c c9       	            cmp\.lt\.and p2,p3=r0,r4
+ 470:	00 10 00 08 03 32 	\[MII\]       cmp\.gt\.and p2,p3=r0,r4
+ 476:	30 04 10 84 74 60 	            cmp\.lt\.or\.andcm p3,p2=r0,r4
+ 47c:	00 20 08 e8       	            cmp\.gt\.or\.andcm p3,p2=r0,r4
+ 480:	00 10 0c 08 83 38 	\[MII\]       cmp4\.eq p2,p3=r3,r4
+ 486:	20 18 10 06 73 60 	            cmp4\.eq p2,p3=3,r4
+ 48c:	30 20 08 e2       	            cmp4\.eq p3,p2=r3,r4
+ 490:	00 18 0c 08 82 39 	\[MII\]       cmp4\.eq p3,p2=3,r4
+ 496:	20 18 10 06 61 40 	            cmp4\.lt p2,p3=r3,r4
+ 49c:	30 20 0c c6       	            cmp4\.lt p2,p3=3,r4
+ 4a0:	00 18 10 06 82 30 	\[MII\]       cmp4\.lt p3,p2=r4,r3
+ 4a6:	20 10 10 06 63 40 	            cmp4\.lt p2,p3=2,r4
+ 4ac:	40 18 0c c2       	            cmp4\.lt p2,p3=r4,r3
+ 4b0:	00 18 08 08 82 31 	\[MII\]       cmp4\.lt p3,p2=2,r4
+ 4b6:	30 18 10 04 61 60 	            cmp4\.lt p3,p2=r3,r4
+ 4bc:	30 20 08 c6       	            cmp4\.lt p3,p2=3,r4
+ 4c0:	00 10 0c 08 83 34 	\[MII\]       cmp4\.ltu p2,p3=r3,r4
+ 4c6:	20 18 10 06 6b 60 	            cmp4\.ltu p2,p3=3,r4
+ 4cc:	40 18 08 d2       	            cmp4\.ltu p3,p2=r4,r3
+ 4d0:	00 10 08 08 83 35 	\[MII\]       cmp4\.ltu p2,p3=2,r4
+ 4d6:	20 20 0c 06 69 60 	            cmp4\.ltu p2,p3=r4,r3
+ 4dc:	20 20 08 d6       	            cmp4\.ltu p3,p2=2,r4
+ 4e0:	00 18 0c 08 82 34 	\[MII\]       cmp4\.ltu p3,p2=r3,r4
+ 4e6:	30 18 10 04 6b 40 	            cmp4\.ltu p3,p2=3,r4
+ 4ec:	38 20 0c e2       	            cmp4\.eq\.unc p2,p3=r3,r4
+ 4f0:	00 10 0e 08 83 39 	\[MII\]       cmp4\.eq\.unc p2,p3=3,r4
+ 4f6:	30 1c 10 04 71 60 	            cmp4\.eq\.unc p3,p2=r3,r4
+ 4fc:	38 20 08 e6       	            cmp4\.eq\.unc p3,p2=3,r4
+ 500:	00 10 0e 08 83 30 	\[MII\]       cmp4\.lt\.unc p2,p3=r3,r4
+ 506:	20 1c 10 06 63 60 	            cmp4\.lt\.unc p2,p3=3,r4
+ 50c:	48 18 08 c2       	            cmp4\.lt\.unc p3,p2=r4,r3
+ 510:	00 10 0a 08 83 31 	\[MII\]       cmp4\.lt\.unc p2,p3=2,r4
+ 516:	20 24 0c 06 61 60 	            cmp4\.lt\.unc p2,p3=r4,r3
+ 51c:	28 20 08 c6       	            cmp4\.lt\.unc p3,p2=2,r4
+ 520:	00 18 0e 08 82 30 	\[MII\]       cmp4\.lt\.unc p3,p2=r3,r4
+ 526:	30 1c 10 04 63 40 	            cmp4\.lt\.unc p3,p2=3,r4
+ 52c:	38 20 0c d2       	            cmp4\.ltu\.unc p2,p3=r3,r4
+ 530:	00 10 0e 08 83 35 	\[MII\]       cmp4\.ltu\.unc p2,p3=3,r4
+ 536:	30 24 0c 04 69 40 	            cmp4\.ltu\.unc p3,p2=r4,r3
+ 53c:	28 20 0c d6       	            cmp4\.ltu\.unc p2,p3=2,r4
+ 540:	00 10 12 06 83 34 	\[MII\]       cmp4\.ltu\.unc p2,p3=r4,r3
+ 546:	30 14 10 04 6b 60 	            cmp4\.ltu\.unc p3,p2=2,r4
+ 54c:	38 20 08 d2       	            cmp4\.ltu\.unc p3,p2=r3,r4
+ 550:	00 18 0e 08 82 35 	\[MII\]       cmp4\.ltu\.unc p3,p2=3,r4
+ 556:	20 18 10 86 61 40 	            cmp4\.eq\.and p2,p3=r3,r4
+ 55c:	30 20 0c c7       	            cmp4\.eq\.and p2,p3=3,r4
+ 560:	00 10 0c 08 c3 34 	\[MII\]       cmp4\.eq\.or p2,p3=r3,r4
+ 566:	20 18 10 86 6b 40 	            cmp4\.eq\.or p2,p3=3,r4
+ 56c:	30 20 0c e3       	            cmp4\.eq\.or\.andcm p2,p3=r3,r4
+ 570:	00 10 0c 08 c3 39 	\[MII\]       cmp4\.eq\.or\.andcm p2,p3=3,r4
+ 576:	20 1c 10 86 69 40 	            cmp4\.ne\.or p2,p3=r3,r4
+ 57c:	38 20 0c d7       	            cmp4\.ne\.or p2,p3=3,r4
+ 580:	00 10 0e 08 c3 30 	\[MII\]       cmp4\.ne\.and p2,p3=r3,r4
+ 586:	20 1c 10 86 63 60 	            cmp4\.ne\.and p2,p3=3,r4
+ 58c:	38 20 08 e3       	            cmp4\.ne\.or\.andcm p3,p2=r3,r4
+ 590:	00 18 0e 08 c2 39 	\[MII\]       cmp4\.ne\.or\.andcm p3,p2=3,r4
+ 596:	20 1c 10 86 61 40 	            cmp4\.ne\.and p2,p3=r3,r4
+ 59c:	38 20 0c c7       	            cmp4\.ne\.and p2,p3=3,r4
+ 5a0:	00 10 0e 08 c3 34 	\[MII\]       cmp4\.ne\.or p2,p3=r3,r4
+ 5a6:	20 1c 10 86 6b 40 	            cmp4\.ne\.or p2,p3=3,r4
+ 5ac:	38 20 0c e3       	            cmp4\.ne\.or\.andcm p2,p3=r3,r4
+ 5b0:	00 10 0e 08 c3 39 	\[MII\]       cmp4\.ne\.or\.andcm p2,p3=3,r4
+ 5b6:	20 18 10 86 69 40 	            cmp4\.eq\.or p2,p3=r3,r4
+ 5bc:	30 20 0c d7       	            cmp4\.eq\.or p2,p3=3,r4
+ 5c0:	00 10 0c 08 c3 30 	\[MII\]       cmp4\.eq\.and p2,p3=r3,r4
+ 5c6:	20 18 10 86 63 60 	            cmp4\.eq\.and p2,p3=3,r4
+ 5cc:	30 20 08 e3       	            cmp4\.eq\.or\.andcm p3,p2=r3,r4
+ 5d0:	00 18 0c 08 c2 39 	\[MII\]       cmp4\.eq\.or\.andcm p3,p2=3,r4
+ 5d6:	20 00 10 86 61 40 	            cmp4\.eq\.and p2,p3=r0,r4
+ 5dc:	40 00 0c c3       	            cmp4\.eq\.and p2,p3=r4,r0
+ 5e0:	00 10 00 08 c3 34 	\[MII\]       cmp4\.eq\.or p2,p3=r0,r4
+ 5e6:	20 20 00 86 69 40 	            cmp4\.eq\.or p2,p3=r4,r0
+ 5ec:	00 20 0c e3       	            cmp4\.eq\.or\.andcm p2,p3=r0,r4
+ 5f0:	00 10 10 00 c3 38 	\[MII\]       cmp4\.eq\.or\.andcm p2,p3=r4,r0
+ 5f6:	20 04 10 86 69 40 	            cmp4\.ne\.or p2,p3=r0,r4
+ 5fc:	48 00 0c d3       	            cmp4\.ne\.or p2,p3=r4,r0
+ 600:	00 10 02 08 c3 30 	\[MII\]       cmp4\.ne\.and p2,p3=r0,r4
+ 606:	20 24 00 86 61 60 	            cmp4\.ne\.and p2,p3=r4,r0
+ 60c:	08 20 08 e3       	            cmp4\.ne\.or\.andcm p3,p2=r0,r4
+ 610:	00 18 12 00 c2 38 	\[MII\]       cmp4\.ne\.or\.andcm p3,p2=r4,r0
+ 616:	20 04 10 86 61 40 	            cmp4\.ne\.and p2,p3=r0,r4
+ 61c:	48 00 0c c3       	            cmp4\.ne\.and p2,p3=r4,r0
+ 620:	00 10 02 08 c3 34 	\[MII\]       cmp4\.ne\.or p2,p3=r0,r4
+ 626:	20 24 00 86 69 40 	            cmp4\.ne\.or p2,p3=r4,r0
+ 62c:	08 20 0c e3       	            cmp4\.ne\.or\.andcm p2,p3=r0,r4
+ 630:	00 10 12 00 c3 38 	\[MII\]       cmp4\.ne\.or\.andcm p2,p3=r4,r0
+ 636:	20 00 10 86 69 40 	            cmp4\.eq\.or p2,p3=r0,r4
+ 63c:	40 00 0c d3       	            cmp4\.eq\.or p2,p3=r4,r0
+ 640:	00 10 00 08 c3 30 	\[MII\]       cmp4\.eq\.and p2,p3=r0,r4
+ 646:	20 20 00 86 61 60 	            cmp4\.eq\.and p2,p3=r4,r0
+ 64c:	00 20 08 e3       	            cmp4\.eq\.or\.andcm p3,p2=r0,r4
+ 650:	00 18 10 00 c2 38 	\[MII\]       cmp4\.eq\.or\.andcm p3,p2=r4,r0
+ 656:	20 04 10 86 65 40 	            cmp4\.lt\.and p2,p3=r0,r4
+ 65c:	00 20 0c ca       	            cmp4\.gt\.and p2,p3=r0,r4
+ 660:	00 10 02 08 c3 36 	\[MII\]       cmp4\.lt\.or p2,p3=r0,r4
+ 666:	20 00 10 06 6d 40 	            cmp4\.gt\.or p2,p3=r0,r4
+ 66c:	08 20 0c eb       	            cmp4\.lt\.or\.andcm p2,p3=r0,r4
+ 670:	00 10 00 08 83 3a 	\[MII\]       cmp4\.gt\.or\.andcm p2,p3=r0,r4
+ 676:	20 00 10 86 6d 40 	            cmp4\.ge\.or p2,p3=r0,r4
+ 67c:	08 20 0c da       	            cmp4\.le\.or p2,p3=r0,r4
+ 680:	00 10 00 08 c3 32 	\[MII\]       cmp4\.ge\.and p2,p3=r0,r4
+ 686:	20 04 10 06 65 60 	            cmp4\.le\.and p2,p3=r0,r4
+ 68c:	00 20 08 eb       	            cmp4\.ge\.or\.andcm p3,p2=r0,r4
+ 690:	00 18 02 08 82 3a 	\[MII\]       cmp4\.le\.or\.andcm p3,p2=r0,r4
+ 696:	20 04 10 06 65 40 	            cmp4\.le\.and p2,p3=r0,r4
+ 69c:	00 20 0c cb       	            cmp4\.ge\.and p2,p3=r0,r4
+ 6a0:	00 10 02 08 83 36 	\[MII\]       cmp4\.le\.or p2,p3=r0,r4
+ 6a6:	20 00 10 86 6d 40 	            cmp4\.ge\.or p2,p3=r0,r4
+ 6ac:	08 20 0c ea       	            cmp4\.le\.or\.andcm p2,p3=r0,r4
+ 6b0:	00 10 00 08 c3 3a 	\[MII\]       cmp4\.ge\.or\.andcm p2,p3=r0,r4
+ 6b6:	20 00 10 06 6d 40 	            cmp4\.gt\.or p2,p3=r0,r4
+ 6bc:	08 20 0c db       	            cmp4\.lt\.or p2,p3=r0,r4
+ 6c0:	00 10 00 08 83 32 	\[MII\]       cmp4\.gt\.and p2,p3=r0,r4
+ 6c6:	20 04 10 86 65 60 	            cmp4\.lt\.and p2,p3=r0,r4
+ 6cc:	00 20 08 ea       	            cmp4\.gt\.or\.andcm p3,p2=r0,r4
+ 6d0:	00 18 02 08 c2 3a 	\[MII\]       cmp4\.lt\.or\.andcm p3,p2=r0,r4
+ 6d6:	20 00 10 06 65 40 	            cmp4\.gt\.and p2,p3=r0,r4
+ 6dc:	08 20 0c cb       	            cmp4\.lt\.and p2,p3=r0,r4
+ 6e0:	00 10 00 08 83 36 	\[MII\]       cmp4\.gt\.or p2,p3=r0,r4
+ 6e6:	20 04 10 86 6d 40 	            cmp4\.lt\.or p2,p3=r0,r4
+ 6ec:	00 20 0c ea       	            cmp4\.gt\.or\.andcm p2,p3=r0,r4
+ 6f0:	00 10 02 08 c3 3a 	\[MII\]       cmp4\.lt\.or\.andcm p2,p3=r0,r4
+ 6f6:	20 04 10 06 6d 40 	            cmp4\.le\.or p2,p3=r0,r4
+ 6fc:	00 20 0c db       	            cmp4\.ge\.or p2,p3=r0,r4
+ 700:	00 10 02 08 83 32 	\[MII\]       cmp4\.le\.and p2,p3=r0,r4
+ 706:	20 00 10 86 65 60 	            cmp4\.ge\.and p2,p3=r0,r4
+ 70c:	08 20 08 ea       	            cmp4\.le\.or\.andcm p3,p2=r0,r4
+ 710:	00 18 00 08 c2 3a 	\[MII\]       cmp4\.ge\.or\.andcm p3,p2=r0,r4
+ 716:	20 00 10 86 65 40 	            cmp4\.ge\.and p2,p3=r0,r4
+ 71c:	08 20 0c ca       	            cmp4\.le\.and p2,p3=r0,r4
+ 720:	00 10 00 08 c3 36 	\[MII\]       cmp4\.ge\.or p2,p3=r0,r4
+ 726:	20 04 10 06 6d 40 	            cmp4\.le\.or p2,p3=r0,r4
+ 72c:	00 20 0c eb       	            cmp4\.ge\.or\.andcm p2,p3=r0,r4
+ 730:	00 10 02 08 83 3a 	\[MII\]       cmp4\.le\.or\.andcm p2,p3=r0,r4
+ 736:	20 04 10 86 6d 40 	            cmp4\.lt\.or p2,p3=r0,r4
+ 73c:	00 20 0c da       	            cmp4\.gt\.or p2,p3=r0,r4
+ 740:	00 10 02 08 c3 32 	\[MII\]       cmp4\.lt\.and p2,p3=r0,r4
+ 746:	20 00 10 06 65 60 	            cmp4\.gt\.and p2,p3=r0,r4
+ 74c:	08 20 08 eb       	            cmp4\.lt\.or\.andcm p3,p2=r0,r4
+ 750:	01 18 00 08 82 3a 	\[MII\]       cmp4\.gt\.or\.andcm p3,p2=r0,r4
+ 756:	00 00 00 02 00 00 	            nop\.i 0x0
+ 75c:	00 00 04 00       	            nop\.i 0x0;;
diff --git a/gas/testsuite/gas/ia64/opc-a.pl b/gas/testsuite/gas/ia64/opc-a.pl
index afddf06..8b5e12d 100644
--- a/gas/testsuite/gas/ia64/opc-a.pl
+++ b/gas/testsuite/gas/ia64/opc-a.pl
@@ -132,6 +132,7 @@
   foreach $i (@cmp6) {
     foreach $c (@ctype) {
       print "\t${C}${i}${c} p2, p3 = r0, r4\n";
+      print "\t${C}${i}${c} p2, p3 = r4, r0\n";
     }
     print "\n";
   }
diff --git a/gas/testsuite/gas/ia64/opc-a.s b/gas/testsuite/gas/ia64/opc-a.s
index 0074d9e..c7ffdaa 100644
--- a/gas/testsuite/gas/ia64/opc-a.s
+++ b/gas/testsuite/gas/ia64/opc-a.s
@@ -170,46 +170,82 @@
 	cmp.ne.and.orcm p2, p3 = 3, r4
 
 	cmp.eq.and p2, p3 = r0, r4
+	cmp.eq.and p2, p3 = r4, r0
 	cmp.eq.or p2, p3 = r0, r4
+	cmp.eq.or p2, p3 = r4, r0
 	cmp.eq.or.andcm p2, p3 = r0, r4
+	cmp.eq.or.andcm p2, p3 = r4, r0
 	cmp.eq.orcm p2, p3 = r0, r4
+	cmp.eq.orcm p2, p3 = r4, r0
 	cmp.eq.andcm p2, p3 = r0, r4
+	cmp.eq.andcm p2, p3 = r4, r0
 	cmp.eq.and.orcm p2, p3 = r0, r4
+	cmp.eq.and.orcm p2, p3 = r4, r0
 
 	cmp.ne.and p2, p3 = r0, r4
+	cmp.ne.and p2, p3 = r4, r0
 	cmp.ne.or p2, p3 = r0, r4
+	cmp.ne.or p2, p3 = r4, r0
 	cmp.ne.or.andcm p2, p3 = r0, r4
+	cmp.ne.or.andcm p2, p3 = r4, r0
 	cmp.ne.orcm p2, p3 = r0, r4
+	cmp.ne.orcm p2, p3 = r4, r0
 	cmp.ne.andcm p2, p3 = r0, r4
+	cmp.ne.andcm p2, p3 = r4, r0
 	cmp.ne.and.orcm p2, p3 = r0, r4
+	cmp.ne.and.orcm p2, p3 = r4, r0
 
 	cmp.lt.and p2, p3 = r0, r4
+	cmp.lt.and p2, p3 = r4, r0
 	cmp.lt.or p2, p3 = r0, r4
+	cmp.lt.or p2, p3 = r4, r0
 	cmp.lt.or.andcm p2, p3 = r0, r4
+	cmp.lt.or.andcm p2, p3 = r4, r0
 	cmp.lt.orcm p2, p3 = r0, r4
+	cmp.lt.orcm p2, p3 = r4, r0
 	cmp.lt.andcm p2, p3 = r0, r4
+	cmp.lt.andcm p2, p3 = r4, r0
 	cmp.lt.and.orcm p2, p3 = r0, r4
+	cmp.lt.and.orcm p2, p3 = r4, r0
 
 	cmp.le.and p2, p3 = r0, r4
+	cmp.le.and p2, p3 = r4, r0
 	cmp.le.or p2, p3 = r0, r4
+	cmp.le.or p2, p3 = r4, r0
 	cmp.le.or.andcm p2, p3 = r0, r4
+	cmp.le.or.andcm p2, p3 = r4, r0
 	cmp.le.orcm p2, p3 = r0, r4
+	cmp.le.orcm p2, p3 = r4, r0
 	cmp.le.andcm p2, p3 = r0, r4
+	cmp.le.andcm p2, p3 = r4, r0
 	cmp.le.and.orcm p2, p3 = r0, r4
+	cmp.le.and.orcm p2, p3 = r4, r0
 
 	cmp.gt.and p2, p3 = r0, r4
+	cmp.gt.and p2, p3 = r4, r0
 	cmp.gt.or p2, p3 = r0, r4
+	cmp.gt.or p2, p3 = r4, r0
 	cmp.gt.or.andcm p2, p3 = r0, r4
+	cmp.gt.or.andcm p2, p3 = r4, r0
 	cmp.gt.orcm p2, p3 = r0, r4
+	cmp.gt.orcm p2, p3 = r4, r0
 	cmp.gt.andcm p2, p3 = r0, r4
+	cmp.gt.andcm p2, p3 = r4, r0
 	cmp.gt.and.orcm p2, p3 = r0, r4
+	cmp.gt.and.orcm p2, p3 = r4, r0
 
 	cmp.ge.and p2, p3 = r0, r4
+	cmp.ge.and p2, p3 = r4, r0
 	cmp.ge.or p2, p3 = r0, r4
+	cmp.ge.or p2, p3 = r4, r0
 	cmp.ge.or.andcm p2, p3 = r0, r4
+	cmp.ge.or.andcm p2, p3 = r4, r0
 	cmp.ge.orcm p2, p3 = r0, r4
+	cmp.ge.orcm p2, p3 = r4, r0
 	cmp.ge.andcm p2, p3 = r0, r4
+	cmp.ge.andcm p2, p3 = r4, r0
 	cmp.ge.and.orcm p2, p3 = r0, r4
+	cmp.ge.and.orcm p2, p3 = r4, r0
 
 	cmp4.eq p2, p3 = r3, r4
 	cmp4.eq p2, p3 = 3, r4
@@ -280,45 +316,81 @@
 	cmp4.ne.and.orcm p2, p3 = 3, r4
 
 	cmp4.eq.and p2, p3 = r0, r4
+	cmp4.eq.and p2, p3 = r4, r0
 	cmp4.eq.or p2, p3 = r0, r4
+	cmp4.eq.or p2, p3 = r4, r0
 	cmp4.eq.or.andcm p2, p3 = r0, r4
+	cmp4.eq.or.andcm p2, p3 = r4, r0
 	cmp4.eq.orcm p2, p3 = r0, r4
+	cmp4.eq.orcm p2, p3 = r4, r0
 	cmp4.eq.andcm p2, p3 = r0, r4
+	cmp4.eq.andcm p2, p3 = r4, r0
 	cmp4.eq.and.orcm p2, p3 = r0, r4
+	cmp4.eq.and.orcm p2, p3 = r4, r0
 
 	cmp4.ne.and p2, p3 = r0, r4
+	cmp4.ne.and p2, p3 = r4, r0
 	cmp4.ne.or p2, p3 = r0, r4
+	cmp4.ne.or p2, p3 = r4, r0
 	cmp4.ne.or.andcm p2, p3 = r0, r4
+	cmp4.ne.or.andcm p2, p3 = r4, r0
 	cmp4.ne.orcm p2, p3 = r0, r4
+	cmp4.ne.orcm p2, p3 = r4, r0
 	cmp4.ne.andcm p2, p3 = r0, r4
+	cmp4.ne.andcm p2, p3 = r4, r0
 	cmp4.ne.and.orcm p2, p3 = r0, r4
+	cmp4.ne.and.orcm p2, p3 = r4, r0
 
 	cmp4.lt.and p2, p3 = r0, r4
+	cmp4.lt.and p2, p3 = r4, r0
 	cmp4.lt.or p2, p3 = r0, r4
+	cmp4.lt.or p2, p3 = r4, r0
 	cmp4.lt.or.andcm p2, p3 = r0, r4
+	cmp4.lt.or.andcm p2, p3 = r4, r0
 	cmp4.lt.orcm p2, p3 = r0, r4
+	cmp4.lt.orcm p2, p3 = r4, r0
 	cmp4.lt.andcm p2, p3 = r0, r4
+	cmp4.lt.andcm p2, p3 = r4, r0
 	cmp4.lt.and.orcm p2, p3 = r0, r4
+	cmp4.lt.and.orcm p2, p3 = r4, r0
 
 	cmp4.le.and p2, p3 = r0, r4
+	cmp4.le.and p2, p3 = r4, r0
 	cmp4.le.or p2, p3 = r0, r4
+	cmp4.le.or p2, p3 = r4, r0
 	cmp4.le.or.andcm p2, p3 = r0, r4
+	cmp4.le.or.andcm p2, p3 = r4, r0
 	cmp4.le.orcm p2, p3 = r0, r4
+	cmp4.le.orcm p2, p3 = r4, r0
 	cmp4.le.andcm p2, p3 = r0, r4
+	cmp4.le.andcm p2, p3 = r4, r0
 	cmp4.le.and.orcm p2, p3 = r0, r4
+	cmp4.le.and.orcm p2, p3 = r4, r0
 
 	cmp4.gt.and p2, p3 = r0, r4
+	cmp4.gt.and p2, p3 = r4, r0
 	cmp4.gt.or p2, p3 = r0, r4
+	cmp4.gt.or p2, p3 = r4, r0
 	cmp4.gt.or.andcm p2, p3 = r0, r4
+	cmp4.gt.or.andcm p2, p3 = r4, r0
 	cmp4.gt.orcm p2, p3 = r0, r4
+	cmp4.gt.orcm p2, p3 = r4, r0
 	cmp4.gt.andcm p2, p3 = r0, r4
+	cmp4.gt.andcm p2, p3 = r4, r0
 	cmp4.gt.and.orcm p2, p3 = r0, r4
+	cmp4.gt.and.orcm p2, p3 = r4, r0
 
 	cmp4.ge.and p2, p3 = r0, r4
+	cmp4.ge.and p2, p3 = r4, r0
 	cmp4.ge.or p2, p3 = r0, r4
+	cmp4.ge.or p2, p3 = r4, r0
 	cmp4.ge.or.andcm p2, p3 = r0, r4
+	cmp4.ge.or.andcm p2, p3 = r4, r0
 	cmp4.ge.orcm p2, p3 = r0, r4
+	cmp4.ge.orcm p2, p3 = r4, r0
 	cmp4.ge.andcm p2, p3 = r0, r4
+	cmp4.ge.andcm p2, p3 = r4, r0
 	cmp4.ge.and.orcm p2, p3 = r0, r4
+	cmp4.ge.and.orcm p2, p3 = r4, r0
 
 nop.i 0; nop.i 0
diff --git a/gas/testsuite/gas/m68hc11/all.exp b/gas/testsuite/gas/m68hc11/all.exp
index 2c6c292..9fe5bf4 100644
--- a/gas/testsuite/gas/m68hc11/all.exp
+++ b/gas/testsuite/gas/m68hc11/all.exp
@@ -16,6 +16,9 @@
 run_dump_test insns-dwarf2
 run_dump_test lbranch-dwarf2
 
+# Compliance with Motorola Assembly Language Input Standard
+run_dump_test malis
+
 # Some 68HC12 tests
 run_dump_test opers12
 run_dump_test opers12-dwarf2
\ No newline at end of file
diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
index b5deb35..960208d 100644
--- a/gas/testsuite/gas/mips/mips.exp
+++ b/gas/testsuite/gas/mips/mips.exp
@@ -91,18 +91,18 @@
     run_dump_test "mips32"
     run_dump_test "mips64"
 
-    # Make sure that -mcpu=FOO and -mFOO are equivalent.  Assemble a file
-    # containing 4650-specific instructions with -m4650 and -mcpu=4650,
-    # and verify that they're the same.  Specifically, we're checking
-    # that the EF_MIPS_MACH field is set, and that the 4650 'mul'
-    # instruction does get used.  In previous versions of GAS, 
-    # only -mcpu=4650 would set the EF_MIPS_MACH field; -m4650 wouldn't.
-    run_dump_test "elf_e_flags1"
-    run_dump_test "elf_e_flags2"
-    run_dump_test "elf_e_flags3"
-    run_dump_test "elf_e_flags4"
-    
     if $svr4pic {
+	# Make sure that -mcpu=FOO and -mFOO are equivalent.  Assemble a file
+	# containing 4650-specific instructions with -m4650 and -mcpu=4650,
+	# and verify that they're the same.  Specifically, we're checking
+	# that the EF_MIPS_MACH field is set, and that the 4650 'mul'
+	# instruction does get used.  In previous versions of GAS, 
+	# only -mcpu=4650 would set the EF_MIPS_MACH field; -m4650 wouldn't.
+	run_dump_test "elf_e_flags1"
+	run_dump_test "elf_e_flags2"
+	run_dump_test "elf_e_flags3"
+	run_dump_test "elf_e_flags4"
+    
 	run_dump_test "elf-rel"
 	if [istarget mips64*-*-*] { 
 	    run_dump_test "elf-rel2" 
diff --git a/gas/testsuite/gas/mips/mips32.d b/gas/testsuite/gas/mips/mips32.d
index 56cbadb..bbfd73b 100644
--- a/gas/testsuite/gas/mips/mips32.d
+++ b/gas/testsuite/gas/mips/mips32.d
@@ -1,10 +1,10 @@
-#objdump: -dr --prefix-addresses --show-raw-insn
+#objdump: -dr --prefix-addresses --show-raw-insn -mmips:mips32
 #name: MIPS MIPS32 instructions
 #as: -mips32
 
 # Check MIPS32 instruction assembly
 
-.*: +file format elf.*mips.*
+.*: +file format .*mips.*
 
 Disassembly of section .text:
 0+0000 <[^>]*> 70410821 	clo	\$at,\$v0
diff --git a/gas/testsuite/gas/mips/mips64.d b/gas/testsuite/gas/mips/mips64.d
index 1baa367..71b36f2 100644
--- a/gas/testsuite/gas/mips/mips64.d
+++ b/gas/testsuite/gas/mips/mips64.d
@@ -1,10 +1,10 @@
-#objdump: -dr --prefix-addresses --show-raw-insn
+#objdump: -dr --prefix-addresses --show-raw-insn -mmips:mips64
 #name: MIPS MIPS64 instructions
 #as: -mips64
 
 # Check MIPS32 instruction assembly
 
-.*: +file format elf.*mips.*
+.*: +file format .*mips.*
 
 Disassembly of section .text:
 0+0000 <[^>]*> 70410825 	dclo	\$at,\$v0
diff --git a/gas/testsuite/gas/mri/mri.exp b/gas/testsuite/gas/mri/mri.exp
index f3fcded..fff811d 100644
--- a/gas/testsuite/gas/mri/mri.exp
+++ b/gas/testsuite/gas/mri/mri.exp
@@ -10,19 +10,26 @@
     return
 }
 
+# These tests are generic MRI tests: they don't rely on M68K opcodes.
 run_dump_test label
 run_dump_test equ
-run_dump_test constants
-run_dump_test immconst
 run_dump_test float
 run_dump_test char
 run_dump_test expr
 run_dump_test common
 run_dump_test comment
 gas_test "empty.s" "-M" "" "MRI empty macro"
+run_dump_test semi
+
+if [istarget "m6811-*-*" || istarget "m6812-*-*"] {
+    return
+}
+
+# Next tests contain 68K opcodes
+run_dump_test constants
+run_dump_test immconst
 run_dump_test for
 run_dump_test if
 run_dump_test repeat
 run_dump_test while
-run_dump_test semi
 run_dump_test moveml
diff --git a/gas/write.c b/gas/write.c
index 24b387e..2ae110d 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -1998,21 +1998,30 @@
 static int is_dnrange PARAMS ((fragS *, fragS *));
 
 /* Subroutines of relax_segment.  */
+
 static int
 is_dnrange (f1, f2)
      fragS *f1;
      fragS *f2;
 {
+  addressT f2addr;
+
+  f2addr = f2->fr_address;
   for (; f1; f1 = f1->fr_next)
-    if (f1->fr_next == f2)
-      return 1;
+    {
+      if (f1->fr_next == f2)
+	return 1;
+      if (f1->fr_address > f2addr)
+	break;
+    }
   return 0;
 }
 
 /* Relax a fragment by scanning TC_GENERIC_RELAX_TABLE.  */
 
 long
-relax_frag (fragP, stretch)
+relax_frag (segment, fragP, stretch)
+     segT segment;
      fragS *fragP;
      long stretch;
 {
@@ -2034,6 +2043,10 @@
 
   if (symbolP)
     {
+      fragS *sym_frag;
+
+      sym_frag = symbol_get_frag (symbolP);
+
 #ifndef DIFF_EXPR_OK
 #if !defined (MANY_SEGMENTS) && !defined (BFD_ASSEMBLER)
       know ((S_GET_SEGMENT (symbolP) == SEG_ABSOLUTE)
@@ -2041,23 +2054,24 @@
 	    || (S_GET_SEGMENT (symbolP) == SEG_BSS)
 	    || (S_GET_SEGMENT (symbolP) == SEG_TEXT));
 #endif
-      know (symbolP->sy_frag);
+      know (sym_frag != NULL);
 #endif
       know (!(S_GET_SEGMENT (symbolP) == absolute_section)
-	    || symbolP->sy_frag == &zero_address_frag);
-      target += S_GET_VALUE (symbolP) + symbol_get_frag (symbolP)->fr_address;
+	    || sym_frag == &zero_address_frag);
+      target += S_GET_VALUE (symbolP) + sym_frag->fr_address;
 
       /* If frag has yet to be reached on this pass,
 	 assume it will move by STRETCH just as we did.
 	 If this is not so, it will be because some frag
 	 between grows, and that will force another pass.
 
-	 Beware zero-length frags.
+	 Beware zero-length frags.  */
 
-	 There should be a faster way to do this.  */
-
-      if (symbol_get_frag (symbolP)->fr_address >= was_address
-	  && is_dnrange (fragP, symbol_get_frag (symbolP)))
+      if (stretch != 0
+	  && S_GET_SEGMENT (symbolP) == segment
+	  && (sym_frag->fr_address > was_address
+	      || (sym_frag->fr_address == was_address
+		  && is_dnrange (fragP, sym_frag))))
 	{
 	  target += stretch;
 	}
@@ -2413,12 +2427,12 @@
 
 	      case rs_machine_dependent:
 #ifdef md_relax_frag
-		growth = md_relax_frag (fragP, stretch);
+		growth = md_relax_frag (segment, fragP, stretch);
 #else
 #ifdef TC_GENERIC_RELAX_TABLE
 		/* The default way to relax a frag is to look through
 		   TC_GENERIC_RELAX_TABLE.  */
-		growth = relax_frag (fragP, stretch);
+		growth = relax_frag (segment, fragP, stretch);
 #endif /* TC_GENERIC_RELAX_TABLE  */
 #endif
 		break;
diff --git a/gas/write.h b/gas/write.h
index 9872e9d..9a63dc5 100644
--- a/gas/write.h
+++ b/gas/write.h
@@ -181,7 +181,7 @@
 extern int get_recorded_alignment PARAMS ((segT seg));
 extern void subsegs_finish PARAMS ((void));
 extern void write_object_file PARAMS ((void));
-extern long relax_frag PARAMS ((fragS *, long));
+extern long relax_frag PARAMS ((segT, fragS *, long));
 extern void relax_segment
   PARAMS ((struct frag * seg_frag_root, segT seg_type));
 
diff --git a/gprof/ChangeLog b/gprof/ChangeLog
index 50eea2d..8f7e2a8 100644
--- a/gprof/ChangeLog
+++ b/gprof/ChangeLog
@@ -1,3 +1,12 @@
+2001-02-27  Alan Modra  <alan@linuxcare.com.au>
+
+	* configure.in (BFD_VERSION): New.
+	(AM_INIT_AUTOMAKE): Use $BFD_VERSION.
+	* configure: Regenerate.
+	* gconfig.in: Regenerate.
+	* Makefile.am: Run "make dep-am"
+	* Makefile.in: Regenerate.
+
 2001-01-27  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
 
 	* basic_blocks.c: #include <unistd.h> only if it exists.
diff --git a/gprof/Makefile.am b/gprof/Makefile.am
index 50d787b..af50f57 100644
--- a/gprof/Makefile.am
+++ b/gprof/Makefile.am
@@ -141,7 +141,8 @@
   $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h gconfig.h \
   $(INCDIR)/bin-bugs.h basic_blocks.h source.h search_list.h \
   symtab.h ../bfd/bfd.h call_graph.h cg_arcs.h cg_print.h \
-  corefile.h gmon_io.h gmon.h hertz.h hist.h sym_ids.h
+  corefile.h gmon_io.h gmon.h hertz.h hist.h sym_ids.h \
+  $(INCDIR)/demangle.h
 hertz.o: hertz.c hertz.h gprof.h $(INCDIR)/ansidecl.h \
   $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/fopen-same.h \
   $(INCDIR)/filenames.h gconfig.h $(INCDIR)/bin-bugs.h
diff --git a/gprof/Makefile.in b/gprof/Makefile.in
index afdc4fc..dc2151c 100644
--- a/gprof/Makefile.in
+++ b/gprof/Makefile.in
@@ -72,6 +72,8 @@
 DATADIRNAME = @DATADIRNAME@
 DLLTOOL = @DLLTOOL@
 EXEEXT = @EXEEXT@
+GCJ = @GCJ@
+GCJFLAGS = @GCJFLAGS@
 GMOFILES = @GMOFILES@
 GMSGFMT = @GMSGFMT@
 GT_NO = @GT_NO@
@@ -185,7 +187,7 @@
 
 DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
 
-TAR = gtar
+TAR = tar
 GZIP_ENV = --best
 SOURCES = $(gprof_SOURCES)
 OBJECTS = $(gprof_OBJECTS)
@@ -801,7 +803,8 @@
   $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h gconfig.h \
   $(INCDIR)/bin-bugs.h basic_blocks.h source.h search_list.h \
   symtab.h ../bfd/bfd.h call_graph.h cg_arcs.h cg_print.h \
-  corefile.h gmon_io.h gmon.h hertz.h hist.h sym_ids.h
+  corefile.h gmon_io.h gmon.h hertz.h hist.h sym_ids.h \
+  $(INCDIR)/demangle.h
 hertz.o: hertz.c hertz.h gprof.h $(INCDIR)/ansidecl.h \
   $(BFDDIR)/sysdep.h ../bfd/config.h $(INCDIR)/fopen-same.h \
   $(INCDIR)/filenames.h gconfig.h $(INCDIR)/bin-bugs.h
diff --git a/gprof/configure b/gprof/configure
index 909979f..dd5ca66 100755
--- a/gprof/configure
+++ b/gprof/configure
@@ -49,6 +49,7 @@
 program_transform_name=s,x,x,
 silent=
 site=
+sitefile=
 srcdir=
 target=NONE
 verbose=
@@ -163,6 +164,7 @@
   --help                  print this message
   --no-create             do not create output files
   --quiet, --silent       do not print \`checking...' messages
+  --site-file=FILE        use FILE as the site file
   --version               print the version of autoconf that created configure
 Directory and file names:
   --prefix=PREFIX         install architecture-independent files in PREFIX
@@ -333,6 +335,11 @@
   -site=* | --site=* | --sit=*)
     site="$ac_optarg" ;;
 
+  -site-file | --site-file | --site-fil | --site-fi | --site-f)
+    ac_prev=sitefile ;;
+  -site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*)
+    sitefile="$ac_optarg" ;;
+
   -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
     ac_prev=srcdir ;;
   -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
@@ -498,12 +505,16 @@
 srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
 
 # Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
-  if test "x$prefix" != xNONE; then
-    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-  else
-    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+if test -z "$sitefile"; then
+  if test -z "$CONFIG_SITE"; then
+    if test "x$prefix" != xNONE; then
+      CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+    else
+      CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+    fi
   fi
+else
+  CONFIG_SITE="$sitefile"
 fi
 for ac_site_file in $CONFIG_SITE; do
   if test -r "$ac_site_file"; then
@@ -542,12 +553,12 @@
 fi
 
 echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
-echo "configure:546: checking for Cygwin environment" >&5
+echo "configure:557: checking for Cygwin environment" >&5
 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 551 "configure"
+#line 562 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -558,7 +569,7 @@
 return __CYGWIN__;
 ; return 0; }
 EOF
-if { (eval echo configure:562: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:573: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cygwin=yes
 else
@@ -575,19 +586,19 @@
 CYGWIN=
 test "$ac_cv_cygwin" = yes && CYGWIN=yes
 echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
-echo "configure:579: checking for mingw32 environment" >&5
+echo "configure:590: checking for mingw32 environment" >&5
 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 584 "configure"
+#line 595 "configure"
 #include "confdefs.h"
 
 int main() {
 return __MINGW32__;
 ; return 0; }
 EOF
-if { (eval echo configure:591: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:602: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_mingw32=yes
 else
@@ -652,7 +663,7 @@
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:656: checking host system type" >&5
+echo "configure:667: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -673,7 +684,7 @@
 echo "$ac_t""$host" 1>&6
 
 echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:677: checking target system type" >&5
+echo "configure:688: checking target system type" >&5
 
 target_alias=$target
 case "$target_alias" in
@@ -691,7 +702,7 @@
 echo "$ac_t""$target" 1>&6
 
 echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:695: checking build system type" >&5
+echo "configure:706: checking build system type" >&5
 
 build_alias=$build
 case "$build_alias" in
@@ -716,7 +727,7 @@
 # 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:720: checking for $ac_word" >&5
+echo "configure:731: 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
@@ -746,7 +757,7 @@
   # 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:750: checking for $ac_word" >&5
+echo "configure:761: 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
@@ -797,7 +808,7 @@
       # 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:801: checking for $ac_word" >&5
+echo "configure:812: 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
@@ -829,7 +840,7 @@
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:833: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:844: 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.
@@ -840,12 +851,12 @@
 
 cat > conftest.$ac_ext << EOF
 
-#line 844 "configure"
+#line 855 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:849: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:860: \"$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
@@ -871,12 +882,12 @@
   { 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:875: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:886: 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:880: checking whether we are using GNU C" >&5
+echo "configure:891: 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
@@ -885,7 +896,7 @@
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:889: \"$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:900: \"$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
@@ -904,7 +915,7 @@
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:908: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:919: 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
@@ -936,7 +947,7 @@
 fi
 
 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
-echo "configure:940: checking for POSIXized ISC" >&5
+echo "configure:951: 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
@@ -957,6 +968,7 @@
 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),
 # so one script is as good as another.  But avoid the broken or
 # incompatible versions:
@@ -969,7 +981,7 @@
 # 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:973: checking for a BSD compatible install" >&5
+echo "configure:985: 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
@@ -1022,7 +1034,7 @@
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:1026: checking whether build environment is sane" >&5
+echo "configure:1038: checking whether build environment is sane" >&5
 # Just in case
 sleep 1
 echo timestamp > conftestfile
@@ -1079,7 +1091,7 @@
 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:1083: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:1095: 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
@@ -1108,7 +1120,7 @@
 
 PACKAGE=gprof
 
-VERSION=2.10.91
+VERSION=${BFD_VERSION}
 
 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
   { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
@@ -1125,7 +1137,7 @@
 
 missing_dir=`cd $ac_aux_dir && pwd`
 echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:1129: checking for working aclocal" >&5
+echo "configure:1141: 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.
@@ -1138,7 +1150,7 @@
 fi
 
 echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:1142: checking for working autoconf" >&5
+echo "configure:1154: 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.
@@ -1151,7 +1163,7 @@
 fi
 
 echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:1155: checking for working automake" >&5
+echo "configure:1167: 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.
@@ -1164,7 +1176,7 @@
 fi
 
 echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:1168: checking for working autoheader" >&5
+echo "configure:1180: 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.
@@ -1177,7 +1189,7 @@
 fi
 
 echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:1181: checking for working makeinfo" >&5
+echo "configure:1193: 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.
@@ -1272,7 +1284,7 @@
 if test "$ac_cv_prog_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:1276: checking for ld used by GCC" >&5
+echo "configure:1288: checking for ld used by GCC" >&5
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return which upsets mingw
@@ -1302,10 +1314,10 @@
   esac
 elif test "$with_gnu_ld" = yes; then
   echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:1306: checking for GNU ld" >&5
+echo "configure:1318: checking for GNU ld" >&5
 else
   echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:1309: checking for non-GNU ld" >&5
+echo "configure:1321: checking for non-GNU ld" >&5
 fi
 if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1340,7 +1352,7 @@
 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:1344: checking if the linker ($LD) is GNU ld" >&5
+echo "configure:1356: checking if the linker ($LD) is GNU ld" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1357,7 +1369,7 @@
 
 
 echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
-echo "configure:1361: checking for $LD option to reload object files" >&5
+echo "configure:1373: 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
@@ -1369,7 +1381,7 @@
 test -n "$reload_flag" && reload_flag=" $reload_flag"
 
 echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-echo "configure:1373: checking for BSD-compatible nm" >&5
+echo "configure:1385: checking for BSD-compatible nm" >&5
 if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1407,7 +1419,7 @@
 echo "$ac_t""$NM" 1>&6
 
 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1411: checking whether ln -s works" >&5
+echo "configure:1423: 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
@@ -1428,7 +1440,7 @@
 fi
 
 echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
-echo "configure:1432: checking how to recognise dependant libraries" >&5
+echo "configure:1444: 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
@@ -1571,13 +1583,13 @@
 deplibs_check_method=$lt_cv_deplibs_check_method
 
 echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-echo "configure:1575: checking for object suffix" >&5
+echo "configure:1587: 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:1581: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1593: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   for ac_file in conftest.*; do
     case $ac_file in
     *.c) ;;
@@ -1597,7 +1609,7 @@
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:1601: checking for executable suffix" >&5
+echo "configure:1613: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1607,10 +1619,10 @@
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:1611: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:1623: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
-      *.c | *.o | *.obj) ;;
+      *.c | *.o | *.obj | *.ilk | *.pdb) ;;
       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
       esac
     done
@@ -1640,7 +1652,7 @@
 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:1644: checking for ${ac_tool_prefix}file" >&5
+echo "configure:1656: 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
@@ -1702,7 +1714,7 @@
 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:1706: checking for file" >&5
+echo "configure:1718: 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
@@ -1773,7 +1785,7 @@
 # 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:1777: checking for $ac_word" >&5
+echo "configure:1789: 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
@@ -1805,7 +1817,7 @@
   # 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:1809: checking for $ac_word" >&5
+echo "configure:1821: 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
@@ -1840,7 +1852,7 @@
 # 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:1844: checking for $ac_word" >&5
+echo "configure:1856: 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
@@ -1872,7 +1884,7 @@
   # 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:1876: checking for $ac_word" >&5
+echo "configure:1888: 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
@@ -1939,8 +1951,8 @@
 case "$host" in
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 1943 "configure"' > conftest.$ac_ext
-  if { (eval echo configure:1944: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  echo '#line 1955 "configure"' > conftest.$ac_ext
+  if { (eval echo configure:1956: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     case "`/usr/bin/file conftest.o`" in
     *32-bit*)
       LD="${LD-ld} -32"
@@ -1961,7 +1973,7 @@
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -belf"
   echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-echo "configure:1965: checking whether the C compiler needs -belf" >&5
+echo "configure:1977: 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
@@ -1974,14 +1986,14 @@
 cross_compiling=$ac_cv_prog_cc_cross
 
      cat > conftest.$ac_ext <<EOF
-#line 1978 "configure"
+#line 1990 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:1985: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1997: \"$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
@@ -2105,7 +2117,7 @@
 # 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:2109: checking for $ac_word" >&5
+echo "configure:2121: 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
@@ -2135,7 +2147,7 @@
   # 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:2139: checking for $ac_word" >&5
+echo "configure:2151: 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
@@ -2186,7 +2198,7 @@
       # 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:2190: checking for $ac_word" >&5
+echo "configure:2202: 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
@@ -2218,7 +2230,7 @@
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:2222: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:2234: 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.
@@ -2229,12 +2241,12 @@
 
 cat > conftest.$ac_ext << EOF
 
-#line 2233 "configure"
+#line 2245 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:2238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2250: \"$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
@@ -2260,12 +2272,12 @@
   { 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:2264: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2276: 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:2269: checking whether we are using GNU C" >&5
+echo "configure:2281: 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
@@ -2274,7 +2286,7 @@
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2278: \"$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:2290: \"$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
@@ -2293,7 +2305,7 @@
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:2297: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:2309: 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
@@ -2336,7 +2348,7 @@
 # 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:2340: checking for a BSD compatible install" >&5
+echo "configure:2352: 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
@@ -2392,12 +2404,12 @@
 for ac_func in setmode
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2396: checking for $ac_func" >&5
+echo "configure:2408: 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 2401 "configure"
+#line 2413 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -2420,7 +2432,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:2424: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2436: \"$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
@@ -2447,7 +2459,7 @@
 
 ALL_LINGUAS=
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2451: checking how to run the C preprocessor" >&5
+echo "configure:2463: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -2462,13 +2474,13 @@
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 2466 "configure"
+#line 2478 "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:2472: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2484: \"$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
   :
@@ -2479,13 +2491,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 2483 "configure"
+#line 2495 "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:2489: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2501: \"$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
   :
@@ -2496,13 +2508,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 2500 "configure"
+#line 2512 "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:2506: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2518: \"$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
   :
@@ -2529,7 +2541,7 @@
 # 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:2533: checking for $ac_word" >&5
+echo "configure:2545: 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
@@ -2557,12 +2569,12 @@
 fi
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:2561: checking for ANSI C header files" >&5
+echo "configure:2573: 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 2566 "configure"
+#line 2578 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -2570,7 +2582,7 @@
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2574: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2586: \"$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*
@@ -2587,7 +2599,7 @@
 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 2591 "configure"
+#line 2603 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -2605,7 +2617,7 @@
 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 2609 "configure"
+#line 2621 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -2626,7 +2638,7 @@
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 2630 "configure"
+#line 2642 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -2637,7 +2649,7 @@
 exit (0); }
 
 EOF
-if { (eval echo configure:2641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -2661,12 +2673,12 @@
 fi
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:2665: checking for working const" >&5
+echo "configure:2677: 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 2670 "configure"
+#line 2682 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -2715,7 +2727,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:2719: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2731: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -2736,21 +2748,21 @@
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:2740: checking for inline" >&5
+echo "configure:2752: 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 2747 "configure"
+#line 2759 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:2754: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2766: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -2776,12 +2788,12 @@
 esac
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:2780: checking for off_t" >&5
+echo "configure:2792: 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 2785 "configure"
+#line 2797 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -2809,12 +2821,12 @@
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:2813: checking for size_t" >&5
+echo "configure:2825: 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 2818 "configure"
+#line 2830 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -2844,19 +2856,19 @@
 # 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:2848: checking for working alloca.h" >&5
+echo "configure:2860: 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 2853 "configure"
+#line 2865 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:2860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2872: \"$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
@@ -2877,12 +2889,12 @@
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:2881: checking for alloca" >&5
+echo "configure:2893: 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 2886 "configure"
+#line 2898 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -2910,7 +2922,7 @@
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:2914: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2926: \"$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
@@ -2942,12 +2954,12 @@
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:2946: checking whether alloca needs Cray hooks" >&5
+echo "configure:2958: 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 2951 "configure"
+#line 2963 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -2972,12 +2984,12 @@
 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:2976: checking for $ac_func" >&5
+echo "configure:2988: 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 2981 "configure"
+#line 2993 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3000,7 +3012,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3016: \"$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
@@ -3027,7 +3039,7 @@
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:3031: checking stack direction for C alloca" >&5
+echo "configure:3043: 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
@@ -3035,7 +3047,7 @@
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 3039 "configure"
+#line 3051 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -3054,7 +3066,7 @@
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:3058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3070: \"$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
@@ -3079,17 +3091,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3083: checking for $ac_hdr" >&5
+echo "configure:3095: 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 3088 "configure"
+#line 3100 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3093: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3105: \"$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*
@@ -3118,12 +3130,12 @@
 for ac_func in getpagesize
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3122: checking for $ac_func" >&5
+echo "configure:3134: 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 3127 "configure"
+#line 3139 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3146,7 +3158,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3150: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3162: \"$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
@@ -3171,7 +3183,7 @@
 done
 
 echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:3175: checking for working mmap" >&5
+echo "configure:3187: 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
@@ -3179,7 +3191,7 @@
   ac_cv_func_mmap_fixed_mapped=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 3183 "configure"
+#line 3195 "configure"
 #include "confdefs.h"
 
 /* Thanks to Mike Haertel and Jim Avera for this test.
@@ -3319,7 +3331,7 @@
 }
 
 EOF
-if { (eval echo configure:3323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3335: \"$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
@@ -3347,17 +3359,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3351: checking for $ac_hdr" >&5
+echo "configure:3363: 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 3356 "configure"
+#line 3368 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3361: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3373: \"$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*
@@ -3387,12 +3399,12 @@
 __argz_count __argz_stringify __argz_next
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3391: checking for $ac_func" >&5
+echo "configure:3403: 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 3396 "configure"
+#line 3408 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3415,7 +3427,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3431: \"$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
@@ -3444,12 +3456,12 @@
      for ac_func in stpcpy
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3448: checking for $ac_func" >&5
+echo "configure:3460: 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 3453 "configure"
+#line 3465 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3472,7 +3484,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3488: \"$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
@@ -3506,19 +3518,19 @@
 
    if test $ac_cv_header_locale_h = yes; then
     echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:3510: checking for LC_MESSAGES" >&5
+echo "configure:3522: 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 3515 "configure"
+#line 3527 "configure"
 #include "confdefs.h"
 #include <locale.h>
 int main() {
 return LC_MESSAGES
 ; return 0; }
 EOF
-if { (eval echo configure:3522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3534: \"$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
@@ -3539,7 +3551,7 @@
     fi
   fi
    echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:3543: checking whether NLS is requested" >&5
+echo "configure:3555: 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"
@@ -3559,7 +3571,7 @@
 EOF
 
       echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:3563: checking whether included gettext is requested" >&5
+echo "configure:3575: 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"
@@ -3578,17 +3590,17 @@
 
 	ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:3582: checking for libintl.h" >&5
+echo "configure:3594: 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 3587 "configure"
+#line 3599 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3592: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3604: \"$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*
@@ -3605,19 +3617,19 @@
 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:3609: checking for gettext in libc" >&5
+echo "configure:3621: 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 3614 "configure"
+#line 3626 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 int main() {
 return (int) gettext ("")
 ; return 0; }
 EOF
-if { (eval echo configure:3621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3633: \"$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
@@ -3633,7 +3645,7 @@
 
 	   if test "$gt_cv_func_gettext_libc" != "yes"; then
 	     echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
-echo "configure:3637: checking for bindtextdomain in -lintl" >&5
+echo "configure:3649: 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
@@ -3641,7 +3653,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3645 "configure"
+#line 3657 "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
@@ -3652,7 +3664,7 @@
 bindtextdomain()
 ; return 0; }
 EOF
-if { (eval echo configure:3656: \"$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*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3668,19 +3680,19 @@
 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:3672: checking for gettext in libintl" >&5
+echo "configure:3684: 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 3677 "configure"
+#line 3689 "configure"
 #include "confdefs.h"
 
 int main() {
 return (int) gettext ("")
 ; return 0; }
 EOF
-if { (eval echo configure:3684: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3696: \"$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
@@ -3708,7 +3720,7 @@
 	      # 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:3712: checking for $ac_word" >&5
+echo "configure:3724: 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
@@ -3742,12 +3754,12 @@
 		for ac_func in dcgettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3746: checking for $ac_func" >&5
+echo "configure:3758: 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 3751 "configure"
+#line 3763 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3770,7 +3782,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3786: \"$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
@@ -3797,7 +3809,7 @@
 		# 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:3801: checking for $ac_word" >&5
+echo "configure:3813: 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
@@ -3833,7 +3845,7 @@
 		# 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:3837: checking for $ac_word" >&5
+echo "configure:3849: 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
@@ -3865,7 +3877,7 @@
 fi
 
 		cat > conftest.$ac_ext <<EOF
-#line 3869 "configure"
+#line 3881 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -3873,7 +3885,7 @@
 			       return _nl_msg_cat_cntr
 ; return 0; }
 EOF
-if { (eval echo configure:3877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3889: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   CATOBJEXT=.gmo
 		   DATADIRNAME=share
@@ -3905,7 +3917,7 @@
         # 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:3909: checking for $ac_word" >&5
+echo "configure:3921: 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
@@ -3939,7 +3951,7 @@
         # 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:3943: checking for $ac_word" >&5
+echo "configure:3955: 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
@@ -3975,7 +3987,7 @@
         # 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:3979: checking for $ac_word" >&5
+echo "configure:3991: 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
@@ -4065,7 +4077,7 @@
        LINGUAS=
      else
        echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:4069: checking for catalogs to be installed" >&5
+echo "configure:4081: checking for catalogs to be installed" >&5
        NEW_LINGUAS=
        for lang in ${LINGUAS=$ALL_LINGUAS}; do
          case "$ALL_LINGUAS" in
@@ -4093,17 +4105,17 @@
       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:4097: checking for linux/version.h" >&5
+echo "configure:4109: 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 4102 "configure"
+#line 4114 "configure"
 #include "confdefs.h"
 #include <linux/version.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4107: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4119: \"$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*
@@ -4166,7 +4178,7 @@
   
 
 echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:4170: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:4182: 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"
@@ -4191,7 +4203,7 @@
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:4195: checking for executable suffix" >&5
+echo "configure:4207: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4201,10 +4213,10 @@
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:4205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:4217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
-      *.c | *.o | *.obj) ;;
+      *.c | *.o | *.obj | *.ilk | *.pdb) ;;
       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
       esac
     done
diff --git a/gprof/configure.in b/gprof/configure.in
index ba30a34..a8bde47 100644
--- a/gprof/configure.in
+++ b/gprof/configure.in
@@ -5,7 +5,10 @@
 AC_CANONICAL_SYSTEM
 AC_ISC_POSIX
 
-AM_INIT_AUTOMAKE(gprof, 2.10.91)
+changequote(,)dnl
+BFD_VERSION=`sed -n -e 's/^.._INIT_AUTOMAKE.*,[ 	]*\([^ 	]*\)[ 	]*).*/\1/p' < ${srcdir}/../bfd/configure.in`
+changequote([,])dnl
+AM_INIT_AUTOMAKE(gprof, ${BFD_VERSION})
 
 AM_PROG_LIBTOOL
 
diff --git a/gprof/gconfig.in b/gprof/gconfig.in
index 7fafbe2..b528f4b 100644
--- a/gprof/gconfig.in
+++ b/gprof/gconfig.in
@@ -112,18 +112,6 @@
 /* Define if you have the <values.h> header file.  */
 #undef HAVE_VALUES_H
 
-/* Define if you have the stpcpy function */
-#undef HAVE_STPCPY
-
-/* Define if your locale.h file contains LC_MESSAGES. */
-#undef HAVE_LC_MESSAGES
-
-/* Define to 1 if NLS is requested */
-#undef ENABLE_NLS
-
-/* Define as 1 if you have gettext and don't want to use GNU gettext. */
-#undef HAVE_GETTEXT
-
 /* Name of package */
 #undef PACKAGE
 
diff --git a/gprof/po/gprof.pot b/gprof/po/gprof.pot
index 06b13eb..e159d2a 100644
--- a/gprof/po/gprof.pot
+++ b/gprof/po/gprof.pot
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-07-27 16:32-0700\n"
+"POT-Creation-Date: 2001-02-06 18:02-0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -33,27 +33,27 @@
 msgid "[find_call] 0x%lx: bsr"
 msgstr ""
 
-#: basic_blocks.c:123 call_graph.c:86 hist.c:122
+#: basic_blocks.c:125 call_graph.c:86 hist.c:122
 #, c-format
 msgid "%s: %s: unexpected end of file\n"
 msgstr ""
 
-#: basic_blocks.c:198
+#: basic_blocks.c:200
 #, c-format
 msgid "%s: warning: ignoring basic-block exec counts (use -l or --line)\n"
 msgstr ""
 
 #. FIXME: This only works if bfd_vma is unsigned long.
-#: basic_blocks.c:296 basic_blocks.c:306
+#: basic_blocks.c:298 basic_blocks.c:308
 #, c-format
 msgid "%s:%d: (%s:0x%lx) %lu executions\n"
 msgstr ""
 
-#: basic_blocks.c:297 basic_blocks.c:307
+#: basic_blocks.c:299 basic_blocks.c:309
 msgid "<unknown>"
 msgstr ""
 
-#: basic_blocks.c:551
+#: basic_blocks.c:553
 #, c-format
 msgid ""
 "\n"
@@ -64,36 +64,36 @@
 "\n"
 msgstr ""
 
-#: basic_blocks.c:575
+#: basic_blocks.c:577
 msgid ""
 "\n"
 "Execution Summary:\n"
 "\n"
 msgstr ""
 
-#: basic_blocks.c:576
+#: basic_blocks.c:578
 #, c-format
 msgid "%9ld   Executable lines in this file\n"
 msgstr ""
 
-#: basic_blocks.c:578
+#: basic_blocks.c:580
 #, c-format
 msgid "%9ld   Lines executed\n"
 msgstr ""
 
-#: basic_blocks.c:579
+#: basic_blocks.c:581
 #, c-format
 msgid "%9.2f   Percent of the file executed\n"
 msgstr ""
 
-#: basic_blocks.c:583
+#: basic_blocks.c:585
 #, c-format
 msgid ""
 "\n"
 "%9lu   Total number of line executions\n"
 msgstr ""
 
-#: basic_blocks.c:585
+#: basic_blocks.c:587
 #, c-format
 msgid "%9.2f   Average executions per line\n"
 msgstr ""
diff --git a/include/ChangeLog b/include/ChangeLog
index 39085a1..11eacd9 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,11 @@
+2001-02-18  lars brinkhoff  <lars@nocrew.org>
+
+	* dis-asm.h: Add PDP-11 target.
+
+2001-02-09  Martin Schwidefsky  <schwidefsky@de.ibm.com>
+
+	* dis-asm.h: Add linux target for S/390.
+
 2001-01-11  Peter Targett  <peter.targett@arccores.com>
 
 	* dis-asm.h (arc_get_disassembler): Correct declaration.
diff --git a/include/coff/ChangeLog b/include/coff/ChangeLog
index d73c51a..aace5bd 100644
--- a/include/coff/ChangeLog
+++ b/include/coff/ChangeLog
@@ -1,3 +1,13 @@
+2001-02-09  David Mosberger  <davidm@hpl.hp.com>
+
+	* pe.h (PEPAOUTSZ): Rename from PEP64AOUTSZ.
+	Rename from PEPAOUTHDR.
+
+2001-01-23  H.J. Lu  <hjl@gnu.org>
+
+	* include/coff/pe.h (struct external_PEI_DOS_hdr): New.
+	(struct external_PEI_IMAGE_hdr): New.
+
 2000-12-11  Alan Modra  <alan@linuxcare.com.au>
 
 	* ti.h (OCTETS_PER_BYTE_POWER): Change #warning to #error.
diff --git a/include/coff/pe.h b/include/coff/pe.h
index f2c022e..7f15474 100644
--- a/include/coff/pe.h
+++ b/include/coff/pe.h
@@ -125,6 +125,45 @@
 #undef  FILNMLEN
 #define FILNMLEN	18	/* # characters in a file name.  */
 
+struct external_PEI_DOS_hdr
+{
+  /* DOS header fields - always at offset zero in the EXE file.  */
+  char e_magic[2];		/* Magic number, 0x5a4d.  */
+  char e_cblp[2];		/* Bytes on last page of file, 0x90.  */
+  char e_cp[2];			/* Pages in file, 0x3.  */
+  char e_crlc[2];		/* Relocations, 0x0.  */
+  char e_cparhdr[2];		/* Size of header in paragraphs, 0x4.  */
+  char e_minalloc[2];		/* Minimum extra paragraphs needed, 0x0.  */
+  char e_maxalloc[2];		/* Maximum extra paragraphs needed, 0xFFFF.  */
+  char e_ss[2];			/* Initial (relative) SS value, 0x0.  */
+  char e_sp[2];			/* Initial SP value, 0xb8.  */
+  char e_csum[2];		/* Checksum, 0x0.  */
+  char e_ip[2];			/* Initial IP value, 0x0.  */
+  char e_cs[2];			/* Initial (relative) CS value, 0x0.  */
+  char e_lfarlc[2];		/* File address of relocation table, 0x40.  */
+  char e_ovno[2];		/* Overlay number, 0x0.  */
+  char e_res[4][2];		/* Reserved words, all 0x0.  */
+  char e_oemid[2];		/* OEM identifier (for e_oeminfo), 0x0.  */
+  char e_oeminfo[2];		/* OEM information; e_oemid specific, 0x0.  */
+  char e_res2[10][2];		/* Reserved words, all 0x0.  */
+  char e_lfanew[4];		/* File address of new exe header, usually 0x80.  */
+  char dos_message[16][4];	/* Other stuff, always follow DOS header.  */
+};
+
+struct external_PEI_IMAGE_hdr
+{
+  char nt_signature[4];		/* required NT signature, 0x4550.  */
+
+  /* From standard header.  */
+  char f_magic[2];		/* Magic number.		*/
+  char f_nscns[2];		/* Number of sections.		*/
+  char f_timdat[4];		/* Time & date stamp.		*/
+  char f_symptr[4];		/* File pointer to symtab.	*/
+  char f_nsyms[4];		/* Number of symtab entries.	*/
+  char f_opthdr[2];		/* Sizeof(optional hdr).	*/
+  char f_flags[2];		/* Flags.			*/
+};
+
 struct external_PEI_filehdr
 {
   /* DOS header fields - always at offset zero in the EXE file.  */
@@ -240,8 +279,8 @@
   char  NumberOfRvaAndSizes[4];
   /* IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];  */
   char  DataDirectory[16][2][4]; /* 16 entries, 2 elements/entry, 4 chars.  */
-} PEP64AOUTHDR;
-#define PEP64AOUTSZ	240
+} PEPAOUTHDR;
+#define PEPAOUTSZ	240
   
 #undef  E_FILNMLEN
 #define E_FILNMLEN	18	/* # characters in a file name.  */
diff --git a/include/demangle.h b/include/demangle.h
index 7fb6259..a3b664b 100644
--- a/include/demangle.h
+++ b/include/demangle.h
@@ -120,8 +120,11 @@
 extern enum demangling_styles 
 cplus_demangle_name_to_style PARAMS ((const char *name));
 
-/* V3 ABI demangling entry point, defined in cp-demangle.c.  */
+/* V3 ABI demangling entry points, defined in cp-demangle.c.  */
 extern char*
 cplus_demangle_v3 PARAMS ((const char* mangled));
 
+extern char*
+java_demangle_v3 PARAMS ((const char* mangled));
+
 #endif	/* DEMANGLE_H */
diff --git a/include/dis-asm.h b/include/dis-asm.h
index 5c9d8d8..1cc3fce 100644
--- a/include/dis-asm.h
+++ b/include/dis-asm.h
@@ -192,6 +192,7 @@
 extern int print_insn_mn10200		PARAMS ((bfd_vma, disassemble_info*));
 extern int print_insn_mn10300		PARAMS ((bfd_vma, disassemble_info*));
 extern int print_insn_ns32k		PARAMS ((bfd_vma, disassemble_info*));
+extern int print_insn_pdp11		PARAMS ((bfd_vma, disassemble_info*));
 extern int print_insn_big_powerpc	PARAMS ((bfd_vma, disassemble_info*));
 extern int print_insn_little_powerpc	PARAMS ((bfd_vma, disassemble_info*));
 extern int print_insn_rs6000		PARAMS ((bfd_vma, disassemble_info*));
@@ -206,6 +207,7 @@
 extern int print_insn_tic80		PARAMS ((bfd_vma, disassemble_info*));
 extern int print_insn_pj		PARAMS ((bfd_vma, disassemble_info*));
 extern int print_insn_avr		PARAMS ((bfd_vma, disassemble_info*));
+extern int print_insn_s390            PARAMS ((bfd_vma, disassemble_info*)); 
 
 extern void print_arm_disassembler_options PARAMS ((FILE *));
 extern void parse_arm_disassembler_option  PARAMS ((char *));
diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog
index 05e73b8..f95b19c 100644
--- a/include/elf/ChangeLog
+++ b/include/elf/ChangeLog
@@ -1,3 +1,13 @@
+2001-02-27  Philip Blundell  <pb@futuretv.com>
+
+	* arm.h: Add new definitions from ARM document SWS ESPC 0003 B-01.
+	(EF_PIC, et al.): Rename to EF_ARM_xx.
+
+2001-02-09  Martin Schwidefsky  <schwidefsky@de.ibm.com>
+
+	* common.h: Add linux target for S/390.
+	* s390.h: New file.
+
 2001-01-11  Peter Targett  <peter.targett@arccores.com>
 
 	* arc.h (E_ARC_MACH_ARC5, E_ARC_MACH_ARC6, E_ARC_MACH_ARC7,
@@ -105,11 +115,6 @@
 	* elf/ia64.h (EF_IA_64_REDUCEDFP, EF_IA_64_CONS_GP,
 	EF_IA_64_NOFUNCDESC_CONS_GP, EF_IA_64_ABSOLUTE): Define.
 
-2000-08-07  Nick Clifton  <nickc@cygnus.com>
-
-	* ppc.h: Remove spurious CYGNUS LOCAL comments.
-	* v850.h: Likewise.
-
 2000-07-20  Hans-Peter Nilsson  <hp@axis.com>
 
 	common.h (EM_CRIS): New machine number.
diff --git a/include/elf/arm.h b/include/elf/arm.h
index 0499251..c65df64 100644
--- a/include/elf/arm.h
+++ b/include/elf/arm.h
@@ -1,5 +1,5 @@
 /* ARM ELF support for BFD.
-   Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -25,29 +25,32 @@
 /* Processor specific flags for the ELF header e_flags field.  */
 #define EF_ARM_RELEXEC     0x01
 #define EF_ARM_HASENTRY    0x02
-#define EF_INTERWORK       0x04
-#define EF_APCS_26         0x08
-#define EF_APCS_FLOAT      0x10
-#define EF_PIC             0x20
-#define EF_ALIGN8	   0x40		/* 8-bit structure alignment is in use.  */
-#define EF_NEW_ABI         0x80
-#define EF_OLD_ABI         0x100
-#define EF_SOFT_FLOAT      0x200
+#define EF_ARM_INTERWORK   0x04
+#define EF_ARM_APCS_26     0x08
+#define EF_ARM_APCS_FLOAT  0x10
+#define EF_ARM_PIC         0x20
+#define EF_ARM_ALIGN8	   0x40		/* 8-bit structure alignment is in use.  */
+#define EF_ARM_NEW_ABI     0x80
+#define EF_ARM_OLD_ABI     0x100
+#define EF_ARM_SOFT_FLOAT  0x200
 
-/* Other constants defined in the ARM ELF spec. version A-08.  */
+/* Other constants defined in the ARM ELF spec. version B-01.  */
 #define EF_ARM_SYMSARESORTED 0x04	/* NB conflicts with EF_INTERWORK */
+#define EF_ARM_DYNSYMSUSESEGIDX 0x08	/* NB conflicts with EF_APCS26 */
+#define EF_ARM_MAPSYMSFIRST 0x10	/* NB conflicts with EF_APCS_FLOAT */
 #define EF_ARM_EABIMASK      0xFF000000
 
 #define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
 #define EF_ARM_EABI_UNKNOWN  0x00000000
 #define EF_ARM_EABI_VER1     0x01000000
+#define EF_ARM_EABI_VER2     0x02000000
 
 /* Local aliases for some flags to match names used by COFF port.  */
-#define F_INTERWORK	   EF_INTERWORK
-#define F_APCS26	   EF_APCS_26
-#define F_APCS_FLOAT	   EF_APCS_FLOAT
-#define F_PIC              EF_PIC
-#define F_SOFT_FLOAT	   EF_SOFT_FLOAT
+#define F_INTERWORK	   EF_ARM_INTERWORK
+#define F_APCS26	   EF_ARM_APCS_26
+#define F_APCS_FLOAT	   EF_ARM_APCS_FLOAT
+#define F_PIC              EF_ARM_PIC
+#define F_SOFT_FLOAT	   EF_ARM_SOFT_FLOAT
 
 /* Additional symbol types for Thumb.  */
 #define STT_ARM_TFUNC      STT_LOPROC   /* A Thumb function.  */
@@ -109,13 +112,21 @@
   FAKE_RELOC   (LAST_INVALID_RELOC,   249)
 #else /* not OLD_ARM_ABI */
   FAKE_RELOC   (FIRST_INVALID_RELOC1,  28)
-  FAKE_RELOC   (LAST_INVALID_RELOC1,   99)
+  FAKE_RELOC   (LAST_INVALID_RELOC1,   31)
+  RELOC_NUMBER (R_ARM_ALU_PCREL7_0,    32)
+  RELOC_NUMBER (R_ARM_ALU_PCREL15_8,   33)
+  RELOC_NUMBER (R_ARM_ALU_PCREL23_15,  34)
+  RELOC_NUMBER (R_ARM_LDR_SBREL11_0,   35)
+  RELOC_NUMBER (R_ARM_ALU_SBREL19_12,  36)
+  RELOC_NUMBER (R_ARM_ALU_SBREL27_20,  37)
+  FAKE_RELOC   (FIRST_INVALID_RELOC2,  38)
+  FAKE_RELOC   (LAST_INVALID_RELOC2,   99)
   RELOC_NUMBER (R_ARM_GNU_VTENTRY,    100)
   RELOC_NUMBER (R_ARM_GNU_VTINHERIT,  101)
   RELOC_NUMBER (R_ARM_THM_PC11,       102)   /* Cygnus extension to abi: Thumb unconditional branch.  */
   RELOC_NUMBER (R_ARM_THM_PC9,        103)   /* Cygnus extension to abi: Thumb conditional branch.  */
-  FAKE_RELOC   (FIRST_INVALID_RELOC2, 104)
-  FAKE_RELOC   (LAST_INVALID_RELOC2,  248)
+  FAKE_RELOC   (FIRST_INVALID_RELOC3, 104)
+  FAKE_RELOC   (LAST_INVALID_RELOC3,  248)
   RELOC_NUMBER (R_ARM_RXPC25,         249)
 #endif /* not OLD_ARM_ABI */
   RELOC_NUMBER (R_ARM_RSBREL32,       250)
diff --git a/include/elf/common.h b/include/elf/common.h
index d127b9c..991e57e 100644
--- a/include/elf/common.h
+++ b/include/elf/common.h
@@ -114,6 +114,7 @@
 #define EM_960         19       /* Intel 80960 */
 #define EM_PPC	       20	/* PowerPC */
 #define EM_PPC64       21	/* 64-bit PowerPC */
+#define EM_S390        22	/* IBM S/390 */
 
 #define EM_V800        36	/* NEC V800 series */
 #define EM_FR20	       37	/* Fujitsu FR20 */
@@ -195,6 +196,9 @@
 /* Alpha backend magic number.  Written in the absence of an ABI.  */
 #define EM_ALPHA	0x9026
 
+/* old S/390 backend magic number. Written in the absence of an ABI.  */
+#define EM_S390_OLD	0xa390
+
 /* D10V backend magic number.  Written in the absence of an ABI.  */
 #define EM_CYGNUS_D10V	0x7650
 
diff --git a/include/elf/s390.h b/include/elf/s390.h
new file mode 100644
index 0000000..3cd9976
--- /dev/null
+++ b/include/elf/s390.h
@@ -0,0 +1,73 @@
+/* 390 ELF support for BFD.
+   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Contributed by Carl B. Pedersen and Martin Schwidefsky.
+
+   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_390_H
+#define _ELF_390_H
+
+/* Processor specific flags for the ELF header e_flags field.  */
+
+/* Symbol types.  */
+
+#define STACK_REG		15		/* Global Stack reg */
+#define BACKL_REG		14		/* Global Backlink reg */
+#define BASE_REG		13		/* Global Base reg */
+#define GOT_REG 		12		/* Holds addr of GOT */
+
+#include "elf/reloc-macros.h"
+
+/* Relocation types.  */
+
+START_RELOC_NUMBERS (elf_s390_reloc_type)
+    RELOC_NUMBER (R_390_NONE, 0)	/* No reloc.  */
+    RELOC_NUMBER (R_390_8, 1)		/* Direct 8 bit.  */
+    RELOC_NUMBER (R_390_12, 2)		/* Direct 12 bit.  */
+    RELOC_NUMBER (R_390_16, 3)		/* Direct 16 bit.  */
+    RELOC_NUMBER (R_390_32, 4)		/* Direct 32 bit.  */
+    RELOC_NUMBER (R_390_PC32, 5)	/* PC relative 32 bit.  */
+    RELOC_NUMBER (R_390_GOT12, 6)	/* 12 bit GOT offset.  */
+    RELOC_NUMBER (R_390_GOT32, 7)	/* 32 bit GOT offset.  */
+    RELOC_NUMBER (R_390_PLT32, 8)	/* 32 bit PC relative PLT address.  */
+    RELOC_NUMBER (R_390_COPY, 9)	/* Copy symbol at runtime.  */
+    RELOC_NUMBER (R_390_GLOB_DAT, 10)	/* Create GOT entry.  */
+    RELOC_NUMBER (R_390_JMP_SLOT, 11)	/* Create PLT entry.  */
+    RELOC_NUMBER (R_390_RELATIVE, 12)	/* Adjust by program base.  */
+    RELOC_NUMBER (R_390_GOTOFF, 13)	/* 32 bit offset to GOT.  */
+    RELOC_NUMBER (R_390_GOTPC, 14)	/* 32 bit PC relative offset to GOT.  */
+    RELOC_NUMBER (R_390_GOT16, 15)	/* 16 bit GOT offset.  */
+    RELOC_NUMBER (R_390_PC16, 16)	/* PC relative 16 bit.  */
+    RELOC_NUMBER (R_390_PC16DBL, 17)	/* PC relative 16 bit shifted by 1.  */
+    RELOC_NUMBER (R_390_PLT16DBL, 18)	/* 16 bit PC rel. PLT shifted by 1.  */
+    RELOC_NUMBER (R_390_PC32DBL, 19)	/* PC relative 32 bit shifted by 1.  */
+    RELOC_NUMBER (R_390_PLT32DBL, 20)	/* 32 bit PC rel. PLT shifted by 1.  */
+    RELOC_NUMBER (R_390_GOTPCDBL, 21)	/* 32 bit PC rel. GOT shifted by 1.  */
+    RELOC_NUMBER (R_390_64, 22)		/* Direct 64 bit.  */
+    RELOC_NUMBER (R_390_PC64, 23)	/* PC relative 64 bit.  */
+    RELOC_NUMBER (R_390_GOT64, 24)	/* 64 bit GOT offset.  */
+    RELOC_NUMBER (R_390_PLT64, 25)	/* 64 bit PC relative PLT address.  */
+    RELOC_NUMBER (R_390_GOTENT, 26)	/* 32 bit PC rel. to GOT entry >> 1. */
+    /* These are GNU extensions to enable C++ vtable garbage collection.  */
+    RELOC_NUMBER (R_390_GNU_VTINHERIT, 250)
+    RELOC_NUMBER (R_390_GNU_VTENTRY, 251)
+END_RELOC_NUMBERS (R_390_max)
+
+#endif /* _ELF_390_H */
+
+
diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog
index 1384234..b4e6888 100644
--- a/include/opcode/ChangeLog
+++ b/include/opcode/ChangeLog
@@ -1,3 +1,27 @@
+2001-02-18  lars brinkhoff  <lars@nocrew.org>
+
+	* pdp11.h: New file.
+
+2001-02-12  Jan Hubicka  <jh@suse.cz>
+
+	* i386.h (i386_optab): SSE integer converison instructions have
+	64bit versions on x86-64.
+
+2001-02-10  Nick Clifton  <nickc@redhat.com>
+
+	* mips.h: Remove extraneous whitespace.  Formating change to allow
+	for future contribution.
+
+2001-02-09  Martin Schwidefsky  <schwidefsky@de.ibm.com>
+
+	* s390.h: New file.
+
+2001-02-02  Patrick Macdonald  <patrickm@redhat.com>
+
+        * cgen.h (CGEN_SYNTAX_CHAR_TYPE): Typedef as unsigned short.
+        (CGEN_MAX_SYNTAX_ELEMENTS): Rename from CGEN_MAX_SYNTAX_BYTES.
+        (CGEN_SYNTAX): Define using CGEN_MAX_SYNTAX_ELEMENTS.
+
 2001-01-24  Karsten Keil  <kkeil@suse.de>
 
 	* i386.h (i386_optab): Fix swapgs
@@ -9,7 +33,7 @@
 	(pa_opcodes): Add entries for missing wide mode ldi,ldo,ldw,stw.
 	Remove duplicate "ldw j(s,b),x".  Sort some entries.
 
-Sat Jan 13 09:56:32 MET 2001  Jan Hubicka  <jh@suse.cz>
+2001-01-13  Jan Hubicka  <jh@suse.cz>
 
 	* i386.h (i386_optab): Fix pusha and ret templates.
 
@@ -656,7 +680,7 @@
 	* cgen.h (enum cgen_mode): Add CGEN_MODE_TARGET_MAX, CGEN_MODE_INT,
 	CGEN_MODE_UINT.
 
-Sat Jan 16 01:29:25 1999  Jeffrey A Law  (law@cygnus.com)
+1999-01-16  Jeffrey A Law  (law@cygnus.com)
 
 	* hppa.h (bv): Fix mask.
 
@@ -1007,7 +1031,7 @@
 
 	* tic30.h: New file.
 
-Thu Jan 22 17:54:56 1998  Nick Clifton  <nickc@cygnus.com>
+Jan 22 17:54:56 1998  Nick Clifton  <nickc@cygnus.com>
 
 	* cgen.h: Add prototypes for cgen_save_fixups(),
 	cgen_restore_fixups(), and cgen_swap_fixups().  Change prototype
diff --git a/include/opcode/cgen.h b/include/opcode/cgen.h
index f7962cd..e208a54 100644
--- a/include/opcode/cgen.h
+++ b/include/opcode/cgen.h
@@ -736,25 +736,21 @@
    the data is recorded in the parse/insert/extract/print switch statements. */
 
 /* This should be at least as large as necessary for any target. */
-#define CGEN_MAX_SYNTAX_BYTES 40
+#define CGEN_MAX_SYNTAX_ELEMENTS 40
 
 /* A target may know its own precise maximum.  Assert that it falls below
    the above limit. */
-#ifdef CGEN_ACTUAL_MAX_SYNTAX_BYTES
-#if CGEN_ACTUAL_MAX_SYNTAX_BYTES > CGEN_MAX_SYNTAX_BYTES
-#error "CGEN_ACTUAL_MAX_SYNTAX_BYTES too high - enlarge CGEN_MAX_SYNTAX_BYTES"
+#ifdef CGEN_ACTUAL_MAX_SYNTAX_ELEMENTS
+#if CGEN_ACTUAL_MAX_SYNTAX_ELEMENTS > CGEN_MAX_SYNTAX_ELEMENTS
+#error "CGEN_ACTUAL_MAX_SYNTAX_ELEMENTS too high - enlarge CGEN_MAX_SYNTAX_ELEMENTS"
 #endif
 #endif
 
-#if !defined(MAX_OPERANDS) || MAX_OPERANDS <= 127
-typedef unsigned char CGEN_SYNTAX_CHAR_TYPE;
-#else
 typedef unsigned short CGEN_SYNTAX_CHAR_TYPE;
-#endif
 
 typedef struct
 {
-  CGEN_SYNTAX_CHAR_TYPE syntax[CGEN_MAX_SYNTAX_BYTES];
+  CGEN_SYNTAX_CHAR_TYPE syntax[CGEN_MAX_SYNTAX_ELEMENTS];
 } CGEN_SYNTAX;
 
 #define CGEN_SYNTAX_STRING(syn) (syn->syntax)
diff --git a/include/opcode/i386.h b/include/opcode/i386.h
index 07124c4..2ab783e 100644
--- a/include/opcode/i386.h
+++ b/include/opcode/i386.h
@@ -1112,10 +1112,10 @@
 {"comiss",    2, 0x0f2f,    X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, RegXMM, 0 } },
 {"cvtpi2ps",  2, 0x0f2a,    X, CpuSSE, FP|Modrm,	{ RegMMX|LLongMem, RegXMM, 0 } },
 {"cvtps2pi",  2, 0x0f2d,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegMMX, 0 } },
-{"cvtsi2ss",  2, 0xf30f2a,  X, CpuSSE, FP|Modrm,	{ Reg32|WordMem, RegXMM, 0 } },
-{"cvtss2si",  2, 0xf30f2d,  X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, Reg32, 0 } },
+{"cvtsi2ss",  2, 0xf30f2a,  X, CpuSSE, lq_Suf|IgnoreSize|Modrm,{ Reg32|Reg64|WordMem|LLongMem, RegXMM, 0 } },
+{"cvtss2si",  2, 0xf30f2d,  X, CpuSSE, lq_Suf|IgnoreSize|Modrm,{ RegXMM|WordMem, Reg32|Reg64, 0 } },
 {"cvttps2pi", 2, 0x0f2c,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegMMX, 0 } },
-{"cvttss2si", 2, 0xf30f2c,  X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, Reg32, 0 } },
+{"cvttss2si", 2, 0xf30f2c,  X, CpuSSE, lq_Suf|IgnoreSize|Modrm,	{ RegXMM|WordMem, Reg32|Reg64, 0 } },
 {"divps",     2, 0x0f5e,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
 {"divss",     2, 0xf30f5e,  X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, RegXMM, 0 } },
 {"ldmxcsr",   1, 0x0fae,    2, CpuSSE, FP|Modrm, 	{ WordMem, 0, 0 } },
@@ -1212,7 +1212,7 @@
 {"cmpsd",     3, 0xf20fc2,  X, CpuSSE2, FP|Modrm,	{ Imm8, RegXMM|LongMem, RegXMM } },
 {"comisd",    2, 0x660f2f,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LongMem, RegXMM, 0 } },
 {"cvtpi2pd",  2, 0x660f2a,  X, CpuSSE2, FP|Modrm,	{ RegMMX|LLongMem, RegXMM, 0 } },
-{"cvtsi2sd",  2, 0xf20f2a,  X, CpuSSE2, FP|Modrm,	{ Reg32|LongMem, RegXMM, 0 } },
+{"cvtsi2sd",  2, 0xf20f2a,  X, CpuSSE2, lq_Suf|IgnoreSize|Modrm,{ Reg32|Reg64|WordMem|LLongMem, RegXMM, 0 } },
 {"divpd",     2, 0x660f5e,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
 {"divsd",     2, 0xf20f5e,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LongMem, RegXMM, 0 } },
 {"maxpd",     2, 0x660f5f,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
@@ -1250,11 +1250,11 @@
 {"cvtpd2ps",  2, 0x660f5a,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
 {"cvtps2pd",  2, 0x0f5a,    X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
 {"cvtps2dq",  2, 0x660f5b,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegMMX, 0 } },
-{"cvtsd2si",  2, 0xf20f2d,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, Reg32, 0 } },
+{"cvtsd2si",  2, 0xf20f2d,  X, CpuSSE2, lq_Suf|IgnoreSize|Modrm,{ RegXMM|LLongMem, Reg32|Reg64, 0 } },
 {"cvtsd2ss",  2, 0xf20f5a,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
 {"cvtss2sd",  2, 0xf30f5a,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
 {"cvttpd2pi", 2, 0x660f2c,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegMMX, 0 } },
-{"cvttsd2si", 2, 0xf20f2c,  X, CpuSSE2, FP|Modrm,	{ RegXMM|WordMem, Reg32, 0 } },
+{"cvttsd2si", 2, 0xf20f2c,  X, CpuSSE2, lq_Suf|IgnoreSize|Modrm,{ RegXMM|WordMem, Reg32|Reg64, 0 } },
 {"cvttpd2dq", 2, 0x660fe6,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
 {"cvttps2dq", 2, 0xf30f5b,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
 {"maskmovdqu",2, 0x660ff7,  X, CpuSSE2, FP|Modrm,	{ RegXMM, RegXMM, 0 } },
diff --git a/include/opcode/mips.h b/include/opcode/mips.h
index c493d08..ab30d1c 100644
--- a/include/opcode/mips.h
+++ b/include/opcode/mips.h
@@ -30,9 +30,9 @@
 	i = (i &~ (OP_MASK_X << OP_SH_X)) | (j << OP_SH_X)
 
    Make sure you use fields that are appropriate for the instruction,
-   of course.  
+   of course.
 
-   The 'i' format uses OP, RS, RT and IMMEDIATE.  
+   The 'i' format uses OP, RS, RT and IMMEDIATE.
 
    The 'j' format uses OP and TARGET.
 
@@ -123,7 +123,7 @@
 #define OP_SH_HINT              16
 #define OP_MASK_HINT            0x1f
 #define OP_SH_MMI               0       /* Multimedia (parallel) op.  */
-#define OP_MASK_MMI             0x3f 
+#define OP_MASK_MMI             0x3f
 #define OP_SH_MMISUB            6
 #define OP_MASK_MMISUB          0x1f
 #define OP_MASK_PERFREG		0x1f	/* Performance monitoring.  */
@@ -366,14 +366,15 @@
 /* Test for membership in an ISA including chip specific ISAs.
    INSN is pointer to an element of the opcode table; ISA is the
    specified ISA to test against; and CPU is the CPU specific ISA
-   to test, or zero if no CPU specific ISA test is desired.  
+   to test, or zero if no CPU specific ISA test is desired.
    The gp32 arg is set when you need to force 32-bit register usage on
    a machine with 64-bit registers; see the documentation under -mgp32
    in the MIPS gas docs.  */
 
 #define OPCODE_IS_MEMBER(insn, isa, cpu, gp32)				\
     ((((insn)->membership & isa) != 0                           	\
-      && ((insn)->membership & INSN_GP32 ? gp32 : 1))			\
+      && ((insn)->membership & INSN_GP32 ? gp32 : 1)			\
+     )									\
      || (cpu == CPU_R4650 && ((insn)->membership & INSN_4650) != 0)	\
      || (cpu == CPU_R4010 && ((insn)->membership & INSN_4010) != 0)	\
      || ((cpu == CPU_VR4100 || cpu == CPU_R4111)			\
@@ -381,7 +382,7 @@
      || (cpu == CPU_R3900  && ((insn)->membership & INSN_3900) != 0))
 
 /* This is a list of macro expanded instructions.
-  
+
    _I appended means immediate
    _A appended means address
    _AB appended means address with base register
@@ -446,11 +447,11 @@
   M_DLA_AB,
   M_DLI,
   M_DMUL,
-  M_DMUL_I, 
+  M_DMUL_I,
   M_DMULO,
-  M_DMULO_I, 
+  M_DMULO_I,
   M_DMULOU,
-  M_DMULOU_I, 
+  M_DMULOU_I,
   M_DREM_3,
   M_DREM_3I,
   M_DREMU_3,
@@ -505,11 +506,11 @@
   M_LWR_AB,
   M_LWU_AB,
   M_MUL,
-  M_MUL_I, 
+  M_MUL_I,
   M_MULO,
-  M_MULO_I, 
+  M_MULO_I,
   M_MULOU,
-  M_MULOU_I, 
+  M_MULOU_I,
   M_NOR_I,
   M_OR_I,
   M_REM_3,
diff --git a/include/opcode/pdp11.h b/include/opcode/pdp11.h
new file mode 100644
index 0000000..891b74f9
--- /dev/null
+++ b/include/opcode/pdp11.h
@@ -0,0 +1,78 @@
+/* PDP-11 opcde list.
+   Copyright (C) 2001 Free Software Foundation, Inc.
+
+This file is part of GDB and GAS.
+
+GDB and GAS are 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 1, or (at your option)
+any later version.
+
+GDB and GAS are 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 GDB or GAS; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+/*
+ * PDP-11 opcode types.
+ */
+
+#define PDP11_OPCODE_NO_OPS	 0
+#define PDP11_OPCODE_REG	 1	/* register */
+#define PDP11_OPCODE_OP		 2	/* generic operand */
+#define PDP11_OPCODE_REG_OP	 3	/* register and generic operand */
+#define PDP11_OPCODE_REG_OP_REV	 4	/* register and generic operand,
+					   reversed syntax */
+#define PDP11_OPCODE_AC_OP	 5	/* fpu accumulator and generic
+					   operand */
+#define PDP11_OPCODE_OP_OP	 6	/* two generic operands */
+#define PDP11_OPCODE_DISPL	 7	/* pc-relative displacement */
+#define PDP11_OPCODE_REG_DISPL	 8	/* redister and pc-relative
+					   displacement */
+#define PDP11_OPCODE_IMM8	 9	/* 8-bit immediate */
+#define PDP11_OPCODE_IMM6	10	/* 6-bit immediate */
+#define PDP11_OPCODE_IMM3	11	/* 3-bit immediate */
+#define PDP11_OPCODE_ILLEGAL	12	/* illegal instruction */
+
+/*
+ * PDP-11 instruction set extensions.
+ *
+ * Please keep the numbers low, as they are used as indices into
+ * an array.
+ */
+
+#define PDP11_NONE	 0	/* not in instruction set */
+#define PDP11_BASIC	 1	/* basic instruction set (11/20 etc) */
+#define PDP11_CSM	 2	/* commercial instruction set */
+#define PDP11_CIS	 3	/* commercial instruction set */
+#define PDP11_EIS	 4	/* extended instruction set (11/45 etc) */
+#define PDP11_FIS	 5	/* KEV11 floating-point instructions */
+#define PDP11_FPP	 6	/* FP-11 floating-point instructions */
+#define PDP11_LEIS	 7	/* limited extended instruction set
+				   (11/40 etc) */
+#define PDP11_MFPT	 8	/* move from processor type */
+#define PDP11_MPROC	 9	/* multiprocessor instructions: tstset,
+				   wrtlck */
+#define PDP11_MXPS	10	/* move from/to processor status */
+#define PDP11_SPL	11	/* set priority level */
+#define PDP11_UCODE	12	/* microcode instructions: ldub, med, xfc */
+#define PDP11_EXT_NUM	13	/* total number of extension types */
+
+struct pdp11_opcode
+{
+  const char *name;
+  int opcode;
+  int mask;
+  int type;
+  int extension;
+};
+
+extern const struct pdp11_opcode pdp11_opcodes[];
+extern const struct pdp11_opcode pdp11_aliases[];
+extern const int pdp11_num_opcodes, pdp11_num_aliases;
+
+/* end of pdp11.h */
diff --git a/include/opcode/s390.h b/include/opcode/s390.h
new file mode 100644
index 0000000..8a7c00e
--- /dev/null
+++ b/include/opcode/s390.h
@@ -0,0 +1,130 @@
+/* s390.h -- Header file for S390 opcode table
+   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+
+   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 S390_H
+#define S390_H
+
+/* List of instruction sets variations. */
+
+enum s390_opcode_arch_val
+  {
+    S390_OPCODE_ESA = 0,
+    S390_OPCODE_ESAME
+  };
+
+/* The opcode table is an array of struct s390_opcode.  */
+
+struct s390_opcode
+  {
+    /* The opcode name.  */
+    const char * name;
+
+    /* The opcode itself.  Those bits which will be filled in with
+       operands are zeroes.  */
+    unsigned char opcode[6];
+
+    /* The opcode mask.  This is used by the disassembler.  This is a
+       mask containing ones indicating those bits which must match the
+       opcode field, and zeroes indicating those bits which need not
+       match (and are presumably filled in by operands).  */
+    unsigned char mask[6];
+
+    /* The opcode length in bytes. */
+    int oplen;
+
+    /* An array of operand codes.  Each code is an index into the
+       operand table.  They appear in the order which the operands must
+       appear in assembly code, and are terminated by a zero.  */
+    unsigned char operands[6];
+
+    /* Bitmask of architectures this opcode is available for.  */
+    unsigned int architecture;
+  };
+
+/* The table itself is sorted by major opcode number, and is otherwise
+   in the order in which the disassembler should consider
+   instructions.  */
+extern const struct s390_opcode s390_opcodes[];
+extern const int                s390_num_opcodes;
+
+/* A opcode format table for the .insn pseudo mnemonic.  */
+extern const struct s390_opcode s390_opformats[];
+extern const int                s390_num_opformats;
+
+/* Values defined for the flags field of a struct powerpc_opcode.  */
+
+/* The operands table is an array of struct s390_operand.  */
+
+struct s390_operand
+  {
+    /* The number of bits in the operand.  */
+    int bits;
+
+    /* How far the operand is left shifted in the instruction.  */
+    int shift;
+
+    /* One bit syntax flags.  */
+    unsigned long flags;
+  };
+
+/* Elements in the table are retrieved by indexing with values from
+   the operands field of the powerpc_opcodes table.  */
+
+extern const struct s390_operand s390_operands[];
+
+/* Values defined for the flags field of a struct s390_operand.  */
+
+/* This operand names a register.  The disassembler uses this to print
+   register names with a leading 'r'.  */
+#define S390_OPERAND_GPR 0x1
+
+/* This operand names a floating point register.  The disassembler
+   prints these with a leading 'f'. */
+#define S390_OPERAND_FPR 0x2
+
+/* This operand names an access register.  The disassembler
+   prints these with a leading 'a'.  */
+#define S390_OPERAND_AR 0x4
+
+/* This operand names a control register.  The disassembler
+   prints these with a leading 'c'.  */
+#define S390_OPERAND_CR 0x8
+
+/* This operand is a displacement.  */
+#define S390_OPERAND_DISP 0x10
+
+/* This operand names a base register.  */
+#define S390_OPERAND_BASE 0x20
+
+/* This operand names an index register, it can be skipped.  */
+#define S390_OPERAND_INDEX 0x40
+
+/* This operand is a relative branch displacement.  The disassembler
+   prints these symbolically if possible.  */
+#define S390_OPERAND_PCREL 0x80
+
+/* This operand takes signed values.  */
+#define S390_OPERAND_SIGNED 0x100
+
+/* This operand is a length.  */
+#define S390_OPERAND_LENGTH 0x200
+
+#endif /* S390_H */
diff --git a/ld/ChangeLog b/ld/ChangeLog
index d8e79b5..53c9dc6 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,109 @@
+2001-02-27  Alan Modra  <alan@linuxcare.com.au>
+
+	* configure.in (BFD_VERSION): New.
+	(AM_INIT_AUTOMAKE): Use $BFD_VERSION.
+	* configure: Regenerate.
+	* Makefile.am: Run "make dep-am"
+	* Makefile.in: Regenerate.
+
+2001-02-26  Timothy Wall  <twall@cygnus.com>
+
+	* emulparams/elf64_aix.sh: Add additional read-only sections;
+	uncomment lines which are now required.
+
+2001-02-26  H.J. Lu  <hjl@gnu.org>
+
+	* ldlang.c (open_input_bfds): Set the bfd error handler so
+        that problems can be caught whilst loading symbols.
+        (record_bfd_errors): New function: Report BFD errors and mark
+        the executable output as being invalid.
+
+2001-02-22  Timothy Wall  <twall@cygnus.com>
+
+	* configure.host: Add configuration for ia64-*-aix*.
+	* Makefile.am (ALL_64_EMULATIONS): Add emulation for ia64-*-aix*.
+	Add dependencies for eelf64_aix.c.
+	* Makefile.in: Regenerate.
+	* configure.tgt: Add ia64-*-aix* mapping.
+	* emulparams/elf64_aix.sh: Add settings for elf64 on aix5.
+	* testsuite/ld-bootstrap/boostrap.exp: Exclude ia64 flavor from
+	AIX-specific test. 
+	
+2001-02-20  H.J. Lu  <hjl@gnu.org>
+
+	* ldfile.c (ldfile_open_file): Set entry->search_dirs_flag to
+	false if we found the file.
+
+2001-02-18  David O'Brien  <obrien@FreeBSD.org>
+
+	* configure.tgt: Add FreeBSD/Alpha, FreeBSD/x86-64, FreeBSD/ia64,
+	FreeBSD/PowerPC, FreeBSD/arm, and FreeBSD/sparc64 entries.
+
+2001-02-18  lars brinkhoff  <lars@nocrew.org>
+
+	* Makefile.am: Add PDP-11 target.
+	* configure.tgt: Likewise.
+	* emulparams/pdp11.sh: New file.
+
+2001-02-17  David O'Brien  <obrien@FreeBSD.org>
+
+	* configure.host: Add a generic FreeBSD configuration entry such that
+	all [modern] FreeBSD systems on all platforms will look the same.
+
+2001-02-14  H.J. Lu  <hjl@gnu.org>
+
+	* configure.tgt: Remove mention of earmelf_linux26.
+
+2001-02-13  Richard Henderson  <rth@redhat.com>
+
+	* emulparams/elf64_ia64.sh (OTHER_GOT_SYMBOLS): Remove.
+
+2001-02-13  H.J. Lu  <hjl@gnu.org>
+
+	* ldexp.h (node_type): Add etree_provided.
+	* ldexp.c (exp_fold_tree): Handle etree_provided. Set the node
+	type to etree_provided if defined by PROVIDE. Allow updating
+	for etree_provided. 
+	(exp_print_tree): Handle etree_provided.
+	* mpw-elfmips.c (gldelf32ebmip_find_exp_assignment): Handle
+	etree_provided.
+
+2001-02-09  David Mosberger  <davidm@hpl.hp.com>
+
+	* emulparams/elf64_ia64.sh (OTHER_READONLY_SECTIONS): Add
+	.IA_64.unwind.* pattern to unwind table section and
+	.IA_64.unwind_info* pattern to unwind info section.
+
+2001-02-09  Martin Schwidefsky  <schwidefsky@de.ibm.com>
+
+	* Makefile.am: Add linux target for S/390.
+	* Makefile.in: Likewise.
+	* configure.host: Likewise.
+	* configure.tgt: Likewise.
+	* emulparams/elf64_s390.sh: New file.
+	* emulparams/elf_s390.sh: New file.
+
+2001-02-09  Jakub Jelinek  <jakub@redhat.com>
+
+	* configure.tgt (sparc64-*-linux-gnu*): Add elf32_sparc into
+	targ_extra_libpath.
+	(sparc-*-linux-gnu*): Add elf64_sparc into targ_extra_libpath.
+
+2001-02-06  Philip Blundell  <philb@gnu.org>
+
+	* Makefile.am: Remove mention of earmelf_linux26.
+	* Makefile.in: Regenerate.
+
+2001-02-04  Philip Blundell  <philb@gnu.org>
+
+	* emulparams/armelf_linux.sh (TEXT_START_ADDR): Set to 0x8000.
+	* emulparams/armelf_linux26.sh: Delete.
+	* configure.tgt: Remove mention of armelf_linux26 emulation.
+
+2001-02-01  Nick Clifton  <nickc@redhat.com>
+
+	* ld.1: Replace occurances of -oformat with --oformat.
+
 2001-01-25  Jim Driftmyer <jdrift@stny.rr.com>
 
 	* ldlang.c (lang_leave_overlay): Don't set lma_region when
diff --git a/ld/Makefile.am b/ld/Makefile.am
index 0b6d10c..3d5931d 100644
--- a/ld/Makefile.am
+++ b/ld/Makefile.am
@@ -110,7 +110,6 @@
 	earmcoff.o \
 	earmelf.o \
 	earmelf_linux.o \
-	earmelf_linux26.o \
 	earmelf_oabi.o \
 	earmnbsd.o \
 	earmpe.o \
@@ -154,6 +153,7 @@
 	eelf_i386.o \
 	eelf_i386_be.o \
 	eelf_i386_chaos.o \
+	eelf_s390.o \
 	egld960.o \
 	egld960coff.o \
 	eh8300.o \
@@ -208,6 +208,7 @@
 	enews.o \
 	ens32knbsd.o \
 	epc532macha.o \
+	epdp11.o \
 	epjelf.o \
 	epjlelf.o \
 	eppcmacos.o \
@@ -241,8 +242,10 @@
 	ez8002.o
 
 ALL_64_EMULATIONS = \
+	eelf64_aix.o \
 	eelf64_ia64.o \
 	eelf_x86_64.o \
+	eelf64_s390.o \
 	eelf64_sparc.o \
 	eelf64alpha.o \
 	eelf64bmip.o \
@@ -332,10 +335,6 @@
   $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
   $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} armelf_linux "$(tdir_armelf_linux)"
-earmelf_linux26.c: $(srcdir)/emulparams/armelf_linux26.sh \
-  $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
-  $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
-	${GENSCRIPTS} armelf_linux26 "$(tdir_armelf_linux26)"
 earmaoutb.c:	$(srcdir)/emulparams/armaoutb.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/armaout.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} armaoutb "$(tdir_armaoutb)"
@@ -488,9 +487,15 @@
 eelf64hppa.c: $(srcdir)/emulparams/elf64hppa.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf64hppa "$(tdir_elf64hppa)"
+eelf64_aix.c: $(srcdir)/emulparams/elf64_aix.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} elf64_aix "$(tdir_elf64_aix)"
 eelf64_ia64.c: $(srcdir)/emulparams/elf64_ia64.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf64_ia64 "$(tdir_elf64_ia64)"
+eelf64_s390.c: $(srcdir)/emulparams/elf64_s390.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} elf64_s390 "$(tdir_elf64_s390)"
 eelf64_sparc.c: $(srcdir)/emulparams/elf64_sparc.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf64_sparc "$(tdir_elf64_sparc)"
@@ -509,6 +514,9 @@
 eelf_i386_chaos.c: $(srcdir)/emulparams/elf_i386_chaos.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf_i386_chaos "$(tdir_elf_i386_chaos)"
+eelf_s390.c: $(srcdir)/emulparams/elf_s390.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} elf_s390 "$(tdir_elf_s390)"
 egld960.c: $(srcdir)/emulparams/gld960.sh \
   $(srcdir)/emultempl/gld960.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} gld960 "$(tdir_gld960)"
@@ -680,6 +688,9 @@
 epc532macha.c: $(srcdir)/emulparams/pc532macha.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} pc532macha "$(tdir_pc532macha)"
+epdp11.c: $(srcdir)/emulparams/pdp11.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} pdp11 "$(tdir_pdp11)"
 epjelf.c: $(srcdir)/emulparams/pjelf.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} pjelf "$(tdir_pjelf)"
@@ -1018,9 +1029,9 @@
   ldlang.h ldwrite.h ldmisc.h ldgram.h ldmain.h
 lexsup.o: lexsup.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
-  $(INCDIR)/getopt.h $(INCDIR)/bfdlink.h ld.h $(INCDIR)/bin-bugs.h \
-  ldmain.h ldmisc.h ldexp.h ldlang.h ldgram.h ldlex.h \
-  ldfile.h ldver.h ldemul.h $(INCDIR)/demangle.h
+  $(INCDIR)/bfdlink.h ld.h $(INCDIR)/bin-bugs.h ldmain.h \
+  ldmisc.h ldexp.h ldlang.h ldgram.h ldlex.h ldfile.h \
+  ldver.h ldemul.h $(INCDIR)/demangle.h
 mri.o: mri.c ../bfd/bfd.h $(INCDIR)/ansidecl.h sysdep.h \
   config.h $(INCDIR)/fopen-same.h ld.h $(INCDIR)/bin-bugs.h \
   ldexp.h ldlang.h ldmisc.h mri.h ldgram.h $(INCDIR)/libiberty.h
diff --git a/ld/Makefile.in b/ld/Makefile.in
index 705963c..126e4ec 100644
--- a/ld/Makefile.in
+++ b/ld/Makefile.in
@@ -218,7 +218,6 @@
 	earmcoff.o \
 	earmelf.o \
 	earmelf_linux.o \
-	earmelf_linux26.o \
 	earmelf_oabi.o \
 	earmnbsd.o \
 	earmpe.o \
@@ -262,6 +261,7 @@
 	eelf_i386.o \
 	eelf_i386_be.o \
 	eelf_i386_chaos.o \
+	eelf_s390.o \
 	egld960.o \
 	egld960coff.o \
 	eh8300.o \
@@ -316,6 +316,7 @@
 	enews.o \
 	ens32knbsd.o \
 	epc532macha.o \
+	epdp11.o \
 	epjelf.o \
 	epjlelf.o \
 	eppcmacos.o \
@@ -350,8 +351,10 @@
 
 
 ALL_64_EMULATIONS = \
+	eelf64_aix.o \
 	eelf64_ia64.o \
 	eelf_x86_64.o \
+	eelf64_s390.o \
 	eelf64_sparc.o \
 	eelf64alpha.o \
 	eelf64bmip.o \
@@ -1046,10 +1049,6 @@
   $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
   $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} armelf_linux "$(tdir_armelf_linux)"
-earmelf_linux26.c: $(srcdir)/emulparams/armelf_linux26.sh \
-  $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
-  $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
-	${GENSCRIPTS} armelf_linux26 "$(tdir_armelf_linux26)"
 earmaoutb.c:	$(srcdir)/emulparams/armaoutb.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/armaout.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} armaoutb "$(tdir_armaoutb)"
@@ -1202,9 +1201,15 @@
 eelf64hppa.c: $(srcdir)/emulparams/elf64hppa.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf64hppa "$(tdir_elf64hppa)"
+eelf64_aix.c: $(srcdir)/emulparams/elf64_aix.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} elf64_aix "$(tdir_elf64_aix)"
 eelf64_ia64.c: $(srcdir)/emulparams/elf64_ia64.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf64_ia64 "$(tdir_elf64_ia64)"
+eelf64_s390.c: $(srcdir)/emulparams/elf64_s390.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} elf64_s390 "$(tdir_elf64_s390)"
 eelf64_sparc.c: $(srcdir)/emulparams/elf64_sparc.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf64_sparc "$(tdir_elf64_sparc)"
@@ -1223,6 +1228,9 @@
 eelf_i386_chaos.c: $(srcdir)/emulparams/elf_i386_chaos.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf_i386_chaos "$(tdir_elf_i386_chaos)"
+eelf_s390.c: $(srcdir)/emulparams/elf_s390.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} elf_s390 "$(tdir_elf_s390)"
 egld960.c: $(srcdir)/emulparams/gld960.sh \
   $(srcdir)/emultempl/gld960.em $(srcdir)/scripttempl/i960.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} gld960 "$(tdir_gld960)"
@@ -1394,6 +1402,9 @@
 epc532macha.c: $(srcdir)/emulparams/pc532macha.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} pc532macha "$(tdir_pc532macha)"
+epdp11.c: $(srcdir)/emulparams/pdp11.sh \
+  $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} pdp11 "$(tdir_pdp11)"
 epjelf.c: $(srcdir)/emulparams/pjelf.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} pjelf "$(tdir_pjelf)"
@@ -1709,9 +1720,9 @@
   ldlang.h ldwrite.h ldmisc.h ldgram.h ldmain.h
 lexsup.o: lexsup.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
   sysdep.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
-  $(INCDIR)/getopt.h $(INCDIR)/bfdlink.h ld.h $(INCDIR)/bin-bugs.h \
-  ldmain.h ldmisc.h ldexp.h ldlang.h ldgram.h ldlex.h \
-  ldfile.h ldver.h ldemul.h $(INCDIR)/demangle.h
+  $(INCDIR)/bfdlink.h ld.h $(INCDIR)/bin-bugs.h ldmain.h \
+  ldmisc.h ldexp.h ldlang.h ldgram.h ldlex.h ldfile.h \
+  ldver.h ldemul.h $(INCDIR)/demangle.h
 mri.o: mri.c ../bfd/bfd.h $(INCDIR)/ansidecl.h sysdep.h \
   config.h $(INCDIR)/fopen-same.h ld.h $(INCDIR)/bin-bugs.h \
   ldexp.h ldlang.h ldmisc.h mri.h ldgram.h $(INCDIR)/libiberty.h
diff --git a/ld/configure b/ld/configure
index 046d2f5..2a211e2 100755
--- a/ld/configure
+++ b/ld/configure
@@ -53,6 +53,7 @@
 program_transform_name=s,x,x,
 silent=
 site=
+sitefile=
 srcdir=
 target=NONE
 verbose=
@@ -167,6 +168,7 @@
   --help                  print this message
   --no-create             do not create output files
   --quiet, --silent       do not print \`checking...' messages
+  --site-file=FILE        use FILE as the site file
   --version               print the version of autoconf that created configure
 Directory and file names:
   --prefix=PREFIX         install architecture-independent files in PREFIX
@@ -337,6 +339,11 @@
   -site=* | --site=* | --sit=*)
     site="$ac_optarg" ;;
 
+  -site-file | --site-file | --site-fil | --site-fi | --site-f)
+    ac_prev=sitefile ;;
+  -site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*)
+    sitefile="$ac_optarg" ;;
+
   -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
     ac_prev=srcdir ;;
   -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
@@ -502,12 +509,16 @@
 srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
 
 # Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
-  if test "x$prefix" != xNONE; then
-    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-  else
-    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+if test -z "$sitefile"; then
+  if test -z "$CONFIG_SITE"; then
+    if test "x$prefix" != xNONE; then
+      CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+    else
+      CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+    fi
   fi
+else
+  CONFIG_SITE="$sitefile"
 fi
 for ac_site_file in $CONFIG_SITE; do
   if test -r "$ac_site_file"; then
@@ -546,12 +557,12 @@
 fi
 
 echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
-echo "configure:550: checking for Cygwin environment" >&5
+echo "configure:561: checking for Cygwin environment" >&5
 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 555 "configure"
+#line 566 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -562,7 +573,7 @@
 return __CYGWIN__;
 ; return 0; }
 EOF
-if { (eval echo configure:566: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:577: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cygwin=yes
 else
@@ -579,19 +590,19 @@
 CYGWIN=
 test "$ac_cv_cygwin" = yes && CYGWIN=yes
 echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
-echo "configure:583: checking for mingw32 environment" >&5
+echo "configure:594: checking for mingw32 environment" >&5
 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 588 "configure"
+#line 599 "configure"
 #include "confdefs.h"
 
 int main() {
 return __MINGW32__;
 ; return 0; }
 EOF
-if { (eval echo configure:595: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:606: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_mingw32=yes
 else
@@ -656,7 +667,7 @@
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:660: checking host system type" >&5
+echo "configure:671: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -677,7 +688,7 @@
 echo "$ac_t""$host" 1>&6
 
 echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:681: checking target system type" >&5
+echo "configure:692: checking target system type" >&5
 
 target_alias=$target
 case "$target_alias" in
@@ -695,7 +706,7 @@
 echo "$ac_t""$target" 1>&6
 
 echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:699: checking build system type" >&5
+echo "configure:710: checking build system type" >&5
 
 build_alias=$build
 case "$build_alias" in
@@ -720,7 +731,7 @@
 # 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:724: checking for $ac_word" >&5
+echo "configure:735: 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
@@ -750,7 +761,7 @@
   # 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:754: checking for $ac_word" >&5
+echo "configure:765: 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
@@ -801,7 +812,7 @@
       # 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:805: checking for $ac_word" >&5
+echo "configure:816: 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
@@ -833,7 +844,7 @@
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:837: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:848: 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.
@@ -844,12 +855,12 @@
 
 cat > conftest.$ac_ext << EOF
 
-#line 848 "configure"
+#line 859 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:853: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:864: \"$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
@@ -875,12 +886,12 @@
   { 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:879: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:890: 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:884: checking whether we are using GNU C" >&5
+echo "configure:895: 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
@@ -889,7 +900,7 @@
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:893: \"$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:904: \"$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
@@ -908,7 +919,7 @@
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:912: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:923: 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
@@ -940,7 +951,7 @@
 fi
 
 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
-echo "configure:944: checking for POSIXized ISC" >&5
+echo "configure:955: 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
@@ -961,6 +972,7 @@
 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),
 # so one script is as good as another.  But avoid the broken or
 # incompatible versions:
@@ -973,7 +985,7 @@
 # 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:977: checking for a BSD compatible install" >&5
+echo "configure:989: 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
@@ -1026,7 +1038,7 @@
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:1030: checking whether build environment is sane" >&5
+echo "configure:1042: checking whether build environment is sane" >&5
 # Just in case
 sleep 1
 echo timestamp > conftestfile
@@ -1083,7 +1095,7 @@
 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:1087: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:1099: 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
@@ -1112,7 +1124,7 @@
 
 PACKAGE=ld
 
-VERSION=2.10.91
+VERSION=${BFD_VERSION}
 
 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
   { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
@@ -1129,7 +1141,7 @@
 
 missing_dir=`cd $ac_aux_dir && pwd`
 echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:1133: checking for working aclocal" >&5
+echo "configure:1145: 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.
@@ -1142,7 +1154,7 @@
 fi
 
 echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:1146: checking for working autoconf" >&5
+echo "configure:1158: 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.
@@ -1155,7 +1167,7 @@
 fi
 
 echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:1159: checking for working automake" >&5
+echo "configure:1171: 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.
@@ -1168,7 +1180,7 @@
 fi
 
 echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:1172: checking for working autoheader" >&5
+echo "configure:1184: 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.
@@ -1181,7 +1193,7 @@
 fi
 
 echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:1185: checking for working makeinfo" >&5
+echo "configure:1197: 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.
@@ -1276,7 +1288,7 @@
 if test "$ac_cv_prog_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:1280: checking for ld used by GCC" >&5
+echo "configure:1292: checking for ld used by GCC" >&5
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return which upsets mingw
@@ -1306,10 +1318,10 @@
   esac
 elif test "$with_gnu_ld" = yes; then
   echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:1310: checking for GNU ld" >&5
+echo "configure:1322: checking for GNU ld" >&5
 else
   echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:1313: checking for non-GNU ld" >&5
+echo "configure:1325: checking for non-GNU ld" >&5
 fi
 if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1344,7 +1356,7 @@
 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:1348: checking if the linker ($LD) is GNU ld" >&5
+echo "configure:1360: checking if the linker ($LD) is GNU ld" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1361,7 +1373,7 @@
 
 
 echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
-echo "configure:1365: checking for $LD option to reload object files" >&5
+echo "configure:1377: 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
@@ -1373,7 +1385,7 @@
 test -n "$reload_flag" && reload_flag=" $reload_flag"
 
 echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-echo "configure:1377: checking for BSD-compatible nm" >&5
+echo "configure:1389: checking for BSD-compatible nm" >&5
 if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1411,7 +1423,7 @@
 echo "$ac_t""$NM" 1>&6
 
 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1415: checking whether ln -s works" >&5
+echo "configure:1427: 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
@@ -1432,7 +1444,7 @@
 fi
 
 echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
-echo "configure:1436: checking how to recognise dependant libraries" >&5
+echo "configure:1448: 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
@@ -1575,13 +1587,13 @@
 deplibs_check_method=$lt_cv_deplibs_check_method
 
 echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-echo "configure:1579: checking for object suffix" >&5
+echo "configure:1591: 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:1585: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1597: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   for ac_file in conftest.*; do
     case $ac_file in
     *.c) ;;
@@ -1601,7 +1613,7 @@
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:1605: checking for executable suffix" >&5
+echo "configure:1617: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1611,10 +1623,10 @@
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:1615: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:1627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
-      *.c | *.o | *.obj) ;;
+      *.c | *.o | *.obj | *.ilk | *.pdb) ;;
       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
       esac
     done
@@ -1644,7 +1656,7 @@
 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:1648: checking for ${ac_tool_prefix}file" >&5
+echo "configure:1660: 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
@@ -1706,7 +1718,7 @@
 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:1710: checking for file" >&5
+echo "configure:1722: 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
@@ -1777,7 +1789,7 @@
 # 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:1781: checking for $ac_word" >&5
+echo "configure:1793: 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
@@ -1809,7 +1821,7 @@
   # 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:1813: checking for $ac_word" >&5
+echo "configure:1825: 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
@@ -1844,7 +1856,7 @@
 # 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:1848: checking for $ac_word" >&5
+echo "configure:1860: 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
@@ -1876,7 +1888,7 @@
   # 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:1880: checking for $ac_word" >&5
+echo "configure:1892: 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
@@ -1943,8 +1955,8 @@
 case "$host" in
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 1947 "configure"' > conftest.$ac_ext
-  if { (eval echo configure:1948: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  echo '#line 1959 "configure"' > conftest.$ac_ext
+  if { (eval echo configure:1960: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
     case "`/usr/bin/file conftest.o`" in
     *32-bit*)
       LD="${LD-ld} -32"
@@ -1965,7 +1977,7 @@
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -belf"
   echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-echo "configure:1969: checking whether the C compiler needs -belf" >&5
+echo "configure:1981: 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
@@ -1978,14 +1990,14 @@
 cross_compiling=$ac_cv_prog_cc_cross
 
      cat > conftest.$ac_ext <<EOF
-#line 1982 "configure"
+#line 1994 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:1989: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2001: \"$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
@@ -2163,7 +2175,7 @@
 # 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:2167: checking for $ac_word" >&5
+echo "configure:2179: 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
@@ -2193,7 +2205,7 @@
   # 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:2197: checking for $ac_word" >&5
+echo "configure:2209: 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
@@ -2244,7 +2256,7 @@
       # 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:2248: checking for $ac_word" >&5
+echo "configure:2260: 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
@@ -2276,7 +2288,7 @@
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:2280: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:2292: 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.
@@ -2287,12 +2299,12 @@
 
 cat > conftest.$ac_ext << EOF
 
-#line 2291 "configure"
+#line 2303 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:2296: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2308: \"$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
@@ -2318,12 +2330,12 @@
   { 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:2322: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2334: 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:2327: checking whether we are using GNU C" >&5
+echo "configure:2339: 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
@@ -2332,7 +2344,7 @@
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2336: \"$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:2348: \"$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
@@ -2351,7 +2363,7 @@
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:2355: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:2367: 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
@@ -2394,7 +2406,7 @@
 # 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:2398: checking for a BSD compatible install" >&5
+echo "configure:2410: 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
@@ -2449,7 +2461,7 @@
 
 ALL_LINGUAS=
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2453: checking how to run the C preprocessor" >&5
+echo "configure:2465: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -2464,13 +2476,13 @@
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 2468 "configure"
+#line 2480 "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:2474: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2486: \"$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
   :
@@ -2481,13 +2493,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 2485 "configure"
+#line 2497 "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:2491: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2503: \"$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
   :
@@ -2498,13 +2510,13 @@
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 2502 "configure"
+#line 2514 "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:2508: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2520: \"$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
   :
@@ -2531,7 +2543,7 @@
 # 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:2535: checking for $ac_word" >&5
+echo "configure:2547: 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
@@ -2559,12 +2571,12 @@
 fi
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:2563: checking for ANSI C header files" >&5
+echo "configure:2575: 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 2568 "configure"
+#line 2580 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -2572,7 +2584,7 @@
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2576: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2588: \"$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*
@@ -2589,7 +2601,7 @@
 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 2593 "configure"
+#line 2605 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -2607,7 +2619,7 @@
 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 2611 "configure"
+#line 2623 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -2628,7 +2640,7 @@
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 2632 "configure"
+#line 2644 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -2639,7 +2651,7 @@
 exit (0); }
 
 EOF
-if { (eval echo configure:2643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2655: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -2663,12 +2675,12 @@
 fi
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:2667: checking for working const" >&5
+echo "configure:2679: 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 2672 "configure"
+#line 2684 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -2717,7 +2729,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:2721: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2733: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -2738,21 +2750,21 @@
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:2742: checking for inline" >&5
+echo "configure:2754: 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 2749 "configure"
+#line 2761 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:2756: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2768: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -2778,12 +2790,12 @@
 esac
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:2782: checking for off_t" >&5
+echo "configure:2794: 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 2787 "configure"
+#line 2799 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -2811,12 +2823,12 @@
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:2815: checking for size_t" >&5
+echo "configure:2827: 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 2820 "configure"
+#line 2832 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -2846,19 +2858,19 @@
 # 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:2850: checking for working alloca.h" >&5
+echo "configure:2862: 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 2855 "configure"
+#line 2867 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:2862: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2874: \"$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
@@ -2879,12 +2891,12 @@
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:2883: checking for alloca" >&5
+echo "configure:2895: 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 2888 "configure"
+#line 2900 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -2912,7 +2924,7 @@
 char *p = (char *) alloca(1);
 ; 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:2928: \"$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
@@ -2944,12 +2956,12 @@
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:2948: checking whether alloca needs Cray hooks" >&5
+echo "configure:2960: 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 2953 "configure"
+#line 2965 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -2974,12 +2986,12 @@
 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:2978: checking for $ac_func" >&5
+echo "configure:2990: 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 2983 "configure"
+#line 2995 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3002,7 +3014,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3006: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3018: \"$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
@@ -3029,7 +3041,7 @@
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:3033: checking stack direction for C alloca" >&5
+echo "configure:3045: 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
@@ -3037,7 +3049,7 @@
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 3041 "configure"
+#line 3053 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -3056,7 +3068,7 @@
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:3060: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3072: \"$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
@@ -3081,17 +3093,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3085: checking for $ac_hdr" >&5
+echo "configure:3097: 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 3090 "configure"
+#line 3102 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3095: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3107: \"$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*
@@ -3120,12 +3132,12 @@
 for ac_func in getpagesize
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3124: checking for $ac_func" >&5
+echo "configure:3136: 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 3129 "configure"
+#line 3141 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3148,7 +3160,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3164: \"$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
@@ -3173,7 +3185,7 @@
 done
 
 echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:3177: checking for working mmap" >&5
+echo "configure:3189: 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
@@ -3181,7 +3193,7 @@
   ac_cv_func_mmap_fixed_mapped=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 3185 "configure"
+#line 3197 "configure"
 #include "confdefs.h"
 
 /* Thanks to Mike Haertel and Jim Avera for this test.
@@ -3321,7 +3333,7 @@
 }
 
 EOF
-if { (eval echo configure:3325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3337: \"$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
@@ -3349,17 +3361,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3353: checking for $ac_hdr" >&5
+echo "configure:3365: 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 3358 "configure"
+#line 3370 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3363: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3375: \"$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*
@@ -3389,12 +3401,12 @@
 __argz_count __argz_stringify __argz_next
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3393: checking for $ac_func" >&5
+echo "configure:3405: 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 3398 "configure"
+#line 3410 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3417,7 +3429,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3433: \"$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
@@ -3446,12 +3458,12 @@
      for ac_func in stpcpy
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3450: checking for $ac_func" >&5
+echo "configure:3462: 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 3455 "configure"
+#line 3467 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3474,7 +3486,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3490: \"$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
@@ -3508,19 +3520,19 @@
 
    if test $ac_cv_header_locale_h = yes; then
     echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:3512: checking for LC_MESSAGES" >&5
+echo "configure:3524: 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 3517 "configure"
+#line 3529 "configure"
 #include "confdefs.h"
 #include <locale.h>
 int main() {
 return LC_MESSAGES
 ; return 0; }
 EOF
-if { (eval echo configure:3524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3536: \"$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
@@ -3541,7 +3553,7 @@
     fi
   fi
    echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:3545: checking whether NLS is requested" >&5
+echo "configure:3557: 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"
@@ -3561,7 +3573,7 @@
 EOF
 
       echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:3565: checking whether included gettext is requested" >&5
+echo "configure:3577: 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"
@@ -3580,17 +3592,17 @@
 
 	ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:3584: checking for libintl.h" >&5
+echo "configure:3596: 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 3589 "configure"
+#line 3601 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3594: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3606: \"$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*
@@ -3607,19 +3619,19 @@
 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:3611: checking for gettext in libc" >&5
+echo "configure:3623: 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 3616 "configure"
+#line 3628 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 int main() {
 return (int) gettext ("")
 ; return 0; }
 EOF
-if { (eval echo configure:3623: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3635: \"$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
@@ -3635,7 +3647,7 @@
 
 	   if test "$gt_cv_func_gettext_libc" != "yes"; then
 	     echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
-echo "configure:3639: checking for bindtextdomain in -lintl" >&5
+echo "configure:3651: 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
@@ -3643,7 +3655,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3647 "configure"
+#line 3659 "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
@@ -3654,7 +3666,7 @@
 bindtextdomain()
 ; return 0; }
 EOF
-if { (eval echo configure:3658: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3670: \"$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
@@ -3670,19 +3682,19 @@
 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:3674: checking for gettext in libintl" >&5
+echo "configure:3686: 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 3679 "configure"
+#line 3691 "configure"
 #include "confdefs.h"
 
 int main() {
 return (int) gettext ("")
 ; return 0; }
 EOF
-if { (eval echo configure:3686: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3698: \"$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
@@ -3710,7 +3722,7 @@
 	      # 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:3714: checking for $ac_word" >&5
+echo "configure:3726: 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
@@ -3744,12 +3756,12 @@
 		for ac_func in dcgettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3748: checking for $ac_func" >&5
+echo "configure:3760: 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 3753 "configure"
+#line 3765 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3772,7 +3784,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3776: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3788: \"$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
@@ -3799,7 +3811,7 @@
 		# 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:3803: checking for $ac_word" >&5
+echo "configure:3815: 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
@@ -3835,7 +3847,7 @@
 		# 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:3839: checking for $ac_word" >&5
+echo "configure:3851: 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
@@ -3867,7 +3879,7 @@
 fi
 
 		cat > conftest.$ac_ext <<EOF
-#line 3871 "configure"
+#line 3883 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -3875,7 +3887,7 @@
 			       return _nl_msg_cat_cntr
 ; return 0; }
 EOF
-if { (eval echo configure:3879: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3891: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   CATOBJEXT=.gmo
 		   DATADIRNAME=share
@@ -3907,7 +3919,7 @@
         # 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:3911: checking for $ac_word" >&5
+echo "configure:3923: 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
@@ -3941,7 +3953,7 @@
         # 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:3945: checking for $ac_word" >&5
+echo "configure:3957: 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
@@ -3977,7 +3989,7 @@
         # 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:3981: checking for $ac_word" >&5
+echo "configure:3993: 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
@@ -4067,7 +4079,7 @@
        LINGUAS=
      else
        echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:4071: checking for catalogs to be installed" >&5
+echo "configure:4083: checking for catalogs to be installed" >&5
        NEW_LINGUAS=
        for lang in ${LINGUAS=$ALL_LINGUAS}; do
          case "$ALL_LINGUAS" in
@@ -4095,17 +4107,17 @@
       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:4099: checking for linux/version.h" >&5
+echo "configure:4111: 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 4104 "configure"
+#line 4116 "configure"
 #include "confdefs.h"
 #include <linux/version.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4109: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4121: \"$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*
@@ -4170,7 +4182,7 @@
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:4174: checking for executable suffix" >&5
+echo "configure:4186: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4180,10 +4192,10 @@
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:4184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:4196: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
-      *.c | *.o | *.obj) ;;
+      *.c | *.o | *.obj | *.ilk | *.pdb) ;;
       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
       esac
     done
@@ -4206,7 +4218,7 @@
 # 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:4210: checking for $ac_word" >&5
+echo "configure:4222: 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
@@ -4242,7 +4254,7 @@
 # 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:4246: checking for $ac_word" >&5
+echo "configure:4258: 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
@@ -4275,7 +4287,7 @@
 # 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:4279: checking for $ac_word" >&5
+echo "configure:4291: 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
@@ -4309,7 +4321,7 @@
   *) ac_lib=l ;;
   esac
   echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
-echo "configure:4313: checking for yywrap in -l$ac_lib" >&5
+echo "configure:4325: 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
@@ -4317,7 +4329,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-l$ac_lib  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4321 "configure"
+#line 4333 "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
@@ -4328,7 +4340,7 @@
 yywrap()
 ; return 0; }
 EOF
-if { (eval echo configure:4332: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4344: \"$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
@@ -4351,7 +4363,7 @@
 fi
 
 echo $ac_n "checking lex output file root""... $ac_c" 1>&6
-echo "configure:4355: checking lex output file root" >&5
+echo "configure:4367: 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
@@ -4372,7 +4384,7 @@
 LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
 
 echo $ac_n "checking whether yytext is a pointer""... $ac_c" 1>&6
-echo "configure:4376: checking whether yytext is a pointer" >&5
+echo "configure:4388: 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
@@ -4384,14 +4396,14 @@
 ac_save_LIBS="$LIBS"
 LIBS="$LIBS $LEXLIB"
 cat > conftest.$ac_ext <<EOF
-#line 4388 "configure"
+#line 4400 "configure"
 #include "confdefs.h"
 `cat $LEX_OUTPUT_ROOT.c`
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4407: \"$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
@@ -4414,7 +4426,7 @@
 
 
 echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:4418: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:4430: 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"
@@ -4448,17 +4460,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4452: checking for $ac_hdr" >&5
+echo "configure:4464: 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 4457 "configure"
+#line 4469 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4462: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4474: \"$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*
@@ -4487,12 +4499,12 @@
 for ac_func in sbrk
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4491: checking for $ac_func" >&5
+echo "configure:4503: 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 4496 "configure"
+#line 4508 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4515,7 +4527,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:4519: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4531: \"$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
@@ -4544,12 +4556,12 @@
 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:4548: checking for $ac_hdr that defines DIR" >&5
+echo "configure:4560: 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 4553 "configure"
+#line 4565 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
@@ -4557,7 +4569,7 @@
 DIR *dirp = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:4561: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4573: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_header_dirent_$ac_safe=yes"
 else
@@ -4582,7 +4594,7 @@
 # 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:4586: checking for opendir in -ldir" >&5
+echo "configure:4598: 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
@@ -4590,7 +4602,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-ldir  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4594 "configure"
+#line 4606 "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
@@ -4601,7 +4613,7 @@
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:4605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4617: \"$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
@@ -4623,7 +4635,7 @@
 
 else
 echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:4627: checking for opendir in -lx" >&5
+echo "configure:4639: 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
@@ -4631,7 +4643,7 @@
   ac_save_LIBS="$LIBS"
 LIBS="-lx  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4635 "configure"
+#line 4647 "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
@@ -4642,7 +4654,7 @@
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:4646: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4658: \"$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
@@ -4675,12 +4687,12 @@
 esac
 
 echo $ac_n "checking whether strstr must be declared""... $ac_c" 1>&6
-echo "configure:4679: checking whether strstr must be declared" >&5
+echo "configure:4691: 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 4684 "configure"
+#line 4696 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4701,7 +4713,7 @@
 char *(*pfn) = (char *(*)) strstr
 ; return 0; }
 EOF
-if { (eval echo configure:4705: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4717: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_decl_needed_strstr=no
 else
@@ -4722,12 +4734,12 @@
 fi
 
 echo $ac_n "checking whether free must be declared""... $ac_c" 1>&6
-echo "configure:4726: checking whether free must be declared" >&5
+echo "configure:4738: 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 4731 "configure"
+#line 4743 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4748,7 +4760,7 @@
 char *(*pfn) = (char *(*)) free
 ; return 0; }
 EOF
-if { (eval echo configure:4752: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4764: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_decl_needed_free=no
 else
@@ -4769,12 +4781,12 @@
 fi
 
 echo $ac_n "checking whether sbrk must be declared""... $ac_c" 1>&6
-echo "configure:4773: checking whether sbrk must be declared" >&5
+echo "configure:4785: 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 4778 "configure"
+#line 4790 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4795,7 +4807,7 @@
 char *(*pfn) = (char *(*)) sbrk
 ; return 0; }
 EOF
-if { (eval echo configure:4799: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4811: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_decl_needed_sbrk=no
 else
@@ -4816,12 +4828,12 @@
 fi
 
 echo $ac_n "checking whether getenv must be declared""... $ac_c" 1>&6
-echo "configure:4820: checking whether getenv must be declared" >&5
+echo "configure:4832: 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 4825 "configure"
+#line 4837 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4842,7 +4854,7 @@
 char *(*pfn) = (char *(*)) getenv
 ; return 0; }
 EOF
-if { (eval echo configure:4846: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4858: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_decl_needed_getenv=no
 else
@@ -4863,12 +4875,12 @@
 fi
 
 echo $ac_n "checking whether environ must be declared""... $ac_c" 1>&6
-echo "configure:4867: checking whether environ must be declared" >&5
+echo "configure:4879: 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 4872 "configure"
+#line 4884 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4889,7 +4901,7 @@
 char *(*pfn) = (char *(*)) environ
 ; return 0; }
 EOF
-if { (eval echo configure:4893: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4905: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   bfd_cv_decl_needed_environ=no
 else
@@ -4917,19 +4929,19 @@
 # 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:4921: checking whether ANSI C string concatenation works" >&5
+echo "configure:4933: 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 4926 "configure"
+#line 4938 "configure"
 #include "confdefs.h"
 
 int main() {
 char *a = "a" "a";
 ; return 0; }
 EOF
-if { (eval echo configure:4933: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4945: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ld_cv_string_concatenation=yes
 else
diff --git a/ld/configure.host b/ld/configure.host
index be14e01..d8d9afa 100644
--- a/ld/configure.host
+++ b/ld/configure.host
@@ -30,31 +30,12 @@
   HOSTING_CRT0=/usr/lib/crt0.o
   ;;
 
-alpha*-*-*)
-  HOSTING_CRT0=/usr/ccs/lib/crt0.o
-  NATIVE_LIB_DIRS=/usr/ccs/lib
-  ;;
-
 arm*-*-linux-gnu*)
   HOSTING_CRT0='-p -dynamic-linker `fgrep ld-linux.so \`${CC} --print-file-name=specs\` | sed -e "s,.*-dynamic-linker[ 	][ 	]*\(.*/ld-linux.so..\).*,\1,"` `${CC} --print-file-name=crt1.o` `${CC} --print-file-name=crti.o` `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} --print-file-name=crtbegin.o; fi`'
   HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi` -L`dirname \`${CC} --print-file-name=libc.so\`` -lc `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi` `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} --print-file-name=crtend.o; fi` `${CC} --print-file-name=crtn.o`'
   ;;
 
-i[3456]86-*-freebsdelf*)
-  # The new BSD `make' has a bug: it doesn't pass empty arguments in
-  # shell commands.  So we need to make this value non-empty in order
-  # for the genscripts.sh call to work.  There's nothing magic about
-  # the value `/lib'; it's just a dummy.
-  NATIVE_LIB_DIRS=/lib
-  # Older versions of gcc do not use a specs file.  In those cases,
-  # gcc -print-file-name=specs will simply print specs.  We create a
-  # dummy specs files to handle this.
-  echo "-dynamic-linker /usr/libexec/ld-elf.so.1" > specs
-  HOSTING_CRT0='-dynamic-linker `egrep "ld[^ ]*\.so" \`${CC} --print-file-name=specs\` | sed -e "s,.*-dynamic-linker[ 	][ 	]*\(.*/ld[^ ]*.so..\).*,\1,"` `${CC} --print-file-name=crt1.o` `${CC} --print-file-name=crti.o` `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} --print-file-name=crtbegin.o; fi`'
-  HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi` -L`dirname \`${CC} --print-file-name=libc.so\`` -lc `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi` `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} --print-file-name=crtend.o; fi` `${CC} --print-file-name=crtn.o`'
-  ;;
-
-i[3456]86-*-bsd* | i[3456]86-*-freebsd* | i[3456]86-*-netbsd*)
+i[3456]86-*-bsd* | i[34567]86-*-freebsd[12] | i[34567]86-*-freebsd[12]\.* | i[34567]86-*-freebsd*aout* | i[3456]86-*-netbsd*)
   # The new BSD `make' has a bug: it doesn't pass empty arguments in
   # shell commands.  So we need to make this value non-empty in order
   # for the genscripts.sh call to work.  There's nothing magic about
@@ -134,6 +115,12 @@
   HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi` -L`dirname \`${CC} --print-file-name=libc.so\`` -lc `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi` `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} --print-file-name=crtend.o; fi` `${CC} --print-file-name=crtn.o`'
   ;;
 
+ia64-*-aix*)
+  HOSTING_CRT0='-dynamic-linker `egrep "libc.so" \`${CC} --print-file-name=specs\` | sed -e "s,.*-dynamic-linker[ 	][ 	]*\(.*/libc.so..\).*,\1,"` `${CC} --print-file-name=crt1.o` `${CC} --print-file-name=crti.o` `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else ${CC} --print-file-name=crtbegin.o; fi`'
+  HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi` -L`dirname \`${CC} --print-file-name=libc.so\`` -lc `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi` `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} --print-file-name=crtend.o; fi` `${CC} --print-file-name=crtn.o`'
+  NATIVE_LIB_DIRS=/usr/lib/ia64l64
+  ;;
+
 mips*-dec-bsd*)
   HOSTING_CRT0=/usr/lib/crt0.o
   ;;
@@ -202,8 +189,14 @@
   HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi` `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} --print-file-name=crtend.o; fi` /usr/lib/crtn.o'
   ;;
 
-romp-*-*)
-  HDEFINES=-DNO_VARARGS
+s390x-*-linux)
+  HOSTING_CRT0='-dynamic-linker /lib/ld.so.1 /usr/lib/crt1.o /usr/lib/crti.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; elif [ -f /usr/lib/crtbegin.o ]; then echo /usr/lib/crtbegin.o; else gcc --print-file-name=crtbegin.o; fi`'
+  HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; elif [ -f /usr/lib/crtend.o ]; then echo /usr/lib/crtend.o; else gcc --print-file-name=crtend.o; fi` /usr/lib/crtn.o'
+  ;;
+
+s390-*-linux)
+  HOSTING_CRT0='-dynamic-linker /lib/ld.so.1 /usr/lib/crt1.o /usr/lib/crti.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; elif [ -f /usr/lib/crtbegin.o ]; then echo /usr/lib/crtbegin.o; else gcc --print-file-name=crtbegin.o; fi`'
+  HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; elif [ -f /usr/lib/crtend.o ]; then echo /usr/lib/crtend.o; else gcc --print-file-name=crtend.o; fi` /usr/lib/crtn.o'
   ;;
 
 sparc*-*-solaris2*)
@@ -222,4 +215,27 @@
   HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi` -L`dirname \`${CC} --print-file-name=libc.so\`` -lc `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi` `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} --print-file-name=crtend.o; fi` `${CC} --print-file-name=crtn.o`'
   ;;
 
+#
+#	Generic configurations:
+#
+
+*-*-freebsd*)
+  NATIVE_LIB_DIRS=/usr/lib
+  # Older versions of gcc do not use a specs file.  In those cases,
+  # gcc -print-file-name=specs will simply print specs.  We create a
+  # dummy specs files to handle this.
+  echo "-dynamic-linker `${CC} --print-file-name=ld-elf.so.1`" > specs
+  HOSTING_CRT0='-dynamic-linker `${CC} --print-file-name=ld-elf.so.1` `${CC} --print-file-name=crt1.o` `${CC} --print-file-name=crti.o` `${CC} --print-file-name=crtbegin.o`'
+  HOSTING_LIBS='`${CC} -print-libgcc-file-name` -L`dirname \`${CC} --print-file-name=libc.so\`` -lc `${CC} -print-libgcc-file-name` `${CC} --print-file-name=crtend.o` `${CC} --print-file-name=crtn.o`'
+  ;;
+
+alpha*-*-*)
+  HOSTING_CRT0=/usr/ccs/lib/crt0.o
+  NATIVE_LIB_DIRS=/usr/ccs/lib
+  ;;
+
+romp-*-*)
+  HDEFINES=-DNO_VARARGS
+  ;;
+
 esac
diff --git a/ld/configure.in b/ld/configure.in
index 042b986..6a69408 100644
--- a/ld/configure.in
+++ b/ld/configure.in
@@ -6,7 +6,10 @@
 AC_CANONICAL_SYSTEM
 AC_ISC_POSIX
 
-AM_INIT_AUTOMAKE(ld, 2.10.91)
+changequote(,)dnl
+BFD_VERSION=`sed -n -e 's/^.._INIT_AUTOMAKE.*,[ 	]*\([^ 	]*\)[ 	]*).*/\1/p' < ${srcdir}/../bfd/configure.in`
+changequote([,])dnl
+AM_INIT_AUTOMAKE(ld, ${BFD_VERSION})
 
 AM_PROG_LIBTOOL
 
diff --git a/ld/configure.tgt b/ld/configure.tgt
index dd0e166..52f5faf 100644
--- a/ld/configure.tgt
+++ b/ld/configure.tgt
@@ -40,6 +40,12 @@
 sparc*-*-coff)		targ_emul=coff_sparc ;;
 sparc*-*-elf)		targ_emul=elf32_sparc ;;
 sparc*-*-sysv4*)	targ_emul=elf32_sparc ;;
+sparc64-*-freebsd* | sparcv9-*-freebsd*)
+			targ_emul=elf64_sparc
+			targ_extra_emuls="elf32_sparc"
+			targ_extra_libpath=$targ_extra_emuls
+			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+			;;
 sparc*-*-linux*aout*)	targ_emul=sparclinux
 			targ_extra_emuls="elf32_sparc sun4"
 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
@@ -47,12 +53,14 @@
 			;;
 sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+			targ_extra_libpath=elf32_sparc
 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
 			tdir_sparclinux=${tdir_elf32_sparc}aout
 			tdir_sun4=sparc-sun-sunos4
 			;;
 sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+			targ_extra_libpath=elf64_sparc
 			tdir_sparclinux=${targ_alias}aout
 			tdir_elf64_sparc=`echo ${targ_alias} | sed -e 's/32//'`
 			tdir_sun4=sparc-sun-sunos4
@@ -89,7 +97,9 @@
 i960-*-rtems*)		targ_emul=gld960coff ;;
 i960-*-elf*)		targ_emul=elf32_i960 ;;
 ia64-*-elf*)		targ_emul=elf64_ia64 ;;
+ia64-*-freebsd*)	targ_emul=elf64_ia64 ;;
 ia64-*-linux*)		targ_emul=elf64_ia64 ;;
+ia64-*-aix*)		targ_emul=elf64_aix ;;
 m32r-*-*)		targ_emul=m32relf ;;
 m68hc11-*-*|m6811-*-*)	targ_emul=m68hc11elf 
 			targ_extra_emuls="m68hc11elfb m68hc12elf m68hc12elfb" ;;
@@ -140,6 +150,10 @@
 i[3456]86-*-freebsdaout* | i[3456]86-*-freebsd[12].* | i[3456]86-*-freebsd[12])
 			targ_emul=i386bsd ;;
 i[3456]86-*-freebsd*)	targ_emul=elf_i386 ;;
+x86_64-*-freebsd*)	targ_emul=elf_x86_64
+			targ_extra_emuls=elf_i386
+			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/x86_64/i386/'`
+			;;
 i[3456]86-*-sysv*)	targ_emul=i386coff ;;
 i[3456]86-*-ptx*)	targ_emul=i386coff ;;
 i[3456]86-*-mach*)	targ_emul=i386mach ;;
@@ -168,11 +182,12 @@
 arm-*-aout | armel-*-aout) targ_emul=armaoutl ;;
 armeb-*-aout)		targ_emul=armaoutb ;;
 arm-*-coff)		targ_emul=armcoff ;;
+arm-*-freebsd*)		targ_emul=armelf ;;
 arm-*-netbsd*)		targ_emul=armnbsd ;;
 arm-*-rtems*)		targ_emul=armelf ;;
 arm-*-elf)		targ_emul=armelf ;;
 arm-*-oabi)		targ_emul=armelf_oabi ;;
-arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls="armelf_linux26 armelf" ;;
+arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
 arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
 arm*-*-conix*)		targ_emul=armelf ;;
 thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
@@ -268,6 +283,10 @@
 mips*-*-sysv4*)         targ_emul=elf32btsmip ;;
 mn10200-*-*)		targ_emul=mn10200 ;;
 mn10300-*-*)		targ_emul=mn10300 ;;
+alpha*-*-freebsd*)	targ_emul=elf64alpha
+			targ_extra_emuls=alpha
+			tdir_alpha=`echo ${targ_alias} | sed -e 's/freebsd/freebsdecoff/'`
+			;;
 alpha*-*-linuxecoff*)	targ_emul=alpha targ_extra_emuls=elf64alpha
 			tdir_elf64alpha=`echo ${targ_alias} | sed -e 's/ecoff//'`
 			;;
@@ -281,9 +300,15 @@
 z8k-*-coff) 		targ_emul=z8002; targ_extra_emuls=z8001 ;;
 ns32k-pc532-mach* | ns32k-pc532-ux*)	targ_emul=pc532macha ;;
 ns32k-pc532-netbsd* | ns32k-pc532-lites*) targ_emul=ns32knbsd ;;
+powerpc-*-freebsd*)	targ_emul=elf32ppc;
+			targ_extra_emuls=elf32ppcsim;
+			targ_extra_libpath=elf32ppc;
+			tdir_elf32ppcsim=`echo ${targ_alias} | sed -e 's/ppc/ppcsim/'`
+			;;
 powerpc-*-linux-gnu*)	targ_emul=elf32ppclinux;
 			targ_extra_emuls="elf32ppc elf32ppcsim";
 			targ_extra_libpath=elf32ppc ;;
+pdp11-*-*)		targ_emul=pdp11 ;;
 pjl*-*-*)	        targ_emul=pjlelf ; targ_extra_emuls="elf_i386" ;;
 pj*-*-*)	        targ_emul=pjelf ;;
 powerpc-*-elf* | powerpc-*-eabi* | powerpc-*-sysv* \
@@ -314,6 +339,8 @@
 mcore-*-pe)		targ_emul=mcorepe ;
 			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
 mcore-*-elf)		targ_emul=elf32mcore ;;
+s390x-*-linux*)         targ_emul=elf64_s390 ;;
+s390-*-linux*)          targ_emul=elf_s390 ;;
 *-*-ieee*)		targ_emul=vanilla ;;
 
 *)
diff --git a/ld/emulparams/armelf_linux.sh b/ld/emulparams/armelf_linux.sh
index c5b963f..d04d967 100644
--- a/ld/emulparams/armelf_linux.sh
+++ b/ld/emulparams/armelf_linux.sh
@@ -13,8 +13,4 @@
 OTHER_BSS_SYMBOLS='__bss_start__ = .;'
 OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ; __end__ = . ;'
 
-# This needs to be high enough so that we can load ld.so below it,
-# yet low enough to stay away from the mmap area at 0x40000000.
-# Also, it is small enough so that relocs which are pointing
-# at absolute 0 will still be fixed up.
-TEXT_START_ADDR=0x02000000
+TEXT_START_ADDR=0x00008000
diff --git a/ld/emulparams/armelf_linux26.sh b/ld/emulparams/armelf_linux26.sh
deleted file mode 100644
index 89cd9fb..0000000
--- a/ld/emulparams/armelf_linux26.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-ARCH=arm
-SCRIPT_NAME=elf
-OUTPUT_FORMAT="elf32-littlearm"
-BIG_OUTPUT_FORMAT="elf32-bigarm"
-LITTLE_OUTPUT_FORMAT="elf32-littlearm"
-MAXPAGESIZE=0x8000
-TEMPLATE_NAME=elf32
-EXTRA_EM_FILE=armelf
-GENERATE_SHLIB_SCRIPT=yes
-
-DATA_START_SYMBOLS='__data_start = . ;';
-OTHER_BSS_SYMBOLS='__bss_start__ = .;'
-OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ; __end__ = . ;'
-
-# This needs to be high enough so that we can load ld.so below it,
-# yet low enough to stay away from the mmap area at 0x01100000.
-# Also, it is small enough so that relocs which are pointing
-# at absolute 0 will still be fixed up.
-# These values give us about 0.5MB for ld.so, 16.5MB for user 
-# programs, and 15MB for mmap which seems a reasonable compromise.
-TEXT_START_ADDR=0x00080000
diff --git a/ld/emulparams/elf64_aix.sh b/ld/emulparams/elf64_aix.sh
new file mode 100644
index 0000000..c0e73a9
--- /dev/null
+++ b/ld/emulparams/elf64_aix.sh
@@ -0,0 +1,17 @@
+# See genscripts.sh and ../scripttempl/elf.sc for the meaning of these.
+SCRIPT_NAME=elf
+ELFSIZE=64
+TEMPLATE_NAME=elf32
+OUTPUT_FORMAT="elf64-ia64-aix-little"
+ARCH=ia64
+MACHINE=
+MAXPAGESIZE=0x1000
+TEXT_START_ADDR="0x100000000"
+DATA_ADDR="0x200000000 + (. & (${MAXPAGESIZE} - 1))"
+GENERATE_SHLIB_SCRIPT=yes
+NOP=0x00300000010070000002000001000400  # a bundle full of nops
+OTHER_GOT_SYMBOLS='. = ALIGN (8); PROVIDE (__gp = . + 0x200000);'
+OTHER_GOT_SECTIONS='.IA_64.pltoff : { *(.IA_64.pltoff) }'
+OTHER_PLT_RELOC_SECTIONS='.rela.IA_64.pltoff : { *(.rela.IA_64.pltoff) }'
+OTHER_READONLY_SECTIONS='.opd : { *(.opd) }  .IA_64.unwind_info : { *(.IA_64.unwind_info*) }  .IA_64.unwind : { *(.IA_64.unwind*) }'
+LIB_PATH=/usr/lib/ia64l64:/usr/lib:/usr/local/lib
diff --git a/ld/emulparams/elf64_ia64.sh b/ld/emulparams/elf64_ia64.sh
index 65f305d..fff5992 100644
--- a/ld/emulparams/elf64_ia64.sh
+++ b/ld/emulparams/elf64_ia64.sh
@@ -10,7 +10,6 @@
 DATA_ADDR="0x6000000000000000 + (. & (${MAXPAGESIZE} - 1))"
 GENERATE_SHLIB_SCRIPT=yes
 NOP=0x00300000010070000002000001000400  # a bundle full of nops
-OTHER_GOT_SYMBOLS='. = ALIGN (8); PROVIDE (__gp = . + 0x200000);'
 OTHER_GOT_SECTIONS='.IA_64.pltoff : { *(.IA_64.pltoff) }'
 OTHER_PLT_RELOC_SECTIONS='.rela.IA_64.pltoff : { *(.rela.IA_64.pltoff) }'
-OTHER_READONLY_SECTIONS='.opd : { *(.opd) } .IA_64.unwind : { *(.IA_64.unwind) } .IA_64.unwind.info : { *(.IA_64.unwind.info) }'
+OTHER_READONLY_SECTIONS='.opd : { *(.opd) }  .IA_64.unwind_info : { *(.IA_64.unwind_info*) }  .IA_64.unwind : { *(.IA_64.unwind*) }'
diff --git a/ld/emulparams/elf64_s390.sh b/ld/emulparams/elf64_s390.sh
new file mode 100644
index 0000000..1ba223e
--- /dev/null
+++ b/ld/emulparams/elf64_s390.sh
@@ -0,0 +1,11 @@
+SCRIPT_NAME=elf
+ELFSIZE=64
+OUTPUT_FORMAT="elf64-s390"
+TEXT_START_ADDR=0x80000000
+MAXPAGESIZE=0x1000
+NONPAGED_TEXT_START_ADDR=0x80000000
+ARCH="s390:esame"
+MACHINE=
+NOP=0x0707
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes 
diff --git a/ld/emulparams/elf_s390.sh b/ld/emulparams/elf_s390.sh
new file mode 100644
index 0000000..6fa3836
--- /dev/null
+++ b/ld/emulparams/elf_s390.sh
@@ -0,0 +1,10 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-s390"
+TEXT_START_ADDR=0x00400000
+MAXPAGESIZE=0x1000
+NONPAGED_TEXT_START_ADDR=0x00400000
+ARCH=s390
+MACHINE=
+NOP=0x0707
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes 
diff --git a/ld/emulparams/pdp11.sh b/ld/emulparams/pdp11.sh
new file mode 100644
index 0000000..aaf955a
--- /dev/null
+++ b/ld/emulparams/pdp11.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-pdp11"
+TEXT_START_ADDR=0
+TARGET_PAGE_SIZE=256
+ARCH=pdp11
diff --git a/ld/ld.1 b/ld/ld.1
index 5ebaea8..16e2850 100644
--- a/ld/ld.1
+++ b/ld/ld.1
@@ -97,7 +97,7 @@
 .RB "[\|" \-O\c
 .I level\c
 \&\|]
-.RB "[\|" "\-oformat\ "\c
+.RB "[\|" "\--oformat\ "\c
 .I output-format\c
 \&\|] 
 .RB "[\|" "\-R\ "\c
@@ -728,7 +728,7 @@
 the optimizations.
 
 .TP
-.BI "\-oformat " "output\-format"
+.BI "\--oformat " "output\-format"
 Specify the binary format for the output object file.
 You don't usually need to specify this, as
 \c
diff --git a/ld/ldexp.c b/ld/ldexp.c
index cc34274..2b757fe 100644
--- a/ld/ldexp.c
+++ b/ld/ldexp.c
@@ -593,10 +593,11 @@
 
     case etree_assign:
     case etree_provide:
+    case etree_provided:
       if (tree->assign.dst[0] == '.' && tree->assign.dst[1] == 0)
 	{
 	  /* Assignment to dot can only be done during allocation */
-	  if (tree->type.node_class == etree_provide)
+	  if (tree->type.node_class != etree_assign)
 	    einfo (_("%F%S can not PROVIDE assignment to location counter\n"));
 	  if (allocation_done == lang_allocating_phase_enum
 	      || (allocation_done == lang_final_phase_enum
@@ -666,6 +667,8 @@
 		  h->type = bfd_link_hash_defined;
 		  h->u.def.value = result.value;
 		  h->u.def.section = result.section->bfd_section;
+		  if (tree->type.node_class == etree_provide)
+		    tree->type.node_class = etree_provided;
 		}
 	    }
 	}
@@ -880,6 +883,7 @@
       exp_print_tree (tree->assign.src);
       break;
     case etree_provide:
+    case etree_provided:
       fprintf (config.map_file, "PROVIDE (%s, ", tree->assign.dst);
       exp_print_tree (tree->assign.src);
       fprintf (config.map_file, ")");
diff --git a/ld/ldexp.h b/ld/ldexp.h
index 4c507bd..5175235 100644
--- a/ld/ldexp.h
+++ b/ld/ldexp.h
@@ -37,6 +37,7 @@
 	   etree_name,
 	   etree_assign,
 	   etree_provide,
+	   etree_provided,
 	   etree_undef,
 	   etree_unspec,
 	   etree_value,
diff --git a/ld/ldfile.c b/ld/ldfile.c
index fbb4685..1456e3d 100644
--- a/ld/ldfile.c
+++ b/ld/ldfile.c
@@ -231,23 +231,32 @@
   else
     {
       search_arch_type *arch;
+      boolean found = false;
 
       /* Try to open <filename><suffix> or lib<filename><suffix>.a */
       for (arch = search_arch_head;
 	   arch != (search_arch_type *) NULL;
 	   arch = arch->next)
 	{
-	  if (ldfile_open_file_search (arch->name, entry, "lib", ".a"))
-	    return;
+	  found = ldfile_open_file_search (arch->name, entry, "lib", ".a");
+	  if (found)
+	    break;
 #ifdef VMS
-	  if (ldfile_open_file_search (arch->name, entry, ":lib", ".a"))
-	    return;
+	  found = ldfile_open_file_search (arch->name, entry, ":lib", ".a");
+	  if (found)
+	    break;
 #endif
-	  if (ldemul_find_potential_libraries (arch->name, entry))
-	    return;
+	  found = ldemul_find_potential_libraries (arch->name, entry);
+	  if (found)
+	    break;
 	}
 
-      einfo (_("%F%P: cannot find %s\n"), entry->local_sym_name);
+      /* If we have found the file, we don't need to search directories
+	 again.  */
+      if (found)
+	entry->search_dirs_flag = false;
+      else
+	einfo (_("%F%P: cannot find %s\n"), entry->local_sym_name);
     }
 }
 
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 32097fa..5d9d407 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -127,6 +127,7 @@
 	   fill_type, bfd_vma, boolean));
 static void lang_finish PARAMS ((void));
 static void ignore_bfd_errors PARAMS ((const char *, ...));
+static void record_bfd_errors PARAMS ((const char *, ...));
 static void lang_check PARAMS ((void));
 static void lang_common PARAMS ((void));
 static boolean lang_one_common PARAMS ((struct bfd_link_hash_entry *, PTR));
@@ -1894,6 +1895,7 @@
 	  if (s->input_statement.real)
 	    {
 	      lang_statement_list_type add;
+	      bfd_error_handler_type pfn;
 
 	      s->input_statement.target = current_target;
 
@@ -1908,10 +1910,17 @@
 				       bfd_archive))
 		s->input_statement.loaded = false;
 
-	      lang_list_init (&add);
+	      lang_list_init (& add);
+
+	      /* We need to know if an error occurs whilst loading the 
+		 symbols, since this means that a valid executable can
+		 not be produced.  */
+	      pfn = bfd_set_error_handler (record_bfd_errors);
 
 	      load_symbols (&s->input_statement, &add);
 
+	      bfd_set_error_handler (pfn);
+
 	      if (add.head != NULL)
 		{
 		  *add.tail = s->next;
@@ -3435,6 +3444,53 @@
     }
 }
 
+
+/* This is the routine to handle BFD error messages.  */
+
+#ifdef ANSI_PROTOTYPES
+
+static void
+record_bfd_errors (const char *s, ...)
+{
+  va_list p;
+
+  einfo ("%P: ");
+
+  va_start (p, s);
+
+  vfprintf (stderr, s, p);
+
+  va_end (p);
+
+  fprintf (stderr, "\n");
+
+  einfo ("%X");
+}
+
+#else /* ! defined (ANSI_PROTOTYPES) */
+
+static void
+record_bfd_errors (va_alist)
+     va_dcl
+{
+  va_list p;
+  const char *s;
+
+  einfo ("%P: ");
+
+  va_start (p);
+
+  s = va_arg (p, const char *);
+  vfprintf (stderr, s, p);
+
+  va_end (p);
+
+  fprintf (stderr, "\n");
+
+  einfo ("%X");
+}
+
+#endif /* ! defined (ANSI_PROTOTYPES) */
 /* This is a small function used when we want to ignore errors from
    BFD.  */
 
diff --git a/ld/mpw-elfmips.c b/ld/mpw-elfmips.c
index 3143b2e..feeb5c6 100644
--- a/ld/mpw-elfmips.c
+++ b/ld/mpw-elfmips.c
@@ -522,6 +522,7 @@
   switch (exp->type.node_class)
     {
     case etree_provide:
+    case etree_provided:
       h = bfd_link_hash_lookup (link_info.hash, exp->assign.dst,
 				false, false, false);
       if (h == NULL)
@@ -541,7 +542,7 @@
 	{
 	  if (! (bfd_elf32_record_link_assignment
 		 (output_bfd, &link_info, exp->assign.dst,
-		  exp->type.node_class == etree_provide ? true : false)))
+		  exp->type.node_class != etree_assign ? true : false)))
 	    einfo (_("%P%F: failed to record assignment to %s: %E\n"),
 		   exp->assign.dst);
 	}
diff --git a/ld/po/ld.pot b/ld/po/ld.pot
index 584dca5..bc204a3 100644
--- a/ld/po/ld.pot
+++ b/ld/po/ld.pot
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-12-26 12:54-0800\n"
+"POT-Creation-Date: 2001-02-26 16:28-0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -250,7 +250,7 @@
 msgid "Errors encountered processing file %s for interworking"
 msgstr ""
 
-#: emultempl/pe.em:1094 ldlang.c:1981 ldlang.c:4347 ldlang.c:4380
+#: emultempl/pe.em:1094 ldlang.c:2003 ldlang.c:4419 ldlang.c:4452
 #: ldmain.c:1016
 msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
 msgstr ""
@@ -373,31 +373,31 @@
 msgid "%F%S: undefined symbol `%s' referenced in expression\n"
 msgstr ""
 
-#: ldexp.c:600
+#: ldexp.c:601
 msgid "%F%S can not PROVIDE assignment to location counter\n"
 msgstr ""
 
-#: ldexp.c:610
+#: ldexp.c:611
 msgid "%F%S invalid assignment to location counter\n"
 msgstr ""
 
-#: ldexp.c:614
+#: ldexp.c:615
 msgid "%F%S assignment to location counter invalid outside of SECTION\n"
 msgstr ""
 
-#: ldexp.c:624
+#: ldexp.c:625
 msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
 msgstr ""
 
-#: ldexp.c:652
+#: ldexp.c:653
 msgid "%P%F:%s: hash creation failed\n"
 msgstr ""
 
-#: ldexp.c:951
+#: ldexp.c:955
 msgid "%F%S nonconstant expression for %s\n"
 msgstr ""
 
-#: ldexp.c:984
+#: ldexp.c:988
 msgid "%F%S non constant expression for %s\n"
 msgstr ""
 
@@ -427,230 +427,230 @@
 msgid "%F%P: cannot open %s: %E\n"
 msgstr ""
 
-#: ldfile.c:250
+#: ldfile.c:259
 msgid "%F%P: cannot find %s\n"
 msgstr ""
 
-#: ldfile.c:269 ldfile.c:285
+#: ldfile.c:278 ldfile.c:294
 #, c-format
 msgid "cannot find script file %s\n"
 msgstr ""
 
-#: ldfile.c:271 ldfile.c:287
+#: ldfile.c:280 ldfile.c:296
 #, c-format
 msgid "opened script file %s\n"
 msgstr ""
 
-#: ldfile.c:336
+#: ldfile.c:345
 msgid "%P%F: cannot open linker script file %s: %E\n"
 msgstr ""
 
-#: ldfile.c:373
+#: ldfile.c:382
 msgid "%P%F: unknown architecture: %s\n"
 msgstr ""
 
-#: ldfile.c:389
+#: ldfile.c:398
 msgid "%P%F: target architecture respecified\n"
 msgstr ""
 
-#: ldfile.c:444
+#: ldfile.c:453
 msgid "%P%F: cannot represent machine `%s'\n"
 msgstr ""
 
-#: ldlang.c:736
+#: ldlang.c:750
 msgid ""
 "\n"
 "Memory Configuration\n"
 "\n"
 msgstr ""
 
-#: ldlang.c:738
+#: ldlang.c:752
 msgid "Name"
 msgstr ""
 
-#: ldlang.c:738
+#: ldlang.c:752
 msgid "Origin"
 msgstr ""
 
-#: ldlang.c:738
+#: ldlang.c:752
 msgid "Length"
 msgstr ""
 
-#: ldlang.c:738
+#: ldlang.c:752
 msgid "Attributes"
 msgstr ""
 
-#: ldlang.c:780
+#: ldlang.c:794
 msgid ""
 "\n"
 "Linker script and memory map\n"
 "\n"
 msgstr ""
 
-#: ldlang.c:797
+#: ldlang.c:811
 msgid "%P%F: Illegal use of `%s' section"
 msgstr ""
 
-#: ldlang.c:807
+#: ldlang.c:821
 msgid "%P%F: output format %s cannot represent section called %s\n"
 msgstr ""
 
-#: ldlang.c:969
+#: ldlang.c:983
 msgid "%P: %B: warning: ignoring duplicate section `%s'\n"
 msgstr ""
 
-#: ldlang.c:972
+#: ldlang.c:986
 msgid "%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"
 msgstr ""
 
-#: ldlang.c:986
+#: ldlang.c:1000
 msgid "%P: %B: warning: duplicate section `%s' has different size\n"
 msgstr ""
 
-#: ldlang.c:1037
+#: ldlang.c:1051
 msgid "%P%F: Failed to create hash table\n"
 msgstr ""
 
-#: ldlang.c:1427
+#: ldlang.c:1441
 msgid "%B: file not recognized: %E\n"
 msgstr ""
 
-#: ldlang.c:1428
+#: ldlang.c:1442
 msgid "%B: matching formats:"
 msgstr ""
 
-#: ldlang.c:1435
+#: ldlang.c:1449
 msgid "%F%B: file not recognized: %E\n"
 msgstr ""
 
-#: ldlang.c:1488
+#: ldlang.c:1502
 msgid "%F%B: object %B in archive is not object\n"
 msgstr ""
 
-#: ldlang.c:1494 ldlang.c:1506
+#: ldlang.c:1508 ldlang.c:1520
 msgid "%F%B: could not read symbols: %E\n"
 msgstr ""
 
-#: ldlang.c:1766
+#: ldlang.c:1780
 msgid ""
 "%P: warning: could not find any targets that match endianness requirement\n"
 msgstr ""
 
-#: ldlang.c:1779
+#: ldlang.c:1793
 msgid "%P%F: target %s not found\n"
 msgstr ""
 
-#: ldlang.c:1781
+#: ldlang.c:1795
 msgid "%P%F: cannot open output file %s: %E\n"
 msgstr ""
 
-#: ldlang.c:1791
+#: ldlang.c:1805
 msgid "%P%F:%s: can not make object file: %E\n"
 msgstr ""
 
-#: ldlang.c:1795
+#: ldlang.c:1809
 msgid "%P%F:%s: can not set architecture: %E\n"
 msgstr ""
 
-#: ldlang.c:1799
+#: ldlang.c:1813
 msgid "%P%F: can not create link hash table: %E\n"
 msgstr ""
 
-#: ldlang.c:2104
+#: ldlang.c:2126
 msgid " load address 0x%V"
 msgstr ""
 
-#: ldlang.c:2234
+#: ldlang.c:2256
 msgid "%W (size before relaxing)\n"
 msgstr ""
 
-#: ldlang.c:2316
+#: ldlang.c:2338
 #, c-format
 msgid "Address of section %s set to "
 msgstr ""
 
-#: ldlang.c:2465
+#: ldlang.c:2487
 #, c-format
 msgid "Fail with %d\n"
 msgstr ""
 
-#: ldlang.c:2703
+#: ldlang.c:2725
 msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"
 msgstr ""
 
-#: ldlang.c:2737
+#: ldlang.c:2759
 msgid "%X%P: address 0x%v of %B section %s is not within region %s\n"
 msgstr ""
 
-#: ldlang.c:2745
+#: ldlang.c:2767
 msgid "%X%P: region %s is full (%B section %s)\n"
 msgstr ""
 
-#: ldlang.c:2794
+#: ldlang.c:2816
 msgid "%P%X: Internal error on COFF shared library section %s\n"
 msgstr ""
 
-#: ldlang.c:2835
+#: ldlang.c:2857
 msgid "%P: warning: no memory region specified for section `%s'\n"
 msgstr ""
 
-#: ldlang.c:2848
+#: ldlang.c:2870
 msgid "%P: warning: changing start of section %s by %u bytes\n"
 msgstr ""
 
-#: ldlang.c:2862
+#: ldlang.c:2884
 msgid "%F%S: non constant address expression for section %s\n"
 msgstr ""
 
-#: ldlang.c:2927
+#: ldlang.c:2949
 msgid "%X%P: use an absolute load address or a load memory region, not both\n"
 msgstr ""
 
-#: ldlang.c:3043
+#: ldlang.c:3065
 msgid "%P%F: can't relax section: %E\n"
 msgstr ""
 
-#: ldlang.c:3210
+#: ldlang.c:3232
 msgid "%F%P: invalid data statement\n"
 msgstr ""
 
-#: ldlang.c:3247
+#: ldlang.c:3269
 msgid "%F%P: invalid reloc statement\n"
 msgstr ""
 
-#: ldlang.c:3383
+#: ldlang.c:3405
 msgid "%P%F:%s: can't set start address\n"
 msgstr ""
 
-#: ldlang.c:3396 ldlang.c:3413
+#: ldlang.c:3418 ldlang.c:3435
 msgid "%P%F: can't set start address\n"
 msgstr ""
 
-#: ldlang.c:3408
+#: ldlang.c:3430
 msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
 msgstr ""
 
-#: ldlang.c:3418
+#: ldlang.c:3440
 msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
 msgstr ""
 
-#: ldlang.c:3460
+#: ldlang.c:3529
 msgid ""
 "%P: warning: %s architecture of input file `%B' is incompatible with %s "
 "output\n"
 msgstr ""
 
-#: ldlang.c:3478
+#: ldlang.c:3550
 msgid "%E%X: failed to merge target specific data of file %B\n"
 msgstr ""
 
-#: ldlang.c:3565
+#: ldlang.c:3637
 msgid ""
 "\n"
 "Allocating common symbols\n"
 msgstr ""
 
-#: ldlang.c:3566
+#: ldlang.c:3638
 msgid ""
 "Common symbol       size              file\n"
 "\n"
@@ -659,43 +659,43 @@
 #. This message happens when using the
 #. svr3.ifile linker script, so I have
 #. disabled it.
-#: ldlang.c:3648
+#: ldlang.c:3720
 msgid "%P: no [COMMON] command, defaulting to .bss\n"
 msgstr ""
 
-#: ldlang.c:3707
+#: ldlang.c:3779
 msgid "%P%F: invalid syntax in flags\n"
 msgstr ""
 
-#: ldlang.c:4296
+#: ldlang.c:4368
 msgid "%P%Fmultiple STARTUP files\n"
 msgstr ""
 
-#: ldlang.c:4566
+#: ldlang.c:4638
 msgid "%F%P: bfd_record_phdr failed: %E\n"
 msgstr ""
 
-#: ldlang.c:4585
+#: ldlang.c:4657
 msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
 msgstr ""
 
-#: ldlang.c:4893
+#: ldlang.c:4972
 msgid "%X%P: unknown language `%s' in version information\n"
 msgstr ""
 
-#: ldlang.c:4942
+#: ldlang.c:5021
 msgid "%X%P: duplicate version tag `%s'\n"
 msgstr ""
 
-#: ldlang.c:4955 ldlang.c:4968
+#: ldlang.c:5034 ldlang.c:5047
 msgid "%X%P: duplicate expression `%s' in version information\n"
 msgstr ""
 
-#: ldlang.c:5005
+#: ldlang.c:5084
 msgid "%X%P: unable to find version dependency `%s'\n"
 msgstr ""
 
-#: ldlang.c:5027
+#: ldlang.c:5106
 msgid "%X%P: unable to read .exports section contents"
 msgstr ""
 
@@ -940,7 +940,7 @@
 msgid "GNU ld version %s (with BFD %s)\n"
 msgstr ""
 
-#: ldver.c:46 lexsup.c:961
+#: ldver.c:46 lexsup.c:996
 msgid "  Supported emulations:\n"
 msgstr ""
 
@@ -961,559 +961,568 @@
 msgid "%F%P: final link failed: %E\n"
 msgstr ""
 
-#: lexsup.c:159 lexsup.c:250
+#: lexsup.c:169 lexsup.c:260
 msgid "KEYWORD"
 msgstr ""
 
-#: lexsup.c:159
+#: lexsup.c:169
 msgid "Shared library control for HP/UX compatibility"
 msgstr ""
 
-#: lexsup.c:162
+#: lexsup.c:172
 msgid "ARCH"
 msgstr ""
 
-#: lexsup.c:162
+#: lexsup.c:172
 msgid "Set architecture"
 msgstr ""
 
-#: lexsup.c:164 lexsup.c:315
+#: lexsup.c:174 lexsup.c:325
 msgid "TARGET"
 msgstr ""
 
-#: lexsup.c:164
+#: lexsup.c:174
 msgid "Specify target for following input files"
 msgstr ""
 
-#: lexsup.c:166 lexsup.c:205 lexsup.c:217 lexsup.c:226 lexsup.c:297
-#: lexsup.c:322 lexsup.c:360
+#: lexsup.c:176 lexsup.c:215 lexsup.c:227 lexsup.c:236 lexsup.c:307
+#: lexsup.c:332 lexsup.c:370
 msgid "FILE"
 msgstr ""
 
-#: lexsup.c:166
+#: lexsup.c:176
 msgid "Read MRI format linker script"
 msgstr ""
 
-#: lexsup.c:168
+#: lexsup.c:178
 msgid "Force common symbols to be defined"
 msgstr ""
 
-#: lexsup.c:172 lexsup.c:350 lexsup.c:352 lexsup.c:354
+#: lexsup.c:182 lexsup.c:360 lexsup.c:362 lexsup.c:364
 msgid "ADDRESS"
 msgstr ""
 
-#: lexsup.c:172
+#: lexsup.c:182
 msgid "Set start address"
 msgstr ""
 
-#: lexsup.c:174
+#: lexsup.c:184
 msgid "Export all dynamic symbols"
 msgstr ""
 
-#: lexsup.c:176
+#: lexsup.c:186
 msgid "Link big-endian objects"
 msgstr ""
 
-#: lexsup.c:178
+#: lexsup.c:188
 msgid "Link little-endian objects"
 msgstr ""
 
-#: lexsup.c:180 lexsup.c:183
+#: lexsup.c:190 lexsup.c:193
 msgid "SHLIB"
 msgstr ""
 
-#: lexsup.c:180
+#: lexsup.c:190
 msgid "Auxiliary filter for shared object symbol table"
 msgstr ""
 
-#: lexsup.c:183
+#: lexsup.c:193
 msgid "Filter for shared object symbol table"
 msgstr ""
 
-#: lexsup.c:185
+#: lexsup.c:195
 msgid "Ignored"
 msgstr ""
 
-#: lexsup.c:187
+#: lexsup.c:197
 msgid "SIZE"
 msgstr ""
 
-#: lexsup.c:187
+#: lexsup.c:197
 msgid "Small data size (if no size, same as --shared)"
 msgstr ""
 
-#: lexsup.c:190
+#: lexsup.c:200
 msgid "FILENAME"
 msgstr ""
 
-#: lexsup.c:190
+#: lexsup.c:200
 msgid "Set internal name of shared library"
 msgstr ""
 
-#: lexsup.c:192
+#: lexsup.c:202
 msgid "LIBNAME"
 msgstr ""
 
-#: lexsup.c:192
+#: lexsup.c:202
 msgid "Search for library LIBNAME"
 msgstr ""
 
-#: lexsup.c:194
+#: lexsup.c:204
 msgid "DIRECTORY"
 msgstr ""
 
-#: lexsup.c:194
+#: lexsup.c:204
 msgid "Add DIRECTORY to library search path"
 msgstr ""
 
-#: lexsup.c:196
+#: lexsup.c:206
 msgid "EMULATION"
 msgstr ""
 
-#: lexsup.c:196
+#: lexsup.c:206
 msgid "Set emulation"
 msgstr ""
 
-#: lexsup.c:198
+#: lexsup.c:208
 msgid "Print map file on standard output"
 msgstr ""
 
-#: lexsup.c:200
+#: lexsup.c:210
 msgid "Do not page align data"
 msgstr ""
 
-#: lexsup.c:202
+#: lexsup.c:212
 msgid "Do not page align data, do not make text readonly"
 msgstr ""
 
-#: lexsup.c:205
+#: lexsup.c:215
 msgid "Set output file name"
 msgstr ""
 
-#: lexsup.c:207
+#: lexsup.c:217
 msgid "Optimize output file"
 msgstr ""
 
-#: lexsup.c:209
+#: lexsup.c:219
 msgid "Ignored for SVR4 compatibility"
 msgstr ""
 
-#: lexsup.c:213
+#: lexsup.c:223
 msgid "Generate relocateable output"
 msgstr ""
 
-#: lexsup.c:217
+#: lexsup.c:227
 msgid "Just link symbols (if directory, same as --rpath)"
 msgstr ""
 
-#: lexsup.c:220
+#: lexsup.c:230
 msgid "Strip all symbols"
 msgstr ""
 
-#: lexsup.c:222
+#: lexsup.c:232
 msgid "Strip debugging symbols"
 msgstr ""
 
-#: lexsup.c:224
+#: lexsup.c:234
 msgid "Trace file opens"
 msgstr ""
 
-#: lexsup.c:226
+#: lexsup.c:236
 msgid "Read linker script"
 msgstr ""
 
-#: lexsup.c:228 lexsup.c:242 lexsup.c:283 lexsup.c:295 lexsup.c:344
-#: lexsup.c:363 lexsup.c:380
+#: lexsup.c:238 lexsup.c:252 lexsup.c:293 lexsup.c:305 lexsup.c:354
+#: lexsup.c:373 lexsup.c:390
 msgid "SYMBOL"
 msgstr ""
 
-#: lexsup.c:228
+#: lexsup.c:238
 msgid "Start with undefined reference to SYMBOL"
 msgstr ""
 
-#: lexsup.c:230
-msgid "Don't merge orphan sections with the same name"
-msgstr ""
-
-#: lexsup.c:232
-msgid "Build global constructor/destructor tables"
-msgstr ""
-
-#: lexsup.c:234
-msgid "Print version information"
-msgstr ""
-
-#: lexsup.c:236
-msgid "Print version and emulation information"
-msgstr ""
-
-#: lexsup.c:238
-msgid "Discard all local symbols"
+#: lexsup.c:240
+msgid "[=SECTION]"
 msgstr ""
 
 #: lexsup.c:240
-msgid "Discard temporary local symbols"
+msgid "Don't merge input [SECTION | orphan] sections"
 msgstr ""
 
 #: lexsup.c:242
-msgid "Trace mentions of SYMBOL"
-msgstr ""
-
-#: lexsup.c:244 lexsup.c:324 lexsup.c:326
-msgid "PATH"
+msgid "Build global constructor/destructor tables"
 msgstr ""
 
 #: lexsup.c:244
-msgid "Default search path for Solaris compatibility"
+msgid "Print version information"
 msgstr ""
 
 #: lexsup.c:246
-msgid "Start a group"
+msgid "Print version and emulation information"
 msgstr ""
 
 #: lexsup.c:248
-msgid "End a group"
+msgid "Discard all local symbols"
 msgstr ""
 
 #: lexsup.c:250
-msgid "Ignored for SunOS compatibility"
+msgid "Discard temporary local symbols"
 msgstr ""
 
 #: lexsup.c:252
-msgid "Link against shared libraries"
+msgid "Trace mentions of SYMBOL"
+msgstr ""
+
+#: lexsup.c:254 lexsup.c:334 lexsup.c:336
+msgid "PATH"
+msgstr ""
+
+#: lexsup.c:254
+msgid "Default search path for Solaris compatibility"
+msgstr ""
+
+#: lexsup.c:256
+msgid "Start a group"
 msgstr ""
 
 #: lexsup.c:258
-msgid "Do not link against shared libraries"
+msgid "End a group"
 msgstr ""
 
-#: lexsup.c:266
-msgid "Bind global references locally"
+#: lexsup.c:260
+msgid "Ignored for SunOS compatibility"
+msgstr ""
+
+#: lexsup.c:262
+msgid "Link against shared libraries"
 msgstr ""
 
 #: lexsup.c:268
+msgid "Do not link against shared libraries"
+msgstr ""
+
+#: lexsup.c:276
+msgid "Bind global references locally"
+msgstr ""
+
+#: lexsup.c:278
 msgid "Check section addresses for overlaps (default)"
 msgstr ""
 
-#: lexsup.c:270
+#: lexsup.c:280
 msgid "Do not check section addresses for overlaps"
 msgstr ""
 
-#: lexsup.c:273
+#: lexsup.c:283
 msgid "Output cross reference table"
 msgstr ""
 
-#: lexsup.c:275
+#: lexsup.c:285
 msgid "SYMBOL=EXPRESSION"
 msgstr ""
 
-#: lexsup.c:275
+#: lexsup.c:285
 msgid "Define a symbol"
 msgstr ""
 
-#: lexsup.c:277
+#: lexsup.c:287
 msgid "[=STYLE]"
 msgstr ""
 
-#: lexsup.c:277
+#: lexsup.c:287
 msgid "Demangle symbol names [using STYLE]"
 msgstr ""
 
-#: lexsup.c:279
+#: lexsup.c:289
 msgid "PROGRAM"
 msgstr ""
 
-#: lexsup.c:279
+#: lexsup.c:289
 msgid "Set the dynamic linker to use"
 msgstr ""
 
-#: lexsup.c:281
+#: lexsup.c:291
 msgid "Generate embedded relocs"
 msgstr ""
 
-#: lexsup.c:283
+#: lexsup.c:293
 msgid "Call SYMBOL at unload-time"
 msgstr ""
 
-#: lexsup.c:285
+#: lexsup.c:295
 msgid "Force generation of file with .exe suffix"
 msgstr ""
 
-#: lexsup.c:287
+#: lexsup.c:297
 msgid "Remove unused sections (on some targets)"
 msgstr ""
 
-#: lexsup.c:290
+#: lexsup.c:300
 msgid "Don't remove unused sections (default)"
 msgstr ""
 
-#: lexsup.c:293
+#: lexsup.c:303
 msgid "Print option help"
 msgstr ""
 
-#: lexsup.c:295
+#: lexsup.c:305
 msgid "Call SYMBOL at load-time"
 msgstr ""
 
-#: lexsup.c:297
+#: lexsup.c:307
 msgid "Write a map file"
 msgstr ""
 
-#: lexsup.c:299
+#: lexsup.c:309
 msgid "Do not demangle symbol names"
 msgstr ""
 
-#: lexsup.c:301
+#: lexsup.c:311
 msgid "Use less memory and more disk I/O"
 msgstr ""
 
-#: lexsup.c:303
+#: lexsup.c:313
 msgid "Allow no undefined symbols"
 msgstr ""
 
-#: lexsup.c:305
+#: lexsup.c:315
 msgid "Allow undefined symbols in shared objects"
 msgstr ""
 
-#: lexsup.c:307
+#: lexsup.c:317
 msgid "Don't warn about mismatched input files"
 msgstr ""
 
-#: lexsup.c:309
+#: lexsup.c:319
 msgid "Turn off --whole-archive"
 msgstr ""
 
-#: lexsup.c:311
+#: lexsup.c:321
 msgid "Create an output file even if errors occur"
 msgstr ""
 
-#: lexsup.c:315
+#: lexsup.c:325
 msgid "Specify target of output file"
 msgstr ""
 
-#: lexsup.c:317
+#: lexsup.c:327
 msgid "Ignored for Linux compatibility"
 msgstr ""
 
-#: lexsup.c:319
+#: lexsup.c:329
 msgid "Relax branches on certain targets"
 msgstr ""
 
-#: lexsup.c:322
+#: lexsup.c:332
 msgid "Keep only symbols listed in FILE"
 msgstr ""
 
-#: lexsup.c:324
+#: lexsup.c:334
 msgid "Set runtime shared library search path"
 msgstr ""
 
-#: lexsup.c:326
+#: lexsup.c:336
 msgid "Set link time shared library search path"
 msgstr ""
 
-#: lexsup.c:328
+#: lexsup.c:338
 msgid "Create a shared library"
 msgstr ""
 
-#: lexsup.c:332
+#: lexsup.c:342
 msgid "Sort common symbols by size"
 msgstr ""
 
-#: lexsup.c:336
+#: lexsup.c:346
 msgid "[=SIZE]"
 msgstr ""
 
-#: lexsup.c:336
+#: lexsup.c:346
 msgid "Split output sections every SIZE octets"
 msgstr ""
 
-#: lexsup.c:338
+#: lexsup.c:348
 msgid "[=COUNT]"
 msgstr ""
 
-#: lexsup.c:338
+#: lexsup.c:348
 msgid "Split output sections every COUNT relocs"
 msgstr ""
 
-#: lexsup.c:340
+#: lexsup.c:350
 msgid "Print memory usage statistics"
 msgstr ""
 
-#: lexsup.c:342
+#: lexsup.c:352
 msgid "Display target specific options"
 msgstr ""
 
-#: lexsup.c:344
+#: lexsup.c:354
 msgid "Do task level linking"
 msgstr ""
 
-#: lexsup.c:346
+#: lexsup.c:356
 msgid "Use same format as native linker"
 msgstr ""
 
-#: lexsup.c:348
+#: lexsup.c:358
 msgid "SECTION=ADDRESS"
 msgstr ""
 
-#: lexsup.c:348
+#: lexsup.c:358
 msgid "Set address of named section"
 msgstr ""
 
-#: lexsup.c:350
+#: lexsup.c:360
 msgid "Set address of .bss section"
 msgstr ""
 
-#: lexsup.c:352
+#: lexsup.c:362
 msgid "Set address of .data section"
 msgstr ""
 
-#: lexsup.c:354
+#: lexsup.c:364
 msgid "Set address of .text section"
 msgstr ""
 
-#: lexsup.c:356
+#: lexsup.c:366
 msgid "Output lots of information during link"
 msgstr ""
 
-#: lexsup.c:360
+#: lexsup.c:370
 msgid "Read version information script"
 msgstr ""
 
-#: lexsup.c:363
+#: lexsup.c:373
 msgid ""
 "Take export symbols list from .exports, using\n"
 "\t\t\t\tSYMBOL as the version."
 msgstr ""
 
-#: lexsup.c:366
+#: lexsup.c:376
 msgid "Warn about duplicate common symbols"
 msgstr ""
 
-#: lexsup.c:368
+#: lexsup.c:378
 msgid "Warn if global constructors/destructors are seen"
 msgstr ""
 
-#: lexsup.c:371
+#: lexsup.c:381
 msgid "Warn if the multiple GP values are used"
 msgstr ""
 
-#: lexsup.c:373
+#: lexsup.c:383
 msgid "Warn only once per undefined symbol"
 msgstr ""
 
-#: lexsup.c:375
+#: lexsup.c:385
 msgid "Warn if start of section changes due to alignment"
 msgstr ""
 
-#: lexsup.c:378
+#: lexsup.c:388
 msgid "Include all objects from following archives"
 msgstr ""
 
-#: lexsup.c:380
+#: lexsup.c:390
 msgid "Use wrapper functions for SYMBOL"
 msgstr ""
 
-#: lexsup.c:382
+#: lexsup.c:392
 msgid "[=WORDS]"
 msgstr ""
 
-#: lexsup.c:382
+#: lexsup.c:392
 msgid ""
 "Modify problematic branches in last WORDS (1-10,\n"
 "\t\t\t\tdefault 5) words of a page"
 msgstr ""
 
-#: lexsup.c:532
+#: lexsup.c:560
+#, c-format
+msgid "%s: unrecognized option '%s'\n"
+msgstr ""
+
+#: lexsup.c:564
 #, c-format
 msgid "%s: use the --help option for usage information\n"
 msgstr ""
 
-#: lexsup.c:552
+#: lexsup.c:584
 msgid "%P%F: unrecognized -a option `%s'\n"
 msgstr ""
 
-#: lexsup.c:565
+#: lexsup.c:597
 msgid "%P%F: unrecognized -assert option `%s'\n"
 msgstr ""
 
-#: lexsup.c:608
+#: lexsup.c:640
 msgid "%F%P: unknown demangling style `%s'"
 msgstr ""
 
-#: lexsup.c:667
+#: lexsup.c:699
 msgid "%P%F: invalid number `%s'\n"
 msgstr ""
 
-#: lexsup.c:845
+#: lexsup.c:877
 msgid "%P%F: -shared not supported\n"
 msgstr ""
 
-#: lexsup.c:879
+#: lexsup.c:911
 #, c-format
 msgid "%s: Invalid argument to option \"--section-start\"\n"
 msgstr ""
 
-#: lexsup.c:890
+#: lexsup.c:922
 #, c-format
 msgid "%s: Missing argument(s) to option \"--section-start\"\n"
 msgstr ""
 
-#: lexsup.c:954
-msgid "Copyright 2000 Free Software Foundation, Inc.\n"
+#: lexsup.c:989
+msgid "Copyright 2001 Free Software Foundation, Inc.\n"
 msgstr ""
 
-#: lexsup.c:955
+#: lexsup.c:990
 msgid ""
 "This program is free software; you may redistribute it under the terms of\n"
 "the GNU General Public License.  This program has absolutely no warranty.\n"
 msgstr ""
 
-#: lexsup.c:1047
+#: lexsup.c:1082
 #, c-format
 msgid "%s: may not nest groups (--help for usage)\n"
 msgstr ""
 
-#: lexsup.c:1058
+#: lexsup.c:1093
 #, c-format
 msgid "%s: group ended before it began (--help for usage)\n"
 msgstr ""
 
-#: lexsup.c:1075
+#: lexsup.c:1110
 #, c-format
 msgid "%s: Invalid argument to option \"mpc860c0\"\n"
 msgstr ""
 
-#: lexsup.c:1131
+#: lexsup.c:1166
 msgid "%P%F: invalid hex number `%s'\n"
 msgstr ""
 
-#: lexsup.c:1143
+#: lexsup.c:1178
 #, c-format
 msgid "Usage: %s [options] file...\n"
 msgstr ""
 
-#: lexsup.c:1145
+#: lexsup.c:1180
 msgid "Options:\n"
 msgstr ""
 
 #. Note: Various tools (such as libtool) depend upon the
 #. format of the listings below - do not change them.
-#: lexsup.c:1224
+#: lexsup.c:1263
 #, c-format
 msgid "%s: supported targets:"
 msgstr ""
 
-#: lexsup.c:1232
+#: lexsup.c:1271
 #, c-format
 msgid "%s: supported emulations: "
 msgstr ""
 
-#: lexsup.c:1237
+#: lexsup.c:1276
 #, c-format
 msgid "%s: emulation specific options:\n"
 msgstr ""
 
-#: lexsup.c:1241
+#: lexsup.c:1280
 #, c-format
 msgid "Report bugs to %s\n"
 msgstr ""
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index ee54023..59ce30e 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,23 @@
+2001-02-14  H.J. Lu  <hjl@gnu.org>
+
+	* ld-bootstrap/bootstrap.exp: Rebuild tmpdir/ld2 with tmpdir/ld3
+	for -static on ia64.
+
+	* ld-checks/checks.exp: Don't run on ia64-*-elf* nor
+	ia64-*-linux*.
+
+	* ld-elfvers/vers.exp: Also run ia64-*-elf* and ia64-*-linux*.
+
+	* ld-elfvsb/elfvsb.exp: Use i?86-*-*. Also run on ia64-*-linux*.
+	Set up expected failures for ia64-*-linux*.
+	* ld-shared/shared.exp: Likewise.
+
+2001-02-08  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
+
+	* ld-srec/srec.exp (run_srec_test): m6811 code has references
+	to soft registers, define them with --defsym.
+	* ld-selective/selective.exp: Likewise.
+
 2001-01-14  Hans-Peter Nilsson  <hp@bitrange.com>
 
 	* ld-sh/sh.exp: Use --oformat srec, not -oformat srec.
diff --git a/ld/testsuite/ld-bootstrap/bootstrap.exp b/ld/testsuite/ld-bootstrap/bootstrap.exp
index a3f8a19..2507943 100644
--- a/ld/testsuite/ld-bootstrap/bootstrap.exp
+++ b/ld/testsuite/ld-bootstrap/bootstrap.exp
@@ -65,7 +65,8 @@
     # On AIX, you need to specify an import list when using --static.
     # You only want the import list when creating the final
     # executable.
-    if [istarget "*-*-aix*"] {
+    if { [istarget "*-*-aix*"] 
+         && ![istarget "ia64-*-aix*"]} {
 	if {"$flags" == "--static"} {
 	    set flags "--static -bI:/lib/syscalls.exp"
 	}
@@ -102,6 +103,19 @@
 	continue
     }
 
+    if {"$flags" == "--static"} {
+	if { [istarget ia64-*-elf*]
+	     || [istarget ia64-*-linux*] } {
+	    # On ia64, tmpdir/ld2 != tmpdir/ld3 is normal since they are
+	    # generated by different linkers, tmpdir/ld1 and tmpdir/ld2.
+	    # So we rebuild tmpdir/ld2 with tmpdir/ld3.
+	    if ![ld_link tmpdir/ld3 tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY"] {
+		fail $testname
+		continue
+	    }
+	}
+    }
+
     send_log "cmp tmpdir/ld2 tmpdir/ld3\n"
     verbose "cmp tmpdir/ld2 tmpdir/ld3"
     catch "exec cmp tmpdir/ld2 tmpdir/ld3" exec_output
diff --git a/ld/testsuite/ld-checks/checks.exp b/ld/testsuite/ld-checks/checks.exp
index 16fafe3..6e9f038 100644
--- a/ld/testsuite/ld-checks/checks.exp
+++ b/ld/testsuite/ld-checks/checks.exp
@@ -24,6 +24,11 @@
     global srcdir
     global subdir
     
+    # The usage of .lcomm in asm.s is incompatible with ia64.
+    if { [istarget ia64-*-elf*]
+	 || [istarget ia64-*-linux*] } {
+	return
+    }
     set test "check sections 1"
     
     set ldflags "--check-sections"
diff --git a/ld/testsuite/ld-elfvers/vers.exp b/ld/testsuite/ld-elfvers/vers.exp
index 7bdcbd0..060533b 100644
--- a/ld/testsuite/ld-elfvers/vers.exp
+++ b/ld/testsuite/ld-elfvers/vers.exp
@@ -29,6 +29,8 @@
      && ![istarget i?86-*-unixware] \
      && ![istarget i?86-*-elf*] \
      && ![istarget i?86-*-linux*] \
+     && ![istarget ia64-*-elf*] \
+     && ![istarget ia64-*-linux*] \
      && ![istarget m68k-*-linux*] \
      && ![istarget mips*-*-irix5*] \
      && ![istarget powerpc-*-elf*] \
diff --git a/ld/testsuite/ld-elfvsb/elfvsb.exp b/ld/testsuite/ld-elfvsb/elfvsb.exp
index 22f6435..7133cbc 100644
--- a/ld/testsuite/ld-elfvsb/elfvsb.exp
+++ b/ld/testsuite/ld-elfvsb/elfvsb.exp
@@ -26,10 +26,8 @@
 
 # This test can only be run on a couple of ELF platforms.
 # Square bracket expressions seem to confuse istarget.
-if { ![istarget i386-*-linux*] \
-     && ![istarget i486-*-linux*] \
-     && ![istarget i586-*-linux*] \
-     && ![istarget i686-*-linux*] \
+if { ![istarget i?86-*-linux*] \
+     && ![istarget ia64-*-linux*] \
      && ![istarget m68k-*-linux*] \
      && ![istarget powerpc-*-linux*] \
      && ![istarget arm*-*-linux*] \
@@ -222,7 +220,7 @@
 	     || ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG" $srcdir/$subdir/sh2.c $tmpdir/sh2np.o] } {
 	    unresolved "visibility ($visibility) (non PIC)"
 	} else { if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
-	    visibility_test $visibility vnp "visibility ($visibility) (nonPIC)" mainnp.o sh1np.o sh2np.o xcoff
+	    visibility_test $visibility vnp "visibility ($visibility) (non PIC)" mainnp.o sh1np.o sh2np.o xcoff
 	} else {
 	    # SunOS non PIC shared libraries don't permit some cases of
 	    # overriding.
@@ -238,6 +236,10 @@
 		 || [ string match $visibility "protected_weak" ] } {
 		setup_xfail "powerpc-*-linux*"
 	    }
+	    if { ![ string match $visibility "hidden_undef" ]
+		 && ![ string match $visibility "protected_undef" ] } {
+		setup_xfail "ia64-*-linux*"
+	    }
 	    visibility_test $visibility vnp "visibility ($visibility) (non PIC)" mainnp.o sh1np.o sh2np.o elfvsb
 
 	    # Test ELF shared library relocations with a non-zero load
@@ -261,6 +263,10 @@
 		 || [ string match $visibility "normal" ] } {
 		setup_xfail "powerpc-*-linux*"
 	    }
+	    if { ![ string match $visibility "hidden_undef" ]
+		 && ![ string match $visibility "protected_undef" ] } {
+		setup_xfail "ia64-*-linux*"
+	    }
 	    visibility_test $visibility vnp "visibility ($visibility) (non PIC, load offset)" \
 		mainnp.o sh1np.o sh2np.o elfvsb \
 		"-T $srcdir/$subdir/elf-offset.ld"
@@ -312,6 +318,10 @@
 		     || [ string match $visibility "protected_weak" ] } {
 		    setup_xfail "powerpc-*-linux*"
 		}
+		if { ![ string match $visibility "hidden_undef" ]
+		     && ![ string match $visibility "protected_undef" ] } {
+		    setup_xfail "ia64-*-linux*"
+		}
 		visibility_test $visibility vmpnp "visibility ($visibility) (PIC main, non PIC so)" mainp.o sh1np.o sh2np.o elfvsb
 	    }
 	} else {
diff --git a/ld/testsuite/ld-selective/selective.exp b/ld/testsuite/ld-selective/selective.exp
index 0df21f8..d2dc680 100644
--- a/ld/testsuite/ld-selective/selective.exp
+++ b/ld/testsuite/ld-selective/selective.exp
@@ -1,5 +1,5 @@
 # Expect script for LD selective linking tests
-#   Copyright (C) 1998, 1999, 2000 Free Software Foundation
+#   Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -95,6 +95,12 @@
 	set objfile "$objfile -L ../gcc -lgcc"
     }
     
+    # m6811/m6812 code has references to soft registers.
+    if {[istarget m6811-*-*] || [istarget m6812-*-*]} {
+	set objfile "$objfile --defsym _.frame=0 --defsym _.d1=0"
+	set objfile "$objfile --defsym _.d2=0"
+    }
+
     if ![ld_simple_link $ld $ldfile "$ldflags [join $ldargs] $objfile"] {
 	fail $testname
 	continue
diff --git a/ld/testsuite/ld-shared/shared.exp b/ld/testsuite/ld-shared/shared.exp
index db33937..b7c1b55 100644
--- a/ld/testsuite/ld-shared/shared.exp
+++ b/ld/testsuite/ld-shared/shared.exp
@@ -27,18 +27,12 @@
 
 # This test can only be run on a couple of ELF platforms.
 # Square bracket expressions seem to confuse istarget.
-if { ![istarget i386-*-sysv4*] \
-     && ![istarget i486-*-sysv4*] \
-     && ![istarget i586-*-sysv4*] \
-     && ![istarget i386-*-unixware] \
-     && ![istarget i486-*-unixware] \
-     && ![istarget i586-*-unixware] \
-     && ![istarget i386-*-elf*] \
-     && ![istarget i486-*-elf*] \
-     && ![istarget i586-*-elf*] \
-     && ![istarget i386-*-linux*] \
-     && ![istarget i486-*-linux*] \
-     && ![istarget i586-*-linux*] \
+if { ![istarget i?86-*-sysv4*] \
+     && ![istarget i?86-*-unixware] \
+     && ![istarget i?86-*-elf*] \
+     && ![istarget i?86-*-linux*] \
+     && ![istarget ia64-*-elf*] \
+     && ![istarget ia64-*-linux*] \
      && ![istarget m68k-*-linux*] \
      && ![istarget mips*-*-irix5*] \
      && ![istarget powerpc-*-elf*] \
@@ -198,6 +192,7 @@
 	# SunOS non PIC shared libraries don't permit some cases of
 	# overriding.
 	setup_xfail "*-*-sunos4*"
+	setup_xfail "ia64-*-linux*"
 	shared_test shnp "shared (non PIC)" mainnp.o sh1np.o sh2np.o shared
 
 	# Test ELF shared library relocations with a non-zero load
@@ -207,6 +202,7 @@
 	setup_xfail "*-*-sunos4*"
 	setup_xfail "*-*-linux*libc1"
 	setup_xfail "powerpc-*-linux*"
+	setup_xfail "ia64-*-linux*"
 	shared_test shnp "shared (non PIC, load offset)" \
 		mainnp.o sh1np.o sh2np.o shared \
 		"-T $srcdir/$subdir/elf-offset.ld"
@@ -241,6 +237,7 @@
 	    # SunOS non PIC shared libraries don't permit some cases of
 	    # overriding.
 	    setup_xfail "*-*-sunos4*"
+	    setup_xfail "ia64-*-linux*"
 	    shared_test shmpnp "shared (PIC main, non PIC so)" mainp.o sh1np.o sh2np.o shared
 	}
     } else {
diff --git a/ld/testsuite/ld-srec/srec.exp b/ld/testsuite/ld-srec/srec.exp
index f493f98..5f17043 100644
--- a/ld/testsuite/ld-srec/srec.exp
+++ b/ld/testsuite/ld-srec/srec.exp
@@ -253,6 +253,13 @@
 	set flags "$flags --defsym __truncsipsi2_d0_d2=0"
     }
 
+    # m6811/m6812 code has references to soft registers.
+    if {[istarget m6811-*-*] || [istarget m6812-*-*]} {
+	set flags "$flags --defsym _.frame=0 --defsym _.d1=0 --defsym _.d2=0"
+	set flags "$flags --defsym _.d3=0 --defsym _.d4=0"
+	set flags "$flags --defsym _.tmp=0 --defsym _.xy=0"
+    }
+
     # V850 targets need libgcc.a
     if [istarget v850*-*-elf] {
 	set objs "$objs -L ../gcc -lgcc"
diff --git a/libiberty/COPYING.LIB b/libiberty/COPYING.LIB
index 161a3d1..b1e3f5a 100644
--- a/libiberty/COPYING.LIB
+++ b/libiberty/COPYING.LIB
@@ -1,13 +1,14 @@
-		  GNU LIBRARY GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
 
- Copyright (C) 1991 Free Software Foundation, Inc.
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
-[This is the first released version of the library GPL.  It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
 
 			    Preamble
 
@@ -16,97 +17,109 @@
 Licenses are intended to guarantee your freedom to share and change
 free software--to make sure the software is free for all its users.
 
-  This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it.  You can use it for
-your libraries, too.
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
 
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
 
   To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
 
   For example, if you distribute copies of the library, whether gratis
 or for a fee, you must give the recipients all the rights that we gave
 you.  You must make sure that they, too, receive or can get the source
-code.  If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
 it.  And you must show them these terms so they know their rights.
 
-  Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
 permission to copy, distribute and/or modify the library.
 
-  Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library.  If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
 
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software.  To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
 
-  Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs.  This
-license, the GNU Library General Public License, applies to certain
-designated libraries.  This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
 
-  The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it.  Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program.  However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
 
-  Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries.  We
-concluded that weaker conditions might promote sharing better.
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
 
-  However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves.  This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them.  (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.)  The hope is that this
-will lead to faster development of free libraries.
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
 
   The precise terms and conditions for copying, distribution and
 modification follow.  Pay close attention to the difference between a
 "work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, while the latter only
-works together with the library.
-
-  Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
 
-		  GNU LIBRARY GENERAL PUBLIC LICENSE
+		  GNU LESSER GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
-  0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License").  Each licensee is
-addressed as "you".
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
 
   A "library" means a collection of software functions and/or data
 prepared so as to be conveniently linked with application programs
@@ -255,7 +268,7 @@
 Any executables containing that work also fall under Section 6,
 whether or not they are linked directly with the Library itself.
 
-  6. As an exception to the Sections above, you may also compile or
+  6. As an exception to the Sections above, you may also combine or
 link a "work that uses the Library" with the Library to produce a
 work containing portions of the Library, and distribute that work
 under terms of your choice, provided that the terms permit
@@ -282,23 +295,31 @@
     Library will not necessarily be able to recompile the application
     to use the modified definitions.)
 
-    b) Accompany the work with a written offer, valid for at
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
     least three years, to give the same user the materials
     specified in Subsection 6a, above, for a charge no more
     than the cost of performing this distribution.
 
-    c) If distribution of the work is made by offering access to copy
+    d) If distribution of the work is made by offering access to copy
     from a designated place, offer equivalent access to copy the above
     specified materials from the same place.
 
-    d) Verify that the user has already received a copy of these
+    e) Verify that the user has already received a copy of these
     materials or that you have already sent this user a copy.
 
   For an executable, the required form of the "work that uses the
 Library" must include any data and utility programs needed for
 reproducing the executable from it.  However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
 components (compiler, kernel, and so on) of the operating system on
 which the executable runs, unless that component itself accompanies
 the executable.
@@ -347,7 +368,7 @@
 original licensor to copy, distribute, link with or modify the Library
 subject to these terms and conditions.  You may not impose any further
 restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
+You are not responsible for enforcing compliance by third parties with
 this License.
 
   11. If, as a consequence of a court judgment or allegation of patent
@@ -390,7 +411,7 @@
 written in the body of this License.
 
   13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
+versions of the Lesser General Public License from time to time.
 Such new versions will be similar in spirit to the present version,
 but may differ in detail to address new problems or concerns.
 
@@ -436,7 +457,7 @@
 
 		     END OF TERMS AND CONDITIONS
 
-     Appendix: How to Apply These Terms to Your New Libraries
+           How to Apply These Terms to Your New Libraries
 
   If you develop a new library, and you want it to be of the greatest
 possible use to the public, we recommend making it free software that
@@ -453,19 +474,18 @@
     Copyright (C) <year>  <name of author>
 
     This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
+    modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
+    version 2.1 of the License, or (at your option) any later version.
 
     This library 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
-    Library General Public License for more details.
+    Lesser General Public License for more details.
 
-    You should have received a copy of the GNU Library General Public
-    License along with this library; if not, write to the Free
-    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-    MA 02111-1307, USA
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 Also add information on how to contact you by electronic and paper mail.
 
@@ -480,3 +500,5 @@
   Ty Coon, President of Vice
 
 That's all there is to it!
+
+
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index dc1ef09..3f7c77f 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,33 @@
+2001-02-16  Loren J. Rittle  <ljrittle@acm.org>
+
+	* cplus-dem.c (main): Initialize style.
+	
+2001-01-31  Bryce McKinlay  <bryce@albatross.co.nz>
+
+	Add support for Java demangling under the v3 ABI:
+	* cp-demangle.c (NAMESPACE_SEPARATOR): New define.
+	(struct demangling_def): Add `style' field.
+	(demangling_new): New parameter `style'. Set it in demangling_t.
+	(demangle_prefix): Use NAMESPACE_SEPARATOR.
+	(demangle_type_ptr): Don't emit pointer symbol if doing Java output.
+	(cp_demangle): New parameter `style'. Pass it to demangling_new().
+	(main): Call cp_demangle with extra parameter.
+	(java_demangle_v3): New function.
+	(java_builtin_type_names): New. Table of primitive type names used
+	for Java demangling.
+	(demangle_builtin_type): Look up in java_builtin_type_names if doing
+	Java output.
+	* cplus-dem.c (cplus_demangle): Use java_demangle_v3 to do Java
+	demangling.
+	(long_options): Remove obsolete `java' option.
+	(main): Remove explicit handling of `java' option. Instead, pass style
+	parameter in cplus_demangle flags as gdb does.
+	* testsuite/demangle.expected: Add some Java test cases.
+	
+2001-01-29  Phil Edwards  <pme@sources.redhat.com>
+
+	* COPYING.LIB:  Update to LGPL 2.1 from the FSF.
+	
 2000-12-29  DJ Delorie  <dj@redhat.com>
 
 	* fnmatch.c: Make the note about the origins of this file more
@@ -6,7 +36,7 @@
 	* getopt1.c: Ditto.
 	* md5.c: Ditto.
 	* obstack.c: Ditto.
-	
+
 2000-12-26  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
 
 	* bsearch.c: New file.
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index 1cc4847..db34b58 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -1,5 +1,5 @@
 /* Demangler for IA64 / g++ V3 ABI.
-   Copyright (C) 2000 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
    Written by Alex Samuel <samuel@codesourcery.com>. 
 
    This file is part of GNU CC.
@@ -68,6 +68,9 @@
    anonymous namespace.  */
 #define ANONYMOUS_NAMESPACE_PREFIX "_GLOBAL_"
 
+/* Character(s) to use for namespace separation in demangled output */
+#define NAMESPACE_SEPARATOR (dm->style == DMGL_JAVA ? "." : "::")
+
 /* If flag_verbose is zero, some simplifications will be made to the
    output to make it easier to read and supress details that are
    generally not of interest to the average C++ programmer.
@@ -166,6 +169,9 @@
 
   /* The most recently demangled source-name.  */
   dyn_string_t last_source_name;
+  
+  /* Language style to use for demangled output. */
+  int style;
 };
 
 typedef struct demangling_def *demangling_t;
@@ -240,7 +246,7 @@
 static template_arg_list_t current_template_arg_list
   PARAMS ((demangling_t));
 static demangling_t demangling_new
-  PARAMS ((const char *));
+  PARAMS ((const char *, int));
 static void demangling_delete 
   PARAMS ((demangling_t));
 
@@ -783,8 +789,9 @@
    Returns NULL if allocation fails.  */
 
 static demangling_t
-demangling_new (name)
+demangling_new (name, style)
      const char *name;
+     int style;
 {
   demangling_t dm;
   dm = (demangling_t) malloc (sizeof (struct demangling_def));
@@ -807,6 +814,7 @@
       dyn_string_delete (dm->last_source_name);
       return NULL;
     }
+  dm->style = style;
 
   return dm;
 }
@@ -918,7 +926,7 @@
 static status_t demangle_discriminator 
   PARAMS ((demangling_t, int));
 static status_t cp_demangle
-  PARAMS ((const char *, dyn_string_t));
+  PARAMS ((const char *, dyn_string_t, int));
 #ifdef IN_LIBGCC2
 static status_t cp_demangle_type
   PARAMS ((const char*, dyn_string_t));
@@ -1222,7 +1230,7 @@
 	{
 	  /* We have another level of scope qualification.  */
 	  if (nested)
-	    RETURN_IF_ERROR (result_add (dm, "::"));
+	    RETURN_IF_ERROR (result_add (dm, NAMESPACE_SEPARATOR));
 	  else
 	    nested = 1;
 
@@ -2093,8 +2101,10 @@
       RETURN_IF_ERROR (demangle_type_ptr (dm, insert_pos, 
 					  substitution_start));
       /* Insert an asterisk where we're told to; it doesn't
-	 necessarily go at the end.  */
-      RETURN_IF_ERROR (result_insert_char (dm, *insert_pos, '*'));
+	 necessarily go at the end.  If we're doing Java style output, 
+	 there is no pointer symbol.  */
+      if (dm->style != DMGL_JAVA)
+	RETURN_IF_ERROR (result_insert_char (dm, *insert_pos, '*'));
       /* The next (outermost) pointer or reference character should go
 	 after this one.  */
       ++(*insert_pos);
@@ -2469,6 +2479,39 @@
   "..."                       /* z */
 };
 
+/* Java source names of builtin types.  Types that arn't valid in Java
+   are also included here - we don't fail if someone attempts to demangle a 
+   C++ symbol in Java style. */
+static const char *const java_builtin_type_names[26] = 
+{
+  "signed char",                /* a */
+  "boolean", /* C++ "bool" */   /* b */
+  "byte", /* C++ "char" */      /* c */
+  "double",                     /* d */
+  "long double",                /* e */
+  "float",                      /* f */
+  "__float128",                 /* g */
+  "unsigned char",              /* h */
+  "int",                        /* i */
+  "unsigned",                   /* j */
+  NULL,                         /* k */
+  "long",                       /* l */
+  "unsigned long",              /* m */
+  "__int128",                   /* n */
+  "unsigned __int128",          /* o */
+  NULL,                         /* p */
+  NULL,                         /* q */
+  NULL,                         /* r */
+  "short",                      /* s */
+  "unsigned short",             /* t */
+  NULL,                         /* u */
+  "void",                       /* v */
+  "char", /* C++ "wchar_t" */   /* w */
+  "long", /* C++ "long long" */ /* x */
+  "unsigned long long",         /* y */
+  "..."                         /* z */
+};
+
 /* Demangles and emits a <builtin-type>.  
 
     <builtin-type> ::= v  # void
@@ -2511,7 +2554,12 @@
     }
   else if (code >= 'a' && code <= 'z')
     {
-      const char *type_name = builtin_type_names[code - 'a'];
+      const char *type_name;
+      /* Java uses different names for some built-in types. */
+      if (dm->style == DMGL_JAVA)
+        type_name = java_builtin_type_names[code - 'a'];
+      else
+        type_name = builtin_type_names[code - 'a'];
       if (type_name == NULL)
 	return "Unrecognized <builtin-type> code.";
 
@@ -3395,16 +3443,17 @@
    an error message, and the contents of RESULT are unchanged.  */
 
 static status_t
-cp_demangle (name, result)
+cp_demangle (name, result, style)
      const char *name;
      dyn_string_t result;
+     int style;
 {
   status_t status;
   int length = strlen (name);
 
   if (length > 2 && name[0] == '_' && name[1] == 'Z')
     {
-      demangling_t dm = demangling_new (name);
+      demangling_t dm = demangling_new (name, style);
       if (dm == NULL)
 	return STATUS_ALLOCATION_FAILED;
 
@@ -3551,7 +3600,7 @@
   if (mangled_name[0] == '_' && mangled_name[1] == 'Z')
     /* MANGLED_NAME apprears to be a function or variable name.
        Demangle it accordingly.  */
-    result = cp_demangle (mangled_name, &demangled_name);
+    result = cp_demangle (mangled_name, &demangled_name, 0);
   else
     /* Try to demangled MANGLED_NAME as the name of a type.  */
     result = cp_demangle_type (mangled_name, &demangled_name);
@@ -3610,7 +3659,7 @@
   /* Create a dyn_string to hold the demangled name.  */
   demangled = dyn_string_new (0);
   /* Attempt the demangling.  */
-  status = cp_demangle ((char *) mangled, demangled);
+  status = cp_demangle ((char *) mangled, demangled, 0);
 
   if (STATUS_NO_ERROR (status))
     /* Demangling succeeded.  */
@@ -3634,6 +3683,110 @@
     }
 }
 
+/* Demangle a Java symbol.  Java uses a subset of the V3 ABI C++ mangling 
+   conventions, but the output formatting is a little different.
+   This instructs the C++ demangler not to emit pointer characters ("*"), and 
+   to use Java's namespace separator symbol ("." instead of "::").  It then 
+   does an additional pass over the demangled output to replace instances 
+   of JArray<TYPE> with TYPE[].  */
+
+char *
+java_demangle_v3 (mangled)
+     const char* mangled;
+{
+  dyn_string_t demangled;
+  char *next;
+  char *end;
+  int len;
+  status_t status;
+  int nesting = 0;
+  char *cplus_demangled;
+  char *return_value;
+    
+  /* Create a dyn_string to hold the demangled name.  */
+  demangled = dyn_string_new (0);
+
+  /* Attempt the demangling.  */
+  status = cp_demangle ((char *) mangled, demangled, DMGL_JAVA);
+
+  if (STATUS_NO_ERROR (status))
+    /* Demangling succeeded.  */
+    {
+      /* Grab the demangled result from the dyn_string. */
+      cplus_demangled = dyn_string_release (demangled);
+    }
+  else if (status == STATUS_ALLOCATION_FAILED)
+    {
+      fprintf (stderr, "Memory allocation failed.\n");
+      abort ();
+    }
+  else
+    /* Demangling failed.  */
+    {
+      dyn_string_delete (demangled);
+      return NULL;
+    }
+  
+  len = strlen (cplus_demangled);
+  next = cplus_demangled;
+  end = next + len;
+  demangled = NULL;
+
+  /* Replace occurances of JArray<TYPE> with TYPE[]. */
+  while (next < end)
+    {
+      char *open_str = strstr (next, "JArray<");
+      char *close_str = NULL;
+      if (nesting > 0)
+	close_str = strchr (next, '>');
+    
+      if (open_str != NULL && (close_str == NULL || close_str > open_str))
+        {
+	  ++nesting;
+	  
+	  if (!demangled)
+	    demangled = dyn_string_new(len);
+
+          /* Copy prepending symbols, if any. */
+	  if (open_str > next)
+	    {
+	      open_str[0] = 0;
+	      dyn_string_append_cstr (demangled, next);
+	    }	  
+	  next = open_str + 7;
+	}
+      else if (close_str != NULL)
+        {
+	  --nesting;
+	  
+          /* Copy prepending type symbol, if any. Squash any spurious 
+	     whitespace. */
+	  if (close_str > next && next[0] != ' ')
+	    {
+	      close_str[0] = 0;
+	      dyn_string_append_cstr (demangled, next);
+	    }
+	  dyn_string_append_cstr (demangled, "[]");	  
+	  next = close_str + 1;
+	}
+      else
+        {
+	  /* There are no more arrays. Copy the rest of the symbol, or
+	     simply return the original symbol if no changes were made. */
+	  if (next == cplus_demangled)
+	    return cplus_demangled;
+
+          dyn_string_append_cstr (demangled, next);
+	  next = end;
+	}
+    }
+
+  free (cplus_demangled);
+  
+  return_value = dyn_string_release (demangled);
+  return return_value;
+}
+
 #endif /* IN_LIBGCC2 */
 
 #ifdef STANDALONE_DEMANGLER
@@ -3771,7 +3924,7 @@
 	    }
 
 	  /* Attempt to demangle the name.  */
-	  status = cp_demangle (dyn_string_buf (mangled), demangled);
+	  status = cp_demangle (dyn_string_buf (mangled), demangled, 0);
 
 	  /* If the demangling succeeded, great!  Print out the
 	     demangled version.  */
@@ -3810,7 +3963,7 @@
       for (i = optind; i < argc; ++i)
 	{
 	  /* Attempt to demangle.  */
-	  status = cp_demangle (argv[i], result);
+	  status = cp_demangle (argv[i], result, 0);
 
 	  /* If it worked, print the demangled name.  */
 	  if (STATUS_NO_ERROR (status))
@@ -3818,7 +3971,7 @@
 	  /* Abort on allocaiton failures.  */
 	  else if (status == STATUS_ALLOCATION_FAILED)
 	    {
-	      fprintf (stderr, "Memory allocaiton failed.\n");
+	      fprintf (stderr, "Memory allocation failed.\n");
 	      abort ();
 	    }
 	  /* If not, print the error message to stderr instead.  */
diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c
index a42f45e..1d2a475 100644
--- a/libiberty/cplus-dem.c
+++ b/libiberty/cplus-dem.c
@@ -1,6 +1,6 @@
 /* Demangler for GNU C++
    Copyright 1989, 1991, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000 Free Software Foundation, Inc.
+   2000, 2001 Free Software Foundation, Inc.
    Written by James Clark (jjc@jclark.uucp)
    Rewritten by Fred Fish (fnf@cygnus.com) for ARM and Lucid demangling
    Modified by Satish Pai (pai@apollo.hp.com) for HP demangling
@@ -922,6 +922,13 @@
 	return ret;
     }
 
+  if (JAVA_DEMANGLING)
+    {
+      ret = java_demangle_v3 (mangled);
+      if (ret)
+        return ret;
+    }
+
   if (GNAT_DEMANGLING)
     return ada_demangle(mangled,options);
 
@@ -4950,7 +4957,6 @@
   {"strip-underscores", no_argument, 0, '_'},
   {"format", required_argument, 0, 's'},
   {"help", no_argument, 0, 'h'},
-  {"java", no_argument, 0, 'j'},
   {"no-strip-underscores", no_argument, 0, 'n'},
   {"version", no_argument, 0, 'v'},
   {0, no_argument, 0, 0}
@@ -5044,12 +5050,13 @@
   char *result;
   int c;
   const char *valid_symbols;
+  enum demangling_styles style = auto_demangling;
 
   program_name = argv[0];
 
   strip_underscore = prepends_underscore;
 
-  while ((c = getopt_long (argc, argv, "_ns:j", long_options, (int *) 0)) != EOF)
+  while ((c = getopt_long (argc, argv, "_ns:", long_options, (int *) 0)) != EOF)
     {
       switch (c)
 	{
@@ -5067,13 +5074,8 @@
 	case '_':
 	  strip_underscore = 1;
 	  break;
-	case 'j':
-	  flags |= DMGL_JAVA;
-	  break;
 	case 's':
 	  {
-	    enum demangling_styles style;
-
 	    style = cplus_demangle_name_to_style (optarg);
 	    if (style == unknown_demangling)
 	      {
@@ -5146,7 +5148,7 @@
 		skip_first = i;
 
 	      mbuffer[i] = 0;
-
+	      flags |= style;
 	      result = cplus_demangle (mbuffer + skip_first, flags);
 	      if (result)
 		{
diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected
index a5d72fa..4953c7d 100644
--- a/libiberty/testsuite/demangle-expected
+++ b/libiberty/testsuite/demangle-expected
@@ -2566,3 +2566,23 @@
 --format=gnu
 _26_GLOBAL_\$N\$_tmp_n.iilg4Gya\$app_instance
 {anonymous}::app_instance
+#
+--format=java
+_ZN4java3awt10ScrollPane7addImplEPNS0_9ComponentEPNS_4lang6ObjectEi
+java.awt.ScrollPane.addImpl(java.awt.Component, java.lang.Object, int)
+#
+--format=java
+_ZN4java3awt4geom15AffineTransform9getMatrixEP6JArrayIdE
+java.awt.geom.AffineTransform.getMatrix(double[])
+#
+--format=java
+_ZN23Mangle$Inner$InnerInner3fooEP6JArrayIPS0_IiEEdPS0_IPS0_IPS0_IPS0_IPN4java4lang6StringEEEEEPS0_IPS0_IPN6MangleEEE
+Mangle$Inner$InnerInner.foo(int[][], double, java.lang.String[][][][], Mangle[][])
+#
+--format=java
+_ZN6JArray1tEP6JArrayIPS_E
+JArray.t(JArray[])
+#
+--format=java
+_ZN4Prim1iEibcdfwPN4java4lang6StringEsx
+Prim.i(int, boolean, byte, double, float, char, java.lang.String, short, long)
diff --git a/ltcf-c.sh b/ltcf-c.sh
index e57abb1..2e62af7 100644
--- a/ltcf-c.sh
+++ b/ltcf-c.sh
@@ -2,7 +2,7 @@
 
 # ltcf-c.sh - Create a C compiler specific configuration
 #
-# Copyright (C) 1996-2000 Free Software Foundation, Inc.
+# Copyright (C) 1996-2000, 2001 Free Software Foundation, Inc.
 # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 #
 # This file is free software; you can redistribute it and/or modify it
@@ -283,6 +283,12 @@
       # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on
       always_export_symbols=yes ;;
     esac
+
+    # We don't want to build shared libraries on unknown CPU types.
+    case $host_cpu in
+    powerpc | rs6000) ;;
+    *) ld_shlibs=no ;;
+    esac
    ;;
 
   amigaos*)
diff --git a/ltcf-cxx.sh b/ltcf-cxx.sh
index cefa008..ab9e627 100644
--- a/ltcf-cxx.sh
+++ b/ltcf-cxx.sh
@@ -2,7 +2,7 @@
 
 # ltcf-cxx.sh - Create a C++ compiler specific configuration
 #
-# Copyright (C) 1996-1999,2000 Free Software Foundation, Inc.
+# Copyright (C) 1996-1999, 2000, 2001 Free Software Foundation, Inc.
 # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 #
 # Original C++ support by:Gary V. Vaughan <gvv@techie.com>
@@ -133,6 +133,12 @@
   aix3*)
     # FIXME: insert proper C++ library support
     ld_shlibs=no
+
+    # We don't want to build shared libraries on unknown CPU types.
+    case $host_cpu in
+    powerpc | rs6000) ;;
+    *) ld_shlibs=no ;;
+    esac
     ;;
   aix4*)
     archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
@@ -570,9 +576,8 @@
 ac_cv_prog_cc_no_builtin=
 ac_cv_prog_cc_can_build_shared=$can_build_shared
 
-# It is not enough to reset these cached values, they must be unset.
-unset ac_cv_prog_cc_pic_works
-unset ac_cv_prog_cc_static_works
+ac_cv_prog_cc_pic_works=
+ac_cv_prog_cc_static_works=
 
 if test "$with_gcc" = yes; then
   ac_cv_prog_cc_wl='-Wl,'
@@ -798,7 +803,7 @@
 EOF
 
 
-if eval $ac_compile 2>&5; then
+if (eval $ac_compile) 2>&5; then
   # Parse the compiler output and extract the necessary
   # objects, libraries and library flags.
 
diff --git a/ltcf-gcj.sh b/ltcf-gcj.sh
index f82163d..2448bd8 100644
--- a/ltcf-gcj.sh
+++ b/ltcf-gcj.sh
@@ -286,6 +286,12 @@
       # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on
       always_export_symbols=yes ;;
     esac
+
+    # We don't want to build shared libraries on unknown CPU types.
+    case $host_cpu in
+    powerpc | rs6000) ;;
+    *) ld_shlibs=no ;;
+    esac
    ;;
 
   amigaos*)
diff --git a/ltconfig b/ltconfig
index fb0bf8b..7130a6f 100755
--- a/ltconfig
+++ b/ltconfig
@@ -422,8 +422,10 @@
 
 if test -n "$tagname"; then
   # Check whether tagname contains only valid characters
-  case "$tagname" in
-  *[!-_A-Za-z0-9,/]*)
+  case `$echo "X$tagname" |
+        $Xsed -e 's/[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]//g'` in
+  "") ;;
+  *)
     echo "$progname: invalid tag name: $tagname" 1>&2
     exit 1
     ;;
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index c95f91f..7d55e73 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,6 +1,89 @@
-Thu Feb  1 16:41:58 MET 2001  Jan Hubicka  <jh@suse.cz>
+2001-02-27  Alan Modra  <alan@linuxcare.com.au>
 
-	* (dis386_att, grps): Use 'T' for push/pop
+	* configure.in (BFD_VERSION): Do without grep.
+	* configure: Regenerate.
+	* Makefile.am: Run "make dep-am".
+	* Makefile.in: Regenerate.
+
+2001-02-23  David Mosberger  <davidm@hpl.hp.com>
+
+	* ia64-opc-a.c: Add missing pseudo-ops for "cmp" and "cmp4".
+	* ia64-asmtab.c: Regenerate.
+
+2001-02-21  David Mosberger  <davidm@hpl.hp.com>
+
+	* ia64-opc-d.c (ia64_opcodes_d): Break the "add" pattern into two
+	separate variants: one for IMM22 and the other for IMM14.
+	* ia64-asmtab.c: Regenerate.
+	
+2001-02-21  Greg McGary  <greg@mcgary.org>
+
+	* cgen-opc.c (cgen_get_insn_value): Add missing `return'.
+
+2001-02-20  H.J. Lu  <hjl@gnu.org>
+
+	* Makefile.am (ia64-ic.tbl): Remove the target.
+	(ia64-raw.tbl): Likewise.
+	(ia64-waw.tbl): Likewise.
+	(ia64-war.tbl): Likewise.
+	(ia64-asmtab.c): Generate it in the source directory.
+	* Makefile.in: Regenerated.
+
+2001-02-18  lars brinkhoff  <lars@nocrew.org>
+
+        * Makefile.am: Add PDP-11 target.
+        * configure.in: Likewise.
+        * disassemble.c: Likewise.
+        * pdp11-dis.c: New file.
+        * pdp11-opc.c: New file.
+
+2001-02-14  Jim Wilson  <wilson@redhat.com>
+
+	* ia64-ic.tbl: Update from Intel.  Add setf to fr-writers.
+	* ia64-asmtab.c: Regenerate.
+
+Mon Feb 12 17:41:26 CET 2001  Jan Hubicka  <jh@suse.cz>
+
+	* i386-dis.c (prefix_user_t): Add 'Y' to SSE ineger converison
+	instructions.
+	(putop): Handle 'Y'
+
+2001-02-11  Maciej W. Rozycki  <macro@ds2.pg.gda.pl>
+
+        * mips-dis.c (print_insn_arg): Use top four bits of the address of
+	the following instruction not of the jump itself for the jump
+	target.
+	(print_mips16_insn_arg): Likewise.
+
+2001-02-11  Michael Sokolov  <msokolov@ivan.Harhan.ORG>
+
+	* Makefile.am (stamp-lib): ranlib the libopcodes.a in the build
+	directory.
+	* Makefile.in: Regenerate.
+
+2001-02-09  Schwidefsky  <schwidefsky@de.ibm.com>
+
+	* Makefile.am: Add linux target for S/390.
+	* Makefile.in: Likewise.
+	* configure.in: Likewise.
+	* disassemble.c: Likewise.
+	* s390-dis.c: New file.
+	* s390-mkopc.c: New file.
+	* s390-opc.c: New file.
+	* s390-opc.txt: New file.
+
+2001-02-05  Jim Wilson  <wilson@redhat.com>
+
+	* ia64-asmtab.c: Revert 2000-12-16 change.
+
+2001-02-02  Patrick Macdonald  <patrickm@redhat.com>
+
+	* fr30-desc.h: Regenerate with CGEN_MAX_SYNTAX_ELEMENTS. 
+	* m32r-desc.h: Regenerate.
+
+Thu Feb  1 16:29:06 MET 2001  Jan Hubicka  <jh@suse.cz>
+
+	* i386-dis.c (dis386_att, grps): Use 'T' for push/pop
 	(putop): Handle 'T', alphabetize order, fix 'I' handling in Intel syntax
 
 2001-01-14  Alan Modra  <alan@linuxcare.com.au>
diff --git a/opcodes/Makefile.am b/opcodes/Makefile.am
index e31d9c1..d5bb1ec 100644
--- a/opcodes/Makefile.am
+++ b/opcodes/Makefile.am
@@ -97,10 +97,14 @@
 	m10300-dis.c \
 	m10300-opc.c \
 	ns32k-dis.c \
+	pdp11-dis.c \
+	pdp11-opc.c \
 	pj-dis.c \
 	pj-opc.c \
 	ppc-dis.c \
 	ppc-opc.c \
+	s390-opc.c \
+	s390-dis.c \
 	sh-dis.c \
 	sparc-dis.c \
 	sparc-opc.c \
@@ -168,11 +172,15 @@
 	mips-dis.lo \
 	mips-opc.lo \
 	mips16-opc.lo \
+	ns32k-dis.lo \
+	pdp11-dis.lo \
+	pdp11-opc.lo \
 	pj-dis.lo \
 	pj-opc.lo \
 	ppc-dis.lo \
 	ppc-opc.lo \
-	ns32k-dis.lo \
+	s390-dis.lo \
+	s390-opc.lo \
 	sh-dis.lo \
 	sparc-dis.lo \
 	sparc-opc.lo \
@@ -210,6 +218,7 @@
 	libtooldir=`$(LIBTOOL) --config | sed -n -e 's/^objdir=//p'`; \
 	if [ -f $$libtooldir/libopcodes.a ]; then \
 	  cp $$libtooldir/libopcodes.a libopcodes.tmp; \
+	  $(RANLIB) libopcodes.tmp; \
 	  $(SHELL) $(srcdir)/../move-if-change libopcodes.tmp libopcodes.a; \
 	else true; fi
 	touch stamp-lib
@@ -268,16 +277,6 @@
 stamp-fr30: $(CGENDEPS) $(CGENDIR)/fr30.cpu $(CGENDIR)/fr30.opc
 	$(MAKE) run-cgen arch=fr30 prefix=fr30 options= extrafiles=
 
-
-ia64-ic.tbl: $(srcdir)/ia64-ic.tbl
-	$(LN_S) -f $(srcdir)/ia64-ic.tbl
-ia64-raw.tbl: $(srcdir)/ia64-raw.tbl
-	$(LN_S) -f $(srcdir)/ia64-raw.tbl
-ia64-waw.tbl: $(srcdir)/ia64-waw.tbl
-	$(LN_S) -f $(srcdir)/ia64-waw.tbl
-ia64-war.tbl: $(srcdir)/ia64-war.tbl
-	$(LN_S) -f $(srcdir)/ia64-war.tbl
-
 ia64-gen: ia64-gen.o
 	$(LINK) ia64-gen.o $(LIBIBERTY)
 
@@ -285,7 +284,7 @@
   ia64-opc-i.c ia64-opc-m.c ia64-opc-d.c ia64-opc.h
 
 ia64-asmtab.c: @MAINT@ ia64-gen ia64-ic.tbl ia64-raw.tbl ia64-waw.tbl ia64-war.tbl
-	./ia64-gen > $(srcdir)/ia64-asmtab.c
+	here=`pwd`; cd $(srcdir); $$here/ia64-gen > ia64-asmtab.c
 
 # This dependency stuff is copied from BFD.
 
@@ -340,14 +339,14 @@
   $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/opcode/alpha.h
 alpha-opc.lo: alpha-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/opcode/alpha.h $(BFD_H) opintl.h
-arc-dis.lo: arc-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
-  $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/opcode/arc.h \
-  $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
-  $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/arc.h \
-  $(INCDIR)/elf/reloc-macros.h opintl.h arc-dis.h arc-ext.h
-arc-opc.lo: arc-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
-  $(INCDIR)/opcode/arc.h opintl.h
-arc-ext.lo: $(BFD_H) $(INCDIR)/libiberty.h arc-ext.h
+arc-dis.lo: arc-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
+  $(INCDIR)/opcode/arc.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
+  $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
+  $(INCDIR)/elf/arc.h $(INCDIR)/elf/reloc-macros.h opintl.h \
+  arc-dis.h arc-ext.h
+arc-opc.lo: arc-opc.c $(INCDIR)/ansidecl.h $(INCDIR)/opcode/arc.h
+arc-ext.lo: arc-ext.c $(BFD_H) $(INCDIR)/ansidecl.h \
+  arc-ext.h $(INCDIR)/libiberty.h
 arm-dis.lo: arm-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/dis-asm.h $(BFD_H) arm-opc.h $(INCDIR)/coff/internal.h \
   $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h opintl.h $(BFDDIR)/elf-bfd.h \
@@ -384,7 +383,7 @@
   fr30-opc.h opintl.h
 fr30-desc.lo: fr30-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(BFD_H) $(INCDIR)/symcat.h fr30-desc.h $(INCDIR)/opcode/cgen.h \
-  fr30-opc.h opintl.h
+  fr30-opc.h opintl.h $(INCDIR)/libiberty.h
 fr30-dis.lo: fr30-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h fr30-desc.h \
   $(INCDIR)/opcode/cgen.h fr30-opc.h opintl.h
@@ -393,7 +392,7 @@
   $(INCDIR)/opcode/cgen.h fr30-opc.h opintl.h
 fr30-opc.lo: fr30-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(BFD_H) $(INCDIR)/symcat.h fr30-desc.h $(INCDIR)/opcode/cgen.h \
-  fr30-opc.h
+  fr30-opc.h $(INCDIR)/libiberty.h
 h8300-dis.lo: h8300-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/opcode/h8300.h $(INCDIR)/dis-asm.h $(BFD_H) \
   opintl.h
@@ -432,7 +431,7 @@
   m32r-opc.h opintl.h
 m32r-desc.lo: m32r-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h $(INCDIR)/opcode/cgen.h \
-  m32r-opc.h opintl.h
+  m32r-opc.h opintl.h $(INCDIR)/libiberty.h
 m32r-dis.lo: m32r-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h \
   $(INCDIR)/opcode/cgen.h m32r-opc.h opintl.h
@@ -441,7 +440,7 @@
   $(INCDIR)/opcode/cgen.h m32r-opc.h opintl.h
 m32r-opc.lo: m32r-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h $(INCDIR)/opcode/cgen.h \
-  m32r-opc.h
+  m32r-opc.h $(INCDIR)/libiberty.h
 m32r-opinst.lo: m32r-opinst.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h $(INCDIR)/opcode/cgen.h \
   m32r-opc.h
@@ -481,6 +480,9 @@
 ns32k-dis.lo: ns32k-dis.c $(BFD_H) $(INCDIR)/ansidecl.h \
   sysdep.h config.h $(INCDIR)/dis-asm.h $(INCDIR)/opcode/ns32k.h \
   opintl.h
+pdp11-dis.lo: pdp11-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
+  $(INCDIR)/ansidecl.h $(INCDIR)/opcode/pdp11.h
+pdp11-opc.lo: pdp11-opc.c $(INCDIR)/opcode/pdp11.h
 pj-dis.lo: pj-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/opcode/pj.h $(INCDIR)/dis-asm.h $(BFD_H)
 pj-opc.lo: pj-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
@@ -489,6 +491,9 @@
   $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/opcode/ppc.h
 ppc-opc.lo: ppc-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/opcode/ppc.h opintl.h
+s390-opc.lo: s390-opc.c $(INCDIR)/ansidecl.h $(INCDIR)/opcode/s390.h
+s390-dis.lo: s390-dis.c $(INCDIR)/ansidecl.h sysdep.h \
+  config.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/opcode/s390.h
 sh-dis.lo: sh-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   sh-opc.h $(INCDIR)/dis-asm.h $(BFD_H)
 sparc-dis.lo: sparc-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
diff --git a/opcodes/Makefile.in b/opcodes/Makefile.in
index e406027..652a716 100644
--- a/opcodes/Makefile.in
+++ b/opcodes/Makefile.in
@@ -208,10 +208,14 @@
 	m10300-dis.c \
 	m10300-opc.c \
 	ns32k-dis.c \
+	pdp11-dis.c \
+	pdp11-opc.c \
 	pj-dis.c \
 	pj-opc.c \
 	ppc-dis.c \
 	ppc-opc.c \
+	s390-opc.c \
+	s390-dis.c \
 	sh-dis.c \
 	sparc-dis.c \
 	sparc-opc.c \
@@ -280,11 +284,15 @@
 	mips-dis.lo \
 	mips-opc.lo \
 	mips16-opc.lo \
+	ns32k-dis.lo \
+	pdp11-dis.lo \
+	pdp11-opc.lo \
 	pj-dis.lo \
 	pj-opc.lo \
 	ppc-dis.lo \
 	ppc-opc.lo \
-	ns32k-dis.lo \
+	s390-dis.lo \
+	s390-opc.lo \
 	sh-dis.lo \
 	sparc-dis.lo \
 	sparc-opc.lo \
@@ -366,7 +374,7 @@
 
 DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
 
-TAR = gtar
+TAR = tar
 GZIP_ENV = --best
 SOURCES = libopcodes.a.c $(libopcodes_la_SOURCES)
 OBJECTS = libopcodes.a.$(OBJEXT) $(libopcodes_la_OBJECTS)
@@ -747,6 +755,7 @@
 	libtooldir=`$(LIBTOOL) --config | sed -n -e 's/^objdir=//p'`; \
 	if [ -f $$libtooldir/libopcodes.a ]; then \
 	  cp $$libtooldir/libopcodes.a libopcodes.tmp; \
+	  $(RANLIB) libopcodes.tmp; \
 	  $(SHELL) $(srcdir)/../move-if-change libopcodes.tmp libopcodes.a; \
 	else true; fi
 	touch stamp-lib
@@ -779,15 +788,6 @@
 stamp-fr30: $(CGENDEPS) $(CGENDIR)/fr30.cpu $(CGENDIR)/fr30.opc
 	$(MAKE) run-cgen arch=fr30 prefix=fr30 options= extrafiles=
 
-ia64-ic.tbl: $(srcdir)/ia64-ic.tbl
-	$(LN_S) -f $(srcdir)/ia64-ic.tbl
-ia64-raw.tbl: $(srcdir)/ia64-raw.tbl
-	$(LN_S) -f $(srcdir)/ia64-raw.tbl
-ia64-waw.tbl: $(srcdir)/ia64-waw.tbl
-	$(LN_S) -f $(srcdir)/ia64-waw.tbl
-ia64-war.tbl: $(srcdir)/ia64-war.tbl
-	$(LN_S) -f $(srcdir)/ia64-war.tbl
-
 ia64-gen: ia64-gen.o
 	$(LINK) ia64-gen.o $(LIBIBERTY)
 
@@ -795,7 +795,7 @@
   ia64-opc-i.c ia64-opc-m.c ia64-opc-d.c ia64-opc.h
 
 ia64-asmtab.c: @MAINT@ ia64-gen ia64-ic.tbl ia64-raw.tbl ia64-waw.tbl ia64-war.tbl
-	./ia64-gen > $(srcdir)/ia64-asmtab.c
+	here=`pwd`; cd $(srcdir); $$here/ia64-gen > ia64-asmtab.c
 
 # This dependency stuff is copied from BFD.
 
@@ -850,14 +850,14 @@
   $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/opcode/alpha.h
 alpha-opc.lo: alpha-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/opcode/alpha.h $(BFD_H) opintl.h
-arc-dis.lo: arc-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
-  $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/opcode/arc.h \
-  $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
-  $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/arc.h \
-  $(INCDIR)/elf/reloc-macros.h opintl.h arc-dis.h arc-ext.h
-arc-opc.lo: arc-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
-  $(INCDIR)/opcode/arc.h opintl.h
-arc-ext.lo: $(BFD_H) $(INCDIR)/libiberty.h arc-ext.h
+arc-dis.lo: arc-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
+  $(INCDIR)/opcode/arc.h $(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h \
+  $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h \
+  $(INCDIR)/elf/arc.h $(INCDIR)/elf/reloc-macros.h opintl.h \
+  arc-dis.h arc-ext.h
+arc-opc.lo: arc-opc.c $(INCDIR)/ansidecl.h $(INCDIR)/opcode/arc.h
+arc-ext.lo: arc-ext.c $(BFD_H) $(INCDIR)/ansidecl.h \
+  arc-ext.h $(INCDIR)/libiberty.h
 arm-dis.lo: arm-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/dis-asm.h $(BFD_H) arm-opc.h $(INCDIR)/coff/internal.h \
   $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h opintl.h $(BFDDIR)/elf-bfd.h \
@@ -894,7 +894,7 @@
   fr30-opc.h opintl.h
 fr30-desc.lo: fr30-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(BFD_H) $(INCDIR)/symcat.h fr30-desc.h $(INCDIR)/opcode/cgen.h \
-  fr30-opc.h opintl.h
+  fr30-opc.h opintl.h $(INCDIR)/libiberty.h
 fr30-dis.lo: fr30-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h fr30-desc.h \
   $(INCDIR)/opcode/cgen.h fr30-opc.h opintl.h
@@ -903,7 +903,7 @@
   $(INCDIR)/opcode/cgen.h fr30-opc.h opintl.h
 fr30-opc.lo: fr30-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(BFD_H) $(INCDIR)/symcat.h fr30-desc.h $(INCDIR)/opcode/cgen.h \
-  fr30-opc.h
+  fr30-opc.h $(INCDIR)/libiberty.h
 h8300-dis.lo: h8300-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/opcode/h8300.h $(INCDIR)/dis-asm.h $(BFD_H) \
   opintl.h
@@ -942,7 +942,7 @@
   m32r-opc.h opintl.h
 m32r-desc.lo: m32r-desc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h $(INCDIR)/opcode/cgen.h \
-  m32r-opc.h opintl.h
+  m32r-opc.h opintl.h $(INCDIR)/libiberty.h
 m32r-dis.lo: m32r-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h \
   $(INCDIR)/opcode/cgen.h m32r-opc.h opintl.h
@@ -951,7 +951,7 @@
   $(INCDIR)/opcode/cgen.h m32r-opc.h opintl.h
 m32r-opc.lo: m32r-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h $(INCDIR)/opcode/cgen.h \
-  m32r-opc.h
+  m32r-opc.h $(INCDIR)/libiberty.h
 m32r-opinst.lo: m32r-opinst.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(BFD_H) $(INCDIR)/symcat.h m32r-desc.h $(INCDIR)/opcode/cgen.h \
   m32r-opc.h
@@ -991,6 +991,9 @@
 ns32k-dis.lo: ns32k-dis.c $(BFD_H) $(INCDIR)/ansidecl.h \
   sysdep.h config.h $(INCDIR)/dis-asm.h $(INCDIR)/opcode/ns32k.h \
   opintl.h
+pdp11-dis.lo: pdp11-dis.c $(INCDIR)/dis-asm.h $(BFD_H) \
+  $(INCDIR)/ansidecl.h $(INCDIR)/opcode/pdp11.h
+pdp11-opc.lo: pdp11-opc.c $(INCDIR)/opcode/pdp11.h
 pj-dis.lo: pj-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/opcode/pj.h $(INCDIR)/dis-asm.h $(BFD_H)
 pj-opc.lo: pj-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
@@ -999,6 +1002,9 @@
   $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/opcode/ppc.h
 ppc-opc.lo: ppc-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   $(INCDIR)/opcode/ppc.h opintl.h
+s390-opc.lo: s390-opc.c $(INCDIR)/ansidecl.h $(INCDIR)/opcode/s390.h
+s390-dis.lo: s390-dis.c $(INCDIR)/ansidecl.h sysdep.h \
+  config.h $(INCDIR)/dis-asm.h $(BFD_H) $(INCDIR)/opcode/s390.h
 sh-dis.lo: sh-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
   sh-opc.h $(INCDIR)/dis-asm.h $(BFD_H)
 sparc-dis.lo: sparc-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
diff --git a/opcodes/cgen-opc.c b/opcodes/cgen-opc.c
index 1945f9b..5e70c89 100644
--- a/opcodes/cgen-opc.c
+++ b/opcodes/cgen-opc.c
@@ -1,6 +1,6 @@
 /* CGEN generic opcode support.
 
-   Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
 
    This file is part of the GNU Binutils and GDB, the GNU debugger.
 
@@ -374,7 +374,7 @@
      unsigned char *buf;
      int length;
 {
-  bfd_get_bits (buf, length, cd->insn_endian == CGEN_ENDIAN_BIG);
+  return bfd_get_bits (buf, length, cd->insn_endian == CGEN_ENDIAN_BIG);
 }
 
 /* Cover function to store an insn value properly byteswapped.  */
diff --git a/opcodes/configure b/opcodes/configure
index 426a70e..9f6dcf2 100755
--- a/opcodes/configure
+++ b/opcodes/configure
@@ -777,7 +777,7 @@
 # We currently only use the version number for the name of any shared
 # library.  For user convenience, we always use the same version
 # number that BFD is using.
-BFD_VERSION=`grep INIT_AUTOMAKE ${srcdir}/../bfd/configure.in | sed -n -e 's/[ 	]//g' -e 's/^.*,\(.*\)).*$/\1/p'`
+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),
 # so one script is as good as another.  But avoid the broken or
@@ -4542,12 +4542,14 @@
 	bfd_mn10200_arch)	ta="$ta m10200-dis.lo m10200-opc.lo" ;;
 	bfd_mn10300_arch)	ta="$ta m10300-dis.lo m10300-opc.lo" ;;
 	bfd_ns32k_arch)		ta="$ta ns32k-dis.lo" ;;
+	bfd_pdp11_arch)		ta="$ta pdp11-dis.lo pdp11-opc.lo" ;;
 	bfd_pj_arch)	        ta="$ta pj-dis.lo pj-opc.lo" ;;
 	bfd_powerpc_arch)	ta="$ta ppc-dis.lo ppc-opc.lo" ;;
 	bfd_pyramid_arch)	;;
+	bfd_powerpc_64_arch)	ta="$ta ppc-dis.lo ppc-opc.lo" ;;
 	bfd_romp_arch)		;;
 	bfd_rs6000_arch)	ta="$ta ppc-dis.lo ppc-opc.lo" ;;
-	bfd_powerpc_64_arch)	ta="$ta ppc-dis.lo ppc-opc.lo" ;;
+	bfd_s390_arch)		ta="$ta s390-dis.lo s390-opc.lo" ;;
 	bfd_sh_arch)
 				ta="$ta sh-dis.lo" ;;
 	bfd_sparc_arch)		ta="$ta sparc-dis.lo sparc-opc.lo" ;;
diff --git a/opcodes/configure.in b/opcodes/configure.in
index b0d4288..cece000 100644
--- a/opcodes/configure.in
+++ b/opcodes/configure.in
@@ -11,7 +11,7 @@
 # library.  For user convenience, we always use the same version
 # number that BFD is using.
 changequote(,)dnl
-BFD_VERSION=`grep INIT_AUTOMAKE ${srcdir}/../bfd/configure.in | sed -n -e 's/[ 	]//g' -e 's/^.*,\(.*\)).*$/\1/p'`
+BFD_VERSION=`sed -n -e 's/^.._INIT_AUTOMAKE.*,[ 	]*\([^ 	]*\)[ 	]*).*/\1/p' < ${srcdir}/../bfd/configure.in`
 changequote([,])dnl
 
 AM_INIT_AUTOMAKE(opcodes, ${BFD_VERSION})
@@ -196,12 +196,14 @@
 	bfd_mn10200_arch)	ta="$ta m10200-dis.lo m10200-opc.lo" ;;
 	bfd_mn10300_arch)	ta="$ta m10300-dis.lo m10300-opc.lo" ;;
 	bfd_ns32k_arch)		ta="$ta ns32k-dis.lo" ;;
+	bfd_pdp11_arch)		ta="$ta pdp11-dis.lo pdp11-opc.lo" ;;
 	bfd_pj_arch)	        ta="$ta pj-dis.lo pj-opc.lo" ;;
 	bfd_powerpc_arch)	ta="$ta ppc-dis.lo ppc-opc.lo" ;;
 	bfd_pyramid_arch)	;;
+	bfd_powerpc_64_arch)	ta="$ta ppc-dis.lo ppc-opc.lo" ;;
 	bfd_romp_arch)		;;
 	bfd_rs6000_arch)	ta="$ta ppc-dis.lo ppc-opc.lo" ;;
-	bfd_powerpc_64_arch)	ta="$ta ppc-dis.lo ppc-opc.lo" ;;
+	bfd_s390_arch)		ta="$ta s390-dis.lo s390-opc.lo" ;;
 	bfd_sh_arch)
 				ta="$ta sh-dis.lo" ;;
 	bfd_sparc_arch)		ta="$ta sparc-dis.lo sparc-opc.lo" ;;
diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c
index d031840..b5a1fca 100644
--- a/opcodes/disassemble.c
+++ b/opcodes/disassemble.c
@@ -47,9 +47,11 @@
 #define ARCH_mn10200
 #define ARCH_mn10300
 #define ARCH_ns32k
+#define ARCH_pdp11
 #define ARCH_pj
 #define ARCH_powerpc
 #define ARCH_rs6000
+#define ARCH_s390
 #define ARCH_sh
 #define ARCH_sparc
 #define ARCH_tic30
@@ -224,6 +226,11 @@
       disassemble = print_insn_mn10300;
       break;
 #endif
+#ifdef ARCH_pdp11
+    case bfd_arch_pdp11:
+      disassemble = print_insn_pdp11;
+      break;
+#endif
 #ifdef ARCH_pj
     case bfd_arch_pj:
       disassemble = print_insn_pj;
@@ -245,6 +252,11 @@
 	disassemble = print_insn_rs6000;
       break;
 #endif
+#ifdef ARCH_s390
+    case bfd_arch_s390:
+      disassemble = print_insn_s390;
+      break;
+#endif
 #ifdef ARCH_sh
     case bfd_arch_sh:
       if (bfd_big_endian (abfd))
diff --git a/opcodes/fr30-desc.h b/opcodes/fr30-desc.h
index 446fc7d..27b4db5 100644
--- a/opcodes/fr30-desc.h
+++ b/opcodes/fr30-desc.h
@@ -44,7 +44,7 @@
 #define CGEN_INT_INSN_P 0
 
 /* Maximum nymber of syntax bytes in an instruction.  */
-#define CGEN_ACTUAL_MAX_SYNTAX_BYTES 15
+#define CGEN_ACTUAL_MAX_SYNTAX_ELEMENTS 15
 
 /* CGEN_MNEMONIC_OPERANDS is defined if mnemonics have operands.
    e.g. In "b,a foo" the ",a" is an operand.  If mnemonics have operands
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index 90794c0..c3f33bc 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -439,6 +439,7 @@
    'T' => print 'q' in 64bit mode and behave as 'I' otherwise
    'X' => print 's', 'd' depending on data16 prefix (for XMM)
    'W' => print 'b' or 'w' ("w" or "de" in intel mode)
+   'Y' => 'q' if instruction has an REX 64bit overwrite prefix
 */
 
 static const struct dis386 dis386_att[] = {
@@ -2578,23 +2579,23 @@
   /* PREGRP2 */
   {
     { "cvtpi2ps", XM, EM, XX },
-    { "cvtsi2ss", XM, Ev, XX },
+    { "cvtsi2ssY", XM, Ev, XX },
     { "cvtpi2pd", XM, EM, XX },
-    { "cvtsi2sd", XM, Ev, XX },
+    { "cvtsi2sdY", XM, Ev, XX },
   },
   /* PREGRP3 */
   {
     { "cvtps2pi", MX, EX, XX },
-    { "cvtss2si", Gv, EX, XX },
+    { "cvtss2siY", Gv, EX, XX },
     { "cvtpd2pi", MX, EX, XX },
-    { "cvtsd2si", Gv, EX, XX },
+    { "cvtsd2siY", Gv, EX, XX },
   },
   /* PREGRP4 */
   {
     { "cvttps2pi", MX, EX, XX },
-    { "cvttss2si", Gv, EX, XX },
+    { "cvttss2siY", Gv, EX, XX },
     { "cvttpd2pi", MX, EX, XX },
-    { "cvttsd2si", Gv, EX, XX },
+    { "cvttsd2siY", Gv, EX, XX },
   },
   /* PREGRP5 */
   {
@@ -3850,6 +3851,15 @@
 	    *obufp++ = 's';
           used_prefixes |= (prefixes & PREFIX_DATA);
 	  break;
+	case 'Y':
+          if (intel_syntax)
+            break;
+	  if (rex & REX_MODE64)
+	    {
+	      USED_REX (REX_MODE64);
+	      *obufp++ = 'q';
+	    }
+	  break;
 	  /* implicit operand size 'l' for i386 or 'q' for x86-64 */
 	case 'W':
 	  /* operand size flag for cwtl, cbtw */
diff --git a/opcodes/ia64-asmtab.c b/opcodes/ia64-asmtab.c
index 52ebb1d..a159526 100644
--- a/opcodes/ia64-asmtab.c
+++ b/opcodes/ia64-asmtab.c
@@ -1497,8 +1497,8 @@
 };
 
 static const short dep233[] = {
-  32, 33, 88, 166, 252, 2129, 2130, 2131, 2157, 2158, 2161, 2164, 4127, 20605, 
-  
+  32, 33, 88, 166, 252, 2129, 2130, 2131, 2157, 2158, 2161, 2164, 2295, 4127, 
+  16516, 16518, 18731, 18733, 18734, 18736, 20605, 
 };
 
 static const short dep234[] = {
@@ -1663,7 +1663,7 @@
   { NELS(dep230), dep230, NELS(dep31), dep31, },
   { NELS(dep231), dep231, NELS(dep0), dep0, },
   { NELS(dep232), dep232, NELS(dep0), dep0, },
-  { NELS(dep233), dep233, NELS(dep31), dep31, },
+  { NELS(dep233), dep233, NELS(dep62), dep62, },
   { 0, NULL, 0, NULL, },
   { NELS(dep235), dep235, NELS(dep234), dep234, },
 };
@@ -1677,23 +1677,24 @@
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
+  { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 88 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
-  { 0x0, 0x0, 0, 416, -1, 0, 1, 6 },
-  { 0x0, 0x0, 0, 479, -1, 0, 1, 17 },
+  { 0x0, 0x0, 0, 449, -1, 0, 1, 6 },
+  { 0x0, 0x0, 0, 512, -1, 0, 1, 17 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 145 },
-  { 0x0, 0x0, 0, 578, -1, 0, 1, 17 },
-  { 0x0, 0x0, 0, 1742, -1, 0, 1, 10 },
+  { 0x0, 0x0, 0, 611, -1, 0, 1, 17 },
+  { 0x0, 0x0, 0, 1815, -1, 0, 1, 10 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 9 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 71 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 71 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 13 },
   { 0x1, 0x1, 0, -1, -1, 13, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 33 },
-  { 0x0, 0x0, 0, 1918, -1, 0, 1, 29 },
+  { 0x0, 0x0, 0, 1991, -1, 0, 1, 29 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 29 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 29 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 33 },
@@ -1702,16 +1703,16 @@
   { 0x0, 0x0, 0, -1, -1, 0, 1, 44 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 40 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 78 },
-  { 0x0, 0x0, 0, 1782, -1, 0, 1, 29 },
+  { 0x0, 0x0, 0, 1855, -1, 0, 1, 29 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 29 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 29 },
-  { 0x0, 0x0, 0, 1961, -1, 0, 1, 29 },
-  { 0x0, 0x0, 0, 1786, -1, 0, 1, 29 },
+  { 0x0, 0x0, 0, 2034, -1, 0, 1, 29 },
+  { 0x0, 0x0, 0, 1859, -1, 0, 1, 29 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 33 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 33 },
-  { 0x0, 0x0, 0, 1788, -1, 0, 1, 29 },
-  { 0x0, 0x0, 0, 1970, -1, 0, 1, 29 },
-  { 0x0, 0x0, 0, 1973, -1, 0, 1, 29 },
+  { 0x0, 0x0, 0, 1861, -1, 0, 1, 29 },
+  { 0x0, 0x0, 0, 2043, -1, 0, 1, 29 },
+  { 0x0, 0x0, 0, 2046, -1, 0, 1, 29 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 33 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 33 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 33 },
@@ -1720,64 +1721,64 @@
   { 0x0, 0x0, 0, -1, -1, 0, 1, 29 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 29 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 29 },
-  { 0x0, 0x0, 0, 1995, -1, 0, 1, 29 },
+  { 0x0, 0x0, 0, 2068, -1, 0, 1, 29 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 29 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 33 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 33 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 29 },
-  { 0x0, 0x0, 0, 1998, -1, 0, 1, 29 },
+  { 0x0, 0x0, 0, 2071, -1, 0, 1, 29 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 24 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 24 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 24 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 24 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 33 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 35 },
-  { 0x0, 0x0, 0, 2006, -1, 0, 1, 29 },
-  { 0x0, 0x0, 0, 1121, -1, 0, 1, 33 },
+  { 0x0, 0x0, 0, 2079, -1, 0, 1, 29 },
+  { 0x0, 0x0, 0, 1170, -1, 0, 1, 33 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 40 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 33 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 77 },
-  { 0x0, 0x0, 0, 1154, -1, 0, 1, 124 },
-  { 0x0, 0x0, 0, 1163, -1, 0, 1, 124 },
-  { 0x0, 0x0, 0, 1172, -1, 0, 1, 124 },
-  { 0x0, 0x0, 0, 1181, -1, 0, 1, 124 },
-  { 0x0, 0x0, 0, 1190, -1, 0, 1, 124 },
-  { 0x0, 0x0, 0, 1199, -1, 0, 1, 124 },
-  { 0x0, 0x0, 0, 1208, -1, 0, 1, 124 },
-  { 0x0, 0x0, 0, 1217, -1, 0, 1, 124 },
-  { 0x0, 0x0, 0, 1226, -1, 0, 1, 124 },
-  { 0x0, 0x0, 0, 1236, -1, 0, 1, 124 },
-  { 0x0, 0x0, 0, 1246, -1, 0, 1, 124 },
-  { 0x0, 0x0, 0, 1256, -1, 0, 1, 124 },
-  { 0x0, 0x0, 0, 1265, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1271, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1277, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1283, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1289, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1295, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1301, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1307, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1313, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1319, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1325, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1331, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1337, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1343, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1349, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1355, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1361, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1367, -1, 0, 1, 135 },
-  { 0x0, 0x0, 0, 1371, -1, 0, 1, 140 },
-  { 0x0, 0x0, 0, 1375, -1, 0, 1, 142 },
-  { 0x0, 0x0, 0, 1379, -1, 0, 1, 142 },
+  { 0x0, 0x0, 0, 1203, -1, 0, 1, 124 },
+  { 0x0, 0x0, 0, 1212, -1, 0, 1, 124 },
+  { 0x0, 0x0, 0, 1221, -1, 0, 1, 124 },
+  { 0x0, 0x0, 0, 1230, -1, 0, 1, 124 },
+  { 0x0, 0x0, 0, 1239, -1, 0, 1, 124 },
+  { 0x0, 0x0, 0, 1248, -1, 0, 1, 124 },
+  { 0x0, 0x0, 0, 1257, -1, 0, 1, 124 },
+  { 0x0, 0x0, 0, 1266, -1, 0, 1, 124 },
+  { 0x0, 0x0, 0, 1275, -1, 0, 1, 124 },
+  { 0x0, 0x0, 0, 1285, -1, 0, 1, 124 },
+  { 0x0, 0x0, 0, 1295, -1, 0, 1, 124 },
+  { 0x0, 0x0, 0, 1305, -1, 0, 1, 124 },
+  { 0x0, 0x0, 0, 1314, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1320, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1326, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1332, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1338, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1344, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1350, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1356, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1362, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1368, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1374, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1380, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1386, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1392, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1398, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1404, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1410, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1416, -1, 0, 1, 135 },
+  { 0x0, 0x0, 0, 1420, -1, 0, 1, 140 },
+  { 0x0, 0x0, 0, 1424, -1, 0, 1, 142 },
+  { 0x0, 0x0, 0, 1428, -1, 0, 1, 142 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 79 },
-  { 0x0, 0x0, 0, 249, -1, 0, 1, 40 },
+  { 0x0, 0x0, 0, 250, -1, 0, 1, 40 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 33 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 67 },
-  { 0x1, 0x1, 0, 934, -1, 20, 1, 67 },
+  { 0x1, 0x1, 0, 975, -1, 20, 1, 67 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 68 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 69 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 70 },
@@ -1813,16 +1814,16 @@
   { 0x0, 0x0, 0, -1, -1, 0, 1, 145 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
-  { 0x0, 0x0, 0, 2298, -1, 0, 1, 0 },
-  { 0x0, 0x0, 0, 2299, -1, 0, 1, 0 },
+  { 0x0, 0x0, 0, 2371, -1, 0, 1, 0 },
+  { 0x0, 0x0, 0, 2372, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
-  { 0x0, 0x0, 0, 1754, -1, 0, 1, 0 },
-  { 0x0, 0x0, 0, 1755, -1, 0, 1, 0 },
+  { 0x0, 0x0, 0, 1827, -1, 0, 1, 0 },
+  { 0x0, 0x0, 0, 1828, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
-  { 0x0, 0x0, 0, 2313, -1, 0, 1, 0 },
+  { 0x0, 0x0, 0, 2386, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
@@ -1830,13 +1831,13 @@
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
-  { 0x0, 0x0, 0, 2314, -1, 0, 1, 0 },
-  { 0x0, 0x0, 0, 2315, -1, 0, 1, 0 },
-  { 0x0, 0x0, 0, 2316, -1, 0, 1, 0 },
-  { 0x0, 0x0, 0, 2317, -1, 0, 1, 0 },
+  { 0x0, 0x0, 0, 2387, -1, 0, 1, 0 },
+  { 0x0, 0x0, 0, 2388, -1, 0, 1, 0 },
+  { 0x0, 0x0, 0, 2389, -1, 0, 1, 0 },
+  { 0x0, 0x0, 0, 2390, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
-  { 0x0, 0x0, 0, 2300, -1, 0, 1, 0 },
-  { 0x0, 0x0, 0, 2301, -1, 0, 1, 0 },
+  { 0x0, 0x0, 0, 2373, -1, 0, 1, 0 },
+  { 0x0, 0x0, 0, 2374, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 11 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 84 },
@@ -1846,25 +1847,25 @@
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x1, 0x1, 0, -1, -1, 13, 1, 0 },
-  { 0x0, 0x0, 0, 2319, -1, 0, 1, 0 },
+  { 0x0, 0x0, 0, 2392, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 84 },
-  { 0x0, 0x0, 0, 1643, -1, 0, 1, 130 },
-  { 0x0, 0x0, 0, 1645, -1, 0, 1, 130 },
-  { 0x0, 0x0, 0, 1647, -1, 0, 1, 130 },
-  { 0x0, 0x0, 0, 1649, -1, 0, 1, 130 },
-  { 0x0, 0x0, 0, 1651, -1, 0, 1, 130 },
-  { 0x0, 0x0, 0, 1653, -1, 0, 1, 130 },
-  { 0x0, 0x0, 0, 1656, -1, 0, 1, 130 },
-  { 0x0, 0x0, 0, 1659, -1, 0, 1, 130 },
-  { 0x0, 0x0, 0, 1662, -1, 0, 1, 130 },
-  { 0x0, 0x0, 0, 1663, -1, 0, 1, 130 },
-  { 0x0, 0x0, 0, 1664, -1, 0, 1, 130 },
-  { 0x0, 0x0, 0, 1665, -1, 0, 1, 130 },
-  { 0x0, 0x0, 0, 1666, -1, 0, 1, 130 },
-  { 0x0, 0x0, 0, 1667, -1, 0, 1, 130 },
-  { 0x0, 0x0, 0, 1668, -1, 0, 1, 130 },
-  { 0x0, 0x0, 0, 1669, -1, 0, 1, 130 },
+  { 0x0, 0x0, 0, 1692, -1, 0, 1, 130 },
+  { 0x0, 0x0, 0, 1694, -1, 0, 1, 130 },
+  { 0x0, 0x0, 0, 1696, -1, 0, 1, 130 },
+  { 0x0, 0x0, 0, 1698, -1, 0, 1, 130 },
+  { 0x0, 0x0, 0, 1700, -1, 0, 1, 130 },
+  { 0x0, 0x0, 0, 1702, -1, 0, 1, 130 },
+  { 0x0, 0x0, 0, 1705, -1, 0, 1, 130 },
+  { 0x0, 0x0, 0, 1708, -1, 0, 1, 130 },
+  { 0x0, 0x0, 0, 1711, -1, 0, 1, 130 },
+  { 0x0, 0x0, 0, 1712, -1, 0, 1, 130 },
+  { 0x0, 0x0, 0, 1713, -1, 0, 1, 130 },
+  { 0x0, 0x0, 0, 1714, -1, 0, 1, 130 },
+  { 0x0, 0x0, 0, 1715, -1, 0, 1, 130 },
+  { 0x0, 0x0, 0, 1716, -1, 0, 1, 130 },
+  { 0x0, 0x0, 0, 1717, -1, 0, 1, 130 },
+  { 0x0, 0x0, 0, 1718, -1, 0, 1, 130 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
@@ -1876,217 +1877,249 @@
   { 0x0, 0x0, 0, -1, -1, 0, 1, 118 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 120 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 119 },
-  { 0x0, 0x0, 0, 1380, -1, 0, 1, 133 },
-  { 0x0, 0x0, 0, 1381, -1, 0, 1, 133 },
-  { 0x0, 0x0, 0, 1382, -1, 0, 1, 133 },
-  { 0x0, 0x0, 0, 1383, -1, 0, 1, 133 },
+  { 0x0, 0x0, 0, 1429, -1, 0, 1, 133 },
+  { 0x0, 0x0, 0, 1430, -1, 0, 1, 133 },
+  { 0x0, 0x0, 0, 1431, -1, 0, 1, 133 },
+  { 0x0, 0x0, 0, 1432, -1, 0, 1, 133 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 0, -1, -1, 0, 1, 0 },
-  { 0x0, 0x0, 1, 216, -1, 0, 1, 12 },
+  { 0x0, 0x0, 1, 217, -1, 0, 1, 12 },
   { 0x1, 0x1, 2, -1, -1, 27, 1, 12 },
-  { 0x0, 0x0, 3, -1, 1063, 0, 0, -1 },
-  { 0x0, 0x0, 3, -1, 1064, 0, 0, -1 },
-  { 0x1, 0x1, 3, 2189, 1147, 33, 1, 126 },
-  { 0x1, 0x1, 3, 2190, 1156, 33, 1, 126 },
-  { 0x1, 0x1, 3, 2191, 1165, 33, 1, 126 },
-  { 0x1, 0x1, 3, 2192, 1174, 33, 1, 126 },
-  { 0x1, 0x1, 3, 2193, 1183, 33, 1, 126 },
-  { 0x1, 0x1, 3, 2194, 1192, 33, 1, 126 },
-  { 0x1, 0x1, 3, 2195, 1201, 33, 1, 126 },
-  { 0x1, 0x1, 3, 2196, 1210, 33, 1, 126 },
-  { 0x1, 0x1, 3, 2197, 1219, 33, 1, 126 },
-  { 0x1, 0x1, 3, 2198, 1228, 33, 1, 126 },
-  { 0x1, 0x1, 3, 2199, 1238, 33, 1, 126 },
-  { 0x1, 0x1, 3, 2200, 1248, 33, 1, 126 },
-  { 0x1, 0x1, 3, 2201, 1261, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2202, 1267, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2203, 1273, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2204, 1279, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2205, 1285, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2206, 1291, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2207, 1297, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2208, 1303, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2209, 1309, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2210, 1315, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2211, 1321, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2212, 1327, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2213, 1333, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2214, 1339, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2215, 1345, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2216, 1351, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2217, 1357, 33, 1, 137 },
-  { 0x1, 0x1, 3, 2218, 1363, 33, 1, 137 },
+  { 0x0, 0x0, 3, -1, 1112, 0, 0, -1 },
+  { 0x0, 0x0, 3, -1, 1113, 0, 0, -1 },
+  { 0x1, 0x1, 3, 2262, 1196, 33, 1, 126 },
+  { 0x1, 0x1, 3, 2263, 1205, 33, 1, 126 },
+  { 0x1, 0x1, 3, 2264, 1214, 33, 1, 126 },
+  { 0x1, 0x1, 3, 2265, 1223, 33, 1, 126 },
+  { 0x1, 0x1, 3, 2266, 1232, 33, 1, 126 },
+  { 0x1, 0x1, 3, 2267, 1241, 33, 1, 126 },
+  { 0x1, 0x1, 3, 2268, 1250, 33, 1, 126 },
+  { 0x1, 0x1, 3, 2269, 1259, 33, 1, 126 },
+  { 0x1, 0x1, 3, 2270, 1268, 33, 1, 126 },
+  { 0x1, 0x1, 3, 2271, 1277, 33, 1, 126 },
+  { 0x1, 0x1, 3, 2272, 1287, 33, 1, 126 },
+  { 0x1, 0x1, 3, 2273, 1297, 33, 1, 126 },
+  { 0x1, 0x1, 3, 2274, 1310, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2275, 1316, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2276, 1322, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2277, 1328, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2278, 1334, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2279, 1340, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2280, 1346, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2281, 1352, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2282, 1358, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2283, 1364, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2284, 1370, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2285, 1376, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2286, 1382, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2287, 1388, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2288, 1394, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2289, 1400, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2290, 1406, 33, 1, 137 },
+  { 0x1, 0x1, 3, 2291, 1412, 33, 1, 137 },
   { 0x1, 0x1, 3, -1, -1, 27, 1, 40 },
-  { 0x0, 0x0, 4, 1756, 1134, 0, 1, 132 },
-  { 0x0, 0x0, 4, 1757, 1136, 0, 1, 132 },
-  { 0x0, 0x0, 4, 1758, 1138, 0, 1, 132 },
-  { 0x0, 0x0, 4, 1759, 1140, 0, 1, 132 },
-  { 0x0, 0x0, 4, 1760, 1142, 0, 1, 133 },
-  { 0x0, 0x0, 4, 1761, 1144, 0, 1, 133 },
-  { 0x1, 0x1, 4, -1, 1151, 33, 1, 129 },
-  { 0x5, 0x5, 4, 374, 1150, 32, 1, 124 },
-  { 0x1, 0x1, 4, -1, 1160, 33, 1, 129 },
-  { 0x5, 0x5, 4, 375, 1159, 32, 1, 124 },
-  { 0x1, 0x1, 4, -1, 1169, 33, 1, 129 },
-  { 0x5, 0x5, 4, 376, 1168, 32, 1, 124 },
-  { 0x1, 0x1, 4, -1, 1178, 33, 1, 129 },
-  { 0x5, 0x5, 4, 377, 1177, 32, 1, 124 },
-  { 0x1, 0x1, 4, -1, 1187, 33, 1, 129 },
-  { 0x5, 0x5, 4, 378, 1186, 32, 1, 124 },
-  { 0x1, 0x1, 4, -1, 1196, 33, 1, 129 },
-  { 0x5, 0x5, 4, 379, 1195, 32, 1, 124 },
-  { 0x1, 0x1, 4, -1, 1205, 33, 1, 129 },
-  { 0x5, 0x5, 4, 380, 1204, 32, 1, 124 },
-  { 0x1, 0x1, 4, -1, 1214, 33, 1, 129 },
-  { 0x5, 0x5, 4, 381, 1213, 32, 1, 124 },
-  { 0x1, 0x1, 4, -1, 1223, 33, 1, 129 },
-  { 0x5, 0x5, 4, 382, 1222, 32, 1, 124 },
-  { 0x1, 0x1, 4, -1, 1233, 33, 1, 129 },
-  { 0x5, 0x5, 4, 848, 1231, 32, 1, 124 },
-  { 0x1, 0x1, 4, -1, 1243, 33, 1, 129 },
-  { 0x5, 0x5, 4, 849, 1241, 32, 1, 124 },
-  { 0x1, 0x1, 4, -1, 1253, 33, 1, 129 },
-  { 0x5, 0x5, 4, 850, 1251, 32, 1, 124 },
-  { 0x1, 0x21, 10, 1678, -1, 33, 1, 3 },
-  { 0x200001, 0x200001, 10, 1679, -1, 12, 1, 3 },
-  { 0x0, 0x0, 10, 1680, -1, 0, 1, 3 },
-  { 0x1, 0x1, 10, 1681, -1, 12, 1, 3 },
-  { 0x1, 0x1, 10, 1682, -1, 33, 1, 3 },
-  { 0x200001, 0x200001, 10, 1683, -1, 12, 1, 3 },
-  { 0x1, 0x21, 10, 1684, -1, 33, 1, 3 },
-  { 0x200001, 0x200001, 10, 1685, -1, 12, 1, 3 },
-  { 0x0, 0x0, 10, -1, 1706, 0, 0, -1 },
-  { 0x0, 0x0, 10, -1, 1707, 0, 0, -1 },
-  { 0x0, 0x0, 10, -1, 1708, 0, 0, -1 },
-  { 0x0, 0x0, 10, -1, 1709, 0, 0, -1 },
-  { 0x0, 0x0, 10, -1, 1710, 0, 0, -1 },
-  { 0x0, 0x0, 10, -1, 1711, 0, 0, -1 },
-  { 0x0, 0x0, 10, -1, 1712, 0, 0, -1 },
-  { 0x0, 0x0, 10, -1, 1713, 0, 0, -1 },
-  { 0x1, 0x21, 10, 1686, -1, 33, 1, 3 },
-  { 0x200001, 0x200001, 10, 1687, -1, 12, 1, 3 },
-  { 0x0, 0x0, 10, 1688, -1, 0, 1, 3 },
-  { 0x1, 0x1, 10, 1689, -1, 12, 1, 3 },
-  { 0x1, 0x1, 10, 1690, -1, 33, 1, 3 },
-  { 0x200001, 0x200001, 10, 1691, -1, 12, 1, 3 },
-  { 0x1, 0x21, 10, 1692, -1, 33, 1, 3 },
-  { 0x200001, 0x200001, 10, 1693, -1, 12, 1, 3 },
-  { 0x0, 0x0, 10, -1, 1722, 0, 0, -1 },
-  { 0x0, 0x0, 10, -1, 1723, 0, 0, -1 },
-  { 0x0, 0x0, 10, -1, 1724, 0, 0, -1 },
-  { 0x0, 0x0, 10, -1, 1725, 0, 0, -1 },
-  { 0x0, 0x0, 10, -1, 1726, 0, 0, -1 },
-  { 0x0, 0x0, 10, -1, 1727, 0, 0, -1 },
-  { 0x0, 0x0, 10, -1, 1728, 0, 0, -1 },
-  { 0x0, 0x0, 10, -1, 1729, 0, 0, -1 },
-  { 0x1, 0x1, 10, 1694, -1, 36, 1, 3 },
-  { 0x1000001, 0x1000001, 10, 1695, -1, 12, 1, 3 },
-  { 0x0, 0x0, 10, -1, 1730, 0, 0, -1 },
-  { 0x0, 0x0, 10, -1, 1732, 0, 0, -1 },
-  { 0x1, 0x1, 10, 1696, -1, 36, 1, 3 },
-  { 0x1000001, 0x1000001, 10, 1697, -1, 12, 1, 3 },
-  { 0x0, 0x0, 10, -1, 1734, 0, 0, -1 },
-  { 0x0, 0x0, 10, -1, 1736, 0, 0, -1 },
+  { 0x0, 0x0, 4, 1829, 1183, 0, 1, 132 },
+  { 0x0, 0x0, 4, 1830, 1185, 0, 1, 132 },
+  { 0x0, 0x0, 4, 1831, 1187, 0, 1, 132 },
+  { 0x0, 0x0, 4, 1832, 1189, 0, 1, 132 },
+  { 0x0, 0x0, 4, 1833, 1191, 0, 1, 133 },
+  { 0x0, 0x0, 4, 1834, 1193, 0, 1, 133 },
+  { 0x1, 0x1, 4, -1, 1200, 33, 1, 129 },
+  { 0x5, 0x5, 4, 407, 1199, 32, 1, 124 },
+  { 0x1, 0x1, 4, -1, 1209, 33, 1, 129 },
+  { 0x5, 0x5, 4, 408, 1208, 32, 1, 124 },
+  { 0x1, 0x1, 4, -1, 1218, 33, 1, 129 },
+  { 0x5, 0x5, 4, 409, 1217, 32, 1, 124 },
+  { 0x1, 0x1, 4, -1, 1227, 33, 1, 129 },
+  { 0x5, 0x5, 4, 410, 1226, 32, 1, 124 },
+  { 0x1, 0x1, 4, -1, 1236, 33, 1, 129 },
+  { 0x5, 0x5, 4, 411, 1235, 32, 1, 124 },
+  { 0x1, 0x1, 4, -1, 1245, 33, 1, 129 },
+  { 0x5, 0x5, 4, 412, 1244, 32, 1, 124 },
+  { 0x1, 0x1, 4, -1, 1254, 33, 1, 129 },
+  { 0x5, 0x5, 4, 413, 1253, 32, 1, 124 },
+  { 0x1, 0x1, 4, -1, 1263, 33, 1, 129 },
+  { 0x5, 0x5, 4, 414, 1262, 32, 1, 124 },
+  { 0x1, 0x1, 4, -1, 1272, 33, 1, 129 },
+  { 0x5, 0x5, 4, 415, 1271, 32, 1, 124 },
+  { 0x1, 0x1, 4, -1, 1282, 33, 1, 129 },
+  { 0x5, 0x5, 4, 881, 1280, 32, 1, 124 },
+  { 0x1, 0x1, 4, -1, 1292, 33, 1, 129 },
+  { 0x5, 0x5, 4, 882, 1290, 32, 1, 124 },
+  { 0x1, 0x1, 4, -1, 1302, 33, 1, 129 },
+  { 0x5, 0x5, 4, 883, 1300, 32, 1, 124 },
+  { 0x1, 0x21, 10, 1727, -1, 33, 1, 3 },
+  { 0x200001, 0x200001, 10, 1728, -1, 12, 1, 3 },
+  { 0x0, 0x0, 10, 1729, -1, 0, 1, 3 },
+  { 0x1, 0x1, 10, 1730, -1, 12, 1, 3 },
+  { 0x1, 0x1, 10, 1731, -1, 33, 1, 3 },
+  { 0x200001, 0x200001, 10, 1732, -1, 12, 1, 3 },
+  { 0x0, 0x0, 10, 346, -1, 0, 1, 3 },
+  { 0x1, 0x1, 10, 1758, -1, 12, 1, 3 },
+  { 0x1, 0x1, 10, 350, -1, 33, 1, 3 },
+  { 0x200001, 0x200001, 10, 1760, -1, 12, 1, 3 },
+  { 0x1, 0x21, 10, 1737, -1, 33, 1, 3 },
+  { 0x200001, 0x200001, 10, 1738, -1, 12, 1, 3 },
+  { 0x0, 0x0, 10, -1, 1767, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1768, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1769, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1770, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1771, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1772, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1773, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1774, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1775, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1776, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1777, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1778, 0, 0, -1 },
+  { 0x1, 0x21, 10, 1739, -1, 33, 1, 3 },
+  { 0x200001, 0x200001, 10, 1740, -1, 12, 1, 3 },
+  { 0x0, 0x0, 10, 1741, -1, 0, 1, 3 },
+  { 0x1, 0x1, 10, 1742, -1, 12, 1, 3 },
+  { 0x1, 0x1, 10, 1743, -1, 33, 1, 3 },
+  { 0x200001, 0x200001, 10, 1744, -1, 12, 1, 3 },
+  { 0x0, 0x0, 10, 370, -1, 0, 1, 3 },
+  { 0x1, 0x1, 10, 1782, -1, 12, 1, 3 },
+  { 0x1, 0x1, 10, 374, -1, 33, 1, 3 },
+  { 0x200001, 0x200001, 10, 1784, -1, 12, 1, 3 },
+  { 0x1, 0x21, 10, 1749, -1, 33, 1, 3 },
+  { 0x200001, 0x200001, 10, 1750, -1, 12, 1, 3 },
+  { 0x0, 0x0, 10, -1, 1791, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1792, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1793, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1794, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1795, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1796, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1797, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1798, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1799, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1800, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1801, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1802, 0, 0, -1 },
+  { 0x1, 0x1, 10, 1751, -1, 36, 1, 3 },
+  { 0x1000001, 0x1000001, 10, 1752, -1, 12, 1, 3 },
+  { 0x0, 0x0, 10, -1, 1803, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1805, 0, 0, -1 },
+  { 0x1, 0x1, 10, 1753, -1, 36, 1, 3 },
+  { 0x1000001, 0x1000001, 10, 1754, -1, 12, 1, 3 },
+  { 0x0, 0x0, 10, -1, 1807, 0, 0, -1 },
+  { 0x0, 0x0, 10, -1, 1809, 0, 0, -1 },
   { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
   { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
-  { 0x0, 0x0, 11, 1698, -1, 0, 1, 3 },
-  { 0x1, 0x1, 11, 1699, -1, 12, 1, 3 },
+  { 0x0, 0x0, 11, 1755, -1, 0, 1, 3 },
+  { 0x1, 0x1, 11, 1756, -1, 12, 1, 3 },
   { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
   { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
   { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
   { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
-  { 0x0, 0x0, 11, 1700, -1, 0, 1, 3 },
-  { 0x1, 0x1, 11, 1701, -1, 12, 1, 3 },
-  { 0x1, 0x1, 11, 1702, -1, 33, 1, 3 },
-  { 0x200001, 0x200001, 11, 1703, -1, 12, 1, 3 },
+  { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
+  { 0x1, 0x1, 11, 1733, -1, 12, 1, 3 },
+  { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
+  { 0x0, 0x0, 11, 288, -1, 0, 1, 3 },
+  { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
+  { 0x200001, 0x200001, 11, 1735, -1, 12, 1, 3 },
+  { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
+  { 0x1, 0x1, 11, 290, -1, 33, 1, 3 },
+  { 0x0, 0x0, 11, 1761, -1, 0, 1, 3 },
+  { 0x1, 0x1, 11, 1762, -1, 12, 1, 3 },
+  { 0x1, 0x1, 11, 1763, -1, 33, 1, 3 },
+  { 0x200001, 0x200001, 11, 1764, -1, 12, 1, 3 },
   { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
   { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
-  { 0x0, 0x0, 11, 1704, -1, 0, 1, 3 },
-  { 0x1, 0x1, 11, 1705, -1, 12, 1, 3 },
+  { 0x0, 0x0, 11, 1765, -1, 0, 1, 3 },
+  { 0x1, 0x1, 11, 1766, -1, 12, 1, 3 },
   { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
   { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
-  { 0x0, 0x0, 11, 1714, -1, 0, 1, 3 },
-  { 0x1, 0x1, 11, 1715, -1, 12, 1, 3 },
+  { 0x0, 0x0, 11, 1779, -1, 0, 1, 3 },
+  { 0x1, 0x1, 11, 1780, -1, 12, 1, 3 },
   { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
   { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
   { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
   { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
-  { 0x0, 0x0, 11, 1716, -1, 0, 1, 3 },
-  { 0x1, 0x1, 11, 1717, -1, 12, 1, 3 },
-  { 0x1, 0x1, 11, 1718, -1, 33, 1, 3 },
-  { 0x200001, 0x200001, 11, 1719, -1, 12, 1, 3 },
+  { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
+  { 0x1, 0x1, 11, 1745, -1, 12, 1, 3 },
+  { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
+  { 0x0, 0x0, 11, 312, -1, 0, 1, 3 },
+  { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
+  { 0x200001, 0x200001, 11, 1747, -1, 12, 1, 3 },
+  { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
+  { 0x1, 0x1, 11, 314, -1, 33, 1, 3 },
+  { 0x0, 0x0, 11, 1785, -1, 0, 1, 3 },
+  { 0x1, 0x1, 11, 1786, -1, 12, 1, 3 },
+  { 0x1, 0x1, 11, 1787, -1, 33, 1, 3 },
+  { 0x200001, 0x200001, 11, 1788, -1, 12, 1, 3 },
   { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
   { 0x2, 0x3, 11, -1, -1, 37, 1, 5 },
-  { 0x0, 0x0, 11, 1720, -1, 0, 1, 3 },
-  { 0x1, 0x1, 11, 1721, -1, 12, 1, 3 },
+  { 0x0, 0x0, 11, 1789, -1, 0, 1, 3 },
+  { 0x1, 0x1, 11, 1790, -1, 12, 1, 3 },
   { 0x1, 0x1, 11, -1, -1, 36, 1, 5 },
   { 0x1, 0x1, 11, -1, -1, 36, 1, 5 },
-  { 0x1, 0x1, 11, 1731, -1, 36, 1, 3 },
-  { 0x1000001, 0x1000001, 11, 1733, -1, 12, 1, 3 },
+  { 0x1, 0x1, 11, 1804, -1, 36, 1, 3 },
+  { 0x1000001, 0x1000001, 11, 1806, -1, 12, 1, 3 },
   { 0x1, 0x1, 11, -1, -1, 36, 1, 5 },
   { 0x1, 0x1, 11, -1, -1, 36, 1, 5 },
-  { 0x1, 0x1, 11, 1735, -1, 36, 1, 3 },
-  { 0x1000001, 0x1000001, 11, 1737, -1, 12, 1, 3 },
+  { 0x1, 0x1, 11, 1808, -1, 36, 1, 3 },
+  { 0x1000001, 0x1000001, 11, 1810, -1, 12, 1, 3 },
   { 0x0, 0x0, 12, -1, -1, 0, 1, 14 },
   { 0x0, 0x0, 12, -1, -1, 0, 1, 14 },
-  { 0x1, 0x1, 13, 257, 1149, 34, 1, 124 },
-  { 0x1, 0x1, 13, 259, 1158, 34, 1, 124 },
-  { 0x1, 0x1, 13, 261, 1167, 34, 1, 124 },
-  { 0x1, 0x1, 13, 263, 1176, 34, 1, 124 },
-  { 0x1, 0x1, 13, 265, 1185, 34, 1, 124 },
-  { 0x1, 0x1, 13, 267, 1194, 34, 1, 124 },
-  { 0x1, 0x1, 13, 269, 1203, 34, 1, 124 },
-  { 0x1, 0x1, 13, 271, 1212, 34, 1, 124 },
-  { 0x1, 0x1, 13, 273, 1221, 34, 1, 124 },
-  { 0x1, 0x1, 13, 275, 1230, 34, 1, 124 },
-  { 0x1, 0x1, 13, 277, 1240, 34, 1, 124 },
-  { 0x1, 0x1, 13, 279, 1250, 34, 1, 124 },
-  { 0x0, 0x0, 19, -1, 617, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 618, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 619, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 620, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 621, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 622, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 623, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 624, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 625, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 626, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 627, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 628, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 629, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 630, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 631, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 632, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 633, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 634, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 635, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 636, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 637, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 638, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 639, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 640, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 641, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 642, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 643, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 644, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 645, 0, 0, -1 },
-  { 0x0, 0x0, 19, -1, 646, 0, 0, -1 },
-  { 0x0, 0x0, 20, -1, 2267, 0, 0, -1 },
-  { 0x0, 0x0, 20, -1, 2268, 0, 0, -1 },
-  { 0x0, 0x0, 20, -1, 2283, 0, 0, -1 },
-  { 0x0, 0x0, 20, -1, 2284, 0, 0, -1 },
-  { 0x0, 0x0, 20, -1, 2289, 0, 0, -1 },
-  { 0x0, 0x0, 20, -1, 2290, 0, 0, -1 },
-  { 0x0, 0x0, 21, 653, 2279, 0, 0, -1 },
-  { 0x0, 0x0, 21, 654, 2281, 0, 0, -1 },
-  { 0x0, 0x0, 23, -1, 2277, 0, 0, -1 },
-  { 0x0, 0x0, 23, -1, 2278, 0, 0, -1 },
+  { 0x1, 0x1, 13, 258, 1198, 34, 1, 124 },
+  { 0x1, 0x1, 13, 260, 1207, 34, 1, 124 },
+  { 0x1, 0x1, 13, 262, 1216, 34, 1, 124 },
+  { 0x1, 0x1, 13, 264, 1225, 34, 1, 124 },
+  { 0x1, 0x1, 13, 266, 1234, 34, 1, 124 },
+  { 0x1, 0x1, 13, 268, 1243, 34, 1, 124 },
+  { 0x1, 0x1, 13, 270, 1252, 34, 1, 124 },
+  { 0x1, 0x1, 13, 272, 1261, 34, 1, 124 },
+  { 0x1, 0x1, 13, 274, 1270, 34, 1, 124 },
+  { 0x1, 0x1, 13, 276, 1279, 34, 1, 124 },
+  { 0x1, 0x1, 13, 278, 1289, 34, 1, 124 },
+  { 0x1, 0x1, 13, 280, 1299, 34, 1, 124 },
+  { 0x0, 0x0, 19, -1, 650, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 651, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 652, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 653, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 654, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 655, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 656, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 657, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 658, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 659, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 660, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 661, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 662, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 663, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 664, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 665, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 666, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 667, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 668, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 669, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 670, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 671, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 672, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 673, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 674, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 675, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 676, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 677, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 678, 0, 0, -1 },
+  { 0x0, 0x0, 19, -1, 679, 0, 0, -1 },
+  { 0x0, 0x0, 20, -1, 2340, 0, 0, -1 },
+  { 0x0, 0x0, 20, -1, 2341, 0, 0, -1 },
+  { 0x0, 0x0, 20, -1, 2356, 0, 0, -1 },
+  { 0x0, 0x0, 20, -1, 2357, 0, 0, -1 },
+  { 0x0, 0x0, 20, -1, 2362, 0, 0, -1 },
+  { 0x0, 0x0, 20, -1, 2363, 0, 0, -1 },
+  { 0x0, 0x0, 21, 686, 2352, 0, 0, -1 },
+  { 0x0, 0x0, 21, 687, 2354, 0, 0, -1 },
+  { 0x0, 0x0, 23, -1, 2350, 0, 0, -1 },
+  { 0x0, 0x0, 23, -1, 2351, 0, 0, -1 },
   { 0x1, 0x1, 24, -1, -1, 35, 1, 6 },
   { 0x1, 0x1, 24, -1, -1, 35, 1, 6 },
-  { 0x1, 0x1, 24, 996, -1, 35, 1, 6 },
+  { 0x1, 0x1, 24, 1045, -1, 35, 1, 6 },
   { 0x1, 0x1, 24, -1, -1, 35, 1, 6 },
   { 0x1, 0x1, 24, -1, -1, 35, 1, 6 },
   { 0x1, 0x1, 24, -1, -1, 35, 1, 6 },
@@ -2149,7 +2182,7 @@
   { 0x1, 0x1, 24, -1, -1, 35, 1, 15 },
   { 0x1, 0x1, 24, -1, -1, 35, 1, 17 },
   { 0x1, 0x1, 24, -1, -1, 35, 1, 17 },
-  { 0x1, 0x1, 24, 1017, -1, 35, 1, 17 },
+  { 0x1, 0x1, 24, 1066, -1, 35, 1, 17 },
   { 0x1, 0x1, 24, -1, -1, 35, 1, 17 },
   { 0x1, 0x1, 24, -1, -1, 35, 1, 17 },
   { 0x1, 0x1, 24, -1, -1, 35, 1, 17 },
@@ -2248,7 +2281,7 @@
   { 0x1, 0x1, 24, -1, -1, 35, 1, 21 },
   { 0x1, 0x1, 24, -1, -1, 35, 1, 17 },
   { 0x1, 0x1, 24, -1, -1, 35, 1, 17 },
-  { 0x1, 0x1, 24, 1050, -1, 35, 1, 17 },
+  { 0x1, 0x1, 24, 1099, -1, 35, 1, 17 },
   { 0x1, 0x1, 24, -1, -1, 35, 1, 17 },
   { 0x1, 0x1, 24, -1, -1, 35, 1, 17 },
   { 0x1, 0x1, 24, -1, -1, 35, 1, 17 },
@@ -2287,295 +2320,303 @@
   { 0x1, 0x1, 24, -1, -1, 35, 1, 21 },
   { 0x1, 0x1, 24, -1, -1, 33, 1, 76 },
   { 0x1, 0x1, 24, -1, -1, 33, 1, 76 },
-  { 0x1, 0x1, 24, 1065, 1152, 35, 1, 129 },
-  { 0x1, 0x1, 24, 1066, 1161, 35, 1, 129 },
-  { 0x1, 0x1, 24, 1067, 1170, 35, 1, 129 },
-  { 0x1, 0x1, 24, 1068, 1179, 35, 1, 129 },
-  { 0x1, 0x1, 24, 1069, 1188, 35, 1, 129 },
-  { 0x1, 0x1, 24, 1070, 1197, 35, 1, 129 },
-  { 0x1, 0x1, 24, 1071, 1206, 35, 1, 129 },
-  { 0x1, 0x1, 24, 1072, 1215, 35, 1, 129 },
-  { 0x1, 0x1, 24, 1073, 1224, 35, 1, 129 },
-  { 0x1, 0x1, 24, 1074, 1234, 35, 1, 129 },
-  { 0x1, 0x1, 24, 1075, 1244, 35, 1, 129 },
-  { 0x1, 0x1, 24, 1076, 1254, 35, 1, 129 },
-  { 0x1, 0x1, 24, 1077, 1263, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1078, 1269, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1079, 1275, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1080, 1281, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1081, 1287, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1082, 1293, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1083, 1299, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1084, 1305, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1085, 1311, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1086, 1317, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1087, 1323, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1088, 1329, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1089, 1335, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1090, 1341, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1091, 1347, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1092, 1353, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1093, 1359, 35, 1, 139 },
-  { 0x1, 0x1, 24, 1094, 1365, 35, 1, 139 },
-  { 0x0, 0x0, 32, 2261, 2259, 0, 0, -1 },
-  { 0x0, 0x0, 32, 2264, 2262, 0, 0, -1 },
-  { 0x0, 0x0, 32, 2270, 2269, 0, 0, -1 },
-  { 0x0, 0x0, 32, 2272, 2271, 0, 0, -1 },
-  { 0x0, 0x0, 32, 2286, 2285, 0, 0, -1 },
-  { 0x0, 0x0, 32, 2288, 2287, 0, 0, -1 },
-  { 0x0, 0x0, 34, -1, 2280, 0, 0, -1 },
-  { 0x0, 0x0, 34, -1, 2282, 0, 0, -1 },
-  { 0x1, 0x1, 37, -1, 1826, 37, 1, 29 },
-  { 0x1, 0x1, 37, -1, 1861, 37, 1, 29 },
-  { 0x0, 0x0, 37, -1, 1864, 0, 0, -1 },
+  { 0x1, 0x1, 24, 1114, 1201, 35, 1, 129 },
+  { 0x1, 0x1, 24, 1115, 1210, 35, 1, 129 },
+  { 0x1, 0x1, 24, 1116, 1219, 35, 1, 129 },
+  { 0x1, 0x1, 24, 1117, 1228, 35, 1, 129 },
+  { 0x1, 0x1, 24, 1118, 1237, 35, 1, 129 },
+  { 0x1, 0x1, 24, 1119, 1246, 35, 1, 129 },
+  { 0x1, 0x1, 24, 1120, 1255, 35, 1, 129 },
+  { 0x1, 0x1, 24, 1121, 1264, 35, 1, 129 },
+  { 0x1, 0x1, 24, 1122, 1273, 35, 1, 129 },
+  { 0x1, 0x1, 24, 1123, 1283, 35, 1, 129 },
+  { 0x1, 0x1, 24, 1124, 1293, 35, 1, 129 },
+  { 0x1, 0x1, 24, 1125, 1303, 35, 1, 129 },
+  { 0x1, 0x1, 24, 1126, 1312, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1127, 1318, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1128, 1324, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1129, 1330, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1130, 1336, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1131, 1342, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1132, 1348, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1133, 1354, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1134, 1360, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1135, 1366, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1136, 1372, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1137, 1378, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1138, 1384, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1139, 1390, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1140, 1396, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1141, 1402, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1142, 1408, 35, 1, 139 },
+  { 0x1, 0x1, 24, 1143, 1414, 35, 1, 139 },
+  { 0x0, 0x0, 32, 2334, 2332, 0, 0, -1 },
+  { 0x0, 0x0, 32, 2337, 2335, 0, 0, -1 },
+  { 0x0, 0x0, 32, 2343, 2342, 0, 0, -1 },
+  { 0x0, 0x0, 32, 2345, 2344, 0, 0, -1 },
+  { 0x0, 0x0, 32, 2359, 2358, 0, 0, -1 },
+  { 0x0, 0x0, 32, 2361, 2360, 0, 0, -1 },
+  { 0x0, 0x0, 34, -1, 2353, 0, 0, -1 },
+  { 0x0, 0x0, 34, -1, 2355, 0, 0, -1 },
+  { 0x1, 0x1, 37, -1, 1899, 37, 1, 29 },
+  { 0x1, 0x1, 37, -1, 1934, 37, 1, 29 },
+  { 0x0, 0x0, 37, -1, 1937, 0, 0, -1 },
   { 0x1, 0x1, 37, -1, -1, 37, 1, 29 },
-  { 0x1, 0x1, 37, -1, 1869, 37, 1, 29 },
-  { 0x0, 0x0, 37, -1, 1872, 0, 0, -1 },
+  { 0x1, 0x1, 37, -1, 1942, 37, 1, 29 },
+  { 0x0, 0x0, 37, -1, 1945, 0, 0, -1 },
   { 0x1, 0x1, 37, -1, -1, 37, 1, 29 },
-  { 0x0, 0x0, 37, -1, 1875, 0, 0, -1 },
+  { 0x0, 0x0, 37, -1, 1948, 0, 0, -1 },
   { 0x1, 0x1, 37, -1, -1, 37, 1, 29 },
-  { 0x1, 0x1, 37, -1, 1878, 37, 1, 29 },
-  { 0x1, 0x1, 37, -1, 1881, 37, 1, 29 },
-  { 0x1, 0x1, 37, -1, 1914, 37, 1, 29 },
+  { 0x1, 0x1, 37, -1, 1951, 37, 1, 29 },
+  { 0x1, 0x1, 37, -1, 1954, 37, 1, 29 },
+  { 0x1, 0x1, 37, -1, 1987, 37, 1, 29 },
   { 0x3, 0x3, 37, -1, -1, 30, 1, 134 },
-  { 0x0, 0x0, 37, 910, -1, 0, 1, 95 },
+  { 0x0, 0x0, 37, 951, -1, 0, 1, 95 },
   { 0x0, 0x0, 37, -1, -1, 0, 1, 104 },
-  { 0x0, 0x0, 37, 916, -1, 0, 1, 116 },
+  { 0x0, 0x0, 37, 957, -1, 0, 1, 116 },
   { 0x3, 0x3, 37, -1, -1, 30, 1, 144 },
-  { 0x0, 0x0, 37, 917, -1, 0, 1, 40 },
-  { 0x0, 0x0, 39, -1, 785, 0, 0, -1 },
-  { 0x0, 0x0, 39, -1, 793, 0, 0, -1 },
-  { 0x0, 0x0, 39, 919, 789, 0, 0, -1 },
-  { 0x3, 0x3, 39, -1, 444, 33, 1, 6 },
-  { 0x18000001, 0x18000001, 39, -1, 452, 6, 1, 7 },
-  { 0x3, 0x3, 39, 920, 448, 33, 1, 6 },
-  { 0x0, 0x0, 39, -1, 797, 0, 0, -1 },
-  { 0x3, 0x3, 39, -1, 464, 33, 1, 8 },
-  { 0x0, 0x0, 39, -1, 801, 0, 0, -1 },
-  { 0x3, 0x3, 39, -1, 476, 33, 1, 15 },
-  { 0x0, 0x0, 39, -1, 806, 0, 0, -1 },
-  { 0x0, 0x0, 39, -1, 810, 0, 0, -1 },
-  { 0x3, 0x3, 39, -1, 499, 33, 1, 17 },
-  { 0x3, 0x3, 39, -1, 503, 33, 1, 17 },
-  { 0x0, 0x0, 39, -1, 814, 0, 0, -1 },
+  { 0x0, 0x0, 37, 958, -1, 0, 1, 40 },
   { 0x0, 0x0, 39, -1, 818, 0, 0, -1 },
-  { 0x3, 0x3, 39, -1, 523, 33, 1, 18 },
-  { 0x18000001, 0x18000001, 39, -1, 527, 6, 1, 18 },
-  { 0x0, 0x0, 39, -1, 822, 0, 0, -1 },
-  { 0x3, 0x3, 39, -1, 539, 33, 1, 19 },
   { 0x0, 0x0, 39, -1, 826, 0, 0, -1 },
+  { 0x0, 0x0, 39, 960, 822, 0, 0, -1 },
+  { 0x3, 0x3, 39, -1, 477, 33, 1, 6 },
+  { 0x18000001, 0x18000001, 39, -1, 485, 6, 1, 7 },
+  { 0x3, 0x3, 39, 961, 481, 33, 1, 6 },
   { 0x0, 0x0, 39, -1, 830, 0, 0, -1 },
-  { 0x3, 0x3, 39, -1, 559, 33, 1, 20 },
-  { 0x18000001, 0x18000001, 39, -1, 563, 6, 1, 20 },
+  { 0x3, 0x3, 39, -1, 497, 33, 1, 8 },
   { 0x0, 0x0, 39, -1, 834, 0, 0, -1 },
-  { 0x3, 0x3, 39, -1, 575, 33, 1, 21 },
+  { 0x3, 0x3, 39, -1, 509, 33, 1, 15 },
   { 0x0, 0x0, 39, -1, 839, 0, 0, -1 },
   { 0x0, 0x0, 39, -1, 843, 0, 0, -1 },
-  { 0x3, 0x3, 39, -1, 598, 33, 1, 17 },
-  { 0x3, 0x3, 39, -1, 602, 33, 1, 17 },
+  { 0x3, 0x3, 39, -1, 532, 33, 1, 17 },
+  { 0x3, 0x3, 39, -1, 536, 33, 1, 17 },
   { 0x0, 0x0, 39, -1, 847, 0, 0, -1 },
-  { 0x3, 0x3, 39, -1, 614, 33, 1, 21 },
-  { 0x0, 0x0, 40, 673, 784, 0, 0, -1 },
-  { 0x0, 0x0, 40, 674, 792, 0, 0, -1 },
-  { 0x0, 0x0, 40, 675, 788, 0, 0, -1 },
-  { 0x1, 0x1, 40, 676, 443, 34, 1, 6 },
-  { 0x10000001, 0x10000001, 40, 677, 451, 6, 1, 7 },
-  { 0x1, 0x1, 40, 678, 447, 34, 1, 6 },
-  { 0x0, 0x0, 40, 679, 796, 0, 0, -1 },
-  { 0x1, 0x1, 40, 680, 463, 34, 1, 8 },
-  { 0x0, 0x0, 40, 681, 800, 0, 0, -1 },
-  { 0x1, 0x1, 40, 682, 475, 34, 1, 15 },
-  { 0x0, 0x0, 40, 683, 805, 0, 0, -1 },
-  { 0x0, 0x0, 40, 684, 809, 0, 0, -1 },
-  { 0x1, 0x1, 40, 685, 498, 34, 1, 17 },
-  { 0x1, 0x1, 40, 686, 502, 34, 1, 17 },
-  { 0x0, 0x0, 40, 687, 813, 0, 0, -1 },
-  { 0x0, 0x0, 40, 688, 817, 0, 0, -1 },
-  { 0x1, 0x1, 40, 689, 522, 34, 1, 18 },
-  { 0x10000001, 0x10000001, 40, 690, 526, 6, 1, 18 },
-  { 0x0, 0x0, 40, 691, 821, 0, 0, -1 },
-  { 0x1, 0x1, 40, 692, 538, 34, 1, 19 },
-  { 0x0, 0x0, 40, 693, 825, 0, 0, -1 },
-  { 0x0, 0x0, 40, 694, 829, 0, 0, -1 },
-  { 0x1, 0x1, 40, 695, 558, 34, 1, 20 },
-  { 0x10000001, 0x10000001, 40, 696, 562, 6, 1, 20 },
-  { 0x0, 0x0, 40, 697, 833, 0, 0, -1 },
-  { 0x1, 0x1, 40, 698, 574, 34, 1, 21 },
-  { 0x0, 0x0, 40, 699, 838, 0, 0, -1 },
-  { 0x0, 0x0, 40, 700, 842, 0, 0, -1 },
-  { 0x1, 0x1, 40, 701, 597, 34, 1, 17 },
-  { 0x1, 0x1, 40, 702, 601, 34, 1, 17 },
-  { 0x0, 0x0, 40, 703, 846, 0, 0, -1 },
-  { 0x1, 0x1, 40, 704, 613, 34, 1, 21 },
-  { 0x800001, 0x800001, 40, -1, 924, 4, 1, 16 },
-  { 0x1, 0x1, 40, 1772, 922, 4, 1, 16 },
-  { 0x1, 0x1, 40, 770, 927, 4, 1, 22 },
-  { 0x2, 0x3, 40, -1, 932, 20, 1, 67 },
-  { 0x1, 0x1, 40, 1773, 930, 21, 1, 67 },
+  { 0x0, 0x0, 39, -1, 851, 0, 0, -1 },
+  { 0x3, 0x3, 39, -1, 556, 33, 1, 18 },
+  { 0x18000001, 0x18000001, 39, -1, 560, 6, 1, 18 },
+  { 0x0, 0x0, 39, -1, 855, 0, 0, -1 },
+  { 0x3, 0x3, 39, -1, 572, 33, 1, 19 },
+  { 0x0, 0x0, 39, -1, 859, 0, 0, -1 },
+  { 0x0, 0x0, 39, -1, 863, 0, 0, -1 },
+  { 0x3, 0x3, 39, -1, 592, 33, 1, 20 },
+  { 0x18000001, 0x18000001, 39, -1, 596, 6, 1, 20 },
+  { 0x0, 0x0, 39, -1, 867, 0, 0, -1 },
+  { 0x3, 0x3, 39, -1, 608, 33, 1, 21 },
+  { 0x0, 0x0, 39, -1, 872, 0, 0, -1 },
+  { 0x0, 0x0, 39, -1, 876, 0, 0, -1 },
+  { 0x3, 0x3, 39, -1, 631, 33, 1, 17 },
+  { 0x3, 0x3, 39, -1, 635, 33, 1, 17 },
+  { 0x0, 0x0, 39, -1, 880, 0, 0, -1 },
+  { 0x3, 0x3, 39, -1, 647, 33, 1, 21 },
+  { 0x0, 0x0, 40, 706, 817, 0, 0, -1 },
+  { 0x0, 0x0, 40, 707, 825, 0, 0, -1 },
+  { 0x0, 0x0, 40, 708, 821, 0, 0, -1 },
+  { 0x1, 0x1, 40, 709, 476, 34, 1, 6 },
+  { 0x10000001, 0x10000001, 40, 710, 484, 6, 1, 7 },
+  { 0x1, 0x1, 40, 711, 480, 34, 1, 6 },
+  { 0x0, 0x0, 40, 712, 829, 0, 0, -1 },
+  { 0x1, 0x1, 40, 713, 496, 34, 1, 8 },
+  { 0x0, 0x0, 40, 714, 833, 0, 0, -1 },
+  { 0x1, 0x1, 40, 715, 508, 34, 1, 15 },
+  { 0x0, 0x0, 40, 716, 838, 0, 0, -1 },
+  { 0x0, 0x0, 40, 717, 842, 0, 0, -1 },
+  { 0x1, 0x1, 40, 718, 531, 34, 1, 17 },
+  { 0x1, 0x1, 40, 719, 535, 34, 1, 17 },
+  { 0x0, 0x0, 40, 720, 846, 0, 0, -1 },
+  { 0x0, 0x0, 40, 721, 850, 0, 0, -1 },
+  { 0x1, 0x1, 40, 722, 555, 34, 1, 18 },
+  { 0x10000001, 0x10000001, 40, 723, 559, 6, 1, 18 },
+  { 0x0, 0x0, 40, 724, 854, 0, 0, -1 },
+  { 0x1, 0x1, 40, 725, 571, 34, 1, 19 },
+  { 0x0, 0x0, 40, 726, 858, 0, 0, -1 },
+  { 0x0, 0x0, 40, 727, 862, 0, 0, -1 },
+  { 0x1, 0x1, 40, 728, 591, 34, 1, 20 },
+  { 0x10000001, 0x10000001, 40, 729, 595, 6, 1, 20 },
+  { 0x0, 0x0, 40, 730, 866, 0, 0, -1 },
+  { 0x1, 0x1, 40, 731, 607, 34, 1, 21 },
+  { 0x0, 0x0, 40, 732, 871, 0, 0, -1 },
+  { 0x0, 0x0, 40, 733, 875, 0, 0, -1 },
+  { 0x1, 0x1, 40, 734, 630, 34, 1, 17 },
+  { 0x1, 0x1, 40, 735, 634, 34, 1, 17 },
+  { 0x0, 0x0, 40, 736, 879, 0, 0, -1 },
+  { 0x1, 0x1, 40, 737, 646, 34, 1, 21 },
+  { 0x800001, 0x800001, 40, -1, 965, 4, 1, 16 },
+  { 0x1, 0x1, 40, 1845, 963, 4, 1, 16 },
+  { 0x1, 0x1, 40, 803, 968, 4, 1, 22 },
+  { 0x2, 0x3, 40, -1, 973, 20, 1, 67 },
+  { 0x1, 0x1, 40, 1846, 971, 21, 1, 67 },
   { 0x0, 0x0, 41, -1, -1, 0, 1, 80 },
   { 0x0, 0x0, 41, -1, -1, 0, 1, 80 },
   { 0x0, 0x0, 41, -1, -1, 0, 1, 123 },
-  { 0x1, 0x1, 43, 1095, 280, 38, 1, 1 },
-  { 0x0, 0x0, 43, -1, 323, 0, 0, -1 },
-  { 0x1, 0x1, 43, 1098, 286, 38, 1, 1 },
-  { 0x0, 0x0, 43, -1, 335, 0, 0, -1 },
-  { 0x0, 0x0, 43, -1, 289, 0, 0, -1 },
-  { 0x0, 0x0, 43, -1, 295, 0, 0, -1 },
-  { 0x1, 0x1, 43, 1103, 296, 38, 1, 1 },
-  { 0x0, 0x0, 43, -1, 339, 0, 0, -1 },
-  { 0x1, 0x1, 43, 1106, 302, 38, 1, 1 },
-  { 0x0, 0x0, 43, -1, 351, 0, 0, -1 },
-  { 0x0, 0x0, 43, -1, 305, 0, 0, -1 },
-  { 0x0, 0x0, 43, -1, 311, 0, 0, -1 },
-  { 0x0, 0x0, 43, 979, 1833, 0, 0, -1 },
-  { 0x0, 0x0, 43, 980, 2366, 0, 1, 54 },
-  { 0x0, 0x0, 43, 981, 1885, 0, 0, -1 },
-  { 0x0, 0x0, 43, 982, -1, 0, 1, 49 },
-  { 0x0, 0x0, 43, 894, -1, 0, 1, 0 },
-  { 0x0, 0x0, 43, 895, -1, 0, 1, 0 },
-  { 0x0, 0x0, 43, 896, -1, 0, 1, 0 },
-  { 0x1, 0x1, 44, -1, 1369, 30, 1, 141 },
-  { 0x1, 0x1, 44, 775, 1368, 30, 1, 140 },
-  { 0x1, 0x1, 44, -1, 1373, 30, 1, 143 },
-  { 0x1, 0x1, 44, 776, 1372, 30, 1, 142 },
-  { 0x1, 0x1, 44, -1, 1377, 30, 1, 143 },
-  { 0x1, 0x1, 44, 777, 1376, 30, 1, 142 },
-  { 0x3, 0x3, 45, -1, 928, 3, 1, 22 },
-  { 0x1, 0x1, 46, 1793, -1, 30, 1, 134 },
-  { 0x1, 0x1, 46, 1824, -1, 30, 1, 144 },
+  { 0x1, 0x1, 43, 1144, 281, 38, 1, 1 },
+  { 0x0, 0x0, 43, -1, 340, 0, 0, -1 },
+  { 0x1, 0x1, 43, 1147, 291, 38, 1, 1 },
+  { 0x0, 0x0, 43, -1, 360, 0, 0, -1 },
+  { 0x0, 0x0, 43, -1, 294, 0, 0, -1 },
+  { 0x0, 0x0, 43, -1, 304, 0, 0, -1 },
+  { 0x1, 0x1, 43, 1152, 305, 38, 1, 1 },
+  { 0x0, 0x0, 43, -1, 364, 0, 0, -1 },
+  { 0x1, 0x1, 43, 1155, 315, 38, 1, 1 },
+  { 0x0, 0x0, 43, -1, 384, 0, 0, -1 },
+  { 0x0, 0x0, 43, -1, 318, 0, 0, -1 },
+  { 0x0, 0x0, 43, -1, 328, 0, 0, -1 },
+  { 0x0, 0x0, 43, 1028, 1906, 0, 0, -1 },
+  { 0x0, 0x0, 43, 1029, 2439, 0, 1, 54 },
+  { 0x0, 0x0, 43, 1030, 1958, 0, 0, -1 },
+  { 0x0, 0x0, 43, 1031, -1, 0, 1, 49 },
+  { 0x0, 0x0, 43, 935, -1, 0, 1, 0 },
+  { 0x0, 0x0, 43, 936, -1, 0, 1, 0 },
+  { 0x0, 0x0, 43, 937, -1, 0, 1, 0 },
+  { 0x1, 0x1, 44, -1, 1418, 30, 1, 141 },
+  { 0x1, 0x1, 44, 808, 1417, 30, 1, 140 },
+  { 0x1, 0x1, 44, -1, 1422, 30, 1, 143 },
+  { 0x1, 0x1, 44, 809, 1421, 30, 1, 142 },
+  { 0x1, 0x1, 44, -1, 1426, 30, 1, 143 },
+  { 0x1, 0x1, 44, 810, 1425, 30, 1, 142 },
+  { 0x3, 0x3, 45, -1, 969, 3, 1, 22 },
+  { 0x1, 0x1, 46, 1866, -1, 30, 1, 134 },
+  { 0x1, 0x1, 46, 1897, -1, 30, 1, 144 },
   { 0x0, 0x0, 48, -1, -1, 0, 1, 40 },
   { 0x0, 0x0, 48, -1, -1, 0, 1, 40 },
-  { 0x1, 0x1, 55, -1, 1370, 31, 1, 141 },
-  { 0x1, 0x1, 55, -1, 1374, 31, 1, 143 },
-  { 0x1, 0x1, 55, -1, 1378, 31, 1, 143 },
+  { 0x1, 0x1, 55, -1, 1419, 31, 1, 141 },
+  { 0x1, 0x1, 55, -1, 1423, 31, 1, 143 },
+  { 0x1, 0x1, 55, -1, 1427, 31, 1, 143 },
   { 0x0, 0x0, 55, -1, -1, 0, 1, 94 },
   { 0x2, 0x3, 55, -1, -1, 27, 1, 94 },
   { 0x1, 0x1, 55, -1, -1, 28, 1, 94 },
-  { 0x0, 0x0, 64, 12, 414, 0, 1, 6 },
-  { 0x0, 0x0, 64, 997, 417, 0, 1, 6 },
-  { 0x1, 0x1, 64, 998, 419, 33, 1, 6 },
-  { 0x1, 0x1, 64, 999, 421, 34, 1, 6 },
-  { 0x3, 0x3, 64, 1000, 423, 33, 1, 6 },
-  { 0x0, 0x0, 64, 1001, 425, 0, 1, 6 },
-  { 0x1, 0x1, 64, 1002, 427, 33, 1, 6 },
-  { 0x1, 0x1, 64, 1003, 429, 34, 1, 6 },
-  { 0x3, 0x3, 64, 1004, 431, 33, 1, 6 },
-  { 0x1, 0x1, 64, 1005, 433, 6, 1, 7 },
-  { 0x8000001, 0x8000001, 64, 1006, 435, 6, 1, 7 },
-  { 0x10000001, 0x10000001, 64, 1007, 437, 6, 1, 7 },
-  { 0x18000001, 0x18000001, 64, 1008, 439, 6, 1, 7 },
-  { 0x0, 0x0, 64, 1009, 453, 0, 1, 8 },
-  { 0x1, 0x1, 64, 1010, 455, 33, 1, 8 },
-  { 0x1, 0x1, 64, 1011, 457, 34, 1, 8 },
-  { 0x3, 0x3, 64, 1012, 459, 33, 1, 8 },
-  { 0x0, 0x0, 64, 1013, 465, 0, 1, 15 },
-  { 0x1, 0x1, 64, 1014, 467, 33, 1, 15 },
-  { 0x1, 0x1, 64, 1015, 469, 34, 1, 15 },
-  { 0x3, 0x3, 64, 1016, 471, 33, 1, 15 },
-  { 0x0, 0x0, 64, 13, 477, 0, 1, 17 },
-  { 0x0, 0x0, 64, 1018, 480, 0, 1, 17 },
-  { 0x1, 0x1, 64, 1019, 482, 33, 1, 17 },
-  { 0x1, 0x1, 64, 1020, 484, 34, 1, 17 },
-  { 0x3, 0x3, 64, 1021, 486, 33, 1, 17 },
-  { 0x0, 0x0, 64, 1022, 488, 0, 1, 17 },
-  { 0x1, 0x1, 64, 1023, 490, 33, 1, 17 },
-  { 0x1, 0x1, 64, 1024, 492, 34, 1, 17 },
-  { 0x3, 0x3, 64, 1025, 494, 33, 1, 17 },
-  { 0x0, 0x0, 64, 1026, 504, 0, 1, 18 },
-  { 0x1, 0x1, 64, 1027, 506, 33, 1, 18 },
-  { 0x1, 0x1, 64, 1028, 508, 34, 1, 18 },
-  { 0x3, 0x3, 64, 1029, 510, 33, 1, 18 },
-  { 0x1, 0x1, 64, 1030, 512, 6, 1, 18 },
-  { 0x8000001, 0x8000001, 64, 1031, 514, 6, 1, 18 },
-  { 0x10000001, 0x10000001, 64, 1032, 516, 6, 1, 18 },
-  { 0x18000001, 0x18000001, 64, 1033, 518, 6, 1, 18 },
-  { 0x0, 0x0, 64, 1034, 528, 0, 1, 19 },
-  { 0x1, 0x1, 64, 1035, 530, 33, 1, 19 },
-  { 0x1, 0x1, 64, 1036, 532, 34, 1, 19 },
-  { 0x3, 0x3, 64, 1037, 534, 33, 1, 19 },
-  { 0x0, 0x0, 64, 1038, 540, 0, 1, 20 },
-  { 0x1, 0x1, 64, 1039, 542, 33, 1, 20 },
-  { 0x1, 0x1, 64, 1040, 544, 34, 1, 20 },
-  { 0x3, 0x3, 64, 1041, 546, 33, 1, 20 },
-  { 0x1, 0x1, 64, 1042, 548, 6, 1, 20 },
-  { 0x8000001, 0x8000001, 64, 1043, 550, 6, 1, 20 },
-  { 0x10000001, 0x10000001, 64, 1044, 552, 6, 1, 20 },
-  { 0x18000001, 0x18000001, 64, 1045, 554, 6, 1, 20 },
-  { 0x0, 0x0, 64, 1046, 564, 0, 1, 21 },
-  { 0x1, 0x1, 64, 1047, 566, 33, 1, 21 },
-  { 0x1, 0x1, 64, 1048, 568, 34, 1, 21 },
-  { 0x3, 0x3, 64, 1049, 570, 33, 1, 21 },
-  { 0x0, 0x0, 64, 15, 576, 0, 1, 17 },
-  { 0x0, 0x0, 64, 1051, 579, 0, 1, 17 },
-  { 0x1, 0x1, 64, 1052, 581, 33, 1, 17 },
-  { 0x1, 0x1, 64, 1053, 583, 34, 1, 17 },
-  { 0x3, 0x3, 64, 1054, 585, 33, 1, 17 },
-  { 0x0, 0x0, 64, 1055, 587, 0, 1, 17 },
-  { 0x1, 0x1, 64, 1056, 589, 33, 1, 17 },
-  { 0x1, 0x1, 64, 1057, 591, 34, 1, 17 },
-  { 0x3, 0x3, 64, 1058, 593, 33, 1, 17 },
-  { 0x0, 0x0, 64, 1059, 603, 0, 1, 21 },
-  { 0x1, 0x1, 64, 1060, 605, 33, 1, 21 },
-  { 0x1, 0x1, 64, 1061, 607, 34, 1, 21 },
-  { 0x3, 0x3, 64, 1062, 609, 33, 1, 21 },
-  { 0x3, 0x3, 65, 383, 1232, 33, 1, 128 },
-  { 0x3, 0x3, 65, 384, 1242, 33, 1, 128 },
-  { 0x3, 0x3, 65, 385, 1252, 33, 1, 128 },
-  { 0x0, 0x0, 65, -1, 1257, 0, 1, 135 },
-  { 0x0, 0x0, 65, -1, 1258, 0, 1, 135 },
-  { 0x0, 0x0, 65, -1, 1259, 0, 1, 135 },
-  { 0x0, 0x0, 106, 858, 1857, 0, 0, -1 },
-  { 0x0, 0x0, 106, 859, 2304, 0, 1, 29 },
-  { 0x0, 0x0, 106, 860, 1898, 0, 0, -1 },
-  { 0x0, 0x0, 106, 861, 2308, 0, 1, 29 },
-  { 0x0, 0x0, 108, -1, 1859, 0, 0, -1 },
-  { 0x1, 0x1, 108, -1, 2305, 27, 1, 29 },
-  { 0x0, 0x0, 108, -1, 1900, 0, 0, -1 },
-  { 0x1, 0x1, 108, -1, 2309, 27, 1, 29 },
-  { 0x0, 0x0, 109, 863, -1, 0, 1, 115 },
+  { 0x0, 0x0, 64, 13, 447, 0, 1, 6 },
+  { 0x0, 0x0, 64, 1046, 450, 0, 1, 6 },
+  { 0x1, 0x1, 64, 1047, 452, 33, 1, 6 },
+  { 0x1, 0x1, 64, 1048, 454, 34, 1, 6 },
+  { 0x3, 0x3, 64, 1049, 456, 33, 1, 6 },
+  { 0x0, 0x0, 64, 1050, 458, 0, 1, 6 },
+  { 0x1, 0x1, 64, 1051, 460, 33, 1, 6 },
+  { 0x1, 0x1, 64, 1052, 462, 34, 1, 6 },
+  { 0x3, 0x3, 64, 1053, 464, 33, 1, 6 },
+  { 0x1, 0x1, 64, 1054, 466, 6, 1, 7 },
+  { 0x8000001, 0x8000001, 64, 1055, 468, 6, 1, 7 },
+  { 0x10000001, 0x10000001, 64, 1056, 470, 6, 1, 7 },
+  { 0x18000001, 0x18000001, 64, 1057, 472, 6, 1, 7 },
+  { 0x0, 0x0, 64, 1058, 486, 0, 1, 8 },
+  { 0x1, 0x1, 64, 1059, 488, 33, 1, 8 },
+  { 0x1, 0x1, 64, 1060, 490, 34, 1, 8 },
+  { 0x3, 0x3, 64, 1061, 492, 33, 1, 8 },
+  { 0x0, 0x0, 64, 1062, 498, 0, 1, 15 },
+  { 0x1, 0x1, 64, 1063, 500, 33, 1, 15 },
+  { 0x1, 0x1, 64, 1064, 502, 34, 1, 15 },
+  { 0x3, 0x3, 64, 1065, 504, 33, 1, 15 },
+  { 0x0, 0x0, 64, 14, 510, 0, 1, 17 },
+  { 0x0, 0x0, 64, 1067, 513, 0, 1, 17 },
+  { 0x1, 0x1, 64, 1068, 515, 33, 1, 17 },
+  { 0x1, 0x1, 64, 1069, 517, 34, 1, 17 },
+  { 0x3, 0x3, 64, 1070, 519, 33, 1, 17 },
+  { 0x0, 0x0, 64, 1071, 521, 0, 1, 17 },
+  { 0x1, 0x1, 64, 1072, 523, 33, 1, 17 },
+  { 0x1, 0x1, 64, 1073, 525, 34, 1, 17 },
+  { 0x3, 0x3, 64, 1074, 527, 33, 1, 17 },
+  { 0x0, 0x0, 64, 1075, 537, 0, 1, 18 },
+  { 0x1, 0x1, 64, 1076, 539, 33, 1, 18 },
+  { 0x1, 0x1, 64, 1077, 541, 34, 1, 18 },
+  { 0x3, 0x3, 64, 1078, 543, 33, 1, 18 },
+  { 0x1, 0x1, 64, 1079, 545, 6, 1, 18 },
+  { 0x8000001, 0x8000001, 64, 1080, 547, 6, 1, 18 },
+  { 0x10000001, 0x10000001, 64, 1081, 549, 6, 1, 18 },
+  { 0x18000001, 0x18000001, 64, 1082, 551, 6, 1, 18 },
+  { 0x0, 0x0, 64, 1083, 561, 0, 1, 19 },
+  { 0x1, 0x1, 64, 1084, 563, 33, 1, 19 },
+  { 0x1, 0x1, 64, 1085, 565, 34, 1, 19 },
+  { 0x3, 0x3, 64, 1086, 567, 33, 1, 19 },
+  { 0x0, 0x0, 64, 1087, 573, 0, 1, 20 },
+  { 0x1, 0x1, 64, 1088, 575, 33, 1, 20 },
+  { 0x1, 0x1, 64, 1089, 577, 34, 1, 20 },
+  { 0x3, 0x3, 64, 1090, 579, 33, 1, 20 },
+  { 0x1, 0x1, 64, 1091, 581, 6, 1, 20 },
+  { 0x8000001, 0x8000001, 64, 1092, 583, 6, 1, 20 },
+  { 0x10000001, 0x10000001, 64, 1093, 585, 6, 1, 20 },
+  { 0x18000001, 0x18000001, 64, 1094, 587, 6, 1, 20 },
+  { 0x0, 0x0, 64, 1095, 597, 0, 1, 21 },
+  { 0x1, 0x1, 64, 1096, 599, 33, 1, 21 },
+  { 0x1, 0x1, 64, 1097, 601, 34, 1, 21 },
+  { 0x3, 0x3, 64, 1098, 603, 33, 1, 21 },
+  { 0x0, 0x0, 64, 16, 609, 0, 1, 17 },
+  { 0x0, 0x0, 64, 1100, 612, 0, 1, 17 },
+  { 0x1, 0x1, 64, 1101, 614, 33, 1, 17 },
+  { 0x1, 0x1, 64, 1102, 616, 34, 1, 17 },
+  { 0x3, 0x3, 64, 1103, 618, 33, 1, 17 },
+  { 0x0, 0x0, 64, 1104, 620, 0, 1, 17 },
+  { 0x1, 0x1, 64, 1105, 622, 33, 1, 17 },
+  { 0x1, 0x1, 64, 1106, 624, 34, 1, 17 },
+  { 0x3, 0x3, 64, 1107, 626, 33, 1, 17 },
+  { 0x0, 0x0, 64, 1108, 636, 0, 1, 21 },
+  { 0x1, 0x1, 64, 1109, 638, 33, 1, 21 },
+  { 0x1, 0x1, 64, 1110, 640, 34, 1, 21 },
+  { 0x3, 0x3, 64, 1111, 642, 33, 1, 21 },
+  { 0x3, 0x3, 65, 416, 1281, 33, 1, 128 },
+  { 0x3, 0x3, 65, 417, 1291, 33, 1, 128 },
+  { 0x3, 0x3, 65, 418, 1301, 33, 1, 128 },
+  { 0x0, 0x0, 65, -1, 1306, 0, 1, 135 },
+  { 0x0, 0x0, 65, -1, 1307, 0, 1, 135 },
+  { 0x0, 0x0, 65, -1, 1308, 0, 1, 135 },
+  { 0x0, 0x0, 106, 891, 1930, 0, 0, -1 },
+  { 0x0, 0x0, 106, 892, 2377, 0, 1, 29 },
+  { 0x0, 0x0, 106, 893, 1971, 0, 0, -1 },
+  { 0x0, 0x0, 106, 894, 2381, 0, 1, 29 },
+  { 0x0, 0x0, 108, -1, 1932, 0, 0, -1 },
+  { 0x1, 0x1, 108, -1, 2378, 27, 1, 29 },
+  { 0x0, 0x0, 108, -1, 1973, 0, 0, -1 },
+  { 0x1, 0x1, 108, -1, 2382, 27, 1, 29 },
+  { 0x0, 0x0, 109, 896, -1, 0, 1, 115 },
   { 0x1, 0x1, 110, -1, -1, 27, 1, 115 },
-  { 0x0, 0x0, 111, 877, 2327, 0, 1, 1 },
-  { 0x0, 0x0, 111, 970, 284, 0, 0, -1 },
-  { 0x0, 0x0, 111, -1, 331, 0, 0, -1 },
-  { 0x0, 0x0, 111, 878, 2335, 0, 1, 1 },
-  { 0x0, 0x0, 111, -1, 293, 0, 0, -1 },
-  { 0x0, 0x0, 111, 879, 2347, 0, 1, 1 },
-  { 0x0, 0x0, 111, 975, 300, 0, 0, -1 },
-  { 0x0, 0x0, 111, -1, 347, 0, 0, -1 },
-  { 0x0, 0x0, 111, 1107, 2354, 0, 1, 1 },
-  { 0x0, 0x0, 111, -1, 309, 0, 0, -1 },
-  { 0x0, 0x0, 111, -1, 1843, 0, 0, -1 },
-  { 0x1, 0x9, 111, -1, 2373, 33, 1, 54 },
-  { 0x2, 0x3, 111, 1120, 1894, 27, 1, 49 },
-  { 0x1, 0x1, 113, 1096, 2328, 37, 1, 1 },
-  { 0x1, 0x1, 113, 1099, 2336, 37, 1, 1 },
-  { 0x1, 0x1, 113, 1104, 2348, 37, 1, 1 },
-  { 0x0, 0x0, 113, -1, 2359, 0, 1, 1 },
-  { 0x0, 0x0, 114, 897, 2325, 0, 1, 1 },
-  { 0x0, 0x0, 114, 950, 282, 0, 0, -1 },
-  { 0x0, 0x0, 114, 971, 329, 0, 0, -1 },
-  { 0x0, 0x0, 114, -1, 2334, 0, 1, 1 },
-  { 0x0, 0x0, 114, 973, 291, 0, 0, -1 },
-  { 0x0, 0x0, 114, 899, 2345, 0, 1, 1 },
-  { 0x0, 0x0, 114, 955, 298, 0, 0, -1 },
-  { 0x0, 0x0, 114, 976, 345, 0, 0, -1 },
-  { 0x0, 0x0, 114, -1, 2353, 0, 1, 1 },
-  { 0x0, 0x0, 114, 978, 307, 0, 0, -1 },
-  { 0x0, 0x0, 114, 874, 1841, 0, 0, -1 },
-  { 0x0, 0x0, 114, 875, 2372, 0, 1, 54 },
-  { 0x0, 0x0, 114, 876, 1893, 0, 1, 49 },
+  { 0x0, 0x0, 111, 914, 2400, 0, 1, 1 },
+  { 0x0, 0x0, 111, 1015, 285, 0, 0, -1 },
+  { 0x0, 0x0, 111, 992, 348, 0, 0, -1 },
+  { 0x0, 0x0, 111, -1, 356, 0, 0, -1 },
+  { 0x0, 0x0, 111, 915, 2408, 0, 1, 1 },
+  { 0x0, 0x0, 111, -1, 298, 0, 0, -1 },
+  { 0x0, 0x0, 111, 1020, 299, 0, 0, -1 },
+  { 0x0, 0x0, 111, 916, 2420, 0, 1, 1 },
+  { 0x0, 0x0, 111, 1022, 309, 0, 0, -1 },
+  { 0x0, 0x0, 111, 999, 372, 0, 0, -1 },
+  { 0x0, 0x0, 111, -1, 380, 0, 0, -1 },
+  { 0x0, 0x0, 111, 1156, 2427, 0, 1, 1 },
+  { 0x0, 0x0, 111, -1, 322, 0, 0, -1 },
+  { 0x0, 0x0, 111, 1027, 323, 0, 0, -1 },
+  { 0x0, 0x0, 111, -1, 1916, 0, 0, -1 },
+  { 0x1, 0x9, 111, -1, 2446, 33, 1, 54 },
+  { 0x2, 0x3, 111, 1169, 1967, 27, 1, 49 },
+  { 0x1, 0x1, 113, 1145, 2401, 37, 1, 1 },
+  { 0x1, 0x1, 113, 1148, 2409, 37, 1, 1 },
+  { 0x1, 0x1, 113, 1153, 2421, 37, 1, 1 },
+  { 0x0, 0x0, 113, -1, 2432, 0, 1, 1 },
+  { 0x0, 0x0, 114, 938, 2398, 0, 1, 1 },
+  { 0x0, 0x0, 114, 991, 283, 0, 0, -1 },
+  { 0x0, 0x0, 114, -1, 352, 0, 0, -1 },
+  { 0x0, 0x0, 114, 1017, 354, 0, 0, -1 },
+  { 0x0, 0x0, 114, -1, 2407, 0, 1, 1 },
+  { 0x0, 0x0, 114, 1019, 296, 0, 0, -1 },
+  { 0x0, 0x0, 114, 996, 301, 0, 0, -1 },
+  { 0x0, 0x0, 114, 940, 2418, 0, 1, 1 },
+  { 0x0, 0x0, 114, 998, 307, 0, 0, -1 },
+  { 0x0, 0x0, 114, -1, 376, 0, 0, -1 },
+  { 0x0, 0x0, 114, 1024, 378, 0, 0, -1 },
+  { 0x0, 0x0, 114, -1, 2426, 0, 1, 1 },
+  { 0x0, 0x0, 114, 1026, 320, 0, 0, -1 },
+  { 0x0, 0x0, 114, 1003, 325, 0, 0, -1 },
+  { 0x0, 0x0, 114, 911, 1914, 0, 0, -1 },
+  { 0x0, 0x0, 114, 912, 2445, 0, 1, 54 },
+  { 0x0, 0x0, 114, 913, 1966, 0, 1, 49 },
   { 0x1, 0x1, 114, -1, -1, 27, 1, 0 },
   { 0x1, 0x1, 114, -1, -1, 27, 1, 0 },
   { 0x1, 0x1, 114, -1, -1, 27, 1, 0 },
-  { 0x1, 0x1, 115, -1, 2326, 37, 1, 1 },
-  { 0x0, 0x0, 115, -1, 2339, 0, 1, 1 },
-  { 0x1, 0x1, 115, -1, 2346, 37, 1, 1 },
-  { 0x0, 0x0, 115, -1, 2358, 0, 1, 1 },
-  { 0x0, 0x0, 116, 944, -1, 0, 1, 0 },
-  { 0x0, 0x0, 116, 945, -1, 0, 1, 0 },
-  { 0x0, 0x0, 116, 946, -1, 0, 1, 0 },
-  { 0x3, 0x3, 116, 906, -1, 34, 1, 33 },
-  { 0x3, 0x3, 116, 907, -1, 34, 1, 40 },
+  { 0x1, 0x1, 115, -1, 2399, 37, 1, 1 },
+  { 0x0, 0x0, 115, -1, 2412, 0, 1, 1 },
+  { 0x1, 0x1, 115, -1, 2419, 37, 1, 1 },
+  { 0x0, 0x0, 115, -1, 2431, 0, 1, 1 },
+  { 0x0, 0x0, 116, 985, -1, 0, 1, 0 },
+  { 0x0, 0x0, 116, 986, -1, 0, 1, 0 },
+  { 0x0, 0x0, 116, 987, -1, 0, 1, 0 },
+  { 0x3, 0x3, 116, 947, -1, 34, 1, 33 },
+  { 0x3, 0x3, 116, 948, -1, 34, 1, 40 },
   { 0x1, 0x1, 117, -1, -1, 35, 1, 33 },
   { 0x1, 0x1, 117, -1, -1, 35, 1, 40 },
   { 0x0, 0x0, 118, -1, -1, 0, 1, 40 },
@@ -2589,8 +2630,8 @@
   { 0x1, 0x1, 118, -1, -1, 27, 1, 117 },
   { 0x1, 0x1, 118, -1, -1, 27, 1, 40 },
   { 0x0, 0x0, 118, -1, -1, 0, 1, 40 },
-  { 0x0, 0x0, 119, -1, 2260, 0, 0, -1 },
-  { 0x0, 0x0, 119, -1, 2263, 0, 0, -1 },
+  { 0x0, 0x0, 119, -1, 2333, 0, 0, -1 },
+  { 0x0, 0x0, 119, -1, 2336, 0, 0, -1 },
   { 0x1, 0x1, 120, -1, -1, 35, 1, 16 },
   { 0x1, 0x1, 120, -1, -1, 35, 1, 16 },
   { 0x1, 0x1, 120, -1, -1, 35, 1, 16 },
@@ -2603,10 +2644,10 @@
   { 0x1, 0x1, 120, -1, -1, 23, 1, 67 },
   { 0x1, 0x1, 120, -1, -1, 23, 1, 67 },
   { 0x1, 0x1, 120, -1, -1, 23, 1, 67 },
-  { 0x1, 0x1, 120, 740, -1, 23, 1, 67 },
-  { 0x9, 0x9, 120, 741, -1, 20, 1, 67 },
-  { 0x0, 0x0, 124, 1743, -1, 0, 1, 0 },
-  { 0x0, 0x0, 124, 1744, -1, 0, 1, 0 },
+  { 0x1, 0x1, 120, 773, -1, 23, 1, 67 },
+  { 0x9, 0x9, 120, 774, -1, 20, 1, 67 },
+  { 0x0, 0x0, 124, 1816, -1, 0, 1, 0 },
+  { 0x0, 0x0, 124, 1817, -1, 0, 1, 0 },
   { 0x1, 0x1, 124, -1, -1, 28, 1, 33 },
   { 0x1, 0x1, 124, -1, -1, 27, 1, 33 },
   { 0x1, 0x1, 124, -1, -1, 29, 1, 0 },
@@ -2617,455 +2658,463 @@
   { 0x1, 0x1, 124, -1, -1, 29, 1, 0 },
   { 0x1, 0x1, 124, -1, -1, 29, 1, 0 },
   { 0x1, 0x1, 124, -1, -1, 29, 1, 0 },
-  { 0x0, 0x0, 124, 904, -1, 0, 1, 33 },
-  { 0x0, 0x0, 124, 988, -1, 0, 1, 40 },
-  { 0x0, 0x0, 137, 963, 2323, 0, 1, 1 },
-  { 0x0, 0x0, 137, 865, 283, 0, 0, -1 },
-  { 0x0, 0x0, 137, 883, 328, 0, 0, -1 },
-  { 0x0, 0x0, 137, -1, 2333, 0, 1, 1 },
-  { 0x0, 0x0, 137, 885, 290, 0, 0, -1 },
-  { 0x0, 0x0, 137, 965, 2343, 0, 1, 1 },
-  { 0x0, 0x0, 137, 870, 299, 0, 0, -1 },
-  { 0x0, 0x0, 137, 888, 344, 0, 0, -1 },
-  { 0x0, 0x0, 137, -1, 2352, 0, 1, 1 },
-  { 0x0, 0x0, 137, 890, 306, 0, 0, -1 },
-  { 0x0, 0x0, 137, 2390, 1837, 0, 0, -1 },
-  { 0x1, 0x1, 137, 2391, 2368, 33, 1, 54 },
-  { 0x0, 0x0, 137, 2392, 1887, 0, 0, -1 },
-  { 0x1, 0x1, 137, 2393, -1, 28, 1, 49 },
-  { 0x1, 0x1, 138, -1, 2324, 37, 1, 1 },
-  { 0x0, 0x0, 138, -1, 2338, 0, 1, 1 },
-  { 0x1, 0x1, 138, -1, 2344, 37, 1, 1 },
-  { 0x0, 0x0, 138, -1, 2357, 0, 1, 1 },
-  { 0x1, 0x1, 141, 739, 926, 3, 1, 22 },
-  { 0x0, 0x0, 142, 1745, -1, 0, 1, 33 },
-  { 0x0, 0x0, 143, 745, 2320, 0, 1, 1 },
-  { 0x0, 0x0, 143, -1, 285, 0, 0, -1 },
-  { 0x0, 0x0, 143, 866, 330, 0, 0, -1 },
-  { 0x0, 0x0, 143, 747, 2330, 0, 1, 1 },
-  { 0x0, 0x0, 143, 868, 292, 0, 0, -1 },
-  { 0x0, 0x0, 143, 751, 2340, 0, 1, 1 },
-  { 0x0, 0x0, 143, -1, 301, 0, 0, -1 },
-  { 0x0, 0x0, 143, 871, 346, 0, 0, -1 },
-  { 0x0, 0x0, 143, 753, 2350, 0, 1, 1 },
-  { 0x0, 0x0, 143, 873, 308, 0, 0, -1 },
-  { 0x0, 0x0, 143, 959, 1835, 0, 0, -1 },
-  { 0x1, 0x1, 143, 960, 2367, 36, 1, 54 },
-  { 0x0, 0x0, 143, 961, 1886, 0, 0, -1 },
-  { 0x1, 0x1, 143, 962, -1, 27, 1, 49 },
-  { 0x1, 0x1, 144, -1, 2322, 37, 1, 1 },
-  { 0x1, 0x1, 144, -1, 2332, 37, 1, 1 },
-  { 0x1, 0x1, 144, -1, 2342, 37, 1, 1 },
-  { 0x0, 0x0, 144, -1, 2356, 0, 1, 1 },
+  { 0x0, 0x0, 124, 945, -1, 0, 1, 33 },
+  { 0x0, 0x0, 124, 1037, -1, 0, 1, 40 },
+  { 0x0, 0x0, 137, 1008, 2396, 0, 1, 1 },
+  { 0x0, 0x0, 137, 898, 284, 0, 0, -1 },
+  { 0x0, 0x0, 137, 920, 289, 0, 0, -1 },
+  { 0x0, 0x0, 137, 921, 353, 0, 0, -1 },
+  { 0x0, 0x0, 137, -1, 2406, 0, 1, 1 },
+  { 0x0, 0x0, 137, 923, 295, 0, 0, -1 },
+  { 0x0, 0x0, 137, -1, 302, 0, 0, -1 },
+  { 0x0, 0x0, 137, 1010, 2416, 0, 1, 1 },
+  { 0x0, 0x0, 137, 905, 308, 0, 0, -1 },
+  { 0x0, 0x0, 137, 927, 313, 0, 0, -1 },
+  { 0x0, 0x0, 137, 928, 377, 0, 0, -1 },
+  { 0x0, 0x0, 137, -1, 2425, 0, 1, 1 },
+  { 0x0, 0x0, 137, 930, 319, 0, 0, -1 },
+  { 0x0, 0x0, 137, -1, 326, 0, 0, -1 },
+  { 0x0, 0x0, 137, 2463, 1910, 0, 0, -1 },
+  { 0x1, 0x1, 137, 2464, 2441, 33, 1, 54 },
+  { 0x0, 0x0, 137, 2465, 1960, 0, 0, -1 },
+  { 0x1, 0x1, 137, 2466, -1, 28, 1, 49 },
+  { 0x1, 0x1, 138, -1, 2397, 37, 1, 1 },
+  { 0x0, 0x0, 138, -1, 2411, 0, 1, 1 },
+  { 0x1, 0x1, 138, -1, 2417, 37, 1, 1 },
+  { 0x0, 0x0, 138, -1, 2430, 0, 1, 1 },
+  { 0x1, 0x1, 141, 772, 967, 3, 1, 22 },
+  { 0x0, 0x0, 142, 1818, -1, 0, 1, 33 },
+  { 0x0, 0x0, 143, 778, 2393, 0, 1, 1 },
+  { 0x0, 0x0, 143, -1, 286, 0, 0, -1 },
+  { 0x0, 0x0, 143, 899, 287, 0, 0, -1 },
+  { 0x0, 0x0, 143, 900, 355, 0, 0, -1 },
+  { 0x0, 0x0, 143, 780, 2403, 0, 1, 1 },
+  { 0x0, 0x0, 143, 902, 297, 0, 0, -1 },
+  { 0x0, 0x0, 143, 924, 300, 0, 0, -1 },
+  { 0x0, 0x0, 143, 784, 2413, 0, 1, 1 },
+  { 0x0, 0x0, 143, -1, 310, 0, 0, -1 },
+  { 0x0, 0x0, 143, 906, 311, 0, 0, -1 },
+  { 0x0, 0x0, 143, 907, 379, 0, 0, -1 },
+  { 0x0, 0x0, 143, 786, 2423, 0, 1, 1 },
+  { 0x0, 0x0, 143, 909, 321, 0, 0, -1 },
+  { 0x0, 0x0, 143, 931, 324, 0, 0, -1 },
+  { 0x0, 0x0, 143, 1004, 1908, 0, 0, -1 },
+  { 0x1, 0x1, 143, 1005, 2440, 36, 1, 54 },
+  { 0x0, 0x0, 143, 1006, 1959, 0, 0, -1 },
+  { 0x1, 0x1, 143, 1007, -1, 27, 1, 49 },
+  { 0x1, 0x1, 144, -1, 2395, 37, 1, 1 },
+  { 0x1, 0x1, 144, -1, 2405, 37, 1, 1 },
+  { 0x1, 0x1, 144, -1, 2415, 37, 1, 1 },
+  { 0x0, 0x0, 144, -1, 2429, 0, 1, 1 },
   { 0x0, 0x0, 145, -1, -1, 0, 1, 33 },
-  { 0x0, 0x0, 145, 905, -1, 0, 1, 40 },
+  { 0x0, 0x0, 145, 946, -1, 0, 1, 40 },
   { 0x0, 0x0, 146, -1, -1, 0, 1, 40 },
   { 0x0, 0x0, 146, -1, -1, 0, 1, 66 },
-  { 0x0, 0x0, 146, -1, 2360, 0, 1, 63 },
+  { 0x0, 0x0, 146, -1, 2433, 0, 1, 63 },
   { 0x0, 0x0, 146, -1, -1, 0, 1, 81 },
   { 0x0, 0x0, 146, -1, -1, 0, 1, 81 },
   { 0x0, 0x0, 146, -1, -1, 0, 1, 85 },
   { 0x0, 0x0, 146, -1, -1, 0, 1, 40 },
-  { 0x1, 0x1, 147, -1, 415, 12, 1, 6 },
-  { 0x1, 0x1, 147, -1, 418, 12, 1, 6 },
-  { 0x200001, 0x200001, 147, -1, 420, 12, 1, 6 },
-  { 0x400001, 0x400001, 147, -1, 422, 12, 1, 6 },
-  { 0x600001, 0x600001, 147, -1, 424, 12, 1, 6 },
-  { 0x1, 0x1, 147, -1, 426, 12, 1, 6 },
-  { 0x200001, 0x200001, 147, -1, 428, 12, 1, 6 },
-  { 0x400001, 0x400001, 147, -1, 430, 12, 1, 6 },
-  { 0x600001, 0x600001, 147, -1, 432, 12, 1, 6 },
-  { 0x41, 0x41, 147, -1, 434, 6, 1, 7 },
-  { 0x8000041, 0x8000041, 147, -1, 436, 6, 1, 7 },
-  { 0x10000041, 0x10000041, 147, -1, 438, 6, 1, 7 },
-  { 0x18000041, 0x18000041, 147, -1, 440, 6, 1, 7 },
-  { 0x1, 0x1, 147, -1, 454, 12, 1, 8 },
-  { 0x200001, 0x200001, 147, -1, 456, 12, 1, 8 },
-  { 0x400001, 0x400001, 147, -1, 458, 12, 1, 8 },
-  { 0x600001, 0x600001, 147, -1, 460, 12, 1, 8 },
-  { 0x1, 0x1, 147, -1, 466, 12, 1, 15 },
-  { 0x200001, 0x200001, 147, -1, 468, 12, 1, 15 },
-  { 0x400001, 0x400001, 147, -1, 470, 12, 1, 15 },
-  { 0x600001, 0x600001, 147, -1, 472, 12, 1, 15 },
-  { 0x1, 0x1, 147, -1, 478, 12, 1, 17 },
-  { 0x1, 0x1, 147, -1, 481, 12, 1, 17 },
-  { 0x200001, 0x200001, 147, -1, 483, 12, 1, 17 },
-  { 0x400001, 0x400001, 147, -1, 485, 12, 1, 17 },
-  { 0x600001, 0x600001, 147, -1, 487, 12, 1, 17 },
-  { 0x1, 0x1, 147, -1, 489, 12, 1, 17 },
-  { 0x200001, 0x200001, 147, -1, 491, 12, 1, 17 },
-  { 0x400001, 0x400001, 147, -1, 493, 12, 1, 17 },
-  { 0x600001, 0x600001, 147, -1, 495, 12, 1, 17 },
-  { 0x1, 0x1, 147, -1, 505, 12, 1, 18 },
-  { 0x200001, 0x200001, 147, -1, 507, 12, 1, 18 },
-  { 0x400001, 0x400001, 147, -1, 509, 12, 1, 18 },
-  { 0x600001, 0x600001, 147, -1, 511, 12, 1, 18 },
-  { 0x41, 0x41, 147, -1, 513, 6, 1, 18 },
-  { 0x8000041, 0x8000041, 147, -1, 515, 6, 1, 18 },
-  { 0x10000041, 0x10000041, 147, -1, 517, 6, 1, 18 },
-  { 0x18000041, 0x18000041, 147, -1, 519, 6, 1, 18 },
-  { 0x1, 0x1, 147, -1, 529, 12, 1, 19 },
-  { 0x200001, 0x200001, 147, -1, 531, 12, 1, 19 },
-  { 0x400001, 0x400001, 147, -1, 533, 12, 1, 19 },
-  { 0x600001, 0x600001, 147, -1, 535, 12, 1, 19 },
-  { 0x1, 0x1, 147, -1, 541, 12, 1, 20 },
-  { 0x200001, 0x200001, 147, -1, 543, 12, 1, 20 },
-  { 0x400001, 0x400001, 147, -1, 545, 12, 1, 20 },
-  { 0x600001, 0x600001, 147, -1, 547, 12, 1, 20 },
-  { 0x41, 0x41, 147, -1, 549, 6, 1, 20 },
-  { 0x8000041, 0x8000041, 147, -1, 551, 6, 1, 20 },
-  { 0x10000041, 0x10000041, 147, -1, 553, 6, 1, 20 },
-  { 0x18000041, 0x18000041, 147, -1, 555, 6, 1, 20 },
-  { 0x1, 0x1, 147, -1, 565, 12, 1, 21 },
-  { 0x200001, 0x200001, 147, -1, 567, 12, 1, 21 },
-  { 0x400001, 0x400001, 147, -1, 569, 12, 1, 21 },
-  { 0x600001, 0x600001, 147, -1, 571, 12, 1, 21 },
-  { 0x1, 0x1, 147, -1, 577, 12, 1, 17 },
-  { 0x1, 0x1, 147, -1, 580, 12, 1, 17 },
-  { 0x200001, 0x200001, 147, -1, 582, 12, 1, 17 },
-  { 0x400001, 0x400001, 147, -1, 584, 12, 1, 17 },
-  { 0x600001, 0x600001, 147, -1, 586, 12, 1, 17 },
-  { 0x1, 0x1, 147, -1, 588, 12, 1, 17 },
-  { 0x200001, 0x200001, 147, -1, 590, 12, 1, 17 },
-  { 0x400001, 0x400001, 147, -1, 592, 12, 1, 17 },
-  { 0x600001, 0x600001, 147, -1, 594, 12, 1, 17 },
-  { 0x1, 0x1, 147, -1, 604, 12, 1, 21 },
-  { 0x200001, 0x200001, 147, -1, 606, 12, 1, 21 },
-  { 0x400001, 0x400001, 147, -1, 608, 12, 1, 21 },
-  { 0x600001, 0x600001, 147, -1, 610, 12, 1, 21 },
-  { 0x0, 0x0, 156, 615, -1, 0, 1, 75 },
-  { 0x0, 0x0, 156, 616, -1, 0, 1, 75 },
-  { 0x9, 0x9, 156, -1, 1153, 32, 1, 129 },
-  { 0x9, 0x9, 156, -1, 1162, 32, 1, 129 },
-  { 0x9, 0x9, 156, -1, 1171, 32, 1, 129 },
-  { 0x9, 0x9, 156, -1, 1180, 32, 1, 129 },
-  { 0x9, 0x9, 156, -1, 1189, 32, 1, 129 },
-  { 0x9, 0x9, 156, -1, 1198, 32, 1, 129 },
-  { 0x9, 0x9, 156, -1, 1207, 32, 1, 129 },
-  { 0x9, 0x9, 156, -1, 1216, 32, 1, 129 },
-  { 0x9, 0x9, 156, -1, 1225, 32, 1, 129 },
-  { 0x9, 0x9, 156, -1, 1235, 32, 1, 129 },
-  { 0x9, 0x9, 156, -1, 1245, 32, 1, 129 },
-  { 0x9, 0x9, 156, -1, 1255, 32, 1, 129 },
-  { 0x9, 0x9, 156, -1, 1264, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1270, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1276, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1282, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1288, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1294, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1300, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1306, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1312, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1318, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1324, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1330, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1336, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1342, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1348, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1354, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1360, 32, 1, 139 },
-  { 0x9, 0x9, 156, -1, 1366, 32, 1, 139 },
-  { 0x0, 0x0, 157, 983, 281, 0, 0, -1 },
-  { 0x1, 0x1, 157, -1, 2329, 38, 1, 1 },
-  { 0x0, 0x0, 157, 746, 322, 0, 0, -1 },
-  { 0x0, 0x0, 157, 984, 287, 0, 0, -1 },
-  { 0x1, 0x1, 157, -1, 2337, 38, 1, 1 },
-  { 0x0, 0x0, 157, 748, 334, 0, 0, -1 },
-  { 0x0, 0x0, 157, 749, 288, 0, 0, -1 },
-  { 0x0, 0x0, 157, 750, 294, 0, 0, -1 },
-  { 0x0, 0x0, 157, 985, 297, 0, 0, -1 },
-  { 0x1, 0x1, 157, -1, 2349, 38, 1, 1 },
-  { 0x0, 0x0, 157, 752, 338, 0, 0, -1 },
-  { 0x0, 0x0, 157, -1, 303, 0, 0, -1 },
-  { 0x1, 0x1, 157, -1, 2355, 38, 1, 1 },
-  { 0x0, 0x0, 157, 754, 350, 0, 0, -1 },
-  { 0x0, 0x0, 157, 755, 304, 0, 0, -1 },
-  { 0x0, 0x0, 157, 756, 310, 0, 0, -1 },
-  { 0x0, 0x0, 158, 1126, 1845, 0, 0, -1 },
-  { 0x0, 0x0, 158, 1127, 2378, 0, 1, 54 },
-  { 0x0, 0x0, 158, 1128, 1889, 0, 0, -1 },
-  { 0x1, 0x1, 158, 1129, -1, 29, 1, 49 },
-  { 0x0, 0x0, 159, -1, 1855, 0, 0, -1 },
-  { 0x1, 0x9, 159, -1, 2385, 33, 1, 54 },
-  { 0x6, 0x7, 159, -1, 1896, 27, 1, 49 },
-  { 0x0, 0x0, 160, 1115, 1853, 0, 0, -1 },
-  { 0x0, 0x0, 160, 1116, 2384, 0, 1, 54 },
-  { 0x1, 0x1, 160, 1117, 1895, 29, 1, 49 },
-  { 0x1, 0x1, 161, 1131, -1, 27, 1, 33 },
-  { 0x0, 0x0, 162, 1738, 1849, 0, 0, -1 },
-  { 0x1, 0x1, 162, 1739, 2380, 33, 1, 54 },
-  { 0x0, 0x0, 162, 1740, 1891, 0, 0, -1 },
-  { 0x3, 0x3, 162, 1741, -1, 28, 1, 49 },
-  { 0x0, 0x0, 163, 1122, 1847, 0, 0, -1 },
-  { 0x1, 0x1, 163, 1123, 2379, 36, 1, 54 },
-  { 0x0, 0x0, 163, 1124, 1890, 0, 0, -1 },
-  { 0x5, 0x5, 163, 1125, -1, 27, 1, 49 },
-  { 0x0, 0x0, 164, -1, 2361, 0, 1, 63 },
+  { 0x1, 0x1, 147, -1, 448, 12, 1, 6 },
+  { 0x1, 0x1, 147, -1, 451, 12, 1, 6 },
+  { 0x200001, 0x200001, 147, -1, 453, 12, 1, 6 },
+  { 0x400001, 0x400001, 147, -1, 455, 12, 1, 6 },
+  { 0x600001, 0x600001, 147, -1, 457, 12, 1, 6 },
+  { 0x1, 0x1, 147, -1, 459, 12, 1, 6 },
+  { 0x200001, 0x200001, 147, -1, 461, 12, 1, 6 },
+  { 0x400001, 0x400001, 147, -1, 463, 12, 1, 6 },
+  { 0x600001, 0x600001, 147, -1, 465, 12, 1, 6 },
+  { 0x41, 0x41, 147, -1, 467, 6, 1, 7 },
+  { 0x8000041, 0x8000041, 147, -1, 469, 6, 1, 7 },
+  { 0x10000041, 0x10000041, 147, -1, 471, 6, 1, 7 },
+  { 0x18000041, 0x18000041, 147, -1, 473, 6, 1, 7 },
+  { 0x1, 0x1, 147, -1, 487, 12, 1, 8 },
+  { 0x200001, 0x200001, 147, -1, 489, 12, 1, 8 },
+  { 0x400001, 0x400001, 147, -1, 491, 12, 1, 8 },
+  { 0x600001, 0x600001, 147, -1, 493, 12, 1, 8 },
+  { 0x1, 0x1, 147, -1, 499, 12, 1, 15 },
+  { 0x200001, 0x200001, 147, -1, 501, 12, 1, 15 },
+  { 0x400001, 0x400001, 147, -1, 503, 12, 1, 15 },
+  { 0x600001, 0x600001, 147, -1, 505, 12, 1, 15 },
+  { 0x1, 0x1, 147, -1, 511, 12, 1, 17 },
+  { 0x1, 0x1, 147, -1, 514, 12, 1, 17 },
+  { 0x200001, 0x200001, 147, -1, 516, 12, 1, 17 },
+  { 0x400001, 0x400001, 147, -1, 518, 12, 1, 17 },
+  { 0x600001, 0x600001, 147, -1, 520, 12, 1, 17 },
+  { 0x1, 0x1, 147, -1, 522, 12, 1, 17 },
+  { 0x200001, 0x200001, 147, -1, 524, 12, 1, 17 },
+  { 0x400001, 0x400001, 147, -1, 526, 12, 1, 17 },
+  { 0x600001, 0x600001, 147, -1, 528, 12, 1, 17 },
+  { 0x1, 0x1, 147, -1, 538, 12, 1, 18 },
+  { 0x200001, 0x200001, 147, -1, 540, 12, 1, 18 },
+  { 0x400001, 0x400001, 147, -1, 542, 12, 1, 18 },
+  { 0x600001, 0x600001, 147, -1, 544, 12, 1, 18 },
+  { 0x41, 0x41, 147, -1, 546, 6, 1, 18 },
+  { 0x8000041, 0x8000041, 147, -1, 548, 6, 1, 18 },
+  { 0x10000041, 0x10000041, 147, -1, 550, 6, 1, 18 },
+  { 0x18000041, 0x18000041, 147, -1, 552, 6, 1, 18 },
+  { 0x1, 0x1, 147, -1, 562, 12, 1, 19 },
+  { 0x200001, 0x200001, 147, -1, 564, 12, 1, 19 },
+  { 0x400001, 0x400001, 147, -1, 566, 12, 1, 19 },
+  { 0x600001, 0x600001, 147, -1, 568, 12, 1, 19 },
+  { 0x1, 0x1, 147, -1, 574, 12, 1, 20 },
+  { 0x200001, 0x200001, 147, -1, 576, 12, 1, 20 },
+  { 0x400001, 0x400001, 147, -1, 578, 12, 1, 20 },
+  { 0x600001, 0x600001, 147, -1, 580, 12, 1, 20 },
+  { 0x41, 0x41, 147, -1, 582, 6, 1, 20 },
+  { 0x8000041, 0x8000041, 147, -1, 584, 6, 1, 20 },
+  { 0x10000041, 0x10000041, 147, -1, 586, 6, 1, 20 },
+  { 0x18000041, 0x18000041, 147, -1, 588, 6, 1, 20 },
+  { 0x1, 0x1, 147, -1, 598, 12, 1, 21 },
+  { 0x200001, 0x200001, 147, -1, 600, 12, 1, 21 },
+  { 0x400001, 0x400001, 147, -1, 602, 12, 1, 21 },
+  { 0x600001, 0x600001, 147, -1, 604, 12, 1, 21 },
+  { 0x1, 0x1, 147, -1, 610, 12, 1, 17 },
+  { 0x1, 0x1, 147, -1, 613, 12, 1, 17 },
+  { 0x200001, 0x200001, 147, -1, 615, 12, 1, 17 },
+  { 0x400001, 0x400001, 147, -1, 617, 12, 1, 17 },
+  { 0x600001, 0x600001, 147, -1, 619, 12, 1, 17 },
+  { 0x1, 0x1, 147, -1, 621, 12, 1, 17 },
+  { 0x200001, 0x200001, 147, -1, 623, 12, 1, 17 },
+  { 0x400001, 0x400001, 147, -1, 625, 12, 1, 17 },
+  { 0x600001, 0x600001, 147, -1, 627, 12, 1, 17 },
+  { 0x1, 0x1, 147, -1, 637, 12, 1, 21 },
+  { 0x200001, 0x200001, 147, -1, 639, 12, 1, 21 },
+  { 0x400001, 0x400001, 147, -1, 641, 12, 1, 21 },
+  { 0x600001, 0x600001, 147, -1, 643, 12, 1, 21 },
+  { 0x0, 0x0, 156, 648, -1, 0, 1, 75 },
+  { 0x0, 0x0, 156, 649, -1, 0, 1, 75 },
+  { 0x9, 0x9, 156, -1, 1202, 32, 1, 129 },
+  { 0x9, 0x9, 156, -1, 1211, 32, 1, 129 },
+  { 0x9, 0x9, 156, -1, 1220, 32, 1, 129 },
+  { 0x9, 0x9, 156, -1, 1229, 32, 1, 129 },
+  { 0x9, 0x9, 156, -1, 1238, 32, 1, 129 },
+  { 0x9, 0x9, 156, -1, 1247, 32, 1, 129 },
+  { 0x9, 0x9, 156, -1, 1256, 32, 1, 129 },
+  { 0x9, 0x9, 156, -1, 1265, 32, 1, 129 },
+  { 0x9, 0x9, 156, -1, 1274, 32, 1, 129 },
+  { 0x9, 0x9, 156, -1, 1284, 32, 1, 129 },
+  { 0x9, 0x9, 156, -1, 1294, 32, 1, 129 },
+  { 0x9, 0x9, 156, -1, 1304, 32, 1, 129 },
+  { 0x9, 0x9, 156, -1, 1313, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1319, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1325, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1331, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1337, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1343, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1349, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1355, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1361, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1367, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1373, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1379, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1385, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1391, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1397, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1403, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1409, 32, 1, 139 },
+  { 0x9, 0x9, 156, -1, 1415, 32, 1, 139 },
+  { 0x0, 0x0, 157, 1032, 282, 0, 0, -1 },
+  { 0x1, 0x1, 157, -1, 2402, 38, 1, 1 },
+  { 0x0, 0x0, 157, 779, 339, 0, 0, -1 },
+  { 0x0, 0x0, 157, 1033, 292, 0, 0, -1 },
+  { 0x1, 0x1, 157, -1, 2410, 38, 1, 1 },
+  { 0x0, 0x0, 157, 781, 359, 0, 0, -1 },
+  { 0x0, 0x0, 157, 782, 293, 0, 0, -1 },
+  { 0x0, 0x0, 157, 783, 303, 0, 0, -1 },
+  { 0x0, 0x0, 157, 1034, 306, 0, 0, -1 },
+  { 0x1, 0x1, 157, -1, 2422, 38, 1, 1 },
+  { 0x0, 0x0, 157, 785, 363, 0, 0, -1 },
+  { 0x0, 0x0, 157, -1, 316, 0, 0, -1 },
+  { 0x1, 0x1, 157, -1, 2428, 38, 1, 1 },
+  { 0x0, 0x0, 157, 787, 383, 0, 0, -1 },
+  { 0x0, 0x0, 157, 788, 317, 0, 0, -1 },
+  { 0x0, 0x0, 157, 789, 327, 0, 0, -1 },
+  { 0x0, 0x0, 158, 1175, 1918, 0, 0, -1 },
+  { 0x0, 0x0, 158, 1176, 2451, 0, 1, 54 },
+  { 0x0, 0x0, 158, 1177, 1962, 0, 0, -1 },
+  { 0x1, 0x1, 158, 1178, -1, 29, 1, 49 },
+  { 0x0, 0x0, 159, -1, 1928, 0, 0, -1 },
+  { 0x1, 0x9, 159, -1, 2458, 33, 1, 54 },
+  { 0x6, 0x7, 159, -1, 1969, 27, 1, 49 },
+  { 0x0, 0x0, 160, 1164, 1926, 0, 0, -1 },
+  { 0x0, 0x0, 160, 1165, 2457, 0, 1, 54 },
+  { 0x1, 0x1, 160, 1166, 1968, 29, 1, 49 },
+  { 0x1, 0x1, 161, 1180, -1, 27, 1, 33 },
+  { 0x0, 0x0, 162, 1811, 1922, 0, 0, -1 },
+  { 0x1, 0x1, 162, 1812, 2453, 33, 1, 54 },
+  { 0x0, 0x0, 162, 1813, 1964, 0, 0, -1 },
+  { 0x3, 0x3, 162, 1814, -1, 28, 1, 49 },
+  { 0x0, 0x0, 163, 1171, 1920, 0, 0, -1 },
+  { 0x1, 0x1, 163, 1172, 2452, 36, 1, 54 },
+  { 0x0, 0x0, 163, 1173, 1963, 0, 0, -1 },
+  { 0x5, 0x5, 163, 1174, -1, 27, 1, 49 },
+  { 0x0, 0x0, 164, -1, 2434, 0, 1, 63 },
   { 0x1, 0x1, 166, -1, -1, 28, 1, 33 },
-  { 0x1, 0x1, 167, 2219, -1, 27, 1, 33 },
-  { 0x1, 0x1, 167, 2220, -1, 27, 1, 33 },
-  { 0x1, 0x1, 168, 1396, -1, 28, 1, 132 },
-  { 0x1, 0x1, 168, 1397, -1, 28, 1, 132 },
-  { 0x1, 0x1, 168, 1398, -1, 28, 1, 132 },
-  { 0x1, 0x1, 168, 1399, -1, 28, 1, 132 },
-  { 0x1, 0x1, 168, 1400, -1, 28, 1, 132 },
-  { 0x1, 0x1, 168, 1401, -1, 28, 1, 132 },
-  { 0x1, 0x1, 168, 1402, -1, 28, 1, 132 },
-  { 0x1, 0x1, 168, 1403, -1, 28, 1, 132 },
-  { 0x1, 0x1, 168, 1404, -1, 28, 1, 133 },
-  { 0x1, 0x1, 168, 1405, -1, 28, 1, 133 },
-  { 0x1, 0x1, 168, 1406, -1, 28, 1, 133 },
-  { 0x1, 0x1, 168, 1407, -1, 28, 1, 133 },
-  { 0x1, 0x1, 168, 1408, -1, 28, 1, 125 },
-  { 0x1, 0x1, 168, 1409, -1, 28, 1, 126 },
-  { 0x1, 0x1, 168, 1410, -1, 28, 1, 127 },
-  { 0x1, 0x1, 168, 1411, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1412, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1413, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1414, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1415, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1416, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1417, -1, 28, 1, 125 },
-  { 0x1, 0x1, 168, 1418, -1, 28, 1, 126 },
-  { 0x1, 0x1, 168, 1419, -1, 28, 1, 127 },
-  { 0x1, 0x1, 168, 1420, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1421, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1422, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1423, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1424, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1425, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1426, -1, 28, 1, 125 },
-  { 0x1, 0x1, 168, 1427, -1, 28, 1, 126 },
-  { 0x1, 0x1, 168, 1428, -1, 28, 1, 127 },
-  { 0x1, 0x1, 168, 1429, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1430, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1431, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1432, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1433, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1434, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1435, -1, 28, 1, 125 },
-  { 0x1, 0x1, 168, 1436, -1, 28, 1, 126 },
-  { 0x1, 0x1, 168, 1437, -1, 28, 1, 127 },
-  { 0x1, 0x1, 168, 1438, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1439, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1440, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1441, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1442, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1443, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1444, -1, 28, 1, 125 },
-  { 0x1, 0x1, 168, 1445, -1, 28, 1, 126 },
-  { 0x1, 0x1, 168, 1446, -1, 28, 1, 127 },
-  { 0x1, 0x1, 168, 1447, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1448, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1449, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1450, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1451, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1452, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1453, -1, 28, 1, 125 },
-  { 0x1, 0x1, 168, 1454, -1, 28, 1, 126 },
-  { 0x1, 0x1, 168, 1455, -1, 28, 1, 127 },
-  { 0x1, 0x1, 168, 1456, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1457, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1458, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1459, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1460, -1, 28, 1, 129 },
+  { 0x1, 0x1, 167, 2292, -1, 27, 1, 33 },
+  { 0x1, 0x1, 167, 2293, -1, 27, 1, 33 },
+  { 0x1, 0x1, 168, 1445, -1, 28, 1, 132 },
+  { 0x1, 0x1, 168, 1446, -1, 28, 1, 132 },
+  { 0x1, 0x1, 168, 1447, -1, 28, 1, 132 },
+  { 0x1, 0x1, 168, 1448, -1, 28, 1, 132 },
+  { 0x1, 0x1, 168, 1449, -1, 28, 1, 132 },
+  { 0x1, 0x1, 168, 1450, -1, 28, 1, 132 },
+  { 0x1, 0x1, 168, 1451, -1, 28, 1, 132 },
+  { 0x1, 0x1, 168, 1452, -1, 28, 1, 132 },
+  { 0x1, 0x1, 168, 1453, -1, 28, 1, 133 },
+  { 0x1, 0x1, 168, 1454, -1, 28, 1, 133 },
+  { 0x1, 0x1, 168, 1455, -1, 28, 1, 133 },
+  { 0x1, 0x1, 168, 1456, -1, 28, 1, 133 },
+  { 0x1, 0x1, 168, 1457, -1, 28, 1, 125 },
+  { 0x1, 0x1, 168, 1458, -1, 28, 1, 126 },
+  { 0x1, 0x1, 168, 1459, -1, 28, 1, 127 },
+  { 0x1, 0x1, 168, 1460, -1, 28, 1, 124 },
   { 0x1, 0x1, 168, 1461, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1462, -1, 28, 1, 125 },
-  { 0x1, 0x1, 168, 1463, -1, 28, 1, 126 },
-  { 0x1, 0x1, 168, 1464, -1, 28, 1, 127 },
+  { 0x1, 0x1, 168, 1462, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1463, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1464, -1, 28, 1, 129 },
   { 0x1, 0x1, 168, 1465, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1466, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1467, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1468, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1469, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1466, -1, 28, 1, 125 },
+  { 0x1, 0x1, 168, 1467, -1, 28, 1, 126 },
+  { 0x1, 0x1, 168, 1468, -1, 28, 1, 127 },
+  { 0x1, 0x1, 168, 1469, -1, 28, 1, 124 },
   { 0x1, 0x1, 168, 1470, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1471, -1, 28, 1, 125 },
-  { 0x1, 0x1, 168, 1472, -1, 28, 1, 126 },
-  { 0x1, 0x1, 168, 1473, -1, 28, 1, 127 },
+  { 0x1, 0x1, 168, 1471, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1472, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1473, -1, 28, 1, 129 },
   { 0x1, 0x1, 168, 1474, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1475, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1476, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1477, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1478, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1475, -1, 28, 1, 125 },
+  { 0x1, 0x1, 168, 1476, -1, 28, 1, 126 },
+  { 0x1, 0x1, 168, 1477, -1, 28, 1, 127 },
+  { 0x1, 0x1, 168, 1478, -1, 28, 1, 124 },
   { 0x1, 0x1, 168, 1479, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1480, -1, 28, 1, 125 },
-  { 0x1, 0x1, 168, 1481, -1, 28, 1, 126 },
-  { 0x1, 0x1, 168, 1482, -1, 28, 1, 127 },
+  { 0x1, 0x1, 168, 1480, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1481, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1482, -1, 28, 1, 129 },
   { 0x1, 0x1, 168, 1483, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1484, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1485, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1486, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1487, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1484, -1, 28, 1, 125 },
+  { 0x1, 0x1, 168, 1485, -1, 28, 1, 126 },
+  { 0x1, 0x1, 168, 1486, -1, 28, 1, 127 },
+  { 0x1, 0x1, 168, 1487, -1, 28, 1, 124 },
   { 0x1, 0x1, 168, 1488, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1489, -1, 28, 1, 125 },
-  { 0x1, 0x1, 168, 1490, -1, 28, 1, 126 },
-  { 0x1, 0x1, 168, 1491, -1, 28, 1, 127 },
+  { 0x1, 0x1, 168, 1489, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1490, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1491, -1, 28, 1, 129 },
   { 0x1, 0x1, 168, 1492, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1493, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1494, -1, 28, 1, 128 },
-  { 0x1, 0x1, 168, 1495, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1496, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1497, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1498, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1499, -1, 28, 1, 125 },
-  { 0x1, 0x1, 168, 1500, -1, 28, 1, 126 },
-  { 0x1, 0x1, 168, 1501, -1, 28, 1, 127 },
-  { 0x1, 0x1, 168, 1502, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1503, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1504, -1, 28, 1, 128 },
-  { 0x1, 0x1, 168, 1505, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1506, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1493, -1, 28, 1, 125 },
+  { 0x1, 0x1, 168, 1494, -1, 28, 1, 126 },
+  { 0x1, 0x1, 168, 1495, -1, 28, 1, 127 },
+  { 0x1, 0x1, 168, 1496, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1497, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1498, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1499, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1500, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1501, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1502, -1, 28, 1, 125 },
+  { 0x1, 0x1, 168, 1503, -1, 28, 1, 126 },
+  { 0x1, 0x1, 168, 1504, -1, 28, 1, 127 },
+  { 0x1, 0x1, 168, 1505, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1506, -1, 28, 1, 124 },
   { 0x1, 0x1, 168, 1507, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1508, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1509, -1, 28, 1, 125 },
-  { 0x1, 0x1, 168, 1510, -1, 28, 1, 126 },
-  { 0x1, 0x1, 168, 1511, -1, 28, 1, 127 },
-  { 0x1, 0x1, 168, 1512, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1513, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1514, -1, 28, 1, 128 },
-  { 0x1, 0x1, 168, 1515, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1508, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1509, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1510, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1511, -1, 28, 1, 125 },
+  { 0x1, 0x1, 168, 1512, -1, 28, 1, 126 },
+  { 0x1, 0x1, 168, 1513, -1, 28, 1, 127 },
+  { 0x1, 0x1, 168, 1514, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1515, -1, 28, 1, 124 },
   { 0x1, 0x1, 168, 1516, -1, 28, 1, 129 },
   { 0x1, 0x1, 168, 1517, -1, 28, 1, 129 },
-  { 0x1, 0x1, 168, 1518, -1, 28, 1, 124 },
-  { 0x1, 0x1, 168, 1519, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1520, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1521, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1522, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1523, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1524, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1525, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1526, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1527, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1528, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1529, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1530, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1531, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1532, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1533, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1534, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1535, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1536, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1537, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1538, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1539, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1540, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1541, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1542, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1543, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1544, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1545, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1546, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1547, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1548, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1549, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1550, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1551, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1552, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1553, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1554, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1555, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1556, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1557, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1558, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1559, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1560, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1561, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1562, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1563, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1564, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1565, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1566, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1567, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1568, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1518, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1519, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1520, -1, 28, 1, 125 },
+  { 0x1, 0x1, 168, 1521, -1, 28, 1, 126 },
+  { 0x1, 0x1, 168, 1522, -1, 28, 1, 127 },
+  { 0x1, 0x1, 168, 1523, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1524, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1525, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1526, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1527, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1528, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1529, -1, 28, 1, 125 },
+  { 0x1, 0x1, 168, 1530, -1, 28, 1, 126 },
+  { 0x1, 0x1, 168, 1531, -1, 28, 1, 127 },
+  { 0x1, 0x1, 168, 1532, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1533, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1534, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1535, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1536, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1537, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1538, -1, 28, 1, 125 },
+  { 0x1, 0x1, 168, 1539, -1, 28, 1, 126 },
+  { 0x1, 0x1, 168, 1540, -1, 28, 1, 127 },
+  { 0x1, 0x1, 168, 1541, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1542, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1543, -1, 28, 1, 128 },
+  { 0x1, 0x1, 168, 1544, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1545, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1546, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1547, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1548, -1, 28, 1, 125 },
+  { 0x1, 0x1, 168, 1549, -1, 28, 1, 126 },
+  { 0x1, 0x1, 168, 1550, -1, 28, 1, 127 },
+  { 0x1, 0x1, 168, 1551, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1552, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1553, -1, 28, 1, 128 },
+  { 0x1, 0x1, 168, 1554, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1555, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1556, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1557, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1558, -1, 28, 1, 125 },
+  { 0x1, 0x1, 168, 1559, -1, 28, 1, 126 },
+  { 0x1, 0x1, 168, 1560, -1, 28, 1, 127 },
+  { 0x1, 0x1, 168, 1561, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1562, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1563, -1, 28, 1, 128 },
+  { 0x1, 0x1, 168, 1564, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1565, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1566, -1, 28, 1, 129 },
+  { 0x1, 0x1, 168, 1567, -1, 28, 1, 124 },
+  { 0x1, 0x1, 168, 1568, -1, 28, 1, 135 },
   { 0x1, 0x1, 168, 1569, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1570, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1571, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1572, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1573, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1570, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1571, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1572, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1573, -1, 28, 1, 138 },
   { 0x1, 0x1, 168, 1574, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1575, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1576, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1577, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1578, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1579, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1575, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1576, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1577, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1578, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1579, -1, 28, 1, 138 },
   { 0x1, 0x1, 168, 1580, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1581, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1582, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1583, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1584, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1585, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1581, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1582, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1583, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1584, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1585, -1, 28, 1, 138 },
   { 0x1, 0x1, 168, 1586, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1587, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1588, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1589, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1590, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1591, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1587, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1588, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1589, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1590, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1591, -1, 28, 1, 138 },
   { 0x1, 0x1, 168, 1592, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1593, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1594, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1595, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1596, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1597, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1593, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1594, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1595, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1596, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1597, -1, 28, 1, 138 },
   { 0x1, 0x1, 168, 1598, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1599, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1600, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1601, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1602, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1603, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1599, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1600, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1601, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1602, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1603, -1, 28, 1, 138 },
   { 0x1, 0x1, 168, 1604, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1605, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1606, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1607, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1608, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1609, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1605, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1606, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1607, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1608, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1609, -1, 28, 1, 138 },
   { 0x1, 0x1, 168, 1610, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1611, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1612, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1613, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1614, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1615, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1611, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1612, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1613, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1614, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1615, -1, 28, 1, 138 },
   { 0x1, 0x1, 168, 1616, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1617, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1618, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1619, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1620, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1621, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1617, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1618, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1619, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1620, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1621, -1, 28, 1, 138 },
   { 0x1, 0x1, 168, 1622, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1623, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1624, -1, 28, 1, 136 },
-  { 0x1, 0x1, 168, 1625, -1, 28, 1, 137 },
-  { 0x1, 0x1, 168, 1626, -1, 28, 1, 138 },
-  { 0x1, 0x1, 168, 1627, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1623, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1624, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1625, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1626, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1627, -1, 28, 1, 138 },
   { 0x1, 0x1, 168, 1628, -1, 28, 1, 139 },
-  { 0x1, 0x1, 168, 1629, -1, 28, 1, 135 },
-  { 0x1, 0x1, 168, 1384, -1, 28, 1, 140 },
-  { 0x1, 0x1, 168, 1385, -1, 28, 1, 141 },
-  { 0x1, 0x1, 168, 1386, -1, 28, 1, 141 },
-  { 0x1, 0x1, 168, 1387, -1, 28, 1, 140 },
-  { 0x1, 0x1, 168, 1388, -1, 28, 1, 142 },
-  { 0x1, 0x1, 168, 1389, -1, 28, 1, 143 },
-  { 0x1, 0x1, 168, 1390, -1, 28, 1, 143 },
-  { 0x1, 0x1, 168, 1391, -1, 28, 1, 142 },
-  { 0x1, 0x1, 168, 1392, -1, 28, 1, 142 },
-  { 0x1, 0x1, 168, 1393, -1, 28, 1, 143 },
-  { 0x1, 0x1, 168, 1394, -1, 28, 1, 143 },
-  { 0x1, 0x1, 168, 1395, -1, 28, 1, 142 },
-  { 0x1, 0x1, 168, 1670, -1, 28, 1, 133 },
-  { 0x1, 0x1, 168, 1671, -1, 28, 1, 133 },
-  { 0x1, 0x1, 168, 1672, -1, 28, 1, 133 },
-  { 0x1, 0x1, 168, 1673, -1, 28, 1, 133 },
-  { 0x1, 0x1, 169, 1630, -1, 29, 1, 140 },
-  { 0x1, 0x1, 169, 1631, -1, 29, 1, 141 },
-  { 0x1, 0x1, 169, 1632, -1, 29, 1, 141 },
-  { 0x1, 0x1, 169, 1633, -1, 29, 1, 140 },
-  { 0x1, 0x1, 169, 1634, -1, 29, 1, 142 },
-  { 0x1, 0x1, 169, 1635, -1, 29, 1, 143 },
-  { 0x1, 0x1, 169, 1636, -1, 29, 1, 143 },
-  { 0x1, 0x1, 169, 1637, -1, 29, 1, 142 },
-  { 0x1, 0x1, 169, 1638, -1, 29, 1, 142 },
-  { 0x1, 0x1, 169, 1639, -1, 29, 1, 143 },
-  { 0x1, 0x1, 169, 1640, -1, 29, 1, 143 },
-  { 0x1, 0x1, 169, 1641, -1, 29, 1, 142 },
+  { 0x1, 0x1, 168, 1629, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1630, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1631, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1632, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1633, -1, 28, 1, 138 },
+  { 0x1, 0x1, 168, 1634, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1635, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1636, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1637, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1638, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1639, -1, 28, 1, 138 },
+  { 0x1, 0x1, 168, 1640, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1641, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1642, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1643, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1644, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1645, -1, 28, 1, 138 },
+  { 0x1, 0x1, 168, 1646, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1647, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1648, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1649, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1650, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1651, -1, 28, 1, 138 },
+  { 0x1, 0x1, 168, 1652, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1653, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1654, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1655, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1656, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1657, -1, 28, 1, 138 },
+  { 0x1, 0x1, 168, 1658, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1659, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1660, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1661, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1662, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1663, -1, 28, 1, 138 },
+  { 0x1, 0x1, 168, 1664, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1665, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1666, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1667, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1668, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1669, -1, 28, 1, 138 },
+  { 0x1, 0x1, 168, 1670, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1671, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1672, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1673, -1, 28, 1, 136 },
+  { 0x1, 0x1, 168, 1674, -1, 28, 1, 137 },
+  { 0x1, 0x1, 168, 1675, -1, 28, 1, 138 },
+  { 0x1, 0x1, 168, 1676, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1677, -1, 28, 1, 139 },
+  { 0x1, 0x1, 168, 1678, -1, 28, 1, 135 },
+  { 0x1, 0x1, 168, 1433, -1, 28, 1, 140 },
+  { 0x1, 0x1, 168, 1434, -1, 28, 1, 141 },
+  { 0x1, 0x1, 168, 1435, -1, 28, 1, 141 },
+  { 0x1, 0x1, 168, 1436, -1, 28, 1, 140 },
+  { 0x1, 0x1, 168, 1437, -1, 28, 1, 142 },
+  { 0x1, 0x1, 168, 1438, -1, 28, 1, 143 },
+  { 0x1, 0x1, 168, 1439, -1, 28, 1, 143 },
+  { 0x1, 0x1, 168, 1440, -1, 28, 1, 142 },
+  { 0x1, 0x1, 168, 1441, -1, 28, 1, 142 },
+  { 0x1, 0x1, 168, 1442, -1, 28, 1, 143 },
+  { 0x1, 0x1, 168, 1443, -1, 28, 1, 143 },
+  { 0x1, 0x1, 168, 1444, -1, 28, 1, 142 },
+  { 0x1, 0x1, 168, 1719, -1, 28, 1, 133 },
+  { 0x1, 0x1, 168, 1720, -1, 28, 1, 133 },
+  { 0x1, 0x1, 168, 1721, -1, 28, 1, 133 },
+  { 0x1, 0x1, 168, 1722, -1, 28, 1, 133 },
+  { 0x1, 0x1, 169, 1679, -1, 29, 1, 140 },
+  { 0x1, 0x1, 169, 1680, -1, 29, 1, 141 },
+  { 0x1, 0x1, 169, 1681, -1, 29, 1, 141 },
+  { 0x1, 0x1, 169, 1682, -1, 29, 1, 140 },
+  { 0x1, 0x1, 169, 1683, -1, 29, 1, 142 },
+  { 0x1, 0x1, 169, 1684, -1, 29, 1, 143 },
+  { 0x1, 0x1, 169, 1685, -1, 29, 1, 143 },
+  { 0x1, 0x1, 169, 1686, -1, 29, 1, 142 },
+  { 0x1, 0x1, 169, 1687, -1, 29, 1, 142 },
+  { 0x1, 0x1, 169, 1688, -1, 29, 1, 143 },
+  { 0x1, 0x1, 169, 1689, -1, 29, 1, 143 },
+  { 0x1, 0x1, 169, 1690, -1, 29, 1, 142 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 132 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 132 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 132 },
@@ -3084,81 +3133,81 @@
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 256, -1, 28, 1, 129 },
+  { 0x3, 0x3, 170, 257, -1, 28, 1, 129 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 1794, -1, 28, 1, 124 },
+  { 0x3, 0x3, 170, 1867, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 125 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 126 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 127 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 258, -1, 28, 1, 129 },
+  { 0x3, 0x3, 170, 259, -1, 28, 1, 129 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 1795, -1, 28, 1, 124 },
+  { 0x3, 0x3, 170, 1868, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 125 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 126 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 127 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 260, -1, 28, 1, 129 },
+  { 0x3, 0x3, 170, 261, -1, 28, 1, 129 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 1796, -1, 28, 1, 124 },
+  { 0x3, 0x3, 170, 1869, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 125 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 126 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 127 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 262, -1, 28, 1, 129 },
+  { 0x3, 0x3, 170, 263, -1, 28, 1, 129 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 1797, -1, 28, 1, 124 },
+  { 0x3, 0x3, 170, 1870, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 125 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 126 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 127 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 264, -1, 28, 1, 129 },
+  { 0x3, 0x3, 170, 265, -1, 28, 1, 129 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 1798, -1, 28, 1, 124 },
+  { 0x3, 0x3, 170, 1871, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 125 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 126 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 127 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 266, -1, 28, 1, 129 },
+  { 0x3, 0x3, 170, 267, -1, 28, 1, 129 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 1799, -1, 28, 1, 124 },
+  { 0x3, 0x3, 170, 1872, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 125 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 126 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 127 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 268, -1, 28, 1, 129 },
+  { 0x3, 0x3, 170, 269, -1, 28, 1, 129 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 1800, -1, 28, 1, 124 },
+  { 0x3, 0x3, 170, 1873, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 125 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 126 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 127 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 270, -1, 28, 1, 129 },
+  { 0x3, 0x3, 170, 271, -1, 28, 1, 129 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 1801, -1, 28, 1, 124 },
+  { 0x3, 0x3, 170, 1874, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 125 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 126 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 127 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 272, -1, 28, 1, 129 },
+  { 0x3, 0x3, 170, 273, -1, 28, 1, 129 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 1802, -1, 28, 1, 124 },
+  { 0x3, 0x3, 170, 1875, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 125 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 126 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 127 },
@@ -3166,9 +3215,9 @@
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 128 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 274, -1, 28, 1, 129 },
+  { 0x3, 0x3, 170, 275, -1, 28, 1, 129 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 1803, -1, 28, 1, 124 },
+  { 0x3, 0x3, 170, 1876, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 125 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 126 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 127 },
@@ -3176,9 +3225,9 @@
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 128 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 276, -1, 28, 1, 129 },
+  { 0x3, 0x3, 170, 277, -1, 28, 1, 129 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 1804, -1, 28, 1, 124 },
+  { 0x3, 0x3, 170, 1877, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 125 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 126 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 127 },
@@ -3186,9 +3235,9 @@
   { 0x3, 0x3, 170, -1, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 128 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 278, -1, 28, 1, 129 },
+  { 0x3, 0x3, 170, 279, -1, 28, 1, 129 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 129 },
-  { 0x3, 0x3, 170, 1805, -1, 28, 1, 124 },
+  { 0x3, 0x3, 170, 1878, -1, 28, 1, 124 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 135 },
@@ -3197,139 +3246,139 @@
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1806, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1879, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1807, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1880, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1808, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1881, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1809, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1882, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1810, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1883, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1811, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1884, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1812, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1885, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1813, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1886, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1814, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1887, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1815, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1888, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1816, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1889, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1817, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1890, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1818, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1891, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1819, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1892, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1820, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1893, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1821, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1894, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1822, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1895, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 136 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 137 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 138 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 139 },
-  { 0x3, 0x3, 170, 1823, -1, 28, 1, 135 },
+  { 0x3, 0x3, 170, 1896, -1, 28, 1, 135 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 140 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 141 },
-  { 0x3, 0x3, 170, 764, -1, 28, 1, 141 },
-  { 0x3, 0x3, 170, 765, -1, 28, 1, 140 },
+  { 0x3, 0x3, 170, 797, -1, 28, 1, 141 },
+  { 0x3, 0x3, 170, 798, -1, 28, 1, 140 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 142 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 143 },
-  { 0x3, 0x3, 170, 766, -1, 28, 1, 143 },
-  { 0x3, 0x3, 170, 767, -1, 28, 1, 142 },
+  { 0x3, 0x3, 170, 799, -1, 28, 1, 143 },
+  { 0x3, 0x3, 170, 800, -1, 28, 1, 142 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 142 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 143 },
-  { 0x3, 0x3, 170, 768, -1, 28, 1, 143 },
-  { 0x3, 0x3, 170, 769, -1, 28, 1, 142 },
+  { 0x3, 0x3, 170, 801, -1, 28, 1, 143 },
+  { 0x3, 0x3, 170, 802, -1, 28, 1, 142 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 130 },
-  { 0x3, 0x3, 170, 1762, -1, 28, 1, 130 },
+  { 0x3, 0x3, 170, 1835, -1, 28, 1, 130 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 130 },
-  { 0x3, 0x3, 170, 1763, -1, 28, 1, 130 },
+  { 0x3, 0x3, 170, 1836, -1, 28, 1, 130 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 130 },
-  { 0x3, 0x3, 170, 1764, -1, 28, 1, 130 },
+  { 0x3, 0x3, 170, 1837, -1, 28, 1, 130 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 130 },
-  { 0x3, 0x3, 170, 1765, -1, 28, 1, 130 },
+  { 0x3, 0x3, 170, 1838, -1, 28, 1, 130 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 130 },
-  { 0x3, 0x3, 170, 1766, -1, 28, 1, 130 },
+  { 0x3, 0x3, 170, 1839, -1, 28, 1, 130 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 130 },
-  { 0x3, 0x3, 170, 1767, -1, 28, 1, 130 },
+  { 0x3, 0x3, 170, 1840, -1, 28, 1, 130 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 130 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 131 },
-  { 0x3, 0x3, 170, 1768, -1, 28, 1, 130 },
+  { 0x3, 0x3, 170, 1841, -1, 28, 1, 130 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 130 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 131 },
-  { 0x3, 0x3, 170, 1769, -1, 28, 1, 130 },
+  { 0x3, 0x3, 170, 1842, -1, 28, 1, 130 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 130 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 130 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 130 },
@@ -3344,32 +3393,44 @@
   { 0x3, 0x3, 170, -1, -1, 28, 1, 133 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 133 },
   { 0x3, 0x3, 170, -1, -1, 28, 1, 133 },
-  { 0x0, 0x0, 171, -1, 313, 0, 0, -1 },
-  { 0x0, 0x0, 171, 2417, 2387, 0, 1, 1 },
-  { 0x0, 0x0, 171, -1, 317, 0, 0, -1 },
-  { 0x0, 0x0, 171, 2419, 2389, 0, 1, 1 },
-  { 0x11, 0x31, 172, 2321, 320, 33, 1, 4 },
-  { 0x2200001, 0x2200001, 172, -1, 321, 12, 1, 4 },
-  { 0x1, 0x1, 172, -1, 324, 37, 1, 4 },
-  { 0x2000001, 0x2000001, 172, -1, 325, 12, 1, 4 },
-  { 0x11, 0x11, 172, -1, 326, 33, 1, 4 },
-  { 0x2200001, 0x2200001, 172, -1, 327, 12, 1, 4 },
-  { 0x11, 0x31, 172, 2331, 332, 33, 1, 4 },
-  { 0x2200001, 0x2200001, 172, -1, 333, 12, 1, 4 },
-  { 0x11, 0x31, 172, 2341, 336, 33, 1, 4 },
-  { 0x2200001, 0x2200001, 172, -1, 337, 12, 1, 4 },
-  { 0x1, 0x1, 172, -1, 340, 37, 1, 4 },
-  { 0x2000001, 0x2000001, 172, -1, 341, 12, 1, 4 },
-  { 0x11, 0x11, 172, -1, 342, 33, 1, 4 },
-  { 0x2200001, 0x2200001, 172, -1, 343, 12, 1, 4 },
-  { 0x11, 0x31, 172, 2351, 348, 33, 1, 4 },
-  { 0x2200001, 0x2200001, 172, -1, 349, 12, 1, 4 },
-  { 0x1, 0x1, 172, -1, 352, 33, 1, 4 },
-  { 0x200001, 0x200001, 172, -1, 353, 12, 1, 4 },
-  { 0x1, 0x1, 172, -1, 356, 33, 1, 4 },
-  { 0x200001, 0x200001, 172, -1, 357, 12, 1, 4 },
+  { 0x0, 0x0, 171, -1, 330, 0, 0, -1 },
+  { 0x0, 0x0, 171, 2490, 2460, 0, 1, 1 },
+  { 0x0, 0x0, 171, -1, 334, 0, 0, -1 },
+  { 0x0, 0x0, 171, 2492, 2462, 0, 1, 1 },
+  { 0x11, 0x31, 172, 2394, 337, 33, 1, 4 },
+  { 0x2200001, 0x2200001, 172, -1, 338, 12, 1, 4 },
+  { 0x1, 0x1, 172, -1, 341, 37, 1, 4 },
+  { 0x2000001, 0x2000001, 172, -1, 342, 12, 1, 4 },
+  { 0x11, 0x11, 172, -1, 343, 33, 1, 4 },
+  { 0x2200001, 0x2200001, 172, -1, 344, 12, 1, 4 },
+  { 0x1, 0x1, 172, 1757, 345, 37, 1, 4 },
+  { 0x2000001, 0x2000001, 172, -1, 347, 12, 1, 4 },
+  { 0x11, 0x11, 172, 1759, 349, 33, 1, 4 },
+  { 0x2200001, 0x2200001, 172, -1, 351, 12, 1, 4 },
+  { 0x11, 0x31, 172, 2404, 357, 33, 1, 4 },
+  { 0x2200001, 0x2200001, 172, -1, 358, 12, 1, 4 },
+  { 0x11, 0x31, 172, 2414, 361, 33, 1, 4 },
+  { 0x2200001, 0x2200001, 172, -1, 362, 12, 1, 4 },
+  { 0x1, 0x1, 172, -1, 365, 37, 1, 4 },
+  { 0x2000001, 0x2000001, 172, -1, 366, 12, 1, 4 },
+  { 0x11, 0x11, 172, -1, 367, 33, 1, 4 },
+  { 0x2200001, 0x2200001, 172, -1, 368, 12, 1, 4 },
+  { 0x1, 0x1, 172, 1781, 369, 37, 1, 4 },
+  { 0x2000001, 0x2000001, 172, -1, 371, 12, 1, 4 },
+  { 0x11, 0x11, 172, 1783, 373, 33, 1, 4 },
+  { 0x2200001, 0x2200001, 172, -1, 375, 12, 1, 4 },
+  { 0x11, 0x31, 172, 2424, 381, 33, 1, 4 },
+  { 0x2200001, 0x2200001, 172, -1, 382, 12, 1, 4 },
+  { 0x1, 0x1, 172, -1, 385, 33, 1, 4 },
+  { 0x200001, 0x200001, 172, -1, 386, 12, 1, 4 },
+  { 0x1, 0x1, 172, -1, 389, 33, 1, 4 },
+  { 0x200001, 0x200001, 172, -1, 390, 12, 1, 4 },
   { 0x1, 0x1, 173, -1, -1, 37, 1, 4 },
   { 0x2000001, 0x2000001, 173, -1, -1, 12, 1, 4 },
+  { 0x2000001, 0x2000001, 173, -1, -1, 12, 1, 4 },
+  { 0x1, 0x1, 173, 1734, -1, 37, 1, 4 },
+  { 0x2200001, 0x2200001, 173, -1, -1, 12, 1, 4 },
+  { 0x11, 0x11, 173, 1736, -1, 33, 1, 4 },
   { 0x1, 0x1, 173, -1, -1, 37, 1, 4 },
   { 0x2000001, 0x2000001, 173, -1, -1, 12, 1, 4 },
   { 0x11, 0x11, 173, -1, -1, 33, 1, 4 },
@@ -3384,8 +3445,16 @@
   { 0x200001, 0x200001, 173, -1, -1, 12, 1, 5 },
   { 0x0, 0x0, 173, -1, -1, 0, 1, 5 },
   { 0x1, 0x1, 173, -1, -1, 12, 1, 5 },
+  { 0x1, 0x1, 173, -1, -1, 33, 1, 5 },
+  { 0x200001, 0x200001, 173, -1, -1, 12, 1, 5 },
+  { 0x0, 0x0, 173, -1, -1, 0, 1, 5 },
+  { 0x1, 0x1, 173, -1, -1, 12, 1, 5 },
   { 0x1, 0x1, 173, -1, -1, 37, 1, 4 },
   { 0x2000001, 0x2000001, 173, -1, -1, 12, 1, 4 },
+  { 0x2000001, 0x2000001, 173, -1, -1, 12, 1, 4 },
+  { 0x1, 0x1, 173, 1746, -1, 37, 1, 4 },
+  { 0x2200001, 0x2200001, 173, -1, -1, 12, 1, 4 },
+  { 0x11, 0x11, 173, 1748, -1, 33, 1, 4 },
   { 0x1, 0x1, 173, -1, -1, 37, 1, 4 },
   { 0x2000001, 0x2000001, 173, -1, -1, 12, 1, 4 },
   { 0x11, 0x11, 173, -1, -1, 33, 1, 4 },
@@ -3400,432 +3469,436 @@
   { 0x200001, 0x200001, 173, -1, -1, 12, 1, 5 },
   { 0x0, 0x0, 173, -1, -1, 0, 1, 5 },
   { 0x1, 0x1, 173, -1, -1, 12, 1, 5 },
+  { 0x1, 0x1, 173, -1, -1, 33, 1, 5 },
+  { 0x200001, 0x200001, 173, -1, -1, 12, 1, 5 },
+  { 0x0, 0x0, 173, -1, -1, 0, 1, 5 },
+  { 0x1, 0x1, 173, -1, -1, 12, 1, 5 },
   { 0x9, 0x9, 173, -1, -1, 33, 1, 5 },
-  { 0x1, 0x1, 173, 314, -1, 33, 1, 4 },
+  { 0x1, 0x1, 173, 331, -1, 33, 1, 4 },
   { 0x1200001, 0x1200001, 173, -1, -1, 12, 1, 5 },
-  { 0x200001, 0x200001, 173, 315, -1, 12, 1, 4 },
+  { 0x200001, 0x200001, 173, 332, -1, 12, 1, 4 },
   { 0x9, 0x9, 173, -1, -1, 33, 1, 5 },
-  { 0x1, 0x1, 173, 318, -1, 33, 1, 4 },
+  { 0x1, 0x1, 173, 335, -1, 33, 1, 4 },
   { 0x1200001, 0x1200001, 173, -1, -1, 12, 1, 5 },
-  { 0x200001, 0x200001, 173, 319, -1, 12, 1, 4 },
-  { 0x0, 0x0, 174, -1, 1851, 0, 0, -1 },
-  { 0x9, 0x9, 174, -1, 2381, 33, 1, 49 },
-  { 0x0, 0x0, 174, -1, 1892, 0, 0, -1 },
+  { 0x200001, 0x200001, 173, 336, -1, 12, 1, 4 },
+  { 0x0, 0x0, 174, -1, 1924, 0, 0, -1 },
+  { 0x9, 0x9, 174, -1, 2454, 33, 1, 49 },
+  { 0x0, 0x0, 174, -1, 1965, 0, 0, -1 },
   { 0x7, 0x7, 174, -1, -1, 27, 1, 49 },
   { 0x1, 0x1, 194, -1, -1, 27, 1, 10 },
   { 0x1, 0x1, 208, -1, -1, 29, 1, 0 },
   { 0x1, 0x1, 208, -1, -1, 29, 1, 0 },
-  { 0x2, 0x3, 208, 937, -1, 27, 1, 33 },
-  { 0x0, 0x0, 208, 938, -1, 0, 1, 33 },
-  { 0x0, 0x0, 208, 939, -1, 0, 1, 0 },
-  { 0x0, 0x0, 208, 940, -1, 0, 1, 0 },
-  { 0x0, 0x0, 208, 941, -1, 0, 1, 0 },
-  { 0x0, 0x0, 208, 942, -1, 0, 1, 0 },
-  { 0x0, 0x0, 208, 2403, -1, 0, 1, 93 },
-  { 0x0, 0x0, 208, 2404, -1, 0, 1, 93 },
-  { 0x0, 0x0, 208, 2405, 779, 0, 0, -1 },
+  { 0x2, 0x3, 208, 978, -1, 27, 1, 33 },
+  { 0x0, 0x0, 208, 979, -1, 0, 1, 33 },
+  { 0x0, 0x0, 208, 980, -1, 0, 1, 0 },
+  { 0x0, 0x0, 208, 981, -1, 0, 1, 0 },
+  { 0x0, 0x0, 208, 982, -1, 0, 1, 0 },
+  { 0x0, 0x0, 208, 983, -1, 0, 1, 0 },
+  { 0x0, 0x0, 208, 2476, -1, 0, 1, 93 },
+  { 0x0, 0x0, 208, 2477, -1, 0, 1, 93 },
+  { 0x0, 0x0, 208, 2478, 812, 0, 0, -1 },
   { 0x1, 0x1, 209, -1, -1, 27, 1, 0 },
   { 0x1, 0x1, 209, -1, -1, 27, 1, 0 },
-  { 0x1, 0x1, 210, -1, 1135, 32, 1, 132 },
-  { 0x1, 0x1, 210, -1, 1137, 32, 1, 132 },
-  { 0x1, 0x1, 210, -1, 1139, 32, 1, 132 },
-  { 0x1, 0x1, 210, -1, 1141, 32, 1, 132 },
-  { 0x1, 0x1, 210, -1, 1143, 32, 1, 133 },
-  { 0x1, 0x1, 210, -1, 1145, 32, 1, 133 },
-  { 0x1, 0x1, 210, -1, 1642, 32, 1, 130 },
-  { 0x1, 0x1, 210, -1, 1644, 32, 1, 130 },
-  { 0x1, 0x1, 210, -1, 1646, 32, 1, 130 },
-  { 0x1, 0x1, 210, -1, 1648, 32, 1, 130 },
-  { 0x1, 0x1, 210, -1, 1650, 32, 1, 130 },
-  { 0x1, 0x1, 210, -1, 1652, 32, 1, 130 },
-  { 0x1, 0x1, 210, 2223, 1654, 32, 1, 130 },
-  { 0x1, 0x1, 210, 2224, 1657, 32, 1, 130 },
-  { 0x0, 0x0, 211, -1, 2265, 0, 0, -1 },
-  { 0x0, 0x0, 211, -1, 2266, 0, 0, -1 },
-  { 0x0, 0x0, 211, -1, 2291, 0, 0, -1 },
-  { 0x5, 0x5, 211, -1, 2294, 20, 1, 67 },
-  { 0x0, 0x0, 215, 1753, 778, 0, 0, -1 },
-  { 0x0, 0x0, 216, -1, 909, 0, 0, -1 },
-  { 0x0, 0x0, 216, -1, 990, 0, 0, -1 },
+  { 0x1, 0x1, 210, -1, 1184, 32, 1, 132 },
+  { 0x1, 0x1, 210, -1, 1186, 32, 1, 132 },
+  { 0x1, 0x1, 210, -1, 1188, 32, 1, 132 },
+  { 0x1, 0x1, 210, -1, 1190, 32, 1, 132 },
+  { 0x1, 0x1, 210, -1, 1192, 32, 1, 133 },
+  { 0x1, 0x1, 210, -1, 1194, 32, 1, 133 },
+  { 0x1, 0x1, 210, -1, 1691, 32, 1, 130 },
+  { 0x1, 0x1, 210, -1, 1693, 32, 1, 130 },
+  { 0x1, 0x1, 210, -1, 1695, 32, 1, 130 },
+  { 0x1, 0x1, 210, -1, 1697, 32, 1, 130 },
+  { 0x1, 0x1, 210, -1, 1699, 32, 1, 130 },
+  { 0x1, 0x1, 210, -1, 1701, 32, 1, 130 },
+  { 0x1, 0x1, 210, 2296, 1703, 32, 1, 130 },
+  { 0x1, 0x1, 210, 2297, 1706, 32, 1, 130 },
+  { 0x0, 0x0, 211, -1, 2338, 0, 0, -1 },
+  { 0x0, 0x0, 211, -1, 2339, 0, 0, -1 },
+  { 0x0, 0x0, 211, -1, 2364, 0, 0, -1 },
+  { 0x5, 0x5, 211, -1, 2367, 20, 1, 67 },
+  { 0x0, 0x0, 215, 1826, 811, 0, 0, -1 },
+  { 0x0, 0x0, 216, -1, 950, 0, 0, -1 },
+  { 0x0, 0x0, 216, -1, 1039, 0, 0, -1 },
   { 0x0, 0x0, 216, -1, -1, 0, 1, 121 },
   { 0x0, 0x0, 216, -1, -1, 0, 1, 66 },
-  { 0x1, 0x1, 216, 655, 1825, 36, 1, 65 },
-  { 0x1, 0x1, 216, 656, 1860, 36, 1, 65 },
-  { 0x0, 0x0, 216, 657, 1863, 0, 0, -1 },
-  { 0x1, 0x1, 216, 658, -1, 36, 1, 65 },
-  { 0x0, 0x0, 216, 1132, -1, 0, 1, 33 },
-  { 0x1, 0x1, 216, 659, 1868, 36, 1, 65 },
-  { 0x0, 0x0, 216, 660, 1871, 0, 0, -1 },
-  { 0x1, 0x1, 216, 661, -1, 36, 1, 65 },
-  { 0x0, 0x0, 216, 662, 1874, 0, 0, -1 },
-  { 0x1, 0x1, 216, 663, -1, 36, 1, 65 },
-  { 0x1, 0x1, 216, 664, 1877, 36, 1, 65 },
-  { 0x1, 0x1, 216, 665, 1880, 36, 1, 65 },
-  { 0x0, 0x0, 216, 1133, -1, 0, 1, 33 },
-  { 0x1, 0x1, 216, 666, 1913, 36, 1, 65 },
-  { 0x1, 0x1, 216, 667, -1, 31, 1, 134 },
-  { 0x1, 0x1, 216, 219, 1146, 32, 1, 125 },
-  { 0x1, 0x1, 216, 220, 1155, 32, 1, 125 },
-  { 0x1, 0x1, 216, 221, 1164, 32, 1, 125 },
-  { 0x1, 0x1, 216, 222, 1173, 32, 1, 125 },
-  { 0x1, 0x1, 216, 223, 1182, 32, 1, 125 },
-  { 0x1, 0x1, 216, 224, 1191, 32, 1, 125 },
-  { 0x1, 0x1, 216, 225, 1200, 32, 1, 125 },
-  { 0x1, 0x1, 216, 226, 1209, 32, 1, 125 },
-  { 0x1, 0x1, 216, 227, 1218, 32, 1, 125 },
-  { 0x1, 0x1, 216, 228, 1227, 32, 1, 125 },
-  { 0x1, 0x1, 216, 229, 1237, 32, 1, 125 },
-  { 0x1, 0x1, 216, 230, 1247, 32, 1, 125 },
-  { 0x1, 0x1, 216, 231, 1260, 32, 1, 136 },
-  { 0x1, 0x1, 216, 232, 1266, 32, 1, 136 },
-  { 0x1, 0x1, 216, 233, 1272, 32, 1, 136 },
-  { 0x1, 0x1, 216, 234, 1278, 32, 1, 136 },
-  { 0x1, 0x1, 216, 235, 1284, 32, 1, 136 },
-  { 0x1, 0x1, 216, 236, 1290, 32, 1, 136 },
-  { 0x1, 0x1, 216, 237, 1296, 32, 1, 136 },
-  { 0x1, 0x1, 216, 238, 1302, 32, 1, 136 },
-  { 0x1, 0x1, 216, 239, 1308, 32, 1, 136 },
-  { 0x1, 0x1, 216, 240, 1314, 32, 1, 136 },
-  { 0x1, 0x1, 216, 241, 1320, 32, 1, 136 },
-  { 0x1, 0x1, 216, 242, 1326, 32, 1, 136 },
-  { 0x1, 0x1, 216, 243, 1332, 32, 1, 136 },
-  { 0x1, 0x1, 216, 244, 1338, 32, 1, 136 },
-  { 0x1, 0x1, 216, 245, 1344, 32, 1, 136 },
-  { 0x1, 0x1, 216, 246, 1350, 32, 1, 136 },
-  { 0x1, 0x1, 216, 247, 1356, 32, 1, 136 },
-  { 0x1, 0x1, 216, 248, 1362, 32, 1, 136 },
-  { 0x1, 0x1, 216, 671, -1, 31, 1, 144 },
-  { 0x0, 0x0, 217, 1916, -1, 0, 1, 65 },
-  { 0x0, 0x0, 217, 1917, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 23, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 1919, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 1920, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 1921, -1, 0, 1, 44 },
-  { 0x0, 0x0, 217, 1922, -1, 0, 1, 39 },
-  { 0x1, 0x1, 217, 1923, -1, 12, 1, 58 },
-  { 0x0, 0x0, 217, 1924, -1, 0, 1, 53 },
-  { 0x1000001, 0x1000001, 217, 1925, -1, 12, 1, 58 },
-  { 0x1, 0x1, 217, 1926, -1, 36, 1, 53 },
-  { 0x200001, 0x200001, 217, 1927, -1, 12, 1, 58 },
-  { 0x1, 0x1, 217, 1928, -1, 33, 1, 53 },
-  { 0x1200001, 0x1200001, 217, 1929, -1, 12, 1, 48 },
-  { 0x9, 0x9, 217, 1930, -1, 33, 1, 48 },
-  { 0x1, 0x1, 217, 1931, -1, 12, 1, 58 },
-  { 0x0, 0x0, 217, 1932, -1, 0, 1, 53 },
-  { 0x200001, 0x1200001, 217, 1933, -1, 12, 1, 58 },
-  { 0x1, 0x9, 217, 1934, -1, 33, 1, 53 },
-  { 0x1, 0x1, 217, 1935, -1, 12, 1, 58 },
-  { 0x0, 0x0, 217, 1936, -1, 0, 1, 53 },
-  { 0x1000001, 0x1000001, 217, 1937, -1, 12, 1, 58 },
-  { 0x1, 0x1, 217, 1938, -1, 36, 1, 53 },
-  { 0x200001, 0x200001, 217, 1939, -1, 12, 1, 58 },
-  { 0x1, 0x1, 217, 1940, -1, 33, 1, 53 },
-  { 0x1200001, 0x1200001, 217, 1941, -1, 12, 1, 48 },
-  { 0x9, 0x9, 217, 1942, -1, 33, 1, 48 },
-  { 0x1, 0x1, 217, 1943, -1, 12, 1, 58 },
-  { 0x0, 0x0, 217, 1944, -1, 0, 1, 53 },
-  { 0x200001, 0x1200001, 217, 1945, -1, 12, 1, 58 },
-  { 0x1, 0x9, 217, 1946, -1, 33, 1, 53 },
-  { 0x1, 0x1, 217, 1947, -1, 28, 1, 28 },
-  { 0x0, 0x0, 217, 1948, -1, 0, 1, 28 },
-  { 0x3, 0x3, 217, 1949, -1, 27, 1, 28 },
-  { 0x1, 0x1, 217, 1950, -1, 27, 1, 28 },
-  { 0x0, 0x0, 217, 1951, -1, 0, 1, 65 },
-  { 0x0, 0x0, 217, 1952, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 1953, -1, 0, 1, 28 },
-  { 0x1, 0x1, 217, 1954, -1, 36, 1, 65 },
-  { 0x1, 0x1, 217, 1955, -1, 37, 1, 28 },
-  { 0x0, 0x0, 217, 1956, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 1957, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 1958, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 1959, -1, 0, 1, 65 },
-  { 0x0, 0x0, 217, 1960, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 35, -1, 0, 1, 28 },
-  { 0x1, 0x1, 217, 1962, -1, 36, 1, 65 },
-  { 0x1, 0x1, 217, 1963, -1, 37, 1, 28 },
-  { 0x0, 0x0, 217, 1964, -1, 0, 1, 28 },
-  { 0x1, 0x1, 217, 1965, -1, 36, 1, 65 },
-  { 0x1, 0x1, 217, 1966, -1, 37, 1, 28 },
-  { 0x0, 0x0, 217, 1967, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 1968, -1, 0, 1, 65 },
-  { 0x0, 0x0, 217, 1969, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 40, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 1971, -1, 0, 1, 65 },
-  { 0x0, 0x0, 217, 1972, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 41, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 1974, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 1975, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 1976, -1, 0, 1, 48 },
-  { 0x1, 0x1, 217, 1977, -1, 27, 1, 48 },
-  { 0x1, 0x1, 217, 1978, -1, 28, 1, 48 },
-  { 0x3, 0x3, 217, 1979, -1, 27, 1, 48 },
-  { 0x1, 0x1, 217, 1980, -1, 29, 1, 48 },
-  { 0x5, 0x5, 217, 1981, -1, 27, 1, 48 },
-  { 0x3, 0x3, 217, 1982, -1, 28, 1, 48 },
-  { 0x7, 0x7, 217, 1983, -1, 27, 1, 48 },
-  { 0x0, 0x0, 217, 1984, -1, 0, 1, 48 },
-  { 0x0, 0x0, 217, 1985, -1, 0, 1, 48 },
-  { 0x0, 0x0, 217, 1986, -1, 0, 1, 48 },
-  { 0x0, 0x0, 217, 1987, -1, 0, 1, 48 },
-  { 0x1, 0x1, 217, 1988, -1, 28, 1, 28 },
-  { 0x0, 0x0, 217, 1989, -1, 0, 1, 28 },
-  { 0x3, 0x3, 217, 1990, -1, 27, 1, 28 },
-  { 0x1, 0x1, 217, 1991, -1, 27, 1, 28 },
+  { 0x1, 0x1, 216, 688, 1898, 36, 1, 65 },
+  { 0x1, 0x1, 216, 689, 1933, 36, 1, 65 },
+  { 0x0, 0x0, 216, 690, 1936, 0, 0, -1 },
+  { 0x1, 0x1, 216, 691, -1, 36, 1, 65 },
+  { 0x0, 0x0, 216, 1181, -1, 0, 1, 33 },
+  { 0x1, 0x1, 216, 692, 1941, 36, 1, 65 },
+  { 0x0, 0x0, 216, 693, 1944, 0, 0, -1 },
+  { 0x1, 0x1, 216, 694, -1, 36, 1, 65 },
+  { 0x0, 0x0, 216, 695, 1947, 0, 0, -1 },
+  { 0x1, 0x1, 216, 696, -1, 36, 1, 65 },
+  { 0x1, 0x1, 216, 697, 1950, 36, 1, 65 },
+  { 0x1, 0x1, 216, 698, 1953, 36, 1, 65 },
+  { 0x0, 0x0, 216, 1182, -1, 0, 1, 33 },
+  { 0x1, 0x1, 216, 699, 1986, 36, 1, 65 },
+  { 0x1, 0x1, 216, 700, -1, 31, 1, 134 },
+  { 0x1, 0x1, 216, 220, 1195, 32, 1, 125 },
+  { 0x1, 0x1, 216, 221, 1204, 32, 1, 125 },
+  { 0x1, 0x1, 216, 222, 1213, 32, 1, 125 },
+  { 0x1, 0x1, 216, 223, 1222, 32, 1, 125 },
+  { 0x1, 0x1, 216, 224, 1231, 32, 1, 125 },
+  { 0x1, 0x1, 216, 225, 1240, 32, 1, 125 },
+  { 0x1, 0x1, 216, 226, 1249, 32, 1, 125 },
+  { 0x1, 0x1, 216, 227, 1258, 32, 1, 125 },
+  { 0x1, 0x1, 216, 228, 1267, 32, 1, 125 },
+  { 0x1, 0x1, 216, 229, 1276, 32, 1, 125 },
+  { 0x1, 0x1, 216, 230, 1286, 32, 1, 125 },
+  { 0x1, 0x1, 216, 231, 1296, 32, 1, 125 },
+  { 0x1, 0x1, 216, 232, 1309, 32, 1, 136 },
+  { 0x1, 0x1, 216, 233, 1315, 32, 1, 136 },
+  { 0x1, 0x1, 216, 234, 1321, 32, 1, 136 },
+  { 0x1, 0x1, 216, 235, 1327, 32, 1, 136 },
+  { 0x1, 0x1, 216, 236, 1333, 32, 1, 136 },
+  { 0x1, 0x1, 216, 237, 1339, 32, 1, 136 },
+  { 0x1, 0x1, 216, 238, 1345, 32, 1, 136 },
+  { 0x1, 0x1, 216, 239, 1351, 32, 1, 136 },
+  { 0x1, 0x1, 216, 240, 1357, 32, 1, 136 },
+  { 0x1, 0x1, 216, 241, 1363, 32, 1, 136 },
+  { 0x1, 0x1, 216, 242, 1369, 32, 1, 136 },
+  { 0x1, 0x1, 216, 243, 1375, 32, 1, 136 },
+  { 0x1, 0x1, 216, 244, 1381, 32, 1, 136 },
+  { 0x1, 0x1, 216, 245, 1387, 32, 1, 136 },
+  { 0x1, 0x1, 216, 246, 1393, 32, 1, 136 },
+  { 0x1, 0x1, 216, 247, 1399, 32, 1, 136 },
+  { 0x1, 0x1, 216, 248, 1405, 32, 1, 136 },
+  { 0x1, 0x1, 216, 249, 1411, 32, 1, 136 },
+  { 0x1, 0x1, 216, 704, -1, 31, 1, 144 },
+  { 0x0, 0x0, 217, 1989, -1, 0, 1, 65 },
+  { 0x0, 0x0, 217, 1990, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 24, -1, 0, 1, 28 },
   { 0x0, 0x0, 217, 1992, -1, 0, 1, 28 },
   { 0x0, 0x0, 217, 1993, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 1994, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 50, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 1996, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 1997, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 55, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 1999, -1, 0, 1, 23 },
-  { 0x0, 0x0, 217, 2000, -1, 0, 1, 23 },
-  { 0x0, 0x0, 217, 2001, -1, 0, 1, 23 },
-  { 0x0, 0x0, 217, 2002, -1, 0, 1, 23 },
-  { 0x0, 0x0, 217, 2003, -1, 0, 1, 34 },
-  { 0x0, 0x0, 217, 2004, -1, 0, 1, 65 },
-  { 0x0, 0x0, 217, 2005, -1, 0, 1, 28 },
-  { 0x0, 0x0, 217, 62, -1, 0, 1, 28 },
-  { 0x1, 0x1, 218, 2007, -1, 34, 1, 65 },
-  { 0x1, 0x1, 218, 2008, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2009, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2010, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2011, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2012, -1, 34, 1, 45 },
-  { 0x1, 0x1, 218, 2013, -1, 34, 1, 41 },
-  { 0x400001, 0x400001, 218, 2014, -1, 12, 1, 60 },
-  { 0x1, 0x1, 218, 2015, -1, 34, 1, 55 },
-  { 0x1400001, 0x1400001, 218, 2016, -1, 12, 1, 60 },
-  { 0x5, 0x5, 218, 2017, -1, 34, 1, 55 },
-  { 0x600001, 0x600001, 218, 2018, -1, 12, 1, 60 },
-  { 0x3, 0x3, 218, 2019, -1, 33, 1, 55 },
-  { 0x1600001, 0x1600001, 218, 2020, -1, 12, 1, 50 },
-  { 0xb, 0xb, 218, 2021, -1, 33, 1, 50 },
-  { 0x400001, 0x400001, 218, 2022, -1, 12, 1, 60 },
-  { 0x1, 0x1, 218, 2023, -1, 34, 1, 55 },
-  { 0x600001, 0x1600001, 218, 2024, -1, 12, 1, 60 },
-  { 0x3, 0xb, 218, 2025, -1, 33, 1, 55 },
-  { 0x400001, 0x400001, 218, 2026, -1, 12, 1, 60 },
-  { 0x1, 0x1, 218, 2027, -1, 34, 1, 55 },
-  { 0x1400001, 0x1400001, 218, 2028, -1, 12, 1, 60 },
-  { 0x5, 0x5, 218, 2029, -1, 34, 1, 55 },
-  { 0x600001, 0x600001, 218, 2030, -1, 12, 1, 60 },
-  { 0x3, 0x3, 218, 2031, -1, 33, 1, 55 },
-  { 0x1600001, 0x1600001, 218, 2032, -1, 12, 1, 50 },
-  { 0xb, 0xb, 218, 2033, -1, 33, 1, 50 },
-  { 0x400001, 0x400001, 218, 2034, -1, 12, 1, 60 },
-  { 0x1, 0x1, 218, 2035, -1, 34, 1, 55 },
-  { 0x600001, 0x1600001, 218, 2036, -1, 12, 1, 60 },
-  { 0x3, 0xb, 218, 2037, -1, 33, 1, 55 },
-  { 0x41, 0x41, 218, 2038, -1, 28, 1, 30 },
-  { 0x1, 0x1, 218, 2039, -1, 34, 1, 30 },
-  { 0x83, 0x83, 218, 2040, -1, 27, 1, 30 },
-  { 0x81, 0x81, 218, 2041, -1, 27, 1, 30 },
-  { 0x1, 0x1, 218, 2042, -1, 34, 1, 65 },
-  { 0x1, 0x1, 218, 2043, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2044, -1, 34, 1, 30 },
-  { 0x5, 0x5, 218, 2045, -1, 34, 1, 65 },
-  { 0x9, 0x9, 218, 2046, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2047, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2048, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2049, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2050, -1, 34, 1, 65 },
-  { 0x1, 0x1, 218, 2051, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2052, -1, 34, 1, 30 },
-  { 0x5, 0x5, 218, 2053, -1, 34, 1, 65 },
-  { 0x9, 0x9, 218, 2054, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2055, -1, 34, 1, 30 },
-  { 0x5, 0x5, 218, 2056, -1, 34, 1, 65 },
-  { 0x9, 0x9, 218, 2057, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2058, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2059, -1, 34, 1, 65 },
-  { 0x1, 0x1, 218, 2060, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2061, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2062, -1, 34, 1, 65 },
-  { 0x1, 0x1, 218, 2063, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2064, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2065, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2066, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2067, -1, 34, 1, 50 },
-  { 0x81, 0x81, 218, 2068, -1, 27, 1, 50 },
-  { 0x41, 0x41, 218, 2069, -1, 28, 1, 50 },
-  { 0x83, 0x83, 218, 2070, -1, 27, 1, 50 },
-  { 0x21, 0x21, 218, 2071, -1, 29, 1, 50 },
-  { 0x85, 0x85, 218, 2072, -1, 27, 1, 50 },
-  { 0x43, 0x43, 218, 2073, -1, 28, 1, 50 },
-  { 0x87, 0x87, 218, 2074, -1, 27, 1, 50 },
-  { 0x1, 0x1, 218, 2075, -1, 34, 1, 50 },
-  { 0x1, 0x1, 218, 2076, -1, 34, 1, 50 },
-  { 0x1, 0x1, 218, 2077, -1, 34, 1, 50 },
-  { 0x1, 0x1, 218, 2078, -1, 34, 1, 50 },
-  { 0x41, 0x41, 218, 2079, -1, 28, 1, 30 },
-  { 0x1, 0x1, 218, 2080, -1, 34, 1, 30 },
-  { 0x83, 0x83, 218, 2081, -1, 27, 1, 30 },
-  { 0x81, 0x81, 218, 2082, -1, 27, 1, 30 },
+  { 0x0, 0x0, 217, 1994, -1, 0, 1, 44 },
+  { 0x0, 0x0, 217, 1995, -1, 0, 1, 39 },
+  { 0x1, 0x1, 217, 1996, -1, 12, 1, 58 },
+  { 0x0, 0x0, 217, 1997, -1, 0, 1, 53 },
+  { 0x1000001, 0x1000001, 217, 1998, -1, 12, 1, 58 },
+  { 0x1, 0x1, 217, 1999, -1, 36, 1, 53 },
+  { 0x200001, 0x200001, 217, 2000, -1, 12, 1, 58 },
+  { 0x1, 0x1, 217, 2001, -1, 33, 1, 53 },
+  { 0x1200001, 0x1200001, 217, 2002, -1, 12, 1, 48 },
+  { 0x9, 0x9, 217, 2003, -1, 33, 1, 48 },
+  { 0x1, 0x1, 217, 2004, -1, 12, 1, 58 },
+  { 0x0, 0x0, 217, 2005, -1, 0, 1, 53 },
+  { 0x200001, 0x1200001, 217, 2006, -1, 12, 1, 58 },
+  { 0x1, 0x9, 217, 2007, -1, 33, 1, 53 },
+  { 0x1, 0x1, 217, 2008, -1, 12, 1, 58 },
+  { 0x0, 0x0, 217, 2009, -1, 0, 1, 53 },
+  { 0x1000001, 0x1000001, 217, 2010, -1, 12, 1, 58 },
+  { 0x1, 0x1, 217, 2011, -1, 36, 1, 53 },
+  { 0x200001, 0x200001, 217, 2012, -1, 12, 1, 58 },
+  { 0x1, 0x1, 217, 2013, -1, 33, 1, 53 },
+  { 0x1200001, 0x1200001, 217, 2014, -1, 12, 1, 48 },
+  { 0x9, 0x9, 217, 2015, -1, 33, 1, 48 },
+  { 0x1, 0x1, 217, 2016, -1, 12, 1, 58 },
+  { 0x0, 0x0, 217, 2017, -1, 0, 1, 53 },
+  { 0x200001, 0x1200001, 217, 2018, -1, 12, 1, 58 },
+  { 0x1, 0x9, 217, 2019, -1, 33, 1, 53 },
+  { 0x1, 0x1, 217, 2020, -1, 28, 1, 28 },
+  { 0x0, 0x0, 217, 2021, -1, 0, 1, 28 },
+  { 0x3, 0x3, 217, 2022, -1, 27, 1, 28 },
+  { 0x1, 0x1, 217, 2023, -1, 27, 1, 28 },
+  { 0x0, 0x0, 217, 2024, -1, 0, 1, 65 },
+  { 0x0, 0x0, 217, 2025, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 2026, -1, 0, 1, 28 },
+  { 0x1, 0x1, 217, 2027, -1, 36, 1, 65 },
+  { 0x1, 0x1, 217, 2028, -1, 37, 1, 28 },
+  { 0x0, 0x0, 217, 2029, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 2030, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 2031, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 2032, -1, 0, 1, 65 },
+  { 0x0, 0x0, 217, 2033, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 36, -1, 0, 1, 28 },
+  { 0x1, 0x1, 217, 2035, -1, 36, 1, 65 },
+  { 0x1, 0x1, 217, 2036, -1, 37, 1, 28 },
+  { 0x0, 0x0, 217, 2037, -1, 0, 1, 28 },
+  { 0x1, 0x1, 217, 2038, -1, 36, 1, 65 },
+  { 0x1, 0x1, 217, 2039, -1, 37, 1, 28 },
+  { 0x0, 0x0, 217, 2040, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 2041, -1, 0, 1, 65 },
+  { 0x0, 0x0, 217, 2042, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 41, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 2044, -1, 0, 1, 65 },
+  { 0x0, 0x0, 217, 2045, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 42, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 2047, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 2048, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 2049, -1, 0, 1, 48 },
+  { 0x1, 0x1, 217, 2050, -1, 27, 1, 48 },
+  { 0x1, 0x1, 217, 2051, -1, 28, 1, 48 },
+  { 0x3, 0x3, 217, 2052, -1, 27, 1, 48 },
+  { 0x1, 0x1, 217, 2053, -1, 29, 1, 48 },
+  { 0x5, 0x5, 217, 2054, -1, 27, 1, 48 },
+  { 0x3, 0x3, 217, 2055, -1, 28, 1, 48 },
+  { 0x7, 0x7, 217, 2056, -1, 27, 1, 48 },
+  { 0x0, 0x0, 217, 2057, -1, 0, 1, 48 },
+  { 0x0, 0x0, 217, 2058, -1, 0, 1, 48 },
+  { 0x0, 0x0, 217, 2059, -1, 0, 1, 48 },
+  { 0x0, 0x0, 217, 2060, -1, 0, 1, 48 },
+  { 0x1, 0x1, 217, 2061, -1, 28, 1, 28 },
+  { 0x0, 0x0, 217, 2062, -1, 0, 1, 28 },
+  { 0x3, 0x3, 217, 2063, -1, 27, 1, 28 },
+  { 0x1, 0x1, 217, 2064, -1, 27, 1, 28 },
+  { 0x0, 0x0, 217, 2065, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 2066, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 2067, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 51, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 2069, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 2070, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 56, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 2072, -1, 0, 1, 23 },
+  { 0x0, 0x0, 217, 2073, -1, 0, 1, 23 },
+  { 0x0, 0x0, 217, 2074, -1, 0, 1, 23 },
+  { 0x0, 0x0, 217, 2075, -1, 0, 1, 23 },
+  { 0x0, 0x0, 217, 2076, -1, 0, 1, 34 },
+  { 0x0, 0x0, 217, 2077, -1, 0, 1, 65 },
+  { 0x0, 0x0, 217, 2078, -1, 0, 1, 28 },
+  { 0x0, 0x0, 217, 63, -1, 0, 1, 28 },
+  { 0x1, 0x1, 218, 2080, -1, 34, 1, 65 },
+  { 0x1, 0x1, 218, 2081, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2082, -1, 34, 1, 30 },
   { 0x1, 0x1, 218, 2083, -1, 34, 1, 30 },
   { 0x1, 0x1, 218, 2084, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2085, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2086, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2087, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2088, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2089, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2090, -1, 34, 1, 25 },
-  { 0x1, 0x1, 218, 2091, -1, 34, 1, 25 },
-  { 0x1, 0x1, 218, 2092, -1, 34, 1, 25 },
-  { 0x1, 0x1, 218, 2093, -1, 34, 1, 25 },
-  { 0x1, 0x1, 218, 2094, -1, 34, 1, 36 },
-  { 0x1, 0x1, 218, 2095, -1, 34, 1, 65 },
-  { 0x1, 0x1, 218, 2096, -1, 34, 1, 30 },
-  { 0x1, 0x1, 218, 2097, -1, 34, 1, 30 },
-  { 0x1, 0x1, 219, 2098, -1, 35, 1, 65 },
-  { 0x1, 0x1, 219, 2099, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2100, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2101, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2102, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2103, -1, 35, 1, 46 },
-  { 0x1, 0x1, 219, 2104, -1, 35, 1, 42 },
-  { 0x800001, 0x800001, 219, 2105, -1, 12, 1, 61 },
-  { 0x1, 0x1, 219, 2106, -1, 35, 1, 56 },
-  { 0x1800001, 0x1800001, 219, 2107, -1, 12, 1, 61 },
-  { 0x3, 0x3, 219, 2108, -1, 35, 1, 56 },
-  { 0xa00001, 0xa00001, 219, 2109, -1, 12, 1, 61 },
-  { 0x5, 0x5, 219, 2110, -1, 33, 1, 56 },
-  { 0x1a00001, 0x1a00001, 219, 2111, -1, 12, 1, 51 },
-  { 0xd, 0xd, 219, 2112, -1, 33, 1, 51 },
-  { 0x800001, 0x800001, 219, 2113, -1, 12, 1, 61 },
-  { 0x1, 0x1, 219, 2114, -1, 35, 1, 56 },
-  { 0xa00001, 0x1a00001, 219, 2115, -1, 12, 1, 61 },
-  { 0x5, 0xd, 219, 2116, -1, 33, 1, 56 },
-  { 0x800001, 0x800001, 219, 2117, -1, 12, 1, 61 },
-  { 0x1, 0x1, 219, 2118, -1, 35, 1, 56 },
-  { 0x1800001, 0x1800001, 219, 2119, -1, 12, 1, 61 },
-  { 0x3, 0x3, 219, 2120, -1, 35, 1, 56 },
-  { 0xa00001, 0xa00001, 219, 2121, -1, 12, 1, 61 },
-  { 0x5, 0x5, 219, 2122, -1, 33, 1, 56 },
-  { 0x1a00001, 0x1a00001, 219, 2123, -1, 12, 1, 51 },
-  { 0xd, 0xd, 219, 2124, -1, 33, 1, 51 },
-  { 0x800001, 0x800001, 219, 2125, -1, 12, 1, 61 },
-  { 0x1, 0x1, 219, 2126, -1, 35, 1, 56 },
-  { 0xa00001, 0x1a00001, 219, 2127, -1, 12, 1, 61 },
-  { 0x5, 0xd, 219, 2128, -1, 33, 1, 56 },
-  { 0x81, 0x81, 219, 2129, -1, 28, 1, 31 },
-  { 0x1, 0x1, 219, 2130, -1, 35, 1, 31 },
-  { 0x103, 0x103, 219, 2131, -1, 27, 1, 31 },
-  { 0x101, 0x101, 219, 2132, -1, 27, 1, 31 },
-  { 0x1, 0x1, 219, 2133, -1, 35, 1, 65 },
-  { 0x1, 0x1, 219, 2134, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2135, -1, 35, 1, 31 },
-  { 0x3, 0x3, 219, 2136, -1, 35, 1, 65 },
-  { 0x5, 0x5, 219, 2137, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2138, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2139, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2140, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2141, -1, 35, 1, 65 },
-  { 0x1, 0x1, 219, 2142, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2143, -1, 35, 1, 31 },
-  { 0x3, 0x3, 219, 2144, -1, 35, 1, 65 },
-  { 0x5, 0x5, 219, 2145, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2146, -1, 35, 1, 31 },
-  { 0x3, 0x3, 219, 2147, -1, 35, 1, 65 },
-  { 0x5, 0x5, 219, 2148, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2149, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2150, -1, 35, 1, 65 },
-  { 0x1, 0x1, 219, 2151, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2152, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2153, -1, 35, 1, 65 },
-  { 0x1, 0x1, 219, 2154, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2155, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2156, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2157, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2158, -1, 35, 1, 51 },
-  { 0x101, 0x101, 219, 2159, -1, 27, 1, 51 },
-  { 0x81, 0x81, 219, 2160, -1, 28, 1, 51 },
-  { 0x103, 0x103, 219, 2161, -1, 27, 1, 51 },
-  { 0x41, 0x41, 219, 2162, -1, 29, 1, 51 },
-  { 0x105, 0x105, 219, 2163, -1, 27, 1, 51 },
-  { 0x83, 0x83, 219, 2164, -1, 28, 1, 51 },
-  { 0x107, 0x107, 219, 2165, -1, 27, 1, 51 },
-  { 0x1, 0x1, 219, 2166, -1, 35, 1, 51 },
-  { 0x1, 0x1, 219, 2167, -1, 35, 1, 51 },
-  { 0x1, 0x1, 219, 2168, -1, 35, 1, 51 },
-  { 0x1, 0x1, 219, 2169, -1, 35, 1, 51 },
-  { 0x81, 0x81, 219, 2170, -1, 28, 1, 31 },
-  { 0x1, 0x1, 219, 2171, -1, 35, 1, 31 },
-  { 0x103, 0x103, 219, 2172, -1, 27, 1, 31 },
-  { 0x101, 0x101, 219, 2173, -1, 27, 1, 31 },
+  { 0x1, 0x1, 218, 2085, -1, 34, 1, 45 },
+  { 0x1, 0x1, 218, 2086, -1, 34, 1, 41 },
+  { 0x400001, 0x400001, 218, 2087, -1, 12, 1, 60 },
+  { 0x1, 0x1, 218, 2088, -1, 34, 1, 55 },
+  { 0x1400001, 0x1400001, 218, 2089, -1, 12, 1, 60 },
+  { 0x5, 0x5, 218, 2090, -1, 34, 1, 55 },
+  { 0x600001, 0x600001, 218, 2091, -1, 12, 1, 60 },
+  { 0x3, 0x3, 218, 2092, -1, 33, 1, 55 },
+  { 0x1600001, 0x1600001, 218, 2093, -1, 12, 1, 50 },
+  { 0xb, 0xb, 218, 2094, -1, 33, 1, 50 },
+  { 0x400001, 0x400001, 218, 2095, -1, 12, 1, 60 },
+  { 0x1, 0x1, 218, 2096, -1, 34, 1, 55 },
+  { 0x600001, 0x1600001, 218, 2097, -1, 12, 1, 60 },
+  { 0x3, 0xb, 218, 2098, -1, 33, 1, 55 },
+  { 0x400001, 0x400001, 218, 2099, -1, 12, 1, 60 },
+  { 0x1, 0x1, 218, 2100, -1, 34, 1, 55 },
+  { 0x1400001, 0x1400001, 218, 2101, -1, 12, 1, 60 },
+  { 0x5, 0x5, 218, 2102, -1, 34, 1, 55 },
+  { 0x600001, 0x600001, 218, 2103, -1, 12, 1, 60 },
+  { 0x3, 0x3, 218, 2104, -1, 33, 1, 55 },
+  { 0x1600001, 0x1600001, 218, 2105, -1, 12, 1, 50 },
+  { 0xb, 0xb, 218, 2106, -1, 33, 1, 50 },
+  { 0x400001, 0x400001, 218, 2107, -1, 12, 1, 60 },
+  { 0x1, 0x1, 218, 2108, -1, 34, 1, 55 },
+  { 0x600001, 0x1600001, 218, 2109, -1, 12, 1, 60 },
+  { 0x3, 0xb, 218, 2110, -1, 33, 1, 55 },
+  { 0x41, 0x41, 218, 2111, -1, 28, 1, 30 },
+  { 0x1, 0x1, 218, 2112, -1, 34, 1, 30 },
+  { 0x83, 0x83, 218, 2113, -1, 27, 1, 30 },
+  { 0x81, 0x81, 218, 2114, -1, 27, 1, 30 },
+  { 0x1, 0x1, 218, 2115, -1, 34, 1, 65 },
+  { 0x1, 0x1, 218, 2116, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2117, -1, 34, 1, 30 },
+  { 0x5, 0x5, 218, 2118, -1, 34, 1, 65 },
+  { 0x9, 0x9, 218, 2119, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2120, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2121, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2122, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2123, -1, 34, 1, 65 },
+  { 0x1, 0x1, 218, 2124, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2125, -1, 34, 1, 30 },
+  { 0x5, 0x5, 218, 2126, -1, 34, 1, 65 },
+  { 0x9, 0x9, 218, 2127, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2128, -1, 34, 1, 30 },
+  { 0x5, 0x5, 218, 2129, -1, 34, 1, 65 },
+  { 0x9, 0x9, 218, 2130, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2131, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2132, -1, 34, 1, 65 },
+  { 0x1, 0x1, 218, 2133, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2134, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2135, -1, 34, 1, 65 },
+  { 0x1, 0x1, 218, 2136, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2137, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2138, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2139, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2140, -1, 34, 1, 50 },
+  { 0x81, 0x81, 218, 2141, -1, 27, 1, 50 },
+  { 0x41, 0x41, 218, 2142, -1, 28, 1, 50 },
+  { 0x83, 0x83, 218, 2143, -1, 27, 1, 50 },
+  { 0x21, 0x21, 218, 2144, -1, 29, 1, 50 },
+  { 0x85, 0x85, 218, 2145, -1, 27, 1, 50 },
+  { 0x43, 0x43, 218, 2146, -1, 28, 1, 50 },
+  { 0x87, 0x87, 218, 2147, -1, 27, 1, 50 },
+  { 0x1, 0x1, 218, 2148, -1, 34, 1, 50 },
+  { 0x1, 0x1, 218, 2149, -1, 34, 1, 50 },
+  { 0x1, 0x1, 218, 2150, -1, 34, 1, 50 },
+  { 0x1, 0x1, 218, 2151, -1, 34, 1, 50 },
+  { 0x41, 0x41, 218, 2152, -1, 28, 1, 30 },
+  { 0x1, 0x1, 218, 2153, -1, 34, 1, 30 },
+  { 0x83, 0x83, 218, 2154, -1, 27, 1, 30 },
+  { 0x81, 0x81, 218, 2155, -1, 27, 1, 30 },
+  { 0x1, 0x1, 218, 2156, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2157, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2158, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2159, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2160, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2161, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2162, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2163, -1, 34, 1, 25 },
+  { 0x1, 0x1, 218, 2164, -1, 34, 1, 25 },
+  { 0x1, 0x1, 218, 2165, -1, 34, 1, 25 },
+  { 0x1, 0x1, 218, 2166, -1, 34, 1, 25 },
+  { 0x1, 0x1, 218, 2167, -1, 34, 1, 36 },
+  { 0x1, 0x1, 218, 2168, -1, 34, 1, 65 },
+  { 0x1, 0x1, 218, 2169, -1, 34, 1, 30 },
+  { 0x1, 0x1, 218, 2170, -1, 34, 1, 30 },
+  { 0x1, 0x1, 219, 2171, -1, 35, 1, 65 },
+  { 0x1, 0x1, 219, 2172, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2173, -1, 35, 1, 31 },
   { 0x1, 0x1, 219, 2174, -1, 35, 1, 31 },
   { 0x1, 0x1, 219, 2175, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2176, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2177, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2178, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2179, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2180, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2181, -1, 35, 1, 26 },
-  { 0x1, 0x1, 219, 2182, -1, 35, 1, 26 },
-  { 0x1, 0x1, 219, 2183, -1, 35, 1, 26 },
-  { 0x1, 0x1, 219, 2184, -1, 35, 1, 26 },
-  { 0x1, 0x1, 219, 2185, -1, 35, 1, 37 },
-  { 0x1, 0x1, 219, 2186, -1, 35, 1, 65 },
-  { 0x1, 0x1, 219, 2187, -1, 35, 1, 31 },
-  { 0x1, 0x1, 219, 2188, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2176, -1, 35, 1, 46 },
+  { 0x1, 0x1, 219, 2177, -1, 35, 1, 42 },
+  { 0x800001, 0x800001, 219, 2178, -1, 12, 1, 61 },
+  { 0x1, 0x1, 219, 2179, -1, 35, 1, 56 },
+  { 0x1800001, 0x1800001, 219, 2180, -1, 12, 1, 61 },
+  { 0x3, 0x3, 219, 2181, -1, 35, 1, 56 },
+  { 0xa00001, 0xa00001, 219, 2182, -1, 12, 1, 61 },
+  { 0x5, 0x5, 219, 2183, -1, 33, 1, 56 },
+  { 0x1a00001, 0x1a00001, 219, 2184, -1, 12, 1, 51 },
+  { 0xd, 0xd, 219, 2185, -1, 33, 1, 51 },
+  { 0x800001, 0x800001, 219, 2186, -1, 12, 1, 61 },
+  { 0x1, 0x1, 219, 2187, -1, 35, 1, 56 },
+  { 0xa00001, 0x1a00001, 219, 2188, -1, 12, 1, 61 },
+  { 0x5, 0xd, 219, 2189, -1, 33, 1, 56 },
+  { 0x800001, 0x800001, 219, 2190, -1, 12, 1, 61 },
+  { 0x1, 0x1, 219, 2191, -1, 35, 1, 56 },
+  { 0x1800001, 0x1800001, 219, 2192, -1, 12, 1, 61 },
+  { 0x3, 0x3, 219, 2193, -1, 35, 1, 56 },
+  { 0xa00001, 0xa00001, 219, 2194, -1, 12, 1, 61 },
+  { 0x5, 0x5, 219, 2195, -1, 33, 1, 56 },
+  { 0x1a00001, 0x1a00001, 219, 2196, -1, 12, 1, 51 },
+  { 0xd, 0xd, 219, 2197, -1, 33, 1, 51 },
+  { 0x800001, 0x800001, 219, 2198, -1, 12, 1, 61 },
+  { 0x1, 0x1, 219, 2199, -1, 35, 1, 56 },
+  { 0xa00001, 0x1a00001, 219, 2200, -1, 12, 1, 61 },
+  { 0x5, 0xd, 219, 2201, -1, 33, 1, 56 },
+  { 0x81, 0x81, 219, 2202, -1, 28, 1, 31 },
+  { 0x1, 0x1, 219, 2203, -1, 35, 1, 31 },
+  { 0x103, 0x103, 219, 2204, -1, 27, 1, 31 },
+  { 0x101, 0x101, 219, 2205, -1, 27, 1, 31 },
+  { 0x1, 0x1, 219, 2206, -1, 35, 1, 65 },
+  { 0x1, 0x1, 219, 2207, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2208, -1, 35, 1, 31 },
+  { 0x3, 0x3, 219, 2209, -1, 35, 1, 65 },
+  { 0x5, 0x5, 219, 2210, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2211, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2212, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2213, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2214, -1, 35, 1, 65 },
+  { 0x1, 0x1, 219, 2215, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2216, -1, 35, 1, 31 },
+  { 0x3, 0x3, 219, 2217, -1, 35, 1, 65 },
+  { 0x5, 0x5, 219, 2218, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2219, -1, 35, 1, 31 },
+  { 0x3, 0x3, 219, 2220, -1, 35, 1, 65 },
+  { 0x5, 0x5, 219, 2221, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2222, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2223, -1, 35, 1, 65 },
+  { 0x1, 0x1, 219, 2224, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2225, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2226, -1, 35, 1, 65 },
+  { 0x1, 0x1, 219, 2227, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2228, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2229, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2230, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2231, -1, 35, 1, 51 },
+  { 0x101, 0x101, 219, 2232, -1, 27, 1, 51 },
+  { 0x81, 0x81, 219, 2233, -1, 28, 1, 51 },
+  { 0x103, 0x103, 219, 2234, -1, 27, 1, 51 },
+  { 0x41, 0x41, 219, 2235, -1, 29, 1, 51 },
+  { 0x105, 0x105, 219, 2236, -1, 27, 1, 51 },
+  { 0x83, 0x83, 219, 2237, -1, 28, 1, 51 },
+  { 0x107, 0x107, 219, 2238, -1, 27, 1, 51 },
+  { 0x1, 0x1, 219, 2239, -1, 35, 1, 51 },
+  { 0x1, 0x1, 219, 2240, -1, 35, 1, 51 },
+  { 0x1, 0x1, 219, 2241, -1, 35, 1, 51 },
+  { 0x1, 0x1, 219, 2242, -1, 35, 1, 51 },
+  { 0x81, 0x81, 219, 2243, -1, 28, 1, 31 },
+  { 0x1, 0x1, 219, 2244, -1, 35, 1, 31 },
+  { 0x103, 0x103, 219, 2245, -1, 27, 1, 31 },
+  { 0x101, 0x101, 219, 2246, -1, 27, 1, 31 },
+  { 0x1, 0x1, 219, 2247, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2248, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2249, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2250, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2251, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2252, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2253, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2254, -1, 35, 1, 26 },
+  { 0x1, 0x1, 219, 2255, -1, 35, 1, 26 },
+  { 0x1, 0x1, 219, 2256, -1, 35, 1, 26 },
+  { 0x1, 0x1, 219, 2257, -1, 35, 1, 26 },
+  { 0x1, 0x1, 219, 2258, -1, 35, 1, 37 },
+  { 0x1, 0x1, 219, 2259, -1, 35, 1, 65 },
+  { 0x1, 0x1, 219, 2260, -1, 35, 1, 31 },
+  { 0x1, 0x1, 219, 2261, -1, 35, 1, 31 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 65 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 32 },
-  { 0x3, 0x3, 220, 1779, -1, 34, 1, 32 },
+  { 0x3, 0x3, 220, 1852, -1, 34, 1, 32 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 32 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 32 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 47 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 43 },
   { 0xc00001, 0xc00001, 220, -1, -1, 12, 1, 62 },
-  { 0x3, 0x3, 220, 2362, -1, 34, 1, 57 },
+  { 0x3, 0x3, 220, 2435, -1, 34, 1, 57 },
   { 0x1c00001, 0x1c00001, 220, -1, -1, 12, 1, 62 },
-  { 0x7, 0x7, 220, 2363, -1, 34, 1, 57 },
+  { 0x7, 0x7, 220, 2436, -1, 34, 1, 57 },
   { 0xe00001, 0xe00001, 220, -1, -1, 12, 1, 62 },
-  { 0x7, 0x7, 220, 2364, -1, 33, 1, 57 },
+  { 0x7, 0x7, 220, 2437, -1, 33, 1, 57 },
   { 0x1e00001, 0x1e00001, 220, -1, -1, 12, 1, 52 },
-  { 0xf, 0xf, 220, 2365, -1, 33, 1, 52 },
+  { 0xf, 0xf, 220, 2438, -1, 33, 1, 52 },
   { 0xc00001, 0xc00001, 220, -1, -1, 12, 1, 62 },
-  { 0x3, 0x3, 220, 2370, -1, 34, 1, 57 },
+  { 0x3, 0x3, 220, 2443, -1, 34, 1, 57 },
   { 0xe00001, 0x1e00001, 220, -1, -1, 12, 1, 62 },
-  { 0x7, 0xf, 220, 2371, -1, 33, 1, 57 },
+  { 0x7, 0xf, 220, 2444, -1, 33, 1, 57 },
   { 0xc00001, 0xc00001, 220, -1, -1, 12, 1, 62 },
-  { 0x3, 0x3, 220, 2374, -1, 34, 1, 57 },
+  { 0x3, 0x3, 220, 2447, -1, 34, 1, 57 },
   { 0x1c00001, 0x1c00001, 220, -1, -1, 12, 1, 62 },
-  { 0x7, 0x7, 220, 2375, -1, 34, 1, 57 },
+  { 0x7, 0x7, 220, 2448, -1, 34, 1, 57 },
   { 0xe00001, 0xe00001, 220, -1, -1, 12, 1, 62 },
-  { 0x7, 0x7, 220, 2376, -1, 33, 1, 57 },
+  { 0x7, 0x7, 220, 2449, -1, 33, 1, 57 },
   { 0x1e00001, 0x1e00001, 220, -1, -1, 12, 1, 52 },
-  { 0xf, 0xf, 220, 2377, -1, 33, 1, 52 },
+  { 0xf, 0xf, 220, 2450, -1, 33, 1, 52 },
   { 0xc00001, 0xc00001, 220, -1, -1, 12, 1, 62 },
-  { 0x3, 0x3, 220, 2382, -1, 34, 1, 57 },
+  { 0x3, 0x3, 220, 2455, -1, 34, 1, 57 },
   { 0xe00001, 0x1e00001, 220, -1, -1, 12, 1, 62 },
-  { 0x7, 0xf, 220, 2383, -1, 33, 1, 57 },
+  { 0x7, 0xf, 220, 2456, -1, 33, 1, 57 },
   { 0xc1, 0xc1, 220, -1, -1, 28, 1, 32 },
-  { 0x3, 0x3, 220, 2302, -1, 34, 1, 32 },
+  { 0x3, 0x3, 220, 2375, -1, 34, 1, 32 },
   { 0x183, 0x183, 220, -1, -1, 27, 1, 32 },
-  { 0x181, 0x181, 220, 2303, -1, 27, 1, 32 },
+  { 0x181, 0x181, 220, 2376, -1, 27, 1, 32 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 65 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 32 },
-  { 0x3, 0x3, 220, 1780, -1, 34, 1, 32 },
+  { 0x3, 0x3, 220, 1853, -1, 34, 1, 32 },
   { 0x7, 0x7, 220, -1, -1, 34, 1, 65 },
   { 0xb, 0xb, 220, -1, -1, 34, 1, 32 },
-  { 0x3, 0x3, 220, 1781, -1, 34, 1, 32 },
+  { 0x3, 0x3, 220, 1854, -1, 34, 1, 32 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 32 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 32 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 65 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 32 },
-  { 0x3, 0x3, 220, 1784, -1, 34, 1, 32 },
+  { 0x3, 0x3, 220, 1857, -1, 34, 1, 32 },
   { 0x7, 0x7, 220, -1, -1, 34, 1, 65 },
   { 0xb, 0xb, 220, -1, -1, 34, 1, 32 },
-  { 0x3, 0x3, 220, 1785, -1, 34, 1, 32 },
+  { 0x3, 0x3, 220, 1858, -1, 34, 1, 32 },
   { 0x7, 0x7, 220, -1, -1, 34, 1, 65 },
   { 0xb, 0xb, 220, -1, -1, 34, 1, 32 },
-  { 0x3, 0x3, 220, 1787, -1, 34, 1, 32 },
+  { 0x3, 0x3, 220, 1860, -1, 34, 1, 32 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 65 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 32 },
-  { 0x3, 0x3, 220, 1789, -1, 34, 1, 32 },
+  { 0x3, 0x3, 220, 1862, -1, 34, 1, 32 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 65 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 32 },
-  { 0x3, 0x3, 220, 1790, -1, 34, 1, 32 },
+  { 0x3, 0x3, 220, 1863, -1, 34, 1, 32 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 32 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 32 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 52 },
@@ -3841,9 +3914,9 @@
   { 0x3, 0x3, 220, -1, -1, 34, 1, 52 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 52 },
   { 0xc1, 0xc1, 220, -1, -1, 28, 1, 32 },
-  { 0x3, 0x3, 220, 2306, -1, 34, 1, 32 },
+  { 0x3, 0x3, 220, 2379, -1, 34, 1, 32 },
   { 0x183, 0x183, 220, -1, -1, 27, 1, 32 },
-  { 0x181, 0x181, 220, 2307, -1, 27, 1, 32 },
+  { 0x181, 0x181, 220, 2380, -1, 27, 1, 32 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 32 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 32 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 32 },
@@ -3858,129 +3931,129 @@
   { 0x3, 0x3, 220, -1, -1, 34, 1, 38 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 65 },
   { 0x3, 0x3, 220, -1, -1, 34, 1, 32 },
-  { 0x3, 0x3, 220, 1792, -1, 34, 1, 32 },
-  { 0x3, 0x3, 221, 362, 1148, 32, 1, 127 },
-  { 0x3, 0x3, 221, 363, 1157, 32, 1, 127 },
-  { 0x3, 0x3, 221, 364, 1166, 32, 1, 127 },
-  { 0x3, 0x3, 221, 365, 1175, 32, 1, 127 },
-  { 0x3, 0x3, 221, 366, 1184, 32, 1, 127 },
-  { 0x3, 0x3, 221, 367, 1193, 32, 1, 127 },
-  { 0x3, 0x3, 221, 368, 1202, 32, 1, 127 },
-  { 0x3, 0x3, 221, 369, 1211, 32, 1, 127 },
-  { 0x3, 0x3, 221, 370, 1220, 32, 1, 127 },
-  { 0x3, 0x3, 221, 371, 1229, 32, 1, 127 },
-  { 0x3, 0x3, 221, 372, 1239, 32, 1, 127 },
-  { 0x3, 0x3, 221, 373, 1249, 32, 1, 127 },
-  { 0x3, 0x3, 221, 386, 1262, 32, 1, 138 },
-  { 0x3, 0x3, 221, 387, 1268, 32, 1, 138 },
-  { 0x3, 0x3, 221, 388, 1274, 32, 1, 138 },
-  { 0x3, 0x3, 221, 389, 1280, 32, 1, 138 },
-  { 0x3, 0x3, 221, 390, 1286, 32, 1, 138 },
-  { 0x3, 0x3, 221, 391, 1292, 32, 1, 138 },
-  { 0x3, 0x3, 221, 392, 1298, 32, 1, 138 },
-  { 0x3, 0x3, 221, 393, 1304, 32, 1, 138 },
-  { 0x3, 0x3, 221, 394, 1310, 32, 1, 138 },
-  { 0x3, 0x3, 221, 395, 1316, 32, 1, 138 },
-  { 0x3, 0x3, 221, 396, 1322, 32, 1, 138 },
-  { 0x3, 0x3, 221, 397, 1328, 32, 1, 138 },
-  { 0x3, 0x3, 221, 398, 1334, 32, 1, 138 },
-  { 0x3, 0x3, 221, 399, 1340, 32, 1, 138 },
-  { 0x3, 0x3, 221, 400, 1346, 32, 1, 138 },
-  { 0x3, 0x3, 221, 401, 1352, 32, 1, 138 },
-  { 0x3, 0x3, 221, 402, 1358, 32, 1, 138 },
-  { 0x3, 0x3, 221, 403, 1364, 32, 1, 138 },
+  { 0x3, 0x3, 220, 1865, -1, 34, 1, 32 },
+  { 0x3, 0x3, 221, 395, 1197, 32, 1, 127 },
+  { 0x3, 0x3, 221, 396, 1206, 32, 1, 127 },
+  { 0x3, 0x3, 221, 397, 1215, 32, 1, 127 },
+  { 0x3, 0x3, 221, 398, 1224, 32, 1, 127 },
+  { 0x3, 0x3, 221, 399, 1233, 32, 1, 127 },
+  { 0x3, 0x3, 221, 400, 1242, 32, 1, 127 },
+  { 0x3, 0x3, 221, 401, 1251, 32, 1, 127 },
+  { 0x3, 0x3, 221, 402, 1260, 32, 1, 127 },
+  { 0x3, 0x3, 221, 403, 1269, 32, 1, 127 },
+  { 0x3, 0x3, 221, 404, 1278, 32, 1, 127 },
+  { 0x3, 0x3, 221, 405, 1288, 32, 1, 127 },
+  { 0x3, 0x3, 221, 406, 1298, 32, 1, 127 },
+  { 0x3, 0x3, 221, 419, 1311, 32, 1, 138 },
+  { 0x3, 0x3, 221, 420, 1317, 32, 1, 138 },
+  { 0x3, 0x3, 221, 421, 1323, 32, 1, 138 },
+  { 0x3, 0x3, 221, 422, 1329, 32, 1, 138 },
+  { 0x3, 0x3, 221, 423, 1335, 32, 1, 138 },
+  { 0x3, 0x3, 221, 424, 1341, 32, 1, 138 },
+  { 0x3, 0x3, 221, 425, 1347, 32, 1, 138 },
+  { 0x3, 0x3, 221, 426, 1353, 32, 1, 138 },
+  { 0x3, 0x3, 221, 427, 1359, 32, 1, 138 },
+  { 0x3, 0x3, 221, 428, 1365, 32, 1, 138 },
+  { 0x3, 0x3, 221, 429, 1371, 32, 1, 138 },
+  { 0x3, 0x3, 221, 430, 1377, 32, 1, 138 },
+  { 0x3, 0x3, 221, 431, 1383, 32, 1, 138 },
+  { 0x3, 0x3, 221, 432, 1389, 32, 1, 138 },
+  { 0x3, 0x3, 221, 433, 1395, 32, 1, 138 },
+  { 0x3, 0x3, 221, 434, 1401, 32, 1, 138 },
+  { 0x3, 0x3, 221, 435, 1407, 32, 1, 138 },
+  { 0x3, 0x3, 221, 436, 1413, 32, 1, 138 },
   { 0x1, 0x1, 222, -1, -1, 28, 1, 33 },
   { 0x1, 0x1, 222, -1, -1, 28, 1, 33 },
-  { 0x0, 0x0, 229, 771, -1, 0, 1, 134 },
-  { 0x0, 0x0, 229, 772, -1, 0, 1, 144 },
-  { 0x1, 0x1, 230, -1, 1655, 33, 1, 131 },
-  { 0x1, 0x1, 230, -1, 1658, 33, 1, 131 },
-  { 0x0, 0x0, 230, -1, 1660, 0, 1, 130 },
-  { 0x0, 0x0, 230, -1, 1661, 0, 1, 130 },
-  { 0x0, 0x0, 231, 705, 783, 0, 0, -1 },
-  { 0x0, 0x0, 231, 706, 791, 0, 0, -1 },
-  { 0x0, 0x0, 231, 707, 787, 0, 0, -1 },
-  { 0x1, 0x1, 231, 708, 442, 33, 1, 6 },
-  { 0x8000001, 0x8000001, 231, 709, 450, 6, 1, 7 },
-  { 0x1, 0x1, 231, 710, 446, 33, 1, 6 },
-  { 0x0, 0x0, 231, 711, 795, 0, 0, -1 },
-  { 0x1, 0x1, 231, 712, 462, 33, 1, 8 },
-  { 0x0, 0x0, 231, 713, 799, 0, 0, -1 },
-  { 0x1, 0x1, 231, 714, 474, 33, 1, 15 },
-  { 0x0, 0x0, 231, 715, 804, 0, 0, -1 },
-  { 0x0, 0x0, 231, 716, 808, 0, 0, -1 },
-  { 0x1, 0x1, 231, 717, 497, 33, 1, 17 },
-  { 0x1, 0x1, 231, 718, 501, 33, 1, 17 },
-  { 0x0, 0x0, 231, 719, 812, 0, 0, -1 },
-  { 0x0, 0x0, 231, 720, 816, 0, 0, -1 },
-  { 0x1, 0x1, 231, 721, 521, 33, 1, 18 },
-  { 0x8000001, 0x8000001, 231, 722, 525, 6, 1, 18 },
-  { 0x0, 0x0, 231, 723, 820, 0, 0, -1 },
-  { 0x1, 0x1, 231, 724, 537, 33, 1, 19 },
-  { 0x0, 0x0, 231, 725, 824, 0, 0, -1 },
-  { 0x0, 0x0, 231, 726, 828, 0, 0, -1 },
-  { 0x1, 0x1, 231, 727, 557, 33, 1, 20 },
-  { 0x8000001, 0x8000001, 231, 728, 561, 6, 1, 20 },
-  { 0x0, 0x0, 231, 729, 832, 0, 0, -1 },
-  { 0x1, 0x1, 231, 730, 573, 33, 1, 21 },
-  { 0x0, 0x0, 231, 731, 837, 0, 0, -1 },
-  { 0x0, 0x0, 231, 732, 841, 0, 0, -1 },
-  { 0x1, 0x1, 231, 733, 596, 33, 1, 17 },
-  { 0x1, 0x1, 231, 734, 600, 33, 1, 17 },
-  { 0x0, 0x0, 231, 735, 845, 0, 0, -1 },
-  { 0x1, 0x1, 231, 736, 612, 33, 1, 21 },
-  { 0x0, 0x0, 232, 2227, 782, 0, 0, -1 },
-  { 0x0, 0x0, 232, 2228, 790, 0, 0, -1 },
-  { 0x0, 0x0, 232, 2229, 786, 0, 0, -1 },
-  { 0x0, 0x0, 232, 2230, 441, 0, 1, 6 },
-  { 0x1, 0x1, 232, 2231, 449, 6, 1, 7 },
-  { 0x0, 0x0, 232, 2232, 445, 0, 1, 6 },
-  { 0x0, 0x0, 232, 2233, 794, 0, 0, -1 },
-  { 0x0, 0x0, 232, 2234, 461, 0, 1, 8 },
-  { 0x0, 0x0, 232, 2235, 798, 0, 0, -1 },
-  { 0x0, 0x0, 232, 2236, 473, 0, 1, 15 },
-  { 0x0, 0x0, 232, 2237, 803, 0, 0, -1 },
-  { 0x0, 0x0, 232, 2238, 807, 0, 0, -1 },
-  { 0x0, 0x0, 232, 2239, 496, 0, 1, 17 },
-  { 0x0, 0x0, 232, 2240, 500, 0, 1, 17 },
-  { 0x0, 0x0, 232, 2241, 811, 0, 0, -1 },
-  { 0x0, 0x0, 232, 2242, 815, 0, 0, -1 },
-  { 0x0, 0x0, 232, 2243, 520, 0, 1, 18 },
-  { 0x1, 0x1, 232, 2244, 524, 6, 1, 18 },
-  { 0x0, 0x0, 232, 2245, 819, 0, 0, -1 },
-  { 0x0, 0x0, 232, 2246, 536, 0, 1, 19 },
-  { 0x0, 0x0, 232, 2247, 823, 0, 0, -1 },
-  { 0x0, 0x0, 232, 2248, 827, 0, 0, -1 },
-  { 0x0, 0x0, 232, 2249, 556, 0, 1, 20 },
-  { 0x1, 0x1, 232, 2250, 560, 6, 1, 20 },
-  { 0x0, 0x0, 232, 2251, 831, 0, 0, -1 },
-  { 0x0, 0x0, 232, 2252, 572, 0, 1, 21 },
-  { 0x0, 0x0, 232, 2253, 836, 0, 0, -1 },
-  { 0x0, 0x0, 232, 2254, 840, 0, 0, -1 },
-  { 0x0, 0x0, 232, 2255, 595, 0, 1, 17 },
-  { 0x0, 0x0, 232, 2256, 599, 0, 1, 17 },
-  { 0x0, 0x0, 232, 2257, 844, 0, 0, -1 },
-  { 0x0, 0x0, 232, 2258, 611, 0, 1, 21 },
-  { 0x1, 0x1, 232, 737, 923, 27, 1, 16 },
-  { 0x0, 0x0, 232, 738, 921, 0, 1, 16 },
-  { 0x0, 0x0, 232, 967, 925, 0, 1, 22 },
-  { 0x0, 0x1, 232, 933, 931, 20, 1, 67 },
-  { 0x0, 0x0, 232, 107, 929, 0, 1, 67 },
+  { 0x0, 0x0, 229, 804, -1, 0, 1, 134 },
+  { 0x0, 0x0, 229, 805, -1, 0, 1, 144 },
+  { 0x1, 0x1, 230, -1, 1704, 33, 1, 131 },
+  { 0x1, 0x1, 230, -1, 1707, 33, 1, 131 },
+  { 0x0, 0x0, 230, -1, 1709, 0, 1, 130 },
+  { 0x0, 0x0, 230, -1, 1710, 0, 1, 130 },
+  { 0x0, 0x0, 231, 738, 816, 0, 0, -1 },
+  { 0x0, 0x0, 231, 739, 824, 0, 0, -1 },
+  { 0x0, 0x0, 231, 740, 820, 0, 0, -1 },
+  { 0x1, 0x1, 231, 741, 475, 33, 1, 6 },
+  { 0x8000001, 0x8000001, 231, 742, 483, 6, 1, 7 },
+  { 0x1, 0x1, 231, 743, 479, 33, 1, 6 },
+  { 0x0, 0x0, 231, 744, 828, 0, 0, -1 },
+  { 0x1, 0x1, 231, 745, 495, 33, 1, 8 },
+  { 0x0, 0x0, 231, 746, 832, 0, 0, -1 },
+  { 0x1, 0x1, 231, 747, 507, 33, 1, 15 },
+  { 0x0, 0x0, 231, 748, 837, 0, 0, -1 },
+  { 0x0, 0x0, 231, 749, 841, 0, 0, -1 },
+  { 0x1, 0x1, 231, 750, 530, 33, 1, 17 },
+  { 0x1, 0x1, 231, 751, 534, 33, 1, 17 },
+  { 0x0, 0x0, 231, 752, 845, 0, 0, -1 },
+  { 0x0, 0x0, 231, 753, 849, 0, 0, -1 },
+  { 0x1, 0x1, 231, 754, 554, 33, 1, 18 },
+  { 0x8000001, 0x8000001, 231, 755, 558, 6, 1, 18 },
+  { 0x0, 0x0, 231, 756, 853, 0, 0, -1 },
+  { 0x1, 0x1, 231, 757, 570, 33, 1, 19 },
+  { 0x0, 0x0, 231, 758, 857, 0, 0, -1 },
+  { 0x0, 0x0, 231, 759, 861, 0, 0, -1 },
+  { 0x1, 0x1, 231, 760, 590, 33, 1, 20 },
+  { 0x8000001, 0x8000001, 231, 761, 594, 6, 1, 20 },
+  { 0x0, 0x0, 231, 762, 865, 0, 0, -1 },
+  { 0x1, 0x1, 231, 763, 606, 33, 1, 21 },
+  { 0x0, 0x0, 231, 764, 870, 0, 0, -1 },
+  { 0x0, 0x0, 231, 765, 874, 0, 0, -1 },
+  { 0x1, 0x1, 231, 766, 629, 33, 1, 17 },
+  { 0x1, 0x1, 231, 767, 633, 33, 1, 17 },
+  { 0x0, 0x0, 231, 768, 878, 0, 0, -1 },
+  { 0x1, 0x1, 231, 769, 645, 33, 1, 21 },
+  { 0x0, 0x0, 232, 2300, 815, 0, 0, -1 },
+  { 0x0, 0x0, 232, 2301, 823, 0, 0, -1 },
+  { 0x0, 0x0, 232, 2302, 819, 0, 0, -1 },
+  { 0x0, 0x0, 232, 2303, 474, 0, 1, 6 },
+  { 0x1, 0x1, 232, 2304, 482, 6, 1, 7 },
+  { 0x0, 0x0, 232, 2305, 478, 0, 1, 6 },
+  { 0x0, 0x0, 232, 2306, 827, 0, 0, -1 },
+  { 0x0, 0x0, 232, 2307, 494, 0, 1, 8 },
+  { 0x0, 0x0, 232, 2308, 831, 0, 0, -1 },
+  { 0x0, 0x0, 232, 2309, 506, 0, 1, 15 },
+  { 0x0, 0x0, 232, 2310, 836, 0, 0, -1 },
+  { 0x0, 0x0, 232, 2311, 840, 0, 0, -1 },
+  { 0x0, 0x0, 232, 2312, 529, 0, 1, 17 },
+  { 0x0, 0x0, 232, 2313, 533, 0, 1, 17 },
+  { 0x0, 0x0, 232, 2314, 844, 0, 0, -1 },
+  { 0x0, 0x0, 232, 2315, 848, 0, 0, -1 },
+  { 0x0, 0x0, 232, 2316, 553, 0, 1, 18 },
+  { 0x1, 0x1, 232, 2317, 557, 6, 1, 18 },
+  { 0x0, 0x0, 232, 2318, 852, 0, 0, -1 },
+  { 0x0, 0x0, 232, 2319, 569, 0, 1, 19 },
+  { 0x0, 0x0, 232, 2320, 856, 0, 0, -1 },
+  { 0x0, 0x0, 232, 2321, 860, 0, 0, -1 },
+  { 0x0, 0x0, 232, 2322, 589, 0, 1, 20 },
+  { 0x1, 0x1, 232, 2323, 593, 6, 1, 20 },
+  { 0x0, 0x0, 232, 2324, 864, 0, 0, -1 },
+  { 0x0, 0x0, 232, 2325, 605, 0, 1, 21 },
+  { 0x0, 0x0, 232, 2326, 869, 0, 0, -1 },
+  { 0x0, 0x0, 232, 2327, 873, 0, 0, -1 },
+  { 0x0, 0x0, 232, 2328, 628, 0, 1, 17 },
+  { 0x0, 0x0, 232, 2329, 632, 0, 1, 17 },
+  { 0x0, 0x0, 232, 2330, 877, 0, 0, -1 },
+  { 0x0, 0x0, 232, 2331, 644, 0, 1, 21 },
+  { 0x1, 0x1, 232, 770, 964, 27, 1, 16 },
+  { 0x0, 0x0, 232, 771, 962, 0, 1, 16 },
+  { 0x0, 0x0, 232, 1012, 966, 0, 1, 22 },
+  { 0x0, 0x1, 232, 974, 972, 20, 1, 67 },
+  { 0x0, 0x0, 232, 108, 970, 0, 1, 67 },
   { 0x1, 0x1, 235, -1, -1, 29, 1, 0 },
   { 0x0, 0x0, 235, -1, -1, 0, 1, 0 },
-  { 0x1, 0x1, 235, 2399, -1, 27, 1, 0 },
-  { 0x1, 0x1, 235, 2400, -1, 27, 1, 0 },
-  { 0x1, 0x1, 235, 2401, -1, 27, 1, 0 },
-  { 0x1, 0x1, 235, 2402, -1, 27, 1, 0 },
-  { 0x0, 0x0, 256, -1, 1856, 0, 0, -1 },
-  { 0x0, 0x0, 256, -1, 1858, 0, 0, -1 },
+  { 0x1, 0x1, 235, 2472, -1, 27, 1, 0 },
+  { 0x1, 0x1, 235, 2473, -1, 27, 1, 0 },
+  { 0x1, 0x1, 235, 2474, -1, 27, 1, 0 },
+  { 0x1, 0x1, 235, 2475, -1, 27, 1, 0 },
+  { 0x0, 0x0, 256, -1, 1929, 0, 0, -1 },
+  { 0x0, 0x0, 256, -1, 1931, 0, 0, -1 },
   { 0x1, 0x1, 256, -1, -1, 28, 1, 29 },
   { 0x1, 0x1, 256, -1, -1, 28, 1, 29 },
-  { 0x0, 0x0, 256, -1, 1897, 0, 0, -1 },
-  { 0x0, 0x0, 256, -1, 1899, 0, 0, -1 },
+  { 0x0, 0x0, 256, -1, 1970, 0, 0, -1 },
+  { 0x0, 0x0, 256, -1, 1972, 0, 0, -1 },
   { 0x1, 0x1, 256, -1, -1, 28, 1, 29 },
   { 0x1, 0x1, 256, -1, -1, 28, 1, 29 },
-  { 0x0, 0x0, 258, 21, -1, 0, 1, 0 },
+  { 0x0, 0x0, 258, 22, -1, 0, 1, 0 },
   { 0x0, 0x0, 258, -1, -1, 0, 1, 0 },
   { 0x0, 0x0, 258, -1, -1, 0, 1, 0 },
   { 0x0, 0x1, 258, -1, -1, 29, 1, 0 },
@@ -3988,7 +4061,7 @@
   { 0x0, 0x1, 258, -1, -1, 29, 1, 0 },
   { 0x0, 0x1, 258, -1, -1, 29, 1, 0 },
   { 0x0, 0x1, 258, -1, -1, 29, 1, 0 },
-  { 0x0, 0x0, 258, 175, -1, 0, 1, 0 },
+  { 0x0, 0x0, 258, 176, -1, 0, 1, 0 },
   { 0x0, 0x1, 258, -1, -1, 29, 1, 0 },
   { 0x1, 0x1, 259, -1, -1, 12, 1, 2 },
   { 0x1, 0x1, 259, -1, -1, 12, 1, 2 },
@@ -4032,460 +4105,465 @@
   { 0x1, 0x1, 259, -1, -1, 12, 1, 2 },
   { 0x1, 0x1, 259, -1, -1, 12, 1, 64 },
   { 0x1, 0x1, 259, -1, -1, 12, 1, 64 },
-  { 0x0, 0x0, 259, -1, 1832, 0, 0, -1 },
-  { 0x0, 0x0, 259, -1, 1834, 0, 0, -1 },
-  { 0x0, 0x0, 259, -1, 1836, 0, 0, -1 },
-  { 0x0, 0x0, 259, -1, 1838, 0, 0, -1 },
+  { 0x0, 0x0, 259, -1, 1905, 0, 0, -1 },
+  { 0x0, 0x0, 259, -1, 1907, 0, 0, -1 },
+  { 0x0, 0x0, 259, -1, 1909, 0, 0, -1 },
+  { 0x0, 0x0, 259, -1, 1911, 0, 0, -1 },
   { 0x1, 0x1, 259, -1, -1, 12, 1, 59 },
   { 0x1, 0x1, 259, -1, -1, 12, 1, 59 },
   { 0x1, 0x1, 259, -1, -1, 12, 1, 59 },
   { 0x1, 0x1, 259, -1, -1, 12, 1, 49 },
-  { 0x0, 0x0, 259, -1, 1840, 0, 0, -1 },
-  { 0x0, 0x0, 259, -1, 1842, 0, 0, -1 },
+  { 0x0, 0x0, 259, -1, 1913, 0, 0, -1 },
+  { 0x0, 0x0, 259, -1, 1915, 0, 0, -1 },
   { 0x1, 0x1, 259, -1, -1, 12, 1, 59 },
   { 0x1, 0x1, 259, -1, -1, 12, 1, 59 },
-  { 0x0, 0x0, 259, -1, 1844, 0, 0, -1 },
-  { 0x0, 0x0, 259, -1, 1846, 0, 0, -1 },
-  { 0x0, 0x0, 259, -1, 1848, 0, 0, -1 },
-  { 0x0, 0x0, 259, -1, 1850, 0, 0, -1 },
+  { 0x0, 0x0, 259, -1, 1917, 0, 0, -1 },
+  { 0x0, 0x0, 259, -1, 1919, 0, 0, -1 },
+  { 0x0, 0x0, 259, -1, 1921, 0, 0, -1 },
+  { 0x0, 0x0, 259, -1, 1923, 0, 0, -1 },
   { 0x1, 0x1, 259, -1, -1, 12, 1, 59 },
   { 0x1, 0x1, 259, -1, -1, 12, 1, 59 },
   { 0x1, 0x1, 259, -1, -1, 12, 1, 59 },
   { 0x1, 0x1, 259, -1, -1, 12, 1, 49 },
-  { 0x0, 0x0, 259, -1, 1852, 0, 0, -1 },
-  { 0x0, 0x0, 259, -1, 1854, 0, 0, -1 },
+  { 0x0, 0x0, 259, -1, 1925, 0, 0, -1 },
+  { 0x0, 0x0, 259, -1, 1927, 0, 0, -1 },
   { 0x1, 0x1, 259, -1, -1, 12, 1, 59 },
   { 0x1, 0x1, 259, -1, -1, 12, 1, 59 },
-  { 0x1, 0x1, 259, 312, -1, 12, 1, 2 },
-  { 0x1, 0x1, 259, 354, -1, 12, 1, 2 },
-  { 0x1, 0x1, 259, 316, -1, 12, 1, 2 },
-  { 0x1, 0x1, 259, 358, -1, 12, 1, 2 },
-  { 0x0, 0x0, 260, -1, 1839, 0, 0, -1 },
-  { 0x9, 0x9, 260, -1, 2369, 33, 1, 49 },
-  { 0x0, 0x0, 260, 1113, 1888, 0, 0, -1 },
-  { 0x3, 0x3, 260, 1114, -1, 27, 1, 49 },
-  { 0x0, 0x0, 264, 2296, -1, 0, 1, 0 },
+  { 0x1, 0x1, 259, 329, -1, 12, 1, 2 },
+  { 0x1, 0x1, 259, 387, -1, 12, 1, 2 },
+  { 0x1, 0x1, 259, 333, -1, 12, 1, 2 },
+  { 0x1, 0x1, 259, 391, -1, 12, 1, 2 },
+  { 0x0, 0x0, 260, -1, 1912, 0, 0, -1 },
+  { 0x9, 0x9, 260, -1, 2442, 33, 1, 49 },
+  { 0x0, 0x0, 260, 1162, 1961, 0, 0, -1 },
+  { 0x3, 0x3, 260, 1163, -1, 27, 1, 49 },
+  { 0x0, 0x0, 264, 2369, -1, 0, 1, 0 },
   { 0x3, 0x3, 265, -1, -1, 27, 1, 0 },
   { 0x3, 0x3, 265, -1, -1, 27, 1, 0 },
   { 0x3, 0x3, 265, -1, -1, 27, 1, 0 },
   { 0x3, 0x3, 265, -1, -1, 27, 1, 0 },
-  { 0x1, 0x1, 266, 2395, -1, 28, 1, 0 },
-  { 0x1, 0x1, 266, 2396, -1, 28, 1, 0 },
-  { 0x1, 0x1, 266, 2397, -1, 28, 1, 0 },
-  { 0x1, 0x1, 266, 2398, -1, 28, 1, 0 },
+  { 0x1, 0x1, 266, 2468, -1, 28, 1, 0 },
+  { 0x1, 0x1, 266, 2469, -1, 28, 1, 0 },
+  { 0x1, 0x1, 266, 2470, -1, 28, 1, 0 },
+  { 0x1, 0x1, 266, 2471, -1, 28, 1, 0 },
   { 0x1, 0x1, 267, -1, -1, 27, 1, 93 },
   { 0x1, 0x1, 267, -1, -1, 27, 1, 93 },
-  { 0x0, 0x0, 267, -1, 780, 0, 0, -1 },
-  { 0x0, 0x0, 268, 2408, 2273, 0, 0, -1 },
-  { 0x0, 0x0, 268, 2409, 2275, 0, 0, -1 },
-  { 0x0, 0x0, 269, -1, 2274, 0, 0, -1 },
-  { 0x0, 0x0, 269, -1, 2276, 0, 0, -1 },
+  { 0x0, 0x0, 267, -1, 813, 0, 0, -1 },
+  { 0x0, 0x0, 268, 2481, 2346, 0, 0, -1 },
+  { 0x0, 0x0, 268, 2482, 2348, 0, 0, -1 },
+  { 0x0, 0x0, 269, -1, 2347, 0, 0, -1 },
+  { 0x0, 0x0, 269, -1, 2349, 0, 0, -1 },
   { 0x0, 0x0, 270, -1, -1, 0, 1, 40 },
   { 0x0, 0x0, 270, -1, -1, 0, 1, 40 },
   { 0x0, 0x0, 275, -1, -1, 0, 1, 33 },
-  { 0x0, 0x0, 279, -1, 1862, 0, 1, 29 },
+  { 0x0, 0x0, 279, -1, 1935, 0, 1, 29 },
   { 0x0, 0x0, 280, -1, -1, 0, 1, 71 },
   { 0x0, 0x0, 280, -1, -1, 0, 1, 71 },
-  { 0x0, 0x0, 280, 1674, 2386, 0, 1, 1 },
-  { 0x0, 0x0, 280, -1, 355, 0, 0, -1 },
-  { 0x0, 0x0, 280, 1676, 2388, 0, 1, 1 },
-  { 0x0, 0x0, 280, -1, 359, 0, 0, -1 },
+  { 0x0, 0x0, 280, 1723, 2459, 0, 1, 1 },
+  { 0x0, 0x0, 280, -1, 388, 0, 0, -1 },
+  { 0x0, 0x0, 280, 1725, 2461, 0, 1, 1 },
+  { 0x0, 0x0, 280, -1, 392, 0, 0, -1 },
 };
 
 static const struct ia64_main_table
 main_table[] = {
-  { 5, 1, 1, 0x00000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 0, },
-  { 5, 1, 1, 0x08000000ull, 0xf8000000ull, { 23, 24, 25, 3, 0 }, 0x0, 1, },
-  { 5, 7, 1, 0x00000000ull, 0x00000000ull, { 23, 65, 25, 0, 0 }, 0x0, 2, },
-  { 6, 1, 1, 0x00000000ull, 0x00000000ull, { 23, 65, 26, 0, 0 }, 0x0, 3, },
-  { 7, 1, 1, 0x40000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 4, },
-  { 7, 1, 1, 0x00000000ull, 0x00000000ull, { 23, 62, 25, 0, 0 }, 0x0, 5, },
-  { 8, 1, 1, 0x00000000ull, 0x00000000ull, { 23, 62, 25, 0, 0 }, 0x0, 6, },
-  { 9, 3, 1, 0x00000000ull, 0x00000000ull, { 23, 2, 51, 52, 53 }, 0x221, 7, },
-  { 10, 1, 1, 0x60000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 8, },
-  { 10, 1, 1, 0x60000000ull, 0xf8000000ull, { 23, 54, 25, 0, 0 }, 0x0, 9, },
-  { 11, 1, 1, 0x68000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 10, },
-  { 11, 1, 1, 0x68000000ull, 0xf8000000ull, { 23, 54, 25, 0, 0 }, 0x0, 11, },
-  { 14, 4, 0, 0x00000000ull, 0xf80011ffull, { 15, 0, 0, 0, 0 }, 0x40, 781, },
-  { 14, 4, 0, 0x00000000ull, 0xf80011c0ull, { 15, 0, 0, 0, 0 }, 0x0, 647, },
-  { 14, 4, 0, 0x00000000ull, 0xf80011c0ull, { 15, 0, 0, 0, 0 }, 0x40, 648, },
-  { 14, 4, 0, 0x08000100ull, 0xf80011c0ull, { 15, 0, 0, 0, 0 }, 0x200, 1770, },
-  { 14, 4, 0, 0x08000100ull, 0xf80011c0ull, { 15, 0, 0, 0, 0 }, 0x240, 1771, },
-  { 14, 4, 1, 0x00000000ull, 0x00001000ull, { 14, 15, 0, 0, 0 }, 0x0, 404, },
-  { 14, 4, 1, 0x00000000ull, 0x00001000ull, { 14, 15, 0, 0, 0 }, 0x40, 405, },
-  { 14, 4, 0, 0x00000000ull, 0x000011ffull, { 80, 0, 0, 0, 0 }, 0x40, 802, },
-  { 14, 4, 0, 0x00000000ull, 0x000011c0ull, { 80, 0, 0, 0, 0 }, 0x0, 649, },
-  { 14, 4, 0, 0x00000000ull, 0x000011c0ull, { 80, 0, 0, 0, 0 }, 0x40, 650, },
-  { 14, 4, 0, 0x00000080ull, 0x000011c0ull, { 80, 0, 0, 0, 0 }, 0x210, 2406, },
-  { 14, 4, 0, 0x00000080ull, 0x000011c0ull, { 80, 0, 0, 0, 0 }, 0x250, 2407, },
-  { 14, 4, 0, 0x00000140ull, 0x000011c0ull, { 80, 0, 0, 0, 0 }, 0x30, 412, },
-  { 14, 4, 0, 0x00000140ull, 0x000011c0ull, { 80, 0, 0, 0, 0 }, 0x70, 413, },
-  { 14, 4, 0, 0x00000180ull, 0x000011c0ull, { 80, 0, 0, 0, 0 }, 0x230, 410, },
-  { 14, 4, 0, 0x00000180ull, 0x000011c0ull, { 80, 0, 0, 0, 0 }, 0x270, 411, },
-  { 14, 4, 1, 0x00000000ull, 0x00001000ull, { 14, 80, 0, 0, 0 }, 0x0, 406, },
-  { 14, 4, 1, 0x00000000ull, 0x00001000ull, { 14, 80, 0, 0, 0 }, 0x40, 407, },
-  { 15, 4, 0, 0x00000000ull, 0xf8000000ull, { 64, 0, 0, 0, 0 }, 0x0, 360, },
-  { 15, 5, 0, 0x00000000ull, 0xf8000000ull, { 64, 0, 0, 0, 0 }, 0x0, 773, },
-  { 15, 2, 0, 0x00000000ull, 0xf8000000ull, { 64, 0, 0, 0, 0 }, 0x2, 908, },
-  { 15, 3, 0, 0x00000000ull, 0xf8000000ull, { 64, 0, 0, 0, 0 }, 0x0, 989, },
-  { 15, 6, 0, 0x00000000ull, 0xf8000000ull, { 68, 0, 0, 0, 0 }, 0x0, 2410, },
-  { 15, 7, 0, 0x00000000ull, 0x00000000ull, { 64, 0, 0, 0, 0 }, 0x0, 14, },
-  { 16, 6, 0, 0x00000000ull, 0x000011ffull, { 81, 0, 0, 0, 0 }, 0x40, 835, },
-  { 16, 6, 0, 0x00000000ull, 0x000011c0ull, { 81, 0, 0, 0, 0 }, 0x0, 651, },
-  { 16, 6, 0, 0x00000000ull, 0x000011c0ull, { 81, 0, 0, 0, 0 }, 0x40, 652, },
-  { 16, 6, 1, 0x00000000ull, 0x00001000ull, { 14, 81, 0, 0, 0 }, 0x0, 408, },
-  { 16, 6, 1, 0x00000000ull, 0x00001000ull, { 14, 81, 0, 0, 0 }, 0x40, 409, },
-  { 17, 4, 0, 0x80000000ull, 0xf8000018ull, { 15, 76, 0, 0, 0 }, 0x20, 2292, },
-  { 17, 4, 0, 0x00000000ull, 0x00000018ull, { 80, 76, 0, 0, 0 }, 0x20, 2293, },
-  { 18, 4, 0, 0x60000000ull, 0xf8000000ull, { 0, 0, 0, 0, 0 }, 0x2c, 215, },
-  { 22, 2, 0, 0x00000000ull, 0x00000000ull, { 24, 79, 0, 0, 0 }, 0x0, 1775, },
-  { 22, 3, 0, 0x00000000ull, 0x00000000ull, { 23, 80, 0, 0, 0 }, 0x0, 217, },
-  { 22, 3, 0, 0x00000000ull, 0x00000000ull, { 17, 80, 0, 0, 0 }, 0x0, 218, },
-  { 22, 3, 0, 0x00000000ull, 0x00000000ull, { 24, 79, 0, 0, 0 }, 0x0, 1776, },
-  { 22, 3, 0, 0x00000000ull, 0x00000000ull, { 18, 79, 0, 0, 0 }, 0x0, 1777, },
-  { 22, 7, 0, 0x00000000ull, 0x00000000ull, { 24, 79, 0, 0, 0 }, 0x0, 1778, },
-  { 25, 4, 0, 0x20000000ull, 0xf8000000ull, { 0, 0, 0, 0, 0 }, 0x224, 16, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 24, 25, 0 }, 0x0, 969, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 25, 24, 0 }, 0x0, 949, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 25, 24, 0 }, 0x0, 881, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 24, 25, 0 }, 0x0, 864, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 24, 25, 0 }, 0x40, 1097, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 6, 25, 0 }, 0x0, 882, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 6, 25, 0 }, 0x40, 951, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 54, 25, 0 }, 0x0, 972, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 56, 25, 0 }, 0x0, 952, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 56, 25, 0 }, 0x0, 884, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 54, 25, 0 }, 0x0, 867, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 54, 25, 0 }, 0x40, 1100, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 58, 25, 0 }, 0x0, 964, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 58, 25, 0 }, 0x0, 898, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 24, 25, 0 }, 0x40, 1101, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 6, 25, 0 }, 0x40, 953, },
-  { 26, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 54, 25, 0 }, 0x40, 1102, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 24, 25, 0 }, 0x0, 974, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 25, 24, 0 }, 0x0, 954, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 25, 24, 0 }, 0x0, 886, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 24, 25, 0 }, 0x0, 869, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 24, 25, 0 }, 0x40, 1105, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 6, 25, 0 }, 0x0, 887, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 6, 25, 0 }, 0x40, 956, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 54, 25, 0 }, 0x0, 977, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 56, 25, 0 }, 0x0, 957, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 56, 25, 0 }, 0x0, 889, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 54, 25, 0 }, 0x0, 872, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 54, 25, 0 }, 0x40, 1108, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 55, 25, 0 }, 0x0, 986, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 57, 25, 0 }, 0x0, 966, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 57, 25, 0 }, 0x0, 900, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 55, 25, 0 }, 0x0, 880, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 24, 25, 0 }, 0x40, 1109, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 6, 25, 0 }, 0x40, 958, },
-  { 27, 1, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 54, 25, 0 }, 0x40, 1110, },
-  { 28, 3, 1, 0x08000000ull, 0xf8000000ull, { 23, 32, 24, 1, 0 }, 0x0, 250, },
-  { 29, 3, 1, 0x48000000ull, 0xf8000000ull, { 23, 32, 24, 1, 0 }, 0x0, 251, },
-  { 30, 3, 1, 0x88000000ull, 0xf8000000ull, { 23, 32, 24, 1, 0 }, 0x0, 252, },
-  { 31, 3, 1, 0xc8000000ull, 0xf8000000ull, { 23, 32, 24, 1, 0 }, 0x0, 253, },
-  { 33, 4, 0, 0x10000000ull, 0xf8000000ull, { 0, 0, 0, 0, 0 }, 0x224, 17, },
-  { 35, 2, 1, 0xc0000000ull, 0xf8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 935, },
-  { 36, 2, 1, 0xc8000000ull, 0xf8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 936, },
-  { 38, 2, 1, 0x00000000ull, 0x00000000ull, { 23, 24, 25, 46, 71 }, 0x0, 18, },
-  { 38, 2, 1, 0x00000000ull, 0x04000000ull, { 23, 24, 44, 72, 0 }, 0x0, 2414, },
-  { 38, 2, 1, 0x04000000ull, 0x04000000ull, { 23, 54, 44, 72, 0 }, 0x0, 2415, },
-  { 38, 2, 1, 0x00000000ull, 0x00000000ull, { 23, 47, 25, 45, 72 }, 0x0, 19, },
-  { 42, 4, 0, 0x80000000ull, 0xf8000000ull, { 0, 0, 0, 0, 0 }, 0x20, 20, },
-  { 47, 2, 1, 0x00000000ull, 0x00002000ull, { 23, 25, 75, 72, 0 }, 0x0, 2310, },
-  { 49, 5, 1, 0x80000000ull, 0xf80fe000ull, { 17, 19, 0, 0, 0 }, 0x40, 22, },
-  { 50, 5, 1, 0x08000000ull, 0xf8000000ull, { 17, 19, 18, 0, 0 }, 0x40, 1827, },
-  { 51, 5, 1, 0xb8000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1828, },
-  { 51, 5, 1, 0xb8000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 24, },
-  { 52, 5, 1, 0xb0000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1829, },
-  { 52, 5, 1, 0xb0000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 25, },
-  { 53, 5, 1, 0x60000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 26, },
-  { 54, 5, 1, 0x68000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 27, },
-  { 56, 3, 0, 0x80000000ull, 0xf8000000ull, { 25, 0, 0, 0, 0 }, 0x0, 28, },
-  { 57, 5, 0, 0x40000000ull, 0xf8000000ull, { 78, 0, 0, 0, 0 }, 0x0, 1830, },
-  { 57, 5, 0, 0x40000000ull, 0xf8000000ull, { 78, 0, 0, 0, 0 }, 0x40, 29, },
-  { 58, 5, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 18, 59, 0 }, 0x0, 991, },
-  { 58, 5, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 18, 59, 0 }, 0x40, 1130, },
-  { 59, 5, 0, 0x28000000ull, 0xf8000000ull, { 0, 0, 0, 0, 0 }, 0x0, 1831, },
-  { 59, 5, 0, 0x28000000ull, 0xf8000000ull, { 0, 0, 0, 0, 0 }, 0x40, 30, },
-  { 60, 5, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 18, 19, 0 }, 0x0, 757, },
-  { 60, 5, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 18, 19, 0 }, 0x40, 758, },
-  { 60, 5, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 19, 18, 0 }, 0x0, 891, },
-  { 60, 5, 2, 0x00000000ull, 0x00001000ull, { 21, 22, 19, 18, 0 }, 0x40, 892, },
-  { 60, 5, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 18, 19, 0 }, 0x0, 1111, },
-  { 60, 5, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 18, 19, 0 }, 0x40, 1112, },
-  { 60, 5, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 19, 18, 0 }, 0x0, 1118, },
-  { 60, 5, 2, 0x00000000ull, 0x00001000ull, { 22, 21, 19, 18, 0 }, 0x40, 1119, },
-  { 61, 5, 1, 0xc0000000ull, 0xf8000000ull, { 17, 18, 0, 0, 0 }, 0x0, 854, },
-  { 61, 5, 1, 0xc0000000ull, 0xf8000000ull, { 17, 18, 0, 0, 0 }, 0x40, 855, },
-  { 61, 5, 1, 0xe0000000ull, 0xf8000000ull, { 17, 18, 0, 0, 0 }, 0x0, 2412, },
-  { 61, 5, 1, 0x08000000ull, 0xf80fe000ull, { 17, 19, 0, 0, 0 }, 0x40, 2413, },
-  { 62, 3, 1, 0x88000000ull, 0xf8000000ull, { 23, 32, 70, 0, 0 }, 0x0, 254, },
-  { 63, 3, 1, 0xc8000000ull, 0xf8000000ull, { 23, 32, 70, 0, 0 }, 0x0, 255, },
-  { 66, 3, 0, 0x60000000ull, 0xf8000000ull, { 0, 0, 0, 0, 0 }, 0x21, 31, },
-  { 67, 5, 1, 0x00000000ull, 0x00000000ull, { 17, 19, 20, 18, 0 }, 0x0, 1865, },
-  { 67, 5, 1, 0x00000000ull, 0x00000000ull, { 17, 19, 20, 18, 0 }, 0x40, 32, },
-  { 68, 5, 1, 0xa8000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1866, },
-  { 68, 5, 1, 0xa8000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 33, },
-  { 69, 5, 1, 0x80000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1783, },
-  { 70, 5, 1, 0xa0000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1867, },
-  { 70, 5, 1, 0xa0000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 34, },
-  { 71, 5, 1, 0xc8000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 968, },
-  { 72, 5, 1, 0x00000000ull, 0x000fe000ull, { 17, 19, 20, 0, 0 }, 0x40, 1870, },
-  { 73, 5, 1, 0x00000000ull, 0x00000000ull, { 17, 19, 20, 18, 0 }, 0x0, 1873, },
-  { 73, 5, 1, 0x00000000ull, 0x00000000ull, { 17, 19, 20, 18, 0 }, 0x40, 36, },
-  { 74, 5, 1, 0x88000000ull, 0xf8000000ull, { 17, 19, 0, 0, 0 }, 0xc0, 37, },
-  { 75, 5, 1, 0x88000000ull, 0xf80fe000ull, { 17, 19, 0, 0, 0 }, 0x40, 38, },
-  { 76, 5, 1, 0x00000000ull, 0x00000000ull, { 17, 19, 20, 18, 0 }, 0x0, 1876, },
-  { 76, 5, 1, 0x00000000ull, 0x00000000ull, { 17, 19, 20, 18, 0 }, 0x40, 39, },
-  { 77, 5, 1, 0x00000000ull, 0x000fe000ull, { 17, 19, 20, 0, 0 }, 0x40, 1879, },
-  { 78, 5, 1, 0x08000000ull, 0xf80fe000ull, { 17, 19, 0, 0, 0 }, 0x40, 1882, },
-  { 79, 5, 1, 0x70000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 42, },
-  { 80, 5, 1, 0x80000000ull, 0xf80fe000ull, { 17, 19, 0, 0, 0 }, 0x40, 43, },
-  { 81, 5, 1, 0x40000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 44, },
-  { 82, 5, 1, 0xb8000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1883, },
-  { 82, 5, 1, 0xb8000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 45, },
-  { 83, 5, 1, 0xb0000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1884, },
-  { 83, 5, 1, 0xb0000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 46, },
-  { 84, 5, 1, 0x80000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 759, },
-  { 84, 5, 1, 0x80000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 760, },
-  { 84, 5, 1, 0x88000000ull, 0xf8000000ull, { 17, 19, 18, 0, 0 }, 0x40, 893, },
-  { 85, 5, 1, 0xc0000000ull, 0xf8000000ull, { 17, 18, 0, 0, 0 }, 0x0, 856, },
-  { 85, 5, 1, 0xc0000000ull, 0xf8000000ull, { 17, 18, 0, 0, 0 }, 0x40, 857, },
-  { 86, 5, 1, 0x00000000ull, 0x00000000ull, { 17, 19, 20, 18, 0 }, 0x0, 1901, },
-  { 86, 5, 1, 0x00000000ull, 0x00000000ull, { 17, 19, 20, 18, 0 }, 0x40, 47, },
-  { 87, 5, 1, 0xa8000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1902, },
-  { 87, 5, 1, 0xa8000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 48, },
-  { 88, 5, 1, 0x80000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1791, },
-  { 89, 5, 1, 0xa0000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1903, },
-  { 89, 5, 1, 0xa0000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 49, },
-  { 90, 5, 1, 0x00000000ull, 0x000fe000ull, { 17, 19, 20, 0, 0 }, 0x40, 1904, },
-  { 91, 5, 1, 0x00000000ull, 0x00000000ull, { 17, 19, 20, 18, 0 }, 0x0, 1905, },
-  { 91, 5, 1, 0x00000000ull, 0x00000000ull, { 17, 19, 20, 18, 0 }, 0x40, 51, },
-  { 92, 5, 1, 0x88000000ull, 0xf8000000ull, { 17, 19, 0, 0, 0 }, 0xc0, 52, },
-  { 93, 5, 1, 0x88000000ull, 0xf80fe000ull, { 17, 19, 0, 0, 0 }, 0x40, 53, },
-  { 94, 5, 1, 0x00000000ull, 0x00000000ull, { 17, 19, 20, 18, 0 }, 0x0, 1906, },
-  { 94, 5, 1, 0x00000000ull, 0x00000000ull, { 17, 19, 20, 18, 0 }, 0x40, 54, },
-  { 95, 5, 1, 0x00000000ull, 0x000fe000ull, { 17, 19, 20, 0, 0 }, 0x40, 1907, },
-  { 96, 5, 2, 0x00000000ull, 0x00000000ull, { 17, 22, 18, 19, 0 }, 0x0, 1908, },
-  { 96, 5, 2, 0x00000000ull, 0x00000000ull, { 17, 22, 18, 19, 0 }, 0x40, 56, },
-  { 97, 5, 2, 0x00000000ull, 0x00000000ull, { 17, 22, 19, 0, 0 }, 0x0, 1909, },
-  { 97, 5, 2, 0x00000000ull, 0x00000000ull, { 17, 22, 19, 0, 0 }, 0x40, 57, },
-  { 98, 5, 2, 0x00000000ull, 0x00000000ull, { 17, 22, 18, 19, 0 }, 0x0, 1910, },
-  { 98, 5, 2, 0x00000000ull, 0x00000000ull, { 17, 22, 18, 19, 0 }, 0x40, 58, },
-  { 99, 5, 2, 0x00000000ull, 0x00000000ull, { 17, 22, 19, 0, 0 }, 0x0, 1911, },
-  { 99, 5, 2, 0x00000000ull, 0x00000000ull, { 17, 22, 19, 0, 0 }, 0x40, 59, },
-  { 100, 5, 1, 0x00000000ull, 0x00000000ull, { 17, 19, 20, 18, 0 }, 0x0, 60, },
-  { 101, 5, 0, 0x20000000ull, 0xf8000000ull, { 49, 50, 0, 0, 0 }, 0x0, 1912, },
-  { 101, 5, 0, 0x20000000ull, 0xf8000000ull, { 49, 50, 0, 0, 0 }, 0x40, 61, },
-  { 102, 5, 1, 0x08000000ull, 0xf8000000ull, { 17, 19, 18, 0, 0 }, 0x40, 1915, },
-  { 103, 5, 1, 0xa0000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 63, },
-  { 104, 5, 1, 0xe0000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1746, },
-  { 105, 3, 0, 0x00000000ull, 0xf8000000ull, { 0, 0, 0, 0, 0 }, 0x0, 64, },
-  { 107, 5, 1, 0x78000000ull, 0xf8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 65, },
-  { 112, 3, 1, 0x08000000ull, 0xc8000000ull, { 23, 18, 0, 0, 0 }, 0x0, 2221, },
-  { 121, 3, 0, 0x80000000ull, 0xf8000000ull, { 0, 0, 0, 0, 0 }, 0x0, 66, },
-  { 121, 3, 0, 0x90000000ull, 0xf8000000ull, { 23, 0, 0, 0, 0 }, 0x0, 742, },
-  { 121, 3, 0, 0x98000000ull, 0xf8000000ull, { 17, 0, 0, 0, 0 }, 0x0, 743, },
-  { 122, 3, 0, 0x70000000ull, 0xf8000000ull, { 24, 0, 0, 0, 0 }, 0xc, 668, },
-  { 123, 3, 1, 0x70000000ull, 0xf8000000ull, { 29, 24, 0, 0, 0 }, 0x8, 669, },
-  { 123, 3, 1, 0x78000000ull, 0xf8000000ull, { 30, 24, 0, 0, 0 }, 0x8, 911, },
-  { 125, 3, 1, 0x00000000ull, 0xf8000000ull, { 23, 32, 0, 0, 0 }, 0x0, 67, },
-  { 125, 3, 1, 0x00000000ull, 0xf8000000ull, { 23, 32, 24, 0, 0 }, 0x400, 68, },
-  { 125, 3, 1, 0x00000000ull, 0xf0000000ull, { 23, 32, 61, 0, 0 }, 0x400, 69, },
-  { 126, 3, 1, 0x40000000ull, 0xf8000000ull, { 23, 32, 0, 0, 0 }, 0x0, 70, },
-  { 126, 3, 1, 0x40000000ull, 0xf8000000ull, { 23, 32, 24, 0, 0 }, 0x400, 71, },
-  { 126, 3, 1, 0x40000000ull, 0xf0000000ull, { 23, 32, 61, 0, 0 }, 0x400, 72, },
-  { 127, 3, 1, 0x80000000ull, 0xf8000000ull, { 23, 32, 0, 0, 0 }, 0x0, 73, },
-  { 127, 3, 1, 0x80000000ull, 0xf8000000ull, { 23, 32, 24, 0, 0 }, 0x400, 74, },
-  { 127, 3, 1, 0x80000000ull, 0xf0000000ull, { 23, 32, 61, 0, 0 }, 0x400, 75, },
-  { 128, 3, 1, 0xc0000000ull, 0xf8000000ull, { 23, 32, 0, 0, 0 }, 0x0, 76, },
-  { 128, 3, 1, 0xc0000000ull, 0xf8000000ull, { 23, 32, 24, 0, 0 }, 0x400, 77, },
-  { 128, 3, 1, 0xc0000000ull, 0xf0000000ull, { 23, 32, 61, 0, 0 }, 0x400, 78, },
-  { 129, 3, 1, 0xc0000000ull, 0xf8000000ull, { 17, 32, 0, 0, 0 }, 0x0, 851, },
-  { 129, 3, 1, 0xc0000000ull, 0xf8000000ull, { 17, 32, 24, 0, 0 }, 0x400, 852, },
-  { 129, 3, 1, 0xc0000000ull, 0xf0000000ull, { 17, 32, 61, 0, 0 }, 0x400, 853, },
-  { 130, 3, 1, 0x40000000ull, 0xf8000000ull, { 17, 32, 0, 0, 0 }, 0x0, 79, },
-  { 130, 3, 1, 0x40000000ull, 0xf8000000ull, { 17, 32, 24, 0, 0 }, 0x400, 80, },
-  { 130, 3, 1, 0x40000000ull, 0xf0000000ull, { 17, 32, 61, 0, 0 }, 0x400, 81, },
-  { 131, 3, 1, 0xc0000000ull, 0xf8000000ull, { 17, 32, 0, 0, 0 }, 0x0, 82, },
-  { 131, 3, 1, 0xc0000000ull, 0xf8000000ull, { 17, 32, 24, 0, 0 }, 0x400, 83, },
-  { 131, 3, 1, 0xc0000000ull, 0xf0000000ull, { 17, 32, 61, 0, 0 }, 0x400, 84, },
-  { 132, 3, 1, 0x00000000ull, 0xf8000000ull, { 17, 32, 0, 0, 0 }, 0x0, 85, },
-  { 132, 3, 1, 0x00000000ull, 0xf8000000ull, { 17, 32, 24, 0, 0 }, 0x400, 86, },
-  { 132, 3, 1, 0x00000000ull, 0xf0000000ull, { 17, 32, 61, 0, 0 }, 0x400, 87, },
-  { 133, 3, 2, 0x48000000ull, 0xf8000000ull, { 17, 18, 32, 0, 0 }, 0x0, 88, },
-  { 133, 3, 2, 0x48000000ull, 0xf8000000ull, { 17, 18, 32, 5, 0 }, 0x400, 89, },
-  { 134, 3, 2, 0xc8000000ull, 0xf8000000ull, { 17, 18, 32, 0, 0 }, 0x0, 90, },
-  { 134, 3, 2, 0xc8000000ull, 0xf8000000ull, { 17, 18, 32, 5, 0 }, 0x400, 91, },
-  { 135, 3, 2, 0x88000000ull, 0xf8000000ull, { 17, 18, 32, 0, 0 }, 0x0, 92, },
-  { 135, 3, 2, 0x88000000ull, 0xf8000000ull, { 17, 18, 32, 4, 0 }, 0x400, 93, },
-  { 136, 3, 1, 0x80000000ull, 0xf8000000ull, { 17, 32, 0, 0, 0 }, 0x0, 94, },
-  { 136, 3, 1, 0x80000000ull, 0xf8000000ull, { 17, 32, 24, 0, 0 }, 0x400, 95, },
-  { 136, 3, 1, 0x80000000ull, 0xf0000000ull, { 17, 32, 61, 0, 0 }, 0x400, 96, },
-  { 139, 3, 0, 0x00000000ull, 0xf8000000ull, { 32, 0, 0, 0, 0 }, 0x0, 97, },
-  { 139, 3, 0, 0x00000000ull, 0xf8000000ull, { 32, 24, 0, 0, 0 }, 0x400, 98, },
-  { 139, 3, 0, 0x00000000ull, 0xf0000000ull, { 32, 61, 0, 0, 0 }, 0x400, 99, },
-  { 140, 3, 0, 0x50000000ull, 0xf8000000ull, { 0, 0, 0, 0, 0 }, 0x21, 100, },
-  { 148, 3, 0, 0x10000000ull, 0xf8000000ull, { 0, 0, 0, 0, 0 }, 0x0, 101, },
-  { 149, 2, 1, 0x80000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 1747, },
-  { 150, 2, 1, 0x80000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 1748, },
-  { 151, 2, 1, 0x80000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 1749, },
-  { 152, 1, 1, 0x00000000ull, 0xf80fe000ull, { 23, 25, 0, 0, 0 }, 0x0, 102, },
-  { 152, 1, 1, 0x00000000ull, 0x07f00000ull, { 23, 62, 0, 0, 0 }, 0x40, 103, },
-  { 152, 1, 1, 0x00000000ull, 0x00300000ull, { 23, 65, 0, 0, 0 }, 0x40, 104, },
-  { 152, 5, 1, 0x80000000ull, 0xf8000000ull, { 17, 19, 0, 0, 0 }, 0xc0, 105, },
-  { 152, 2, 1, 0x00100000ull, 0x00f00000ull, { 14, 24, 0, 0, 0 }, 0x40, 106, },
-  { 152, 2, 1, 0x00000000ull, 0x00f00000ull, { 14, 24, 77, 0, 0 }, 0x0, 2295, },
-  { 152, 2, 1, 0x88000000ull, 0xf8000000ull, { 23, 15, 0, 0, 0 }, 0x0, 108, },
-  { 152, 2, 1, 0x00000000ull, 0x00000000ull, { 8, 24, 63, 0, 0 }, 0x0, 109, },
-  { 152, 2, 1, 0x00000000ull, 0x00000000ull, { 9, 67, 0, 0, 0 }, 0x0, 110, },
-  { 152, 2, 1, 0x80000000ull, 0xf8000000ull, { 23, 7, 0, 0, 0 }, 0x0, 111, },
-  { 152, 2, 1, 0x98000000ull, 0xf8000000ull, { 23, 8, 0, 0, 0 }, 0x0, 112, },
-  { 152, 2, 1, 0x50000000ull, 0xf8000000ull, { 13, 24, 0, 0, 0 }, 0x0, 912, },
-  { 152, 2, 1, 0x50000000ull, 0xf8000000ull, { 13, 54, 0, 0, 0 }, 0x0, 913, },
-  { 152, 2, 1, 0x90000000ull, 0xf8000000ull, { 23, 13, 0, 0, 0 }, 0x0, 914, },
-  { 152, 3, 1, 0x40000000ull, 0xf8000000ull, { 13, 54, 0, 0, 0 }, 0x0, 992, },
-  { 152, 3, 1, 0x50000000ull, 0xf8000000ull, { 13, 24, 0, 0, 0 }, 0x0, 993, },
-  { 152, 3, 1, 0x10000000ull, 0xf8000000ull, { 23, 13, 0, 0, 0 }, 0x0, 994, },
-  { 152, 3, 1, 0x60000000ull, 0xf8000000ull, { 16, 24, 0, 0, 0 }, 0x8, 113, },
-  { 152, 3, 1, 0x20000000ull, 0xf8000000ull, { 23, 16, 0, 0, 0 }, 0x8, 114, },
-  { 152, 3, 1, 0x68000000ull, 0xf8000000ull, { 11, 24, 0, 0, 0 }, 0x8, 115, },
-  { 152, 3, 1, 0x48000000ull, 0xf8000000ull, { 12, 24, 0, 0, 0 }, 0x0, 116, },
-  { 152, 3, 1, 0x28000000ull, 0xf8000000ull, { 23, 10, 0, 0, 0 }, 0x8, 117, },
-  { 152, 3, 1, 0x08000000ull, 0xf8000000ull, { 23, 12, 0, 0, 0 }, 0x0, 118, },
-  { 152, 3, 1, 0x00000000ull, 0xf8000000ull, { 37, 24, 0, 0, 0 }, 0x8, 119, },
-  { 152, 3, 1, 0x08000000ull, 0xf8000000ull, { 28, 24, 0, 0, 0 }, 0x8, 120, },
-  { 152, 3, 1, 0x10000000ull, 0xf8000000ull, { 31, 24, 0, 0, 0 }, 0x8, 121, },
-  { 152, 3, 1, 0x18000000ull, 0xf8000000ull, { 34, 24, 0, 0, 0 }, 0x8, 122, },
-  { 152, 3, 1, 0x20000000ull, 0xf8000000ull, { 35, 24, 0, 0, 0 }, 0x8, 123, },
-  { 152, 3, 1, 0x28000000ull, 0xf8000000ull, { 36, 24, 0, 0, 0 }, 0x8, 124, },
-  { 152, 3, 1, 0x30000000ull, 0xf8000000ull, { 33, 24, 0, 0, 0 }, 0x8, 125, },
-  { 152, 3, 1, 0x80000000ull, 0xf8000000ull, { 23, 37, 0, 0, 0 }, 0x8, 126, },
-  { 152, 3, 1, 0x88000000ull, 0xf8000000ull, { 23, 28, 0, 0, 0 }, 0x8, 127, },
-  { 152, 3, 1, 0x90000000ull, 0xf8000000ull, { 23, 31, 0, 0, 0 }, 0x8, 128, },
-  { 152, 3, 1, 0x98000000ull, 0xf8000000ull, { 23, 34, 0, 0, 0 }, 0x8, 129, },
-  { 152, 3, 1, 0xa0000000ull, 0xf8000000ull, { 23, 35, 0, 0, 0 }, 0x8, 130, },
-  { 152, 3, 1, 0xa8000000ull, 0xf8000000ull, { 23, 36, 0, 0, 0 }, 0x0, 131, },
-  { 152, 3, 1, 0xb0000000ull, 0xf8000000ull, { 23, 33, 0, 0, 0 }, 0x8, 132, },
-  { 152, 3, 1, 0xb8000000ull, 0xf8000000ull, { 23, 27, 0, 0, 0 }, 0x0, 133, },
-  { 152, 7, 1, 0x00000000ull, 0x00000000ull, { 23, 13, 0, 0, 0 }, 0x0, 134, },
-  { 152, 7, 1, 0x00000000ull, 0x00000000ull, { 13, 54, 0, 0, 0 }, 0x0, 135, },
-  { 152, 7, 1, 0x00000000ull, 0x00000000ull, { 13, 24, 0, 0, 0 }, 0x0, 136, },
-  { 153, 6, 1, 0x00000000ull, 0x00100000ull, { 23, 69, 0, 0, 0 }, 0x0, 137, },
-  { 154, 2, 1, 0xa0000000ull, 0xf0000000ull, { 23, 24, 73, 0, 0 }, 0x0, 138, },
-  { 155, 2, 1, 0xa0000000ull, 0xf0000000ull, { 23, 24, 74, 0, 0 }, 0x0, 139, },
-  { 165, 4, 0, 0x00000000ull, 0xf8000000ull, { 64, 0, 0, 0, 0 }, 0x0, 361, },
-  { 165, 5, 0, 0x08000000ull, 0xf8000000ull, { 64, 0, 0, 0, 0 }, 0x0, 774, },
-  { 165, 2, 0, 0x08000000ull, 0xf8000000ull, { 64, 0, 0, 0, 0 }, 0x2, 915, },
-  { 165, 3, 0, 0x08000000ull, 0xf8000000ull, { 64, 0, 0, 0, 0 }, 0x0, 995, },
-  { 165, 6, 0, 0x08000000ull, 0xf8000000ull, { 68, 0, 0, 0, 0 }, 0x0, 2411, },
-  { 165, 7, 0, 0x00000000ull, 0x00000000ull, { 64, 0, 0, 0, 0 }, 0x0, 140, },
-  { 172, 1, 1, 0x70000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 141, },
-  { 172, 1, 1, 0x70000000ull, 0xf8000000ull, { 23, 54, 25, 0, 0 }, 0x0, 142, },
-  { 175, 2, 1, 0x00000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 2394, },
-  { 176, 2, 1, 0x20000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 2297, },
-  { 177, 1, 1, 0x00000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 143, },
-  { 178, 1, 1, 0x00000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 144, },
-  { 179, 1, 1, 0x00000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 145, },
-  { 180, 1, 1, 0x50000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 146, },
-  { 181, 1, 1, 0x50000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 147, },
-  { 182, 1, 1, 0x70000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 148, },
-  { 183, 1, 1, 0x70000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 149, },
-  { 184, 1, 1, 0x20000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 761, },
-  { 185, 1, 1, 0x20000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 762, },
-  { 186, 1, 1, 0x20000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 763, },
-  { 187, 2, 1, 0x50000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 2311, },
-  { 188, 2, 1, 0x70000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 150, },
-  { 189, 2, 1, 0x10000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 2312, },
-  { 190, 2, 1, 0x30000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 151, },
-  { 191, 2, 1, 0xd0000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 1750, },
-  { 192, 2, 1, 0x30000000ull, 0x30000000ull, { 23, 24, 25, 41, 0 }, 0x0, 152, },
-  { 193, 2, 1, 0x90000000ull, 0xf0000000ull, { 23, 25, 0, 0, 0 }, 0x0, 153, },
-  { 195, 3, 1, 0xc0000000ull, 0xf8000000ull, { 23, 25, 24, 0, 0 }, 0x0, 1751, },
-  { 195, 3, 1, 0xc0000000ull, 0xf8000000ull, { 23, 25, 48, 0, 0 }, 0x0, 1752, },
-  { 195, 3, 0, 0x88000000ull, 0xf8000000ull, { 25, 48, 0, 0, 0 }, 0x0, 1774, },
-  { 196, 2, 1, 0xb0000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 154, },
-  { 197, 2, 1, 0x40000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 155, },
-  { 197, 2, 1, 0x50000000ull, 0xf0000000ull, { 23, 24, 38, 0, 0 }, 0x0, 156, },
-  { 198, 2, 1, 0x40000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 157, },
-  { 198, 2, 1, 0x50000000ull, 0xf0000000ull, { 23, 24, 38, 0, 0 }, 0x0, 158, },
-  { 199, 1, 1, 0x80000000ull, 0xe0000000ull, { 23, 24, 40, 25, 0 }, 0x0, 159, },
-  { 200, 2, 1, 0x20000000ull, 0xf0000000ull, { 23, 25, 24, 0, 0 }, 0x0, 160, },
-  { 200, 2, 1, 0x30000000ull, 0xf0000000ull, { 23, 25, 42, 0, 0 }, 0x0, 161, },
-  { 201, 2, 1, 0x20000000ull, 0xf0000000ull, { 23, 25, 24, 0, 0 }, 0x0, 162, },
-  { 201, 2, 1, 0x30000000ull, 0xf0000000ull, { 23, 25, 42, 0, 0 }, 0x0, 163, },
-  { 202, 1, 1, 0xc0000000ull, 0xe0000000ull, { 23, 24, 40, 25, 0 }, 0x0, 164, },
-  { 203, 1, 1, 0x20000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 165, },
-  { 204, 1, 1, 0x20000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 166, },
-  { 205, 1, 1, 0x20000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 167, },
-  { 206, 3, 0, 0x48000000ull, 0xf8000000ull, { 25, 24, 0, 0, 0 }, 0x8, 943, },
-  { 206, 3, 0, 0x50000000ull, 0xf8000000ull, { 25, 24, 0, 0, 0 }, 0xc, 862, },
-  { 206, 3, 0, 0xa0000000ull, 0xf8000000ull, { 25, 0, 0, 0, 0 }, 0x8, 744, },
-  { 207, 3, 0, 0x60000000ull, 0xf8000000ull, { 25, 24, 0, 0, 0 }, 0x8, 670, },
-  { 212, 4, 0, 0x40000000ull, 0xf8000000ull, { 0, 0, 0, 0, 0 }, 0x22c, 168, },
-  { 213, 3, 0, 0x38000000ull, 0x78000000ull, { 66, 0, 0, 0, 0 }, 0x8, 169, },
-  { 214, 3, 0, 0x28000000ull, 0x78000000ull, { 66, 0, 0, 0, 0 }, 0x0, 170, },
-  { 223, 3, 1, 0x08000000ull, 0xc8000000ull, { 17, 24, 0, 0, 0 }, 0x0, 2222, },
-  { 224, 2, 1, 0x00000000ull, 0x04000000ull, { 23, 24, 44, 0, 0 }, 0x140, 171, },
-  { 224, 2, 1, 0x40000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 172, },
-  { 225, 1, 1, 0x80000000ull, 0xe0000000ull, { 23, 24, 39, 25, 0 }, 0x0, 173, },
-  { 226, 1, 1, 0xc0000000ull, 0xe0000000ull, { 23, 24, 39, 25, 0 }, 0x0, 174, },
-  { 227, 2, 1, 0x00000000ull, 0x00002000ull, { 23, 25, 75, 0, 0 }, 0x140, 2318, },
-  { 227, 2, 1, 0x20000000ull, 0xf0000000ull, { 23, 25, 24, 0, 0 }, 0x0, 176, },
-  { 228, 2, 1, 0x00000000ull, 0x00000000ull, { 23, 24, 25, 43, 0 }, 0x0, 177, },
-  { 233, 3, 0, 0x80000000ull, 0xf8000000ull, { 0, 0, 0, 0, 0 }, 0x0, 672, },
-  { 234, 3, 0, 0x30000000ull, 0x78000000ull, { 66, 0, 0, 0, 0 }, 0x8, 178, },
-  { 236, 3, 1, 0x00000000ull, 0xf8000000ull, { 32, 24, 0, 0, 0 }, 0x0, 179, },
-  { 236, 3, 1, 0x00000000ull, 0xf0000000ull, { 32, 24, 60, 0, 0 }, 0x400, 180, },
-  { 237, 3, 1, 0x40000000ull, 0xf8000000ull, { 32, 24, 0, 0, 0 }, 0x0, 181, },
-  { 237, 3, 1, 0x40000000ull, 0xf0000000ull, { 32, 24, 60, 0, 0 }, 0x400, 182, },
-  { 238, 3, 1, 0x80000000ull, 0xf8000000ull, { 32, 24, 0, 0, 0 }, 0x0, 183, },
-  { 238, 3, 1, 0x80000000ull, 0xf0000000ull, { 32, 24, 60, 0, 0 }, 0x400, 184, },
-  { 239, 3, 1, 0xc0000000ull, 0xf8000000ull, { 32, 24, 0, 0, 0 }, 0x0, 185, },
-  { 239, 3, 1, 0xc0000000ull, 0xf0000000ull, { 32, 24, 60, 0, 0 }, 0x400, 186, },
-  { 240, 3, 1, 0xc0000000ull, 0xf8000000ull, { 32, 18, 0, 0, 0 }, 0x0, 2225, },
-  { 240, 3, 1, 0xc0000000ull, 0xf0000000ull, { 32, 18, 60, 0, 0 }, 0x400, 2226, },
-  { 241, 3, 1, 0x40000000ull, 0xf8000000ull, { 32, 18, 0, 0, 0 }, 0x0, 187, },
-  { 241, 3, 1, 0x40000000ull, 0xf0000000ull, { 32, 18, 60, 0, 0 }, 0x400, 188, },
-  { 242, 3, 1, 0xc0000000ull, 0xf8000000ull, { 32, 18, 0, 0, 0 }, 0x0, 189, },
-  { 242, 3, 1, 0xc0000000ull, 0xf0000000ull, { 32, 18, 60, 0, 0 }, 0x400, 190, },
-  { 243, 3, 1, 0x00000000ull, 0xf8000000ull, { 32, 18, 0, 0, 0 }, 0x0, 191, },
-  { 243, 3, 1, 0x00000000ull, 0xf0000000ull, { 32, 18, 60, 0, 0 }, 0x400, 192, },
-  { 244, 3, 1, 0x80000000ull, 0xf8000000ull, { 32, 18, 0, 0, 0 }, 0x0, 193, },
-  { 244, 3, 1, 0x80000000ull, 0xf0000000ull, { 32, 18, 60, 0, 0 }, 0x400, 194, },
-  { 245, 1, 1, 0x28000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 195, },
-  { 245, 1, 1, 0x20000000ull, 0xf8000000ull, { 23, 24, 25, 3, 0 }, 0x0, 196, },
-  { 245, 1, 1, 0x28000000ull, 0xf8000000ull, { 23, 54, 25, 0, 0 }, 0x0, 197, },
-  { 246, 3, 0, 0x20000000ull, 0x78000000ull, { 66, 0, 0, 0, 0 }, 0x0, 198, },
-  { 247, 2, 1, 0xa0000000ull, 0xf8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 199, },
-  { 248, 2, 1, 0xa8000000ull, 0xf8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 200, },
-  { 249, 2, 1, 0xb0000000ull, 0xf8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 201, },
-  { 250, 3, 0, 0x98000000ull, 0xf8000000ull, { 0, 0, 0, 0, 0 }, 0x0, 918, },
-  { 251, 3, 1, 0xf8000000ull, 0xf8000000ull, { 23, 25, 0, 0, 0 }, 0x8, 202, },
-  { 252, 2, 2, 0x00000000ull, 0x00003000ull, { 21, 22, 25, 75, 0 }, 0x0, 2416, },
-  { 252, 2, 2, 0x00000000ull, 0x00003000ull, { 22, 21, 25, 75, 0 }, 0x40, 1675, },
-  { 253, 3, 1, 0xd0000000ull, 0xf8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 203, },
-  { 254, 2, 2, 0x00002000ull, 0x00003000ull, { 21, 22, 25, 0, 0 }, 0x0, 2418, },
-  { 254, 2, 2, 0x00002000ull, 0x00003000ull, { 22, 21, 25, 0, 0 }, 0x40, 1677, },
-  { 255, 3, 1, 0xf0000000ull, 0xf8000000ull, { 23, 25, 0, 0, 0 }, 0x8, 204, },
-  { 257, 3, 1, 0xd8000000ull, 0xf8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 205, },
-  { 261, 2, 1, 0x40000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 901, },
-  { 262, 2, 1, 0x40000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 902, },
-  { 263, 2, 1, 0x40000000ull, 0xf0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 903, },
-  { 271, 3, 1, 0x08000000ull, 0xf8000000ull, { 23, 32, 24, 0, 0 }, 0x0, 206, },
-  { 272, 3, 1, 0x48000000ull, 0xf8000000ull, { 23, 32, 24, 0, 0 }, 0x0, 207, },
-  { 273, 3, 1, 0x88000000ull, 0xf8000000ull, { 23, 32, 24, 0, 0 }, 0x0, 208, },
-  { 274, 3, 1, 0xc8000000ull, 0xf8000000ull, { 23, 32, 24, 0, 0 }, 0x0, 209, },
-  { 276, 5, 1, 0x00000000ull, 0x00000000ull, { 17, 19, 20, 18, 0 }, 0x0, 947, },
-  { 276, 5, 1, 0x00000000ull, 0x00000000ull, { 17, 19, 20, 18, 0 }, 0x40, 987, },
-  { 277, 5, 1, 0x00000000ull, 0x000fe000ull, { 17, 19, 20, 0, 0 }, 0x40, 948, },
-  { 278, 1, 1, 0x78000000ull, 0xf8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 210, },
-  { 278, 1, 1, 0x78000000ull, 0xf8000000ull, { 23, 54, 25, 0, 0 }, 0x0, 211, },
-  { 281, 2, 1, 0x80000000ull, 0xf8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 212, },
-  { 282, 2, 1, 0x88000000ull, 0xf8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 213, },
-  { 283, 2, 1, 0x90000000ull, 0xf8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 214, },
+  { 5, 1, 1, 0x0000010000000000ull, 0x000001eff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 0, },
+  { 5, 1, 1, 0x0000010008000000ull, 0x000001eff8000000ull, { 23, 24, 25, 3, 0 }, 0x0, 1, },
+  { 5, 7, 1, 0x0000000000000000ull, 0x0000000000000000ull, { 23, 65, 26, 0, 0 }, 0x0, 2, },
+  { 5, 7, 1, 0x0000000000000000ull, 0x0000000000000000ull, { 23, 62, 25, 0, 0 }, 0x0, 3, },
+  { 6, 1, 1, 0x0000012000000000ull, 0x000001e000000000ull, { 23, 65, 26, 0, 0 }, 0x0, 4, },
+  { 7, 1, 1, 0x0000010040000000ull, 0x000001eff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 5, },
+  { 7, 1, 1, 0x0000010c00000000ull, 0x000001ee00000000ull, { 23, 62, 25, 0, 0 }, 0x0, 6, },
+  { 8, 1, 1, 0x0000010800000000ull, 0x000001ee00000000ull, { 23, 62, 25, 0, 0 }, 0x0, 7, },
+  { 9, 3, 1, 0x0000002c00000000ull, 0x000001ee00000000ull, { 23, 2, 51, 52, 53 }, 0x221, 8, },
+  { 10, 1, 1, 0x0000010060000000ull, 0x000001eff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 9, },
+  { 10, 1, 1, 0x0000010160000000ull, 0x000001eff8000000ull, { 23, 54, 25, 0, 0 }, 0x0, 10, },
+  { 11, 1, 1, 0x0000010068000000ull, 0x000001eff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 11, },
+  { 11, 1, 1, 0x0000010168000000ull, 0x000001eff8000000ull, { 23, 54, 25, 0, 0 }, 0x0, 12, },
+  { 14, 4, 0, 0x0000000100000000ull, 0x000001eff80011ffull, { 15, 0, 0, 0, 0 }, 0x40, 814, },
+  { 14, 4, 0, 0x0000000100000000ull, 0x000001eff80011c0ull, { 15, 0, 0, 0, 0 }, 0x0, 680, },
+  { 14, 4, 0, 0x0000000100000000ull, 0x000001eff80011c0ull, { 15, 0, 0, 0, 0 }, 0x40, 681, },
+  { 14, 4, 0, 0x0000000108000100ull, 0x000001eff80011c0ull, { 15, 0, 0, 0, 0 }, 0x200, 1843, },
+  { 14, 4, 0, 0x0000000108000100ull, 0x000001eff80011c0ull, { 15, 0, 0, 0, 0 }, 0x240, 1844, },
+  { 14, 4, 1, 0x0000002000000000ull, 0x000001ee00001000ull, { 14, 15, 0, 0, 0 }, 0x0, 437, },
+  { 14, 4, 1, 0x0000002000000000ull, 0x000001ee00001000ull, { 14, 15, 0, 0, 0 }, 0x40, 438, },
+  { 14, 4, 0, 0x0000008000000000ull, 0x000001ee000011ffull, { 80, 0, 0, 0, 0 }, 0x40, 835, },
+  { 14, 4, 0, 0x0000008000000000ull, 0x000001ee000011c0ull, { 80, 0, 0, 0, 0 }, 0x0, 682, },
+  { 14, 4, 0, 0x0000008000000000ull, 0x000001ee000011c0ull, { 80, 0, 0, 0, 0 }, 0x40, 683, },
+  { 14, 4, 0, 0x0000008000000080ull, 0x000001ee000011c0ull, { 80, 0, 0, 0, 0 }, 0x210, 2479, },
+  { 14, 4, 0, 0x0000008000000080ull, 0x000001ee000011c0ull, { 80, 0, 0, 0, 0 }, 0x250, 2480, },
+  { 14, 4, 0, 0x0000008000000140ull, 0x000001ee000011c0ull, { 80, 0, 0, 0, 0 }, 0x30, 445, },
+  { 14, 4, 0, 0x0000008000000140ull, 0x000001ee000011c0ull, { 80, 0, 0, 0, 0 }, 0x70, 446, },
+  { 14, 4, 0, 0x0000008000000180ull, 0x000001ee000011c0ull, { 80, 0, 0, 0, 0 }, 0x230, 443, },
+  { 14, 4, 0, 0x0000008000000180ull, 0x000001ee000011c0ull, { 80, 0, 0, 0, 0 }, 0x270, 444, },
+  { 14, 4, 1, 0x000000a000000000ull, 0x000001ee00001000ull, { 14, 80, 0, 0, 0 }, 0x0, 439, },
+  { 14, 4, 1, 0x000000a000000000ull, 0x000001ee00001000ull, { 14, 80, 0, 0, 0 }, 0x40, 440, },
+  { 15, 4, 0, 0x0000000000000000ull, 0x000001e1f8000000ull, { 64, 0, 0, 0, 0 }, 0x0, 393, },
+  { 15, 5, 0, 0x0000000000000000ull, 0x000001e3f8000000ull, { 64, 0, 0, 0, 0 }, 0x0, 806, },
+  { 15, 2, 0, 0x0000000000000000ull, 0x000001eff8000000ull, { 64, 0, 0, 0, 0 }, 0x2, 949, },
+  { 15, 3, 0, 0x0000000000000000ull, 0x000001eff8000000ull, { 64, 0, 0, 0, 0 }, 0x0, 1038, },
+  { 15, 6, 0, 0x0000000000000000ull, 0x000001eff8000000ull, { 68, 0, 0, 0, 0 }, 0x0, 2483, },
+  { 15, 7, 0, 0x0000000000000000ull, 0x0000000000000000ull, { 64, 0, 0, 0, 0 }, 0x0, 15, },
+  { 16, 6, 0, 0x0000018000000000ull, 0x000001ee000011ffull, { 81, 0, 0, 0, 0 }, 0x40, 868, },
+  { 16, 6, 0, 0x0000018000000000ull, 0x000001ee000011c0ull, { 81, 0, 0, 0, 0 }, 0x0, 684, },
+  { 16, 6, 0, 0x0000018000000000ull, 0x000001ee000011c0ull, { 81, 0, 0, 0, 0 }, 0x40, 685, },
+  { 16, 6, 1, 0x000001a000000000ull, 0x000001ee00001000ull, { 14, 81, 0, 0, 0 }, 0x0, 441, },
+  { 16, 6, 1, 0x000001a000000000ull, 0x000001ee00001000ull, { 14, 81, 0, 0, 0 }, 0x40, 442, },
+  { 17, 4, 0, 0x0000004080000000ull, 0x000001e9f8000018ull, { 15, 76, 0, 0, 0 }, 0x20, 2365, },
+  { 17, 4, 0, 0x000000e000000000ull, 0x000001e800000018ull, { 80, 76, 0, 0, 0 }, 0x20, 2366, },
+  { 18, 4, 0, 0x0000000060000000ull, 0x000001e1f8000000ull, { 0, 0, 0, 0, 0 }, 0x2c, 216, },
+  { 22, 2, 0, 0x0000000200000000ull, 0x000001ee00000000ull, { 24, 79, 0, 0, 0 }, 0x0, 1848, },
+  { 22, 3, 0, 0x0000000800000000ull, 0x000001ee00000000ull, { 23, 80, 0, 0, 0 }, 0x0, 218, },
+  { 22, 3, 0, 0x0000000c00000000ull, 0x000001ee00000000ull, { 17, 80, 0, 0, 0 }, 0x0, 219, },
+  { 22, 3, 0, 0x0000002200000000ull, 0x000001ee00000000ull, { 24, 79, 0, 0, 0 }, 0x0, 1849, },
+  { 22, 3, 0, 0x0000002600000000ull, 0x000001ee00000000ull, { 18, 79, 0, 0, 0 }, 0x0, 1850, },
+  { 22, 7, 0, 0x0000000000000000ull, 0x0000000000000000ull, { 24, 79, 0, 0, 0 }, 0x0, 1851, },
+  { 25, 4, 0, 0x0000000020000000ull, 0x000001e1f8000000ull, { 0, 0, 0, 0, 0 }, 0x224, 17, },
+  { 26, 1, 2, 0x0000018000000000ull, 0x000001fe00001000ull, { 21, 22, 24, 25, 0 }, 0x0, 1014, },
+  { 26, 1, 2, 0x0000018000000000ull, 0x000001fe00001000ull, { 22, 21, 25, 24, 0 }, 0x0, 990, },
+  { 26, 1, 2, 0x0000018000000000ull, 0x000001fe00001000ull, { 21, 22, 25, 24, 0 }, 0x0, 918, },
+  { 26, 1, 2, 0x0000018000000000ull, 0x000001fe00001000ull, { 22, 21, 24, 25, 0 }, 0x0, 897, },
+  { 26, 1, 2, 0x0000018200000000ull, 0x000001fe00001000ull, { 21, 22, 24, 25, 0 }, 0x40, 1146, },
+  { 26, 1, 2, 0x0000019000000000ull, 0x000001fe00001000ull, { 21, 22, 6, 25, 0 }, 0x0, 919, },
+  { 26, 1, 2, 0x0000019000000000ull, 0x000001fe00001000ull, { 21, 22, 25, 6, 0 }, 0x40, 1016, },
+  { 26, 1, 2, 0x0000019000000000ull, 0x000001fe00001000ull, { 21, 22, 6, 25, 0 }, 0x40, 993, },
+  { 26, 1, 2, 0x0000018800000000ull, 0x000001ee00001000ull, { 21, 22, 54, 25, 0 }, 0x0, 1018, },
+  { 26, 1, 2, 0x0000018800000000ull, 0x000001ee00001000ull, { 21, 22, 56, 25, 0 }, 0x0, 994, },
+  { 26, 1, 2, 0x0000018800000000ull, 0x000001ee00001000ull, { 22, 21, 56, 25, 0 }, 0x0, 922, },
+  { 26, 1, 2, 0x0000018800000000ull, 0x000001ee00001000ull, { 22, 21, 54, 25, 0 }, 0x0, 901, },
+  { 26, 1, 2, 0x0000018a00000000ull, 0x000001ee00001000ull, { 21, 22, 54, 25, 0 }, 0x40, 1149, },
+  { 26, 1, 2, 0x000001a800000000ull, 0x000001ee00001000ull, { 21, 22, 58, 25, 0 }, 0x0, 1009, },
+  { 26, 1, 2, 0x000001a800000000ull, 0x000001ee00001000ull, { 22, 21, 58, 25, 0 }, 0x0, 939, },
+  { 26, 1, 2, 0x000001c200000000ull, 0x000001fe00001000ull, { 22, 21, 24, 25, 0 }, 0x40, 1150, },
+  { 26, 1, 2, 0x000001d000000000ull, 0x000001fe00001000ull, { 22, 21, 6, 25, 0 }, 0x40, 995, },
+  { 26, 1, 2, 0x000001d000000000ull, 0x000001fe00001000ull, { 22, 21, 25, 6, 0 }, 0x40, 903, },
+  { 26, 1, 2, 0x000001ca00000000ull, 0x000001ee00001000ull, { 22, 21, 54, 25, 0 }, 0x40, 1151, },
+  { 27, 1, 2, 0x0000018400000000ull, 0x000001fe00001000ull, { 21, 22, 24, 25, 0 }, 0x0, 1021, },
+  { 27, 1, 2, 0x0000018400000000ull, 0x000001fe00001000ull, { 22, 21, 25, 24, 0 }, 0x0, 997, },
+  { 27, 1, 2, 0x0000018400000000ull, 0x000001fe00001000ull, { 21, 22, 25, 24, 0 }, 0x0, 925, },
+  { 27, 1, 2, 0x0000018400000000ull, 0x000001fe00001000ull, { 22, 21, 24, 25, 0 }, 0x0, 904, },
+  { 27, 1, 2, 0x0000018600000000ull, 0x000001fe00001000ull, { 21, 22, 24, 25, 0 }, 0x40, 1154, },
+  { 27, 1, 2, 0x0000019400000000ull, 0x000001fe00001000ull, { 21, 22, 6, 25, 0 }, 0x0, 926, },
+  { 27, 1, 2, 0x0000019400000000ull, 0x000001fe00001000ull, { 21, 22, 25, 6, 0 }, 0x40, 1023, },
+  { 27, 1, 2, 0x0000019400000000ull, 0x000001fe00001000ull, { 21, 22, 6, 25, 0 }, 0x40, 1000, },
+  { 27, 1, 2, 0x0000018c00000000ull, 0x000001ee00001000ull, { 21, 22, 54, 25, 0 }, 0x0, 1025, },
+  { 27, 1, 2, 0x0000018c00000000ull, 0x000001ee00001000ull, { 21, 22, 56, 25, 0 }, 0x0, 1001, },
+  { 27, 1, 2, 0x0000018c00000000ull, 0x000001ee00001000ull, { 22, 21, 56, 25, 0 }, 0x0, 929, },
+  { 27, 1, 2, 0x0000018c00000000ull, 0x000001ee00001000ull, { 22, 21, 54, 25, 0 }, 0x0, 908, },
+  { 27, 1, 2, 0x0000018e00000000ull, 0x000001ee00001000ull, { 21, 22, 54, 25, 0 }, 0x40, 1157, },
+  { 27, 1, 2, 0x000001ac00000000ull, 0x000001ee00001000ull, { 21, 22, 55, 25, 0 }, 0x0, 1035, },
+  { 27, 1, 2, 0x000001ac00000000ull, 0x000001ee00001000ull, { 21, 22, 57, 25, 0 }, 0x0, 1011, },
+  { 27, 1, 2, 0x000001ac00000000ull, 0x000001ee00001000ull, { 22, 21, 57, 25, 0 }, 0x0, 941, },
+  { 27, 1, 2, 0x000001ac00000000ull, 0x000001ee00001000ull, { 22, 21, 55, 25, 0 }, 0x0, 917, },
+  { 27, 1, 2, 0x000001c600000000ull, 0x000001fe00001000ull, { 22, 21, 24, 25, 0 }, 0x40, 1158, },
+  { 27, 1, 2, 0x000001d400000000ull, 0x000001fe00001000ull, { 22, 21, 6, 25, 0 }, 0x40, 1002, },
+  { 27, 1, 2, 0x000001d400000000ull, 0x000001fe00001000ull, { 22, 21, 25, 6, 0 }, 0x40, 910, },
+  { 27, 1, 2, 0x000001ce00000000ull, 0x000001ee00001000ull, { 22, 21, 54, 25, 0 }, 0x40, 1159, },
+  { 28, 3, 1, 0x0000008008000000ull, 0x000001fff8000000ull, { 23, 32, 24, 1, 0 }, 0x0, 251, },
+  { 29, 3, 1, 0x0000008048000000ull, 0x000001fff8000000ull, { 23, 32, 24, 1, 0 }, 0x0, 252, },
+  { 30, 3, 1, 0x0000008088000000ull, 0x000001fff8000000ull, { 23, 32, 24, 1, 0 }, 0x0, 253, },
+  { 31, 3, 1, 0x00000080c8000000ull, 0x000001fff8000000ull, { 23, 32, 24, 1, 0 }, 0x0, 254, },
+  { 33, 4, 0, 0x0000000010000000ull, 0x000001e1f8000000ull, { 0, 0, 0, 0, 0 }, 0x224, 18, },
+  { 35, 2, 1, 0x00000000c0000000ull, 0x000001eff8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 976, },
+  { 36, 2, 1, 0x00000000c8000000ull, 0x000001eff8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 977, },
+  { 38, 2, 1, 0x0000008000000000ull, 0x000001e000000000ull, { 23, 24, 25, 46, 71 }, 0x0, 19, },
+  { 38, 2, 1, 0x000000a600000000ull, 0x000001ee04000000ull, { 23, 24, 44, 72, 0 }, 0x0, 2487, },
+  { 38, 2, 1, 0x000000a604000000ull, 0x000001ee04000000ull, { 23, 54, 44, 72, 0 }, 0x0, 2488, },
+  { 38, 2, 1, 0x000000ae00000000ull, 0x000001ee00000000ull, { 23, 47, 25, 45, 72 }, 0x0, 20, },
+  { 42, 4, 0, 0x0000000080000000ull, 0x000001e1f8000000ull, { 0, 0, 0, 0, 0 }, 0x20, 21, },
+  { 47, 2, 1, 0x000000a400000000ull, 0x000001ee00002000ull, { 23, 25, 75, 72, 0 }, 0x0, 2383, },
+  { 49, 5, 1, 0x0000000080000000ull, 0x000001e3f80fe000ull, { 17, 19, 0, 0, 0 }, 0x40, 23, },
+  { 50, 5, 1, 0x0000010008000000ull, 0x000001fff8000000ull, { 17, 19, 18, 0, 0 }, 0x40, 1900, },
+  { 51, 5, 1, 0x00000000b8000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1901, },
+  { 51, 5, 1, 0x00000000b8000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 25, },
+  { 52, 5, 1, 0x00000000b0000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1902, },
+  { 52, 5, 1, 0x00000000b0000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 26, },
+  { 53, 5, 1, 0x0000000160000000ull, 0x000001e3f8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 27, },
+  { 54, 5, 1, 0x0000000168000000ull, 0x000001e3f8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 28, },
+  { 56, 3, 0, 0x0000002180000000ull, 0x000001eff8000000ull, { 25, 0, 0, 0, 0 }, 0x0, 29, },
+  { 57, 5, 0, 0x0000000040000000ull, 0x000001eff8000000ull, { 78, 0, 0, 0, 0 }, 0x0, 1903, },
+  { 57, 5, 0, 0x0000000040000000ull, 0x000001eff8000000ull, { 78, 0, 0, 0, 0 }, 0x40, 30, },
+  { 58, 5, 2, 0x000000a000000000ull, 0x000001e000001000ull, { 21, 22, 18, 59, 0 }, 0x0, 1040, },
+  { 58, 5, 2, 0x000000a000000000ull, 0x000001e000001000ull, { 22, 21, 18, 59, 0 }, 0x40, 1179, },
+  { 59, 5, 0, 0x0000000028000000ull, 0x000001eff8000000ull, { 0, 0, 0, 0, 0 }, 0x0, 1904, },
+  { 59, 5, 0, 0x0000000028000000ull, 0x000001eff8000000ull, { 0, 0, 0, 0, 0 }, 0x40, 31, },
+  { 60, 5, 2, 0x0000008000000000ull, 0x000001fe00001000ull, { 21, 22, 18, 19, 0 }, 0x0, 790, },
+  { 60, 5, 2, 0x0000008000000000ull, 0x000001fe00001000ull, { 21, 22, 18, 19, 0 }, 0x40, 791, },
+  { 60, 5, 2, 0x0000009000000000ull, 0x000001fe00001000ull, { 21, 22, 19, 18, 0 }, 0x0, 932, },
+  { 60, 5, 2, 0x0000009000000000ull, 0x000001fe00001000ull, { 21, 22, 19, 18, 0 }, 0x40, 933, },
+  { 60, 5, 2, 0x0000008000000000ull, 0x000001fe00001000ull, { 22, 21, 18, 19, 0 }, 0x0, 1160, },
+  { 60, 5, 2, 0x0000008000000000ull, 0x000001fe00001000ull, { 22, 21, 18, 19, 0 }, 0x40, 1161, },
+  { 60, 5, 2, 0x0000009000000000ull, 0x000001fe00001000ull, { 22, 21, 19, 18, 0 }, 0x0, 1167, },
+  { 60, 5, 2, 0x0000009000000000ull, 0x000001fe00001000ull, { 22, 21, 19, 18, 0 }, 0x40, 1168, },
+  { 61, 5, 1, 0x00000000c0000000ull, 0x000001eff8000000ull, { 17, 18, 0, 0, 0 }, 0x0, 887, },
+  { 61, 5, 1, 0x00000000c0000000ull, 0x000001eff8000000ull, { 17, 18, 0, 0, 0 }, 0x40, 888, },
+  { 61, 5, 1, 0x00000000e0000000ull, 0x000001e3f8000000ull, { 17, 18, 0, 0, 0 }, 0x0, 2485, },
+  { 61, 5, 1, 0x0000010008000000ull, 0x000001fff80fe000ull, { 17, 19, 0, 0, 0 }, 0x40, 2486, },
+  { 62, 3, 1, 0x0000008488000000ull, 0x000001fff8000000ull, { 23, 32, 70, 0, 0 }, 0x0, 255, },
+  { 63, 3, 1, 0x00000084c8000000ull, 0x000001fff8000000ull, { 23, 32, 70, 0, 0 }, 0x0, 256, },
+  { 66, 3, 0, 0x0000000060000000ull, 0x000001eff8000000ull, { 0, 0, 0, 0, 0 }, 0x21, 32, },
+  { 67, 5, 1, 0x0000010000000000ull, 0x000001fc00000000ull, { 17, 19, 20, 18, 0 }, 0x0, 1938, },
+  { 67, 5, 1, 0x0000010000000000ull, 0x000001fc00000000ull, { 17, 19, 20, 18, 0 }, 0x40, 33, },
+  { 68, 5, 1, 0x00000000a8000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1939, },
+  { 68, 5, 1, 0x00000000a8000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 34, },
+  { 69, 5, 1, 0x0000000080000000ull, 0x000001e3f8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1856, },
+  { 70, 5, 1, 0x00000000a0000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1940, },
+  { 70, 5, 1, 0x00000000a0000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 35, },
+  { 71, 5, 1, 0x00000001c8000000ull, 0x000001e3f8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1013, },
+  { 72, 5, 1, 0x0000010000000000ull, 0x000001fc000fe000ull, { 17, 19, 20, 0, 0 }, 0x40, 1943, },
+  { 73, 5, 1, 0x0000014000000000ull, 0x000001fc00000000ull, { 17, 19, 20, 18, 0 }, 0x0, 1946, },
+  { 73, 5, 1, 0x0000014000000000ull, 0x000001fc00000000ull, { 17, 19, 20, 18, 0 }, 0x40, 37, },
+  { 74, 5, 1, 0x0000000088000000ull, 0x000001e3f8000000ull, { 17, 19, 0, 0, 0 }, 0xc0, 38, },
+  { 75, 5, 1, 0x0000000088000000ull, 0x000001e3f80fe000ull, { 17, 19, 0, 0, 0 }, 0x40, 39, },
+  { 76, 5, 1, 0x0000018000000000ull, 0x000001fc00000000ull, { 17, 19, 20, 18, 0 }, 0x0, 1949, },
+  { 76, 5, 1, 0x0000018000000000ull, 0x000001fc00000000ull, { 17, 19, 20, 18, 0 }, 0x40, 40, },
+  { 77, 5, 1, 0x0000018000000000ull, 0x000001fc000fe000ull, { 17, 19, 20, 0, 0 }, 0x40, 1952, },
+  { 78, 5, 1, 0x0000010008000000ull, 0x000001fff80fe000ull, { 17, 19, 0, 0, 0 }, 0x40, 1955, },
+  { 79, 5, 1, 0x0000000170000000ull, 0x000001e3f8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 43, },
+  { 80, 5, 1, 0x0000002080000000ull, 0x000001e3f80fe000ull, { 17, 19, 0, 0, 0 }, 0x40, 44, },
+  { 81, 5, 1, 0x0000000140000000ull, 0x000001e3f8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 45, },
+  { 82, 5, 1, 0x00000020b8000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1956, },
+  { 82, 5, 1, 0x00000020b8000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 46, },
+  { 83, 5, 1, 0x00000020b0000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1957, },
+  { 83, 5, 1, 0x00000020b0000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 47, },
+  { 84, 5, 1, 0x0000002180000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 792, },
+  { 84, 5, 1, 0x0000002180000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 793, },
+  { 84, 5, 1, 0x0000002188000000ull, 0x000001eff8000000ull, { 17, 19, 18, 0, 0 }, 0x40, 934, },
+  { 85, 5, 1, 0x00000020c0000000ull, 0x000001eff8000000ull, { 17, 18, 0, 0, 0 }, 0x0, 889, },
+  { 85, 5, 1, 0x00000020c0000000ull, 0x000001eff8000000ull, { 17, 18, 0, 0, 0 }, 0x40, 890, },
+  { 86, 5, 1, 0x0000013000000000ull, 0x000001fc00000000ull, { 17, 19, 20, 18, 0 }, 0x0, 1974, },
+  { 86, 5, 1, 0x0000013000000000ull, 0x000001fc00000000ull, { 17, 19, 20, 18, 0 }, 0x40, 48, },
+  { 87, 5, 1, 0x00000020a8000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1975, },
+  { 87, 5, 1, 0x00000020a8000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 49, },
+  { 88, 5, 1, 0x0000002080000000ull, 0x000001e3f8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1864, },
+  { 89, 5, 1, 0x00000020a0000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1976, },
+  { 89, 5, 1, 0x00000020a0000000ull, 0x000001eff8000000ull, { 17, 18, 19, 0, 0 }, 0x40, 50, },
+  { 90, 5, 1, 0x0000013000000000ull, 0x000001fc000fe000ull, { 17, 19, 20, 0, 0 }, 0x40, 1977, },
+  { 91, 5, 1, 0x0000017000000000ull, 0x000001fc00000000ull, { 17, 19, 20, 18, 0 }, 0x0, 1978, },
+  { 91, 5, 1, 0x0000017000000000ull, 0x000001fc00000000ull, { 17, 19, 20, 18, 0 }, 0x40, 52, },
+  { 92, 5, 1, 0x0000002088000000ull, 0x000001e3f8000000ull, { 17, 19, 0, 0, 0 }, 0xc0, 53, },
+  { 93, 5, 1, 0x0000002088000000ull, 0x000001e3f80fe000ull, { 17, 19, 0, 0, 0 }, 0x40, 54, },
+  { 94, 5, 1, 0x000001b000000000ull, 0x000001fc00000000ull, { 17, 19, 20, 18, 0 }, 0x0, 1979, },
+  { 94, 5, 1, 0x000001b000000000ull, 0x000001fc00000000ull, { 17, 19, 20, 18, 0 }, 0x40, 55, },
+  { 95, 5, 1, 0x000001b000000000ull, 0x000001fc000fe000ull, { 17, 19, 20, 0, 0 }, 0x40, 1980, },
+  { 96, 5, 2, 0x0000002200000000ull, 0x000001fe00000000ull, { 17, 22, 18, 19, 0 }, 0x0, 1981, },
+  { 96, 5, 2, 0x0000002200000000ull, 0x000001fe00000000ull, { 17, 22, 18, 19, 0 }, 0x40, 57, },
+  { 97, 5, 2, 0x0000003200000000ull, 0x000001fe00000000ull, { 17, 22, 19, 0, 0 }, 0x0, 1982, },
+  { 97, 5, 2, 0x0000003200000000ull, 0x000001fe00000000ull, { 17, 22, 19, 0, 0 }, 0x40, 58, },
+  { 98, 5, 2, 0x0000000200000000ull, 0x000001fe00000000ull, { 17, 22, 18, 19, 0 }, 0x0, 1983, },
+  { 98, 5, 2, 0x0000000200000000ull, 0x000001fe00000000ull, { 17, 22, 18, 19, 0 }, 0x40, 59, },
+  { 99, 5, 2, 0x0000001200000000ull, 0x000001fe00000000ull, { 17, 22, 19, 0, 0 }, 0x0, 1984, },
+  { 99, 5, 2, 0x0000001200000000ull, 0x000001fe00000000ull, { 17, 22, 19, 0, 0 }, 0x40, 60, },
+  { 100, 5, 1, 0x000001c000000000ull, 0x000001f000000000ull, { 17, 19, 20, 18, 0 }, 0x0, 61, },
+  { 101, 5, 0, 0x0000000020000000ull, 0x000001eff8000000ull, { 49, 50, 0, 0, 0 }, 0x0, 1985, },
+  { 101, 5, 0, 0x0000000020000000ull, 0x000001eff8000000ull, { 49, 50, 0, 0, 0 }, 0x40, 62, },
+  { 102, 5, 1, 0x0000014008000000ull, 0x000001fff8000000ull, { 17, 19, 18, 0, 0 }, 0x40, 1988, },
+  { 103, 5, 1, 0x00000001a0000000ull, 0x000001e3f8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 64, },
+  { 104, 5, 1, 0x00000001e0000000ull, 0x000001e3f8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 1819, },
+  { 105, 3, 0, 0x0000000100000000ull, 0x000001eff8000000ull, { 0, 0, 0, 0, 0 }, 0x0, 65, },
+  { 107, 5, 1, 0x0000000178000000ull, 0x000001e3f8000000ull, { 17, 18, 19, 0, 0 }, 0x0, 66, },
+  { 112, 3, 1, 0x0000008708000000ull, 0x000001ffc8000000ull, { 23, 18, 0, 0, 0 }, 0x0, 2294, },
+  { 121, 3, 0, 0x0000000080000000ull, 0x000001eff8000000ull, { 0, 0, 0, 0, 0 }, 0x0, 67, },
+  { 121, 3, 0, 0x0000000090000000ull, 0x000001eff8000000ull, { 23, 0, 0, 0, 0 }, 0x0, 775, },
+  { 121, 3, 0, 0x0000000098000000ull, 0x000001eff8000000ull, { 17, 0, 0, 0, 0 }, 0x0, 776, },
+  { 122, 3, 0, 0x0000002170000000ull, 0x000001eff8000000ull, { 24, 0, 0, 0, 0 }, 0xc, 701, },
+  { 123, 3, 1, 0x0000002070000000ull, 0x000001eff8000000ull, { 29, 24, 0, 0, 0 }, 0x8, 702, },
+  { 123, 3, 1, 0x0000002078000000ull, 0x000001eff8000000ull, { 30, 24, 0, 0, 0 }, 0x8, 952, },
+  { 125, 3, 1, 0x0000008000000000ull, 0x000001fff8000000ull, { 23, 32, 0, 0, 0 }, 0x0, 68, },
+  { 125, 3, 1, 0x0000009000000000ull, 0x000001fff8000000ull, { 23, 32, 24, 0, 0 }, 0x400, 69, },
+  { 125, 3, 1, 0x000000a000000000ull, 0x000001eff0000000ull, { 23, 32, 61, 0, 0 }, 0x400, 70, },
+  { 126, 3, 1, 0x0000008040000000ull, 0x000001fff8000000ull, { 23, 32, 0, 0, 0 }, 0x0, 71, },
+  { 126, 3, 1, 0x0000009040000000ull, 0x000001fff8000000ull, { 23, 32, 24, 0, 0 }, 0x400, 72, },
+  { 126, 3, 1, 0x000000a040000000ull, 0x000001eff0000000ull, { 23, 32, 61, 0, 0 }, 0x400, 73, },
+  { 127, 3, 1, 0x0000008080000000ull, 0x000001fff8000000ull, { 23, 32, 0, 0, 0 }, 0x0, 74, },
+  { 127, 3, 1, 0x0000009080000000ull, 0x000001fff8000000ull, { 23, 32, 24, 0, 0 }, 0x400, 75, },
+  { 127, 3, 1, 0x000000a080000000ull, 0x000001eff0000000ull, { 23, 32, 61, 0, 0 }, 0x400, 76, },
+  { 128, 3, 1, 0x00000080c0000000ull, 0x000001fff8000000ull, { 23, 32, 0, 0, 0 }, 0x0, 77, },
+  { 128, 3, 1, 0x00000090c0000000ull, 0x000001fff8000000ull, { 23, 32, 24, 0, 0 }, 0x400, 78, },
+  { 128, 3, 1, 0x000000a0c0000000ull, 0x000001eff0000000ull, { 23, 32, 61, 0, 0 }, 0x400, 79, },
+  { 129, 3, 1, 0x000000c6c0000000ull, 0x000001fff8000000ull, { 17, 32, 0, 0, 0 }, 0x0, 884, },
+  { 129, 3, 1, 0x000000d6c0000000ull, 0x000001fff8000000ull, { 17, 32, 24, 0, 0 }, 0x400, 885, },
+  { 129, 3, 1, 0x000000e6c0000000ull, 0x000001eff0000000ull, { 17, 32, 61, 0, 0 }, 0x400, 886, },
+  { 130, 3, 1, 0x000000c040000000ull, 0x000001fff8000000ull, { 17, 32, 0, 0, 0 }, 0x0, 80, },
+  { 130, 3, 1, 0x000000d040000000ull, 0x000001fff8000000ull, { 17, 32, 24, 0, 0 }, 0x400, 81, },
+  { 130, 3, 1, 0x000000e040000000ull, 0x000001eff0000000ull, { 17, 32, 61, 0, 0 }, 0x400, 82, },
+  { 131, 3, 1, 0x000000c0c0000000ull, 0x000001fff8000000ull, { 17, 32, 0, 0, 0 }, 0x0, 83, },
+  { 131, 3, 1, 0x000000d0c0000000ull, 0x000001fff8000000ull, { 17, 32, 24, 0, 0 }, 0x400, 84, },
+  { 131, 3, 1, 0x000000e0c0000000ull, 0x000001eff0000000ull, { 17, 32, 61, 0, 0 }, 0x400, 85, },
+  { 132, 3, 1, 0x000000c000000000ull, 0x000001fff8000000ull, { 17, 32, 0, 0, 0 }, 0x0, 86, },
+  { 132, 3, 1, 0x000000d000000000ull, 0x000001fff8000000ull, { 17, 32, 24, 0, 0 }, 0x400, 87, },
+  { 132, 3, 1, 0x000000e000000000ull, 0x000001eff0000000ull, { 17, 32, 61, 0, 0 }, 0x400, 88, },
+  { 133, 3, 2, 0x000000c048000000ull, 0x000001fff8000000ull, { 17, 18, 32, 0, 0 }, 0x0, 89, },
+  { 133, 3, 2, 0x000000d048000000ull, 0x000001fff8000000ull, { 17, 18, 32, 5, 0 }, 0x400, 90, },
+  { 134, 3, 2, 0x000000c0c8000000ull, 0x000001fff8000000ull, { 17, 18, 32, 0, 0 }, 0x0, 91, },
+  { 134, 3, 2, 0x000000d0c8000000ull, 0x000001fff8000000ull, { 17, 18, 32, 5, 0 }, 0x400, 92, },
+  { 135, 3, 2, 0x000000c088000000ull, 0x000001fff8000000ull, { 17, 18, 32, 0, 0 }, 0x0, 93, },
+  { 135, 3, 2, 0x000000d088000000ull, 0x000001fff8000000ull, { 17, 18, 32, 4, 0 }, 0x400, 94, },
+  { 136, 3, 1, 0x000000c080000000ull, 0x000001fff8000000ull, { 17, 32, 0, 0, 0 }, 0x0, 95, },
+  { 136, 3, 1, 0x000000d080000000ull, 0x000001fff8000000ull, { 17, 32, 24, 0, 0 }, 0x400, 96, },
+  { 136, 3, 1, 0x000000e080000000ull, 0x000001eff0000000ull, { 17, 32, 61, 0, 0 }, 0x400, 97, },
+  { 139, 3, 0, 0x000000cb00000000ull, 0x000001fff8000000ull, { 32, 0, 0, 0, 0 }, 0x0, 98, },
+  { 139, 3, 0, 0x000000db00000000ull, 0x000001fff8000000ull, { 32, 24, 0, 0, 0 }, 0x400, 99, },
+  { 139, 3, 0, 0x000000eb00000000ull, 0x000001eff0000000ull, { 32, 61, 0, 0, 0 }, 0x400, 100, },
+  { 140, 3, 0, 0x0000000050000000ull, 0x000001eff8000000ull, { 0, 0, 0, 0, 0 }, 0x21, 101, },
+  { 148, 3, 0, 0x0000000110000000ull, 0x000001eff8000000ull, { 0, 0, 0, 0, 0 }, 0x0, 102, },
+  { 149, 2, 1, 0x000000e880000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 1820, },
+  { 150, 2, 1, 0x000000ea80000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 1821, },
+  { 151, 2, 1, 0x000000f880000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 1822, },
+  { 152, 1, 1, 0x0000010800000000ull, 0x000001fff80fe000ull, { 23, 25, 0, 0, 0 }, 0x0, 103, },
+  { 152, 1, 1, 0x0000010800000000ull, 0x000001ee07f00000ull, { 23, 62, 0, 0, 0 }, 0x40, 104, },
+  { 152, 1, 1, 0x0000012000000000ull, 0x000001e000300000ull, { 23, 65, 0, 0, 0 }, 0x40, 105, },
+  { 152, 5, 1, 0x0000000080000000ull, 0x000001e3f8000000ull, { 17, 19, 0, 0, 0 }, 0xc0, 106, },
+  { 152, 2, 1, 0x0000000e00100000ull, 0x000001ee00f00000ull, { 14, 24, 0, 0, 0 }, 0x40, 107, },
+  { 152, 2, 1, 0x0000000e00000000ull, 0x000001ee00f00000ull, { 14, 24, 77, 0, 0 }, 0x0, 2368, },
+  { 152, 2, 1, 0x0000000188000000ull, 0x000001eff8000000ull, { 23, 15, 0, 0, 0 }, 0x0, 109, },
+  { 152, 2, 1, 0x0000000600000000ull, 0x000001ee00000000ull, { 8, 24, 63, 0, 0 }, 0x0, 110, },
+  { 152, 2, 1, 0x0000000400000000ull, 0x000001ee00000000ull, { 9, 67, 0, 0, 0 }, 0x0, 111, },
+  { 152, 2, 1, 0x0000000180000000ull, 0x000001eff8000000ull, { 23, 7, 0, 0, 0 }, 0x0, 112, },
+  { 152, 2, 1, 0x0000000198000000ull, 0x000001eff8000000ull, { 23, 8, 0, 0, 0 }, 0x0, 113, },
+  { 152, 2, 1, 0x0000000150000000ull, 0x000001eff8000000ull, { 13, 24, 0, 0, 0 }, 0x0, 953, },
+  { 152, 2, 1, 0x0000000050000000ull, 0x000001eff8000000ull, { 13, 54, 0, 0, 0 }, 0x0, 954, },
+  { 152, 2, 1, 0x0000000190000000ull, 0x000001eff8000000ull, { 23, 13, 0, 0, 0 }, 0x0, 955, },
+  { 152, 3, 1, 0x0000000140000000ull, 0x000001eff8000000ull, { 13, 54, 0, 0, 0 }, 0x0, 1041, },
+  { 152, 3, 1, 0x0000002150000000ull, 0x000001eff8000000ull, { 13, 24, 0, 0, 0 }, 0x0, 1042, },
+  { 152, 3, 1, 0x0000002110000000ull, 0x000001eff8000000ull, { 23, 13, 0, 0, 0 }, 0x0, 1043, },
+  { 152, 3, 1, 0x0000002160000000ull, 0x000001eff8000000ull, { 16, 24, 0, 0, 0 }, 0x8, 114, },
+  { 152, 3, 1, 0x0000002120000000ull, 0x000001eff8000000ull, { 23, 16, 0, 0, 0 }, 0x8, 115, },
+  { 152, 3, 1, 0x0000002168000000ull, 0x000001eff8000000ull, { 11, 24, 0, 0, 0 }, 0x8, 116, },
+  { 152, 3, 1, 0x0000002148000000ull, 0x000001eff8000000ull, { 12, 24, 0, 0, 0 }, 0x0, 117, },
+  { 152, 3, 1, 0x0000002128000000ull, 0x000001eff8000000ull, { 23, 10, 0, 0, 0 }, 0x8, 118, },
+  { 152, 3, 1, 0x0000002108000000ull, 0x000001eff8000000ull, { 23, 12, 0, 0, 0 }, 0x0, 119, },
+  { 152, 3, 1, 0x0000002000000000ull, 0x000001eff8000000ull, { 37, 24, 0, 0, 0 }, 0x8, 120, },
+  { 152, 3, 1, 0x0000002008000000ull, 0x000001eff8000000ull, { 28, 24, 0, 0, 0 }, 0x8, 121, },
+  { 152, 3, 1, 0x0000002010000000ull, 0x000001eff8000000ull, { 31, 24, 0, 0, 0 }, 0x8, 122, },
+  { 152, 3, 1, 0x0000002018000000ull, 0x000001eff8000000ull, { 34, 24, 0, 0, 0 }, 0x8, 123, },
+  { 152, 3, 1, 0x0000002020000000ull, 0x000001eff8000000ull, { 35, 24, 0, 0, 0 }, 0x8, 124, },
+  { 152, 3, 1, 0x0000002028000000ull, 0x000001eff8000000ull, { 36, 24, 0, 0, 0 }, 0x8, 125, },
+  { 152, 3, 1, 0x0000002030000000ull, 0x000001eff8000000ull, { 33, 24, 0, 0, 0 }, 0x8, 126, },
+  { 152, 3, 1, 0x0000002080000000ull, 0x000001eff8000000ull, { 23, 37, 0, 0, 0 }, 0x8, 127, },
+  { 152, 3, 1, 0x0000002088000000ull, 0x000001eff8000000ull, { 23, 28, 0, 0, 0 }, 0x8, 128, },
+  { 152, 3, 1, 0x0000002090000000ull, 0x000001eff8000000ull, { 23, 31, 0, 0, 0 }, 0x8, 129, },
+  { 152, 3, 1, 0x0000002098000000ull, 0x000001eff8000000ull, { 23, 34, 0, 0, 0 }, 0x8, 130, },
+  { 152, 3, 1, 0x00000020a0000000ull, 0x000001eff8000000ull, { 23, 35, 0, 0, 0 }, 0x8, 131, },
+  { 152, 3, 1, 0x00000020a8000000ull, 0x000001eff8000000ull, { 23, 36, 0, 0, 0 }, 0x0, 132, },
+  { 152, 3, 1, 0x00000020b0000000ull, 0x000001eff8000000ull, { 23, 33, 0, 0, 0 }, 0x8, 133, },
+  { 152, 3, 1, 0x00000020b8000000ull, 0x000001eff8000000ull, { 23, 27, 0, 0, 0 }, 0x0, 134, },
+  { 152, 7, 1, 0x0000000000000000ull, 0x0000000000000000ull, { 23, 13, 0, 0, 0 }, 0x0, 135, },
+  { 152, 7, 1, 0x0000000000000000ull, 0x0000000000000000ull, { 13, 54, 0, 0, 0 }, 0x0, 136, },
+  { 152, 7, 1, 0x0000000000000000ull, 0x0000000000000000ull, { 13, 24, 0, 0, 0 }, 0x0, 137, },
+  { 153, 6, 1, 0x000000c000000000ull, 0x000001e000100000ull, { 23, 69, 0, 0, 0 }, 0x0, 138, },
+  { 154, 2, 1, 0x000000eca0000000ull, 0x000001fff0000000ull, { 23, 24, 73, 0, 0 }, 0x0, 139, },
+  { 155, 2, 1, 0x000000eea0000000ull, 0x000001fff0000000ull, { 23, 24, 74, 0, 0 }, 0x0, 140, },
+  { 165, 4, 0, 0x0000004000000000ull, 0x000001e1f8000000ull, { 64, 0, 0, 0, 0 }, 0x0, 394, },
+  { 165, 5, 0, 0x0000000008000000ull, 0x000001e3f8000000ull, { 64, 0, 0, 0, 0 }, 0x0, 807, },
+  { 165, 2, 0, 0x0000000008000000ull, 0x000001eff8000000ull, { 64, 0, 0, 0, 0 }, 0x2, 956, },
+  { 165, 3, 0, 0x0000000008000000ull, 0x000001eff8000000ull, { 64, 0, 0, 0, 0 }, 0x0, 1044, },
+  { 165, 6, 0, 0x0000000008000000ull, 0x000001eff8000000ull, { 68, 0, 0, 0, 0 }, 0x0, 2484, },
+  { 165, 7, 0, 0x0000000000000000ull, 0x0000000000000000ull, { 64, 0, 0, 0, 0 }, 0x0, 141, },
+  { 172, 1, 1, 0x0000010070000000ull, 0x000001eff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 142, },
+  { 172, 1, 1, 0x0000010170000000ull, 0x000001eff8000000ull, { 23, 54, 25, 0, 0 }, 0x0, 143, },
+  { 175, 2, 1, 0x000000ea00000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 2467, },
+  { 176, 2, 1, 0x000000f820000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 2370, },
+  { 177, 1, 1, 0x0000010400000000ull, 0x000001fff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 144, },
+  { 178, 1, 1, 0x0000010600000000ull, 0x000001fff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 145, },
+  { 179, 1, 1, 0x0000011400000000ull, 0x000001fff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 146, },
+  { 180, 1, 1, 0x0000010450000000ull, 0x000001fff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 147, },
+  { 181, 1, 1, 0x0000010650000000ull, 0x000001fff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 148, },
+  { 182, 1, 1, 0x0000010470000000ull, 0x000001fff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 149, },
+  { 183, 1, 1, 0x0000010670000000ull, 0x000001fff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 150, },
+  { 184, 1, 1, 0x0000010520000000ull, 0x000001fff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 794, },
+  { 185, 1, 1, 0x0000010720000000ull, 0x000001fff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 795, },
+  { 186, 1, 1, 0x0000011520000000ull, 0x000001fff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 796, },
+  { 187, 2, 1, 0x000000e850000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 2384, },
+  { 188, 2, 1, 0x000000ea70000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 151, },
+  { 189, 2, 1, 0x000000e810000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 2385, },
+  { 190, 2, 1, 0x000000ea30000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 152, },
+  { 191, 2, 1, 0x000000ead0000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 1823, },
+  { 192, 2, 1, 0x000000e230000000ull, 0x000001ff30000000ull, { 23, 24, 25, 41, 0 }, 0x0, 153, },
+  { 193, 2, 1, 0x000000e690000000ull, 0x000001fff0000000ull, { 23, 25, 0, 0, 0 }, 0x0, 154, },
+  { 195, 3, 1, 0x00000021c0000000ull, 0x000001eff8000000ull, { 23, 25, 24, 0, 0 }, 0x0, 1824, },
+  { 195, 3, 1, 0x00000020c0000000ull, 0x000001eff8000000ull, { 23, 25, 48, 0, 0 }, 0x0, 1825, },
+  { 195, 3, 0, 0x0000002188000000ull, 0x000001eff8000000ull, { 25, 48, 0, 0, 0 }, 0x0, 1847, },
+  { 196, 2, 1, 0x000000e8b0000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 155, },
+  { 197, 2, 1, 0x000000e240000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 156, },
+  { 197, 2, 1, 0x000000ee50000000ull, 0x000001fff0000000ull, { 23, 24, 38, 0, 0 }, 0x0, 157, },
+  { 198, 2, 1, 0x000000f040000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 158, },
+  { 198, 2, 1, 0x000000fc50000000ull, 0x000001fff0000000ull, { 23, 24, 38, 0, 0 }, 0x0, 159, },
+  { 199, 1, 1, 0x0000010680000000ull, 0x000001ffe0000000ull, { 23, 24, 40, 25, 0 }, 0x0, 160, },
+  { 200, 2, 1, 0x000000e220000000ull, 0x000001fff0000000ull, { 23, 25, 24, 0, 0 }, 0x0, 161, },
+  { 200, 2, 1, 0x000000e630000000ull, 0x000001fff0000000ull, { 23, 25, 42, 0, 0 }, 0x0, 162, },
+  { 201, 2, 1, 0x000000f020000000ull, 0x000001fff0000000ull, { 23, 25, 24, 0, 0 }, 0x0, 163, },
+  { 201, 2, 1, 0x000000f430000000ull, 0x000001fff0000000ull, { 23, 25, 42, 0, 0 }, 0x0, 164, },
+  { 202, 1, 1, 0x00000106c0000000ull, 0x000001ffe0000000ull, { 23, 24, 40, 25, 0 }, 0x0, 165, },
+  { 203, 1, 1, 0x0000010420000000ull, 0x000001fff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 166, },
+  { 204, 1, 1, 0x0000010620000000ull, 0x000001fff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 167, },
+  { 205, 1, 1, 0x0000011420000000ull, 0x000001fff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 168, },
+  { 206, 3, 0, 0x0000002048000000ull, 0x000001eff8000000ull, { 25, 24, 0, 0, 0 }, 0x8, 984, },
+  { 206, 3, 0, 0x0000002050000000ull, 0x000001eff8000000ull, { 25, 24, 0, 0, 0 }, 0xc, 895, },
+  { 206, 3, 0, 0x00000021a0000000ull, 0x000001eff8000000ull, { 25, 0, 0, 0, 0 }, 0x8, 777, },
+  { 207, 3, 0, 0x0000002060000000ull, 0x000001eff8000000ull, { 25, 24, 0, 0, 0 }, 0x8, 703, },
+  { 212, 4, 0, 0x0000000040000000ull, 0x000001e1f8000000ull, { 0, 0, 0, 0, 0 }, 0x22c, 169, },
+  { 213, 3, 0, 0x0000000038000000ull, 0x000001ee78000000ull, { 66, 0, 0, 0, 0 }, 0x8, 170, },
+  { 214, 3, 0, 0x0000000028000000ull, 0x000001ee78000000ull, { 66, 0, 0, 0, 0 }, 0x0, 171, },
+  { 223, 3, 1, 0x000000c708000000ull, 0x000001ffc8000000ull, { 17, 24, 0, 0, 0 }, 0x0, 2295, },
+  { 224, 2, 1, 0x000000a600000000ull, 0x000001ee04000000ull, { 23, 24, 44, 0, 0 }, 0x140, 172, },
+  { 224, 2, 1, 0x000000f240000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 173, },
+  { 225, 1, 1, 0x0000010080000000ull, 0x000001efe0000000ull, { 23, 24, 39, 25, 0 }, 0x0, 174, },
+  { 226, 1, 1, 0x00000100c0000000ull, 0x000001efe0000000ull, { 23, 24, 39, 25, 0 }, 0x0, 175, },
+  { 227, 2, 1, 0x000000a400000000ull, 0x000001ee00002000ull, { 23, 25, 75, 0, 0 }, 0x140, 2391, },
+  { 227, 2, 1, 0x000000f220000000ull, 0x000001fff0000000ull, { 23, 25, 24, 0, 0 }, 0x0, 177, },
+  { 228, 2, 1, 0x000000ac00000000ull, 0x000001ee00000000ull, { 23, 24, 25, 43, 0 }, 0x0, 178, },
+  { 233, 3, 0, 0x0000000180000000ull, 0x000001eff8000000ull, { 0, 0, 0, 0, 0 }, 0x0, 705, },
+  { 234, 3, 0, 0x0000000030000000ull, 0x000001ee78000000ull, { 66, 0, 0, 0, 0 }, 0x8, 179, },
+  { 236, 3, 1, 0x0000008c00000000ull, 0x000001fff8000000ull, { 32, 24, 0, 0, 0 }, 0x0, 180, },
+  { 236, 3, 1, 0x000000ac00000000ull, 0x000001eff0000000ull, { 32, 24, 60, 0, 0 }, 0x400, 181, },
+  { 237, 3, 1, 0x0000008c40000000ull, 0x000001fff8000000ull, { 32, 24, 0, 0, 0 }, 0x0, 182, },
+  { 237, 3, 1, 0x000000ac40000000ull, 0x000001eff0000000ull, { 32, 24, 60, 0, 0 }, 0x400, 183, },
+  { 238, 3, 1, 0x0000008c80000000ull, 0x000001fff8000000ull, { 32, 24, 0, 0, 0 }, 0x0, 184, },
+  { 238, 3, 1, 0x000000ac80000000ull, 0x000001eff0000000ull, { 32, 24, 60, 0, 0 }, 0x400, 185, },
+  { 239, 3, 1, 0x0000008cc0000000ull, 0x000001fff8000000ull, { 32, 24, 0, 0, 0 }, 0x0, 186, },
+  { 239, 3, 1, 0x000000acc0000000ull, 0x000001eff0000000ull, { 32, 24, 60, 0, 0 }, 0x400, 187, },
+  { 240, 3, 1, 0x000000cec0000000ull, 0x000001fff8000000ull, { 32, 18, 0, 0, 0 }, 0x0, 2298, },
+  { 240, 3, 1, 0x000000eec0000000ull, 0x000001eff0000000ull, { 32, 18, 60, 0, 0 }, 0x400, 2299, },
+  { 241, 3, 1, 0x000000cc40000000ull, 0x000001fff8000000ull, { 32, 18, 0, 0, 0 }, 0x0, 188, },
+  { 241, 3, 1, 0x000000ec40000000ull, 0x000001eff0000000ull, { 32, 18, 60, 0, 0 }, 0x400, 189, },
+  { 242, 3, 1, 0x000000ccc0000000ull, 0x000001fff8000000ull, { 32, 18, 0, 0, 0 }, 0x0, 190, },
+  { 242, 3, 1, 0x000000ecc0000000ull, 0x000001eff0000000ull, { 32, 18, 60, 0, 0 }, 0x400, 191, },
+  { 243, 3, 1, 0x000000cc00000000ull, 0x000001fff8000000ull, { 32, 18, 0, 0, 0 }, 0x0, 192, },
+  { 243, 3, 1, 0x000000ec00000000ull, 0x000001eff0000000ull, { 32, 18, 60, 0, 0 }, 0x400, 193, },
+  { 244, 3, 1, 0x000000cc80000000ull, 0x000001fff8000000ull, { 32, 18, 0, 0, 0 }, 0x0, 194, },
+  { 244, 3, 1, 0x000000ec80000000ull, 0x000001eff0000000ull, { 32, 18, 60, 0, 0 }, 0x400, 195, },
+  { 245, 1, 1, 0x0000010028000000ull, 0x000001eff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 196, },
+  { 245, 1, 1, 0x0000010020000000ull, 0x000001eff8000000ull, { 23, 24, 25, 3, 0 }, 0x0, 197, },
+  { 245, 1, 1, 0x0000010128000000ull, 0x000001eff8000000ull, { 23, 54, 25, 0, 0 }, 0x0, 198, },
+  { 246, 3, 0, 0x0000000020000000ull, 0x000001ee78000000ull, { 66, 0, 0, 0, 0 }, 0x0, 199, },
+  { 247, 2, 1, 0x00000000a0000000ull, 0x000001eff8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 200, },
+  { 248, 2, 1, 0x00000000a8000000ull, 0x000001eff8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 201, },
+  { 249, 2, 1, 0x00000000b0000000ull, 0x000001eff8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 202, },
+  { 250, 3, 0, 0x0000000198000000ull, 0x000001eff8000000ull, { 0, 0, 0, 0, 0 }, 0x0, 959, },
+  { 251, 3, 1, 0x00000020f8000000ull, 0x000001eff8000000ull, { 23, 25, 0, 0, 0 }, 0x8, 203, },
+  { 252, 2, 2, 0x000000a000000000ull, 0x000001fe00003000ull, { 21, 22, 25, 75, 0 }, 0x0, 2489, },
+  { 252, 2, 2, 0x000000a000000000ull, 0x000001fe00003000ull, { 22, 21, 25, 75, 0 }, 0x40, 1724, },
+  { 253, 3, 1, 0x00000020d0000000ull, 0x000001eff8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 204, },
+  { 254, 2, 2, 0x000000a000002000ull, 0x000001fe00003000ull, { 21, 22, 25, 0, 0 }, 0x0, 2491, },
+  { 254, 2, 2, 0x000000a000002000ull, 0x000001fe00003000ull, { 22, 21, 25, 0, 0 }, 0x40, 1726, },
+  { 255, 3, 1, 0x00000020f0000000ull, 0x000001eff8000000ull, { 23, 25, 0, 0, 0 }, 0x8, 205, },
+  { 257, 3, 1, 0x00000020d8000000ull, 0x000001eff8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 206, },
+  { 261, 2, 1, 0x000000e840000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 942, },
+  { 262, 2, 1, 0x000000ea40000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 943, },
+  { 263, 2, 1, 0x000000f840000000ull, 0x000001fff0000000ull, { 23, 24, 25, 0, 0 }, 0x0, 944, },
+  { 271, 3, 1, 0x0000008208000000ull, 0x000001fff8000000ull, { 23, 32, 24, 0, 0 }, 0x0, 207, },
+  { 272, 3, 1, 0x0000008248000000ull, 0x000001fff8000000ull, { 23, 32, 24, 0, 0 }, 0x0, 208, },
+  { 273, 3, 1, 0x0000008288000000ull, 0x000001fff8000000ull, { 23, 32, 24, 0, 0 }, 0x0, 209, },
+  { 274, 3, 1, 0x00000082c8000000ull, 0x000001fff8000000ull, { 23, 32, 24, 0, 0 }, 0x0, 210, },
+  { 276, 5, 1, 0x000001d000000000ull, 0x000001fc00000000ull, { 17, 19, 20, 18, 0 }, 0x0, 988, },
+  { 276, 5, 1, 0x000001d000000000ull, 0x000001fc00000000ull, { 17, 19, 20, 18, 0 }, 0x40, 1036, },
+  { 277, 5, 1, 0x000001d000000000ull, 0x000001fc000fe000ull, { 17, 19, 20, 0, 0 }, 0x40, 989, },
+  { 278, 1, 1, 0x0000010078000000ull, 0x000001eff8000000ull, { 23, 24, 25, 0, 0 }, 0x0, 211, },
+  { 278, 1, 1, 0x0000010178000000ull, 0x000001eff8000000ull, { 23, 54, 25, 0, 0 }, 0x0, 212, },
+  { 281, 2, 1, 0x0000000080000000ull, 0x000001eff8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 213, },
+  { 282, 2, 1, 0x0000000088000000ull, 0x000001eff8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 214, },
+  { 283, 2, 1, 0x0000000090000000ull, 0x000001eff8000000ull, { 23, 25, 0, 0, 0 }, 0x0, 215, },
 };
 
 static const char dis_table[] = {
@@ -5011,37 +5089,37 @@
 0x88, 0x9e, 0x88, 0x09, 0xd0, 0x94, 0xf0, 0x90, 0xb0, 0x88, 0x00, 0x68, 
 0x84, 0x10, 0x10, 0xc9, 0xe1, 0x2c, 0x40, 0x85, 0x34, 0xcd, 0xcb, 0x61, 
 0x25, 0x00, 0x85, 0x34, 0xa3, 0x9a, 0x00, 0x03, 0xf8, 0x91, 0x98, 0x80, 
-0x91, 0x10, 0x90, 0xa0, 0x90, 0x68, 0x90, 0x20, 0x38, 0x66, 0xc9, 0xe2, 
-0x19, 0x00, 0x85, 0x34, 0xcb, 0xa4, 0x43, 0x10, 0x38, 0x63, 0x90, 0x38, 
-0xa4, 0x42, 0xd8, 0x38, 0x5c, 0xa4, 0x42, 0xc8, 0x38, 0x5a, 0x90, 0x48, 
-0x10, 0x10, 0xa4, 0x42, 0x90, 0x38, 0x53, 0x10, 0x10, 0x80, 0x38, 0x4f, 
-0x81, 0x10, 0x10, 0x80, 0xa4, 0x42, 0x60, 0x38, 0x4d, 0x91, 0xb0, 0x91, 
-0x60, 0x90, 0xe0, 0x90, 0x70, 0x90, 0x38, 0xa4, 0x43, 0x00, 0x38, 0x61, 
-0xa4, 0x42, 0xf0, 0x38, 0x5f, 0x90, 0x38, 0xa4, 0x42, 0xb8, 0x38, 0x58, 
-0xa4, 0x42, 0xa8, 0x38, 0x56, 0x90, 0x48, 0x10, 0x10, 0xa4, 0x42, 0x80, 
-0x38, 0x51, 0x10, 0x10, 0x80, 0x38, 0x4e, 0x90, 0x28, 0x80, 0x38, 0x47, 
-0x80, 0x38, 0x46, 0x81, 0x10, 0x10, 0x80, 0xa4, 0x42, 0x50, 0x38, 0x4b, 
+0x91, 0x10, 0x90, 0xa0, 0x90, 0x68, 0x90, 0x20, 0x38, 0x96, 0xc9, 0xe2, 
+0x25, 0x00, 0x85, 0x34, 0xcb, 0xa4, 0x44, 0x90, 0x38, 0x93, 0x90, 0x38, 
+0xa4, 0x44, 0x58, 0x38, 0x8c, 0xa4, 0x44, 0x48, 0x38, 0x8a, 0x90, 0x48, 
+0x10, 0x10, 0xa4, 0x44, 0x10, 0x38, 0x83, 0x10, 0x10, 0x80, 0x38, 0x7f, 
+0x81, 0x10, 0x10, 0x80, 0xa4, 0x43, 0xe0, 0x38, 0x7d, 0x91, 0xb0, 0x91, 
+0x60, 0x90, 0xe0, 0x90, 0x70, 0x90, 0x38, 0xa4, 0x44, 0x80, 0x38, 0x91, 
+0xa4, 0x44, 0x70, 0x38, 0x8f, 0x90, 0x38, 0xa4, 0x44, 0x38, 0x38, 0x88, 
+0xa4, 0x44, 0x28, 0x38, 0x86, 0x90, 0x48, 0x10, 0x10, 0xa4, 0x44, 0x00, 
+0x38, 0x81, 0x10, 0x10, 0x80, 0x38, 0x7e, 0x90, 0x28, 0x80, 0x38, 0x77, 
+0x80, 0x38, 0x76, 0x81, 0x10, 0x10, 0x80, 0xa4, 0x43, 0xd0, 0x38, 0x7b, 
 0xcb, 0x61, 0x24, 0xc0, 0x85, 0x34, 0xa2, 0x90, 0xd8, 0x88, 0x00, 0x90, 
-0x84, 0x90, 0x38, 0xc1, 0xc0, 0x85, 0x38, 0x6a, 0xc9, 0xe1, 0x2c, 0x00, 
+0x84, 0x90, 0x38, 0xc1, 0xc0, 0x85, 0x38, 0x9a, 0xc9, 0xe1, 0x2c, 0x00, 
 0x85, 0x34, 0xc9, 0xcb, 0x61, 0x24, 0x80, 0x85, 0x34, 0xa1, 0x88, 0x00, 
 0x68, 0x84, 0x10, 0x10, 0xc9, 0xe1, 0x2b, 0xc0, 0x85, 0x34, 0xc7, 0xcb, 
 0x61, 0x24, 0x40, 0x85, 0x34, 0xa0, 0x91, 0xf8, 0x90, 0xb0, 0x88, 0x00, 
 0x68, 0x84, 0x10, 0x10, 0xc9, 0xe1, 0x2b, 0x40, 0x85, 0x34, 0xc3, 0xcb, 
 0x61, 0x23, 0xc0, 0x85, 0x34, 0x9e, 0x88, 0x01, 0x00, 0x90, 0xa0, 0x81, 
-0x90, 0x70, 0x80, 0x90, 0x20, 0x38, 0x5d, 0xc9, 0xe1, 0x2b, 0x00, 0x85, 
-0x34, 0xc1, 0x81, 0x38, 0x54, 0x81, 0x10, 0x10, 0x80, 0xa4, 0x42, 0x40, 
-0x38, 0x49, 0xcb, 0x61, 0x23, 0x80, 0x85, 0x34, 0x9d, 0x90, 0xb0, 0x88, 
+0x90, 0x70, 0x80, 0x90, 0x20, 0x38, 0x8d, 0xc9, 0xe1, 0x2b, 0x00, 0x85, 
+0x34, 0xc1, 0x81, 0x38, 0x84, 0x81, 0x10, 0x10, 0x80, 0xa4, 0x43, 0xc0, 
+0x38, 0x79, 0xcb, 0x61, 0x23, 0x80, 0x85, 0x34, 0x9d, 0x90, 0xb0, 0x88, 
 0x00, 0x68, 0x84, 0x10, 0x10, 0xc9, 0xe1, 0x2a, 0xc0, 0x85, 0x34, 0xbf, 
 0xcb, 0x61, 0x23, 0x40, 0x85, 0x34, 0x9c, 0x88, 0x00, 0x68, 0x84, 0x10, 
 0x10, 0xc9, 0xe1, 0x2a, 0x80, 0x85, 0x34, 0xbd, 0xcb, 0x61, 0x23, 0x00, 
 0x85, 0x34, 0x9b, 0x92, 0x38, 0x81, 0x91, 0x68, 0x91, 0x18, 0x90, 0x80, 
-0x90, 0x40, 0x80, 0xa4, 0x43, 0xc8, 0x38, 0x7a, 0x80, 0xa4, 0x43, 0xc0, 
-0x38, 0x77, 0x90, 0x28, 0x81, 0x38, 0x76, 0x90, 0x38, 0xa4, 0x43, 0xa0, 
-0x38, 0x75, 0xa4, 0x43, 0x90, 0x38, 0x73, 0x90, 0x28, 0x80, 0x38, 0x71, 
-0x80, 0x38, 0x70, 0x80, 0x90, 0x40, 0x10, 0x10, 0x80, 0x24, 0x43, 0x78, 
-0x10, 0x10, 0x90, 0x38, 0xa4, 0x43, 0x68, 0x38, 0x6e, 0xa4, 0x43, 0x58, 
-0x38, 0x6c, 0x90, 0x50, 0x80, 0xc9, 0xa2, 0x1a, 0x00, 0x85, 0x38, 0x69, 
-0x80, 0x38, 0x67, 0x9a, 0xd0, 0x03, 0xe0, 0x91, 0x60, 0x90, 0xb0, 0x88, 
+0x90, 0x40, 0x80, 0xa4, 0x45, 0x48, 0x38, 0xaa, 0x80, 0xa4, 0x45, 0x40, 
+0x38, 0xa7, 0x90, 0x28, 0x81, 0x38, 0xa6, 0x90, 0x38, 0xa4, 0x45, 0x20, 
+0x38, 0xa5, 0xa4, 0x45, 0x10, 0x38, 0xa3, 0x90, 0x28, 0x80, 0x38, 0xa1, 
+0x80, 0x38, 0xa0, 0x80, 0x90, 0x40, 0x10, 0x10, 0x80, 0x24, 0x44, 0xf8, 
+0x10, 0x10, 0x90, 0x38, 0xa4, 0x44, 0xe8, 0x38, 0x9e, 0xa4, 0x44, 0xd8, 
+0x38, 0x9c, 0x90, 0x50, 0x80, 0xc9, 0xa2, 0x26, 0x00, 0x85, 0x38, 0x99, 
+0x80, 0x38, 0x97, 0x9a, 0xd0, 0x03, 0xe0, 0x91, 0x60, 0x90, 0xb0, 0x88, 
 0x00, 0x68, 0x84, 0x10, 0x10, 0xc9, 0xe1, 0x2a, 0x00, 0x85, 0x34, 0xb9, 
 0xcb, 0x61, 0x22, 0x80, 0x85, 0x34, 0x99, 0x88, 0x00, 0x68, 0x84, 0x10, 
 0x10, 0xc9, 0xe1, 0x29, 0xc0, 0x85, 0x34, 0xb7, 0xcb, 0x61, 0x22, 0x40, 
@@ -5051,8 +5129,8 @@
 0x34, 0xb3, 0xcb, 0x61, 0x21, 0xc0, 0x85, 0x34, 0x96, 0x90, 0x90, 0x90, 
 0x48, 0xcb, 0xa1, 0x20, 0x00, 0x85, 0x34, 0x85, 0xcb, 0xa1, 0x1f, 0xc0, 
 0x85, 0x34, 0x84, 0x90, 0x48, 0xcb, 0xa1, 0x1f, 0x80, 0x85, 0x34, 0x83, 
-0xcb, 0xa1, 0x1f, 0x40, 0x85, 0x34, 0x82, 0xcb, 0xa2, 0x11, 0x00, 0x80, 
-0x38, 0x45, 0x92, 0x40, 0x91, 0x20, 0x90, 0x90, 0x90, 0x48, 0x8c, 0x23, 
+0xcb, 0xa1, 0x1f, 0x40, 0x85, 0x34, 0x82, 0xcb, 0xa2, 0x1d, 0x00, 0x80, 
+0x38, 0x75, 0x92, 0x40, 0x91, 0x20, 0x90, 0x90, 0x90, 0x48, 0x8c, 0x23, 
 0x60, 0x84, 0x24, 0x23, 0xd8, 0x8c, 0x23, 0x58, 0x84, 0x24, 0x23, 0xd0, 
 0x90, 0x48, 0x8c, 0x23, 0x50, 0x84, 0x24, 0x23, 0xc8, 0x8c, 0x23, 0x48, 
 0x84, 0x24, 0x23, 0xc0, 0x90, 0x90, 0x90, 0x48, 0x8c, 0x23, 0x38, 0x84, 
@@ -5063,16 +5141,16 @@
 0x8c, 0x23, 0x00, 0x84, 0x24, 0x23, 0x78, 0x8c, 0x22, 0xf8, 0x84, 0x24, 
 0x23, 0x70, 0x90, 0x38, 0xa4, 0x22, 0xe0, 0x34, 0x5d, 0xa4, 0x22, 0xd0, 
 0x34, 0x5b, 0xa0, 0x0f, 0x50, 0xa0, 0x09, 0x08, 0x9a, 0x30, 0x04, 0x40, 
-0x91, 0x90, 0x90, 0xc8, 0x98, 0x50, 0x00, 0x80, 0xe5, 0x22, 0x10, 0x00, 
-0x38, 0x3c, 0xe5, 0x22, 0x0c, 0x00, 0x38, 0x3a, 0xcb, 0x61, 0x12, 0x40, 
-0x85, 0x34, 0x58, 0x98, 0x50, 0x00, 0x80, 0xe5, 0x22, 0x08, 0x00, 0x38, 
-0x1c, 0xe5, 0x22, 0x04, 0x00, 0x38, 0x1a, 0xcb, 0x61, 0x12, 0x00, 0x85, 
+0x91, 0x90, 0x90, 0xc8, 0x98, 0x50, 0x00, 0x80, 0xe5, 0x22, 0x1c, 0x00, 
+0x38, 0x6c, 0xe5, 0x22, 0x18, 0x00, 0x38, 0x6a, 0xcb, 0x61, 0x12, 0x40, 
+0x85, 0x34, 0x58, 0x98, 0x50, 0x00, 0x80, 0xe5, 0x22, 0x14, 0x00, 0x38, 
+0x4c, 0xe5, 0x22, 0x10, 0x00, 0x38, 0x4a, 0xcb, 0x61, 0x12, 0x00, 0x85, 
 0x34, 0x57, 0x90, 0x48, 0xcb, 0xa1, 0x11, 0xc0, 0x85, 0x34, 0x56, 0xcb, 
 0xa1, 0x11, 0x80, 0x85, 0x34, 0x55, 0x91, 0x90, 0x90, 0xc8, 0x98, 0x50, 
-0x00, 0x80, 0xe5, 0x21, 0xff, 0x00, 0x38, 0x02, 0xe5, 0x21, 0xfc, 0x00, 
-0x37, 0xf6, 0xcb, 0x61, 0x11, 0x00, 0x85, 0x34, 0x53, 0x98, 0x50, 0x00, 
-0x80, 0xe5, 0x21, 0xf9, 0x00, 0x37, 0xea, 0xe5, 0x21, 0xf6, 0x00, 0x37, 
-0xde, 0xcb, 0x61, 0x10, 0xc0, 0x85, 0x34, 0x52, 0x90, 0x48, 0xcb, 0xa1, 
+0x00, 0x80, 0xe5, 0x22, 0x09, 0x00, 0x38, 0x30, 0xe5, 0x22, 0x03, 0x00, 
+0x38, 0x18, 0xcb, 0x61, 0x11, 0x00, 0x85, 0x34, 0x53, 0x98, 0x50, 0x00, 
+0x80, 0xe5, 0x21, 0xfd, 0x00, 0x38, 0x00, 0xe5, 0x21, 0xf7, 0x00, 0x37, 
+0xe8, 0xcb, 0x61, 0x10, 0xc0, 0x85, 0x34, 0x52, 0x90, 0x48, 0xcb, 0xa1, 
 0x10, 0x80, 0x85, 0x34, 0x51, 0xcb, 0xa1, 0x10, 0x40, 0x85, 0x34, 0x50, 
 0x92, 0x20, 0x91, 0x30, 0x90, 0xb8, 0xd5, 0x03, 0x00, 0xc0, 0xc0, 0x81, 
 0x8c, 0x01, 0xa0, 0x84, 0x30, 0x3e, 0xc0, 0xc0, 0x81, 0x8c, 0x01, 0x80, 
@@ -5087,15 +5165,15 @@
 0xe1, 0xe9, 0x80, 0x81, 0x30, 0x20, 0xc8, 0xe1, 0xea, 0x80, 0x81, 0x30, 
 0x1a, 0xd5, 0x02, 0x80, 0xc8, 0xe1, 0xe9, 0x00, 0x81, 0x30, 0x14, 0xc8, 
 0xe1, 0xe6, 0x00, 0x81, 0x30, 0x0e, 0x9a, 0x30, 0x04, 0x40, 0x91, 0x90, 
-0x90, 0xc8, 0x98, 0x50, 0x00, 0x80, 0xe5, 0x22, 0x0a, 0x00, 0x38, 0x24, 
-0xe5, 0x22, 0x0b, 0x00, 0x38, 0x36, 0xcb, 0x61, 0x0f, 0xc0, 0x85, 0x34, 
-0x4e, 0x98, 0x50, 0x00, 0x80, 0xe5, 0x22, 0x02, 0x00, 0x38, 0x04, 0xe5, 
-0x22, 0x03, 0x00, 0x38, 0x16, 0xcb, 0x61, 0x0f, 0x80, 0x85, 0x34, 0x4d, 
+0x90, 0xc8, 0x98, 0x50, 0x00, 0x80, 0xe5, 0x22, 0x16, 0x00, 0x38, 0x54, 
+0xe5, 0x22, 0x17, 0x00, 0x38, 0x66, 0xcb, 0x61, 0x0f, 0xc0, 0x85, 0x34, 
+0x4e, 0x98, 0x50, 0x00, 0x80, 0xe5, 0x22, 0x0e, 0x00, 0x38, 0x34, 0xe5, 
+0x22, 0x0f, 0x00, 0x38, 0x46, 0xcb, 0x61, 0x0f, 0x80, 0x85, 0x34, 0x4d, 
 0x90, 0x48, 0xcb, 0xa1, 0x0f, 0x40, 0x85, 0x34, 0x4c, 0xcb, 0xa1, 0x0f, 
 0x00, 0x85, 0x34, 0x4b, 0x91, 0x90, 0x90, 0xc8, 0x98, 0x50, 0x00, 0x80, 
-0xe5, 0x21, 0xfe, 0x00, 0x37, 0xfe, 0xe5, 0x21, 0xfb, 0x00, 0x37, 0xf2, 
+0xe5, 0x22, 0x07, 0x00, 0x38, 0x28, 0xe5, 0x22, 0x01, 0x00, 0x38, 0x10, 
 0xcb, 0x61, 0x0d, 0x40, 0x85, 0x34, 0x3a, 0x98, 0x50, 0x00, 0x80, 0xe5, 
-0x21, 0xf8, 0x00, 0x37, 0xe6, 0xe5, 0x21, 0xf5, 0x00, 0x37, 0xda, 0xcb, 
+0x21, 0xfb, 0x00, 0x37, 0xf8, 0xe5, 0x21, 0xf5, 0x00, 0x37, 0xe0, 0xcb, 
 0x61, 0x0d, 0x00, 0x85, 0x34, 0x39, 0x90, 0x48, 0xcb, 0xa1, 0x0c, 0xc0, 
 0x85, 0x34, 0x38, 0xcb, 0xa1, 0x0c, 0x80, 0x85, 0x34, 0x37, 0x91, 0x00, 
 0x90, 0x80, 0x90, 0x40, 0xe5, 0x20, 0x02, 0x40, 0x30, 0x0a, 0xe5, 0x20, 
@@ -5104,12 +5182,12 @@
 0xed, 0x00, 0x37, 0xae, 0xe5, 0x21, 0xee, 0x40, 0x37, 0xc4, 0x90, 0x40, 
 0xe5, 0x21, 0xe3, 0x80, 0x37, 0x88, 0xe5, 0x21, 0xe4, 0xc0, 0x37, 0x9e, 
 0x80, 0x99, 0x28, 0x02, 0xf0, 0x8c, 0x21, 0x48, 0x90, 0x80, 0x90, 0x40, 
-0xe5, 0x22, 0x0d, 0x00, 0x38, 0x32, 0xe5, 0x22, 0x0b, 0x80, 0x38, 0x38, 
-0x90, 0x40, 0xe5, 0x22, 0x05, 0x00, 0x38, 0x12, 0xe5, 0x22, 0x03, 0x80, 
-0x38, 0x18, 0x91, 0x48, 0x90, 0xc8, 0x98, 0x50, 0x00, 0x80, 0xe5, 0x21, 
-0xfe, 0x80, 0x38, 0x00, 0xe5, 0x21, 0xfb, 0x80, 0x37, 0xf4, 0xcb, 0x61, 
-0x0b, 0x00, 0x85, 0x34, 0x30, 0x90, 0x40, 0xe5, 0x21, 0xf8, 0x80, 0x37, 
-0xe8, 0xe5, 0x21, 0xf5, 0x80, 0x37, 0xdc, 0x90, 0x48, 0xcb, 0xa1, 0x0a, 
+0xe5, 0x22, 0x19, 0x00, 0x38, 0x62, 0xe5, 0x22, 0x17, 0x80, 0x38, 0x68, 
+0x90, 0x40, 0xe5, 0x22, 0x11, 0x00, 0x38, 0x42, 0xe5, 0x22, 0x0f, 0x80, 
+0x38, 0x48, 0x91, 0x48, 0x90, 0xc8, 0x98, 0x50, 0x00, 0x80, 0xe5, 0x22, 
+0x08, 0x00, 0x38, 0x2c, 0xe5, 0x22, 0x02, 0x00, 0x38, 0x14, 0xcb, 0x61, 
+0x0b, 0x00, 0x85, 0x34, 0x30, 0x90, 0x40, 0xe5, 0x21, 0xfc, 0x00, 0x37, 
+0xfc, 0xe5, 0x21, 0xf6, 0x00, 0x37, 0xe4, 0x90, 0x48, 0xcb, 0xa1, 0x0a, 
 0x80, 0x85, 0x34, 0x2e, 0xcb, 0xa1, 0x0a, 0xc0, 0x85, 0x34, 0x2f, 0x10, 
 0x10, 0x90, 0x80, 0x90, 0x40, 0xe5, 0x21, 0xf0, 0x80, 0x37, 0xc0, 0xe5, 
 0x21, 0xef, 0x00, 0x37, 0xc8, 0x90, 0x40, 0xe5, 0x21, 0xe7, 0x00, 0x37, 
@@ -5117,2176 +5195,2224 @@
 };
 
 static const struct ia64_dis_names ia64_dis_names[] = {
-{ 0x51, 39, 0, 8 },
-{ 0x31, 39, 1, 18 },
-{ 0x11, 40, 0, 17 },
-{ 0x29, 39, 0, 10 },
-{ 0x19, 39, 1, 22 },
-{ 0x9, 40, 0, 21 },
-{ 0x15, 39, 0, 12 },
-{ 0xd, 39, 1, 26 },
-{ 0x5, 40, 0, 25 },
-{ 0xb, 39, 0, 14 },
-{ 0x7, 39, 1, 30 },
-{ 0x3, 40, 0, 29 },
-{ 0x51, 37, 1, 56 },
-{ 0x50, 37, 0, 32 },
-{ 0xd1, 37, 1, 55 },
-{ 0xd0, 37, 0, 31 },
-{ 0x31, 37, 1, 66 },
-{ 0x30, 37, 1, 42 },
-{ 0x11, 38, 1, 65 },
-{ 0x10, 38, 0, 41 },
-{ 0x71, 37, 1, 64 },
-{ 0x70, 37, 1, 40 },
-{ 0x31, 38, 1, 63 },
-{ 0x30, 38, 0, 39 },
-{ 0x29, 37, 1, 58 },
-{ 0x28, 37, 0, 34 },
-{ 0x69, 37, 1, 57 },
-{ 0x68, 37, 0, 33 },
-{ 0x19, 37, 1, 70 },
-{ 0x18, 37, 1, 46 },
-{ 0x9, 38, 1, 69 },
-{ 0x8, 38, 0, 45 },
-{ 0x39, 37, 1, 68 },
-{ 0x38, 37, 1, 44 },
-{ 0x19, 38, 1, 67 },
-{ 0x18, 38, 0, 43 },
-{ 0x15, 37, 1, 60 },
-{ 0x14, 37, 0, 36 },
-{ 0x35, 37, 1, 59 },
-{ 0x34, 37, 0, 35 },
-{ 0xd, 37, 1, 74 },
-{ 0xc, 37, 1, 50 },
-{ 0x5, 38, 1, 73 },
-{ 0x4, 38, 0, 49 },
-{ 0x1d, 37, 1, 72 },
-{ 0x1c, 37, 1, 48 },
-{ 0xd, 38, 1, 71 },
-{ 0xc, 38, 0, 47 },
-{ 0xb, 37, 1, 62 },
-{ 0xa, 37, 0, 38 },
-{ 0x1b, 37, 1, 61 },
-{ 0x1a, 37, 0, 37 },
-{ 0x7, 37, 1, 78 },
-{ 0x6, 37, 1, 54 },
-{ 0x3, 38, 1, 77 },
-{ 0x2, 38, 0, 53 },
-{ 0xf, 37, 1, 76 },
-{ 0xe, 37, 1, 52 },
-{ 0x7, 38, 1, 75 },
-{ 0x6, 38, 0, 51 },
-{ 0x8, 36, 0, 80 },
-{ 0x18, 36, 0, 79 },
-{ 0x1, 36, 1, 84 },
-{ 0x2, 36, 0, 83 },
-{ 0x3, 36, 1, 82 },
-{ 0x4, 36, 0, 81 },
-{ 0x1, 279, 0, 85 },
-{ 0x20, 232, 0, 95 },
-{ 0x220, 232, 0, 91 },
-{ 0x1220, 232, 0, 88 },
-{ 0xa20, 232, 0, 89 },
-{ 0x620, 232, 0, 90 },
-{ 0x120, 232, 0, 92 },
-{ 0xa0, 232, 0, 93 },
-{ 0x60, 232, 0, 94 },
-{ 0x10, 232, 0, 99 },
-{ 0x90, 232, 0, 96 },
-{ 0x50, 232, 0, 97 },
-{ 0x30, 232, 0, 98 },
-{ 0x8, 232, 0, 100 },
-{ 0x4, 232, 0, 101 },
-{ 0x2, 232, 0, 102 },
-{ 0x1, 232, 0, 103 },
-{ 0x1, 352, 0, 105 },
-{ 0x3, 352, 0, 104 },
-{ 0x2, 358, 0, 106 },
-{ 0x1, 358, 0, 107 },
-{ 0x2, 354, 0, 108 },
-{ 0x1, 354, 0, 109 },
-{ 0x2, 356, 0, 110 },
-{ 0x1, 356, 0, 111 },
-{ 0x2, 360, 0, 112 },
-{ 0x1, 360, 0, 113 },
-{ 0x1, 211, 0, 140 },
-{ 0x5, 211, 0, 138 },
-{ 0x3, 211, 0, 139 },
-{ 0x140, 220, 0, 116 },
-{ 0x540, 220, 0, 114 },
-{ 0x340, 220, 0, 115 },
-{ 0xc0, 220, 0, 128 },
-{ 0x2c0, 220, 0, 126 },
-{ 0x1c0, 220, 0, 127 },
-{ 0x20, 220, 0, 143 },
-{ 0xa0, 220, 0, 141 },
-{ 0x60, 220, 0, 142 },
-{ 0x10, 220, 0, 155 },
-{ 0x50, 220, 0, 153 },
-{ 0x30, 220, 0, 154 },
-{ 0x8, 220, 0, 167 },
-{ 0x28, 220, 0, 165 },
-{ 0x18, 220, 0, 166 },
-{ 0x4, 220, 0, 177 },
-{ 0x2, 220, 0, 178 },
-{ 0x1, 220, 0, 179 },
-{ 0x140, 214, 0, 119 },
-{ 0x540, 214, 0, 117 },
-{ 0x340, 214, 0, 118 },
-{ 0xc0, 214, 0, 131 },
-{ 0x2c0, 214, 0, 129 },
-{ 0x1c0, 214, 0, 130 },
-{ 0x20, 214, 0, 146 },
-{ 0xa0, 214, 0, 144 },
-{ 0x60, 214, 0, 145 },
-{ 0x10, 214, 0, 158 },
-{ 0x50, 214, 0, 156 },
-{ 0x30, 214, 0, 157 },
-{ 0x8, 214, 0, 170 },
-{ 0x28, 214, 0, 168 },
-{ 0x18, 214, 0, 169 },
-{ 0x4, 214, 0, 180 },
-{ 0x2, 214, 0, 181 },
-{ 0x1, 214, 0, 182 },
-{ 0x140, 217, 0, 122 },
-{ 0x540, 217, 0, 120 },
-{ 0x340, 217, 0, 121 },
-{ 0xc0, 217, 0, 134 },
-{ 0x2c0, 217, 0, 132 },
-{ 0x1c0, 217, 0, 133 },
-{ 0x20, 217, 0, 149 },
-{ 0xa0, 217, 0, 147 },
-{ 0x60, 217, 0, 148 },
-{ 0x10, 217, 0, 161 },
-{ 0x50, 217, 0, 159 },
-{ 0x30, 217, 0, 160 },
-{ 0x8, 217, 0, 173 },
-{ 0x28, 217, 0, 171 },
-{ 0x18, 217, 0, 172 },
-{ 0x4, 217, 0, 183 },
-{ 0x2, 217, 0, 184 },
-{ 0x1, 217, 0, 185 },
-{ 0x140, 229, 0, 125 },
-{ 0x540, 229, 0, 123 },
-{ 0x340, 229, 0, 124 },
-{ 0xc0, 229, 0, 137 },
-{ 0x2c0, 229, 0, 135 },
-{ 0x1c0, 229, 0, 136 },
-{ 0x20, 229, 0, 152 },
-{ 0xa0, 229, 0, 150 },
-{ 0x60, 229, 0, 151 },
-{ 0x10, 229, 0, 164 },
-{ 0x50, 229, 0, 162 },
-{ 0x30, 229, 0, 163 },
-{ 0x8, 229, 0, 176 },
-{ 0x28, 229, 0, 174 },
-{ 0x18, 229, 0, 175 },
-{ 0x4, 229, 0, 186 },
-{ 0x2, 229, 0, 187 },
-{ 0x1, 229, 0, 188 },
-{ 0x8, 333, 0, 189 },
-{ 0x4, 333, 0, 190 },
-{ 0x2, 333, 0, 191 },
-{ 0x1, 333, 0, 192 },
-{ 0x20, 231, 0, 200 },
-{ 0x220, 231, 0, 196 },
-{ 0x1220, 231, 0, 193 },
-{ 0xa20, 231, 0, 194 },
-{ 0x620, 231, 0, 195 },
-{ 0x120, 231, 0, 197 },
-{ 0xa0, 231, 0, 198 },
-{ 0x60, 231, 0, 199 },
-{ 0x10, 231, 0, 204 },
-{ 0x90, 231, 0, 201 },
-{ 0x50, 231, 0, 202 },
-{ 0x30, 231, 0, 203 },
-{ 0x8, 231, 0, 205 },
-{ 0x4, 231, 0, 206 },
-{ 0x2, 231, 0, 207 },
-{ 0x1, 231, 0, 208 },
-{ 0x20, 230, 0, 216 },
-{ 0x220, 230, 0, 212 },
-{ 0x1220, 230, 0, 209 },
-{ 0xa20, 230, 0, 210 },
-{ 0x620, 230, 0, 211 },
-{ 0x120, 230, 0, 213 },
-{ 0xa0, 230, 0, 214 },
-{ 0x60, 230, 0, 215 },
-{ 0x10, 230, 0, 220 },
-{ 0x90, 230, 0, 217 },
-{ 0x50, 230, 0, 218 },
-{ 0x30, 230, 0, 219 },
-{ 0x8, 230, 0, 221 },
-{ 0x4, 230, 0, 222 },
-{ 0x2, 230, 0, 223 },
-{ 0x1, 230, 0, 224 },
-{ 0x140, 222, 0, 227 },
-{ 0x540, 222, 0, 225 },
-{ 0x340, 222, 0, 226 },
-{ 0xc0, 222, 0, 236 },
-{ 0x2c0, 222, 0, 234 },
-{ 0x1c0, 222, 0, 235 },
-{ 0x20, 222, 0, 245 },
-{ 0xa0, 222, 0, 243 },
-{ 0x60, 222, 0, 244 },
-{ 0x10, 222, 0, 254 },
-{ 0x50, 222, 0, 252 },
-{ 0x30, 222, 0, 253 },
-{ 0x8, 222, 0, 263 },
-{ 0x28, 222, 0, 261 },
-{ 0x18, 222, 0, 262 },
-{ 0x4, 222, 0, 270 },
-{ 0x2, 222, 0, 271 },
-{ 0x1, 222, 0, 272 },
-{ 0x140, 224, 0, 230 },
-{ 0x540, 224, 0, 228 },
-{ 0x340, 224, 0, 229 },
-{ 0xc0, 224, 0, 239 },
-{ 0x2c0, 224, 0, 237 },
-{ 0x1c0, 224, 0, 238 },
-{ 0x20, 224, 0, 248 },
-{ 0xa0, 224, 0, 246 },
-{ 0x60, 224, 0, 247 },
-{ 0x10, 224, 0, 257 },
-{ 0x50, 224, 0, 255 },
-{ 0x30, 224, 0, 256 },
-{ 0x8, 224, 0, 266 },
-{ 0x28, 224, 0, 264 },
-{ 0x18, 224, 0, 265 },
-{ 0x4, 224, 0, 273 },
-{ 0x2, 224, 0, 274 },
-{ 0x1, 224, 0, 275 },
-{ 0x140, 226, 0, 233 },
-{ 0x540, 226, 0, 231 },
-{ 0x340, 226, 0, 232 },
-{ 0xc0, 226, 0, 242 },
-{ 0x2c0, 226, 0, 240 },
-{ 0x1c0, 226, 0, 241 },
-{ 0x20, 226, 0, 251 },
-{ 0xa0, 226, 0, 249 },
-{ 0x60, 226, 0, 250 },
-{ 0x10, 226, 0, 260 },
-{ 0x50, 226, 0, 258 },
-{ 0x30, 226, 0, 259 },
-{ 0x8, 226, 0, 269 },
-{ 0x28, 226, 0, 267 },
-{ 0x18, 226, 0, 268 },
-{ 0x4, 226, 0, 276 },
-{ 0x2, 226, 0, 277 },
-{ 0x1, 226, 0, 278 },
-{ 0x140, 221, 0, 281 },
-{ 0x540, 221, 0, 279 },
-{ 0x340, 221, 0, 280 },
-{ 0xc0, 221, 0, 290 },
-{ 0x2c0, 221, 0, 288 },
-{ 0x1c0, 221, 0, 289 },
-{ 0x20, 221, 0, 299 },
-{ 0xa0, 221, 0, 297 },
-{ 0x60, 221, 0, 298 },
-{ 0x10, 221, 0, 308 },
-{ 0x50, 221, 0, 306 },
-{ 0x30, 221, 0, 307 },
-{ 0x8, 221, 0, 317 },
-{ 0x28, 221, 0, 315 },
-{ 0x18, 221, 0, 316 },
-{ 0x4, 221, 0, 324 },
-{ 0x2, 221, 0, 325 },
-{ 0x1, 221, 0, 326 },
-{ 0x140, 223, 0, 284 },
-{ 0x540, 223, 0, 282 },
-{ 0x340, 223, 0, 283 },
-{ 0xc0, 223, 0, 293 },
-{ 0x2c0, 223, 0, 291 },
-{ 0x1c0, 223, 0, 292 },
-{ 0x20, 223, 0, 302 },
-{ 0xa0, 223, 0, 300 },
-{ 0x60, 223, 0, 301 },
-{ 0x10, 223, 0, 311 },
-{ 0x50, 223, 0, 309 },
-{ 0x30, 223, 0, 310 },
-{ 0x8, 223, 0, 320 },
-{ 0x28, 223, 0, 318 },
-{ 0x18, 223, 0, 319 },
-{ 0x4, 223, 0, 327 },
-{ 0x2, 223, 0, 328 },
-{ 0x1, 223, 0, 329 },
-{ 0x140, 225, 0, 287 },
-{ 0x540, 225, 0, 285 },
-{ 0x340, 225, 0, 286 },
-{ 0xc0, 225, 0, 296 },
-{ 0x2c0, 225, 0, 294 },
-{ 0x1c0, 225, 0, 295 },
-{ 0x20, 225, 0, 305 },
-{ 0xa0, 225, 0, 303 },
-{ 0x60, 225, 0, 304 },
-{ 0x10, 225, 0, 314 },
-{ 0x50, 225, 0, 312 },
-{ 0x30, 225, 0, 313 },
-{ 0x8, 225, 0, 323 },
-{ 0x28, 225, 0, 321 },
-{ 0x18, 225, 0, 322 },
-{ 0x4, 225, 0, 330 },
-{ 0x2, 225, 0, 331 },
-{ 0x1, 225, 0, 332 },
-{ 0x1, 351, 0, 334 },
-{ 0x3, 351, 0, 333 },
-{ 0x2, 357, 0, 335 },
-{ 0x1, 357, 0, 336 },
-{ 0x2, 353, 0, 337 },
-{ 0x1, 353, 0, 338 },
-{ 0x2, 355, 0, 339 },
-{ 0x1, 355, 0, 340 },
-{ 0x2, 359, 0, 341 },
-{ 0x1, 359, 0, 342 },
-{ 0x1, 210, 0, 369 },
-{ 0x5, 210, 0, 367 },
-{ 0x3, 210, 0, 368 },
-{ 0x140, 219, 0, 345 },
-{ 0x540, 219, 0, 343 },
-{ 0x340, 219, 0, 344 },
-{ 0xc0, 219, 0, 357 },
-{ 0x2c0, 219, 0, 355 },
-{ 0x1c0, 219, 0, 356 },
-{ 0x20, 219, 0, 372 },
-{ 0xa0, 219, 0, 370 },
-{ 0x60, 219, 0, 371 },
-{ 0x10, 219, 0, 384 },
-{ 0x50, 219, 0, 382 },
-{ 0x30, 219, 0, 383 },
-{ 0x8, 219, 0, 396 },
-{ 0x28, 219, 0, 394 },
-{ 0x18, 219, 0, 395 },
-{ 0x4, 219, 0, 406 },
-{ 0x2, 219, 0, 407 },
-{ 0x1, 219, 0, 408 },
-{ 0x140, 213, 0, 348 },
-{ 0x540, 213, 0, 346 },
-{ 0x340, 213, 0, 347 },
-{ 0xc0, 213, 0, 360 },
-{ 0x2c0, 213, 0, 358 },
-{ 0x1c0, 213, 0, 359 },
-{ 0x20, 213, 0, 375 },
-{ 0xa0, 213, 0, 373 },
-{ 0x60, 213, 0, 374 },
-{ 0x10, 213, 0, 387 },
-{ 0x50, 213, 0, 385 },
-{ 0x30, 213, 0, 386 },
-{ 0x8, 213, 0, 399 },
-{ 0x28, 213, 0, 397 },
-{ 0x18, 213, 0, 398 },
-{ 0x4, 213, 0, 409 },
-{ 0x2, 213, 0, 410 },
-{ 0x1, 213, 0, 411 },
-{ 0x140, 216, 0, 351 },
-{ 0x540, 216, 0, 349 },
-{ 0x340, 216, 0, 350 },
-{ 0xc0, 216, 0, 363 },
-{ 0x2c0, 216, 0, 361 },
-{ 0x1c0, 216, 0, 362 },
-{ 0x20, 216, 0, 378 },
-{ 0xa0, 216, 0, 376 },
-{ 0x60, 216, 0, 377 },
-{ 0x10, 216, 0, 390 },
-{ 0x50, 216, 0, 388 },
-{ 0x30, 216, 0, 389 },
-{ 0x8, 216, 0, 402 },
-{ 0x28, 216, 0, 400 },
-{ 0x18, 216, 0, 401 },
-{ 0x4, 216, 0, 412 },
-{ 0x2, 216, 0, 413 },
-{ 0x1, 216, 0, 414 },
-{ 0x140, 228, 0, 354 },
-{ 0x540, 228, 0, 352 },
-{ 0x340, 228, 0, 353 },
-{ 0xc0, 228, 0, 366 },
-{ 0x2c0, 228, 0, 364 },
-{ 0x1c0, 228, 0, 365 },
-{ 0x20, 228, 0, 381 },
-{ 0xa0, 228, 0, 379 },
-{ 0x60, 228, 0, 380 },
-{ 0x10, 228, 0, 393 },
-{ 0x50, 228, 0, 391 },
-{ 0x30, 228, 0, 392 },
-{ 0x8, 228, 0, 405 },
-{ 0x28, 228, 0, 403 },
-{ 0x18, 228, 0, 404 },
-{ 0x4, 228, 0, 415 },
-{ 0x2, 228, 0, 416 },
-{ 0x1, 228, 0, 417 },
-{ 0x1, 209, 0, 444 },
-{ 0x5, 209, 0, 442 },
-{ 0x3, 209, 0, 443 },
-{ 0x140, 218, 0, 420 },
-{ 0x540, 218, 0, 418 },
-{ 0x340, 218, 0, 419 },
-{ 0xc0, 218, 0, 432 },
-{ 0x2c0, 218, 0, 430 },
-{ 0x1c0, 218, 0, 431 },
-{ 0x20, 218, 0, 447 },
-{ 0xa0, 218, 0, 445 },
-{ 0x60, 218, 0, 446 },
-{ 0x10, 218, 0, 459 },
-{ 0x50, 218, 0, 457 },
-{ 0x30, 218, 0, 458 },
-{ 0x8, 218, 0, 471 },
-{ 0x28, 218, 0, 469 },
-{ 0x18, 218, 0, 470 },
-{ 0x4, 218, 0, 481 },
-{ 0x2, 218, 0, 482 },
-{ 0x1, 218, 0, 483 },
-{ 0x140, 212, 0, 423 },
-{ 0x540, 212, 0, 421 },
-{ 0x340, 212, 0, 422 },
-{ 0xc0, 212, 0, 435 },
-{ 0x2c0, 212, 0, 433 },
-{ 0x1c0, 212, 0, 434 },
-{ 0x20, 212, 0, 450 },
-{ 0xa0, 212, 0, 448 },
-{ 0x60, 212, 0, 449 },
-{ 0x10, 212, 0, 462 },
-{ 0x50, 212, 0, 460 },
-{ 0x30, 212, 0, 461 },
-{ 0x8, 212, 0, 474 },
-{ 0x28, 212, 0, 472 },
-{ 0x18, 212, 0, 473 },
-{ 0x4, 212, 0, 484 },
-{ 0x2, 212, 0, 485 },
-{ 0x1, 212, 0, 486 },
-{ 0x140, 215, 0, 426 },
-{ 0x540, 215, 0, 424 },
-{ 0x340, 215, 0, 425 },
-{ 0xc0, 215, 0, 438 },
-{ 0x2c0, 215, 0, 436 },
-{ 0x1c0, 215, 0, 437 },
-{ 0x20, 215, 0, 453 },
-{ 0xa0, 215, 0, 451 },
-{ 0x60, 215, 0, 452 },
-{ 0x10, 215, 0, 465 },
-{ 0x50, 215, 0, 463 },
-{ 0x30, 215, 0, 464 },
-{ 0x8, 215, 0, 477 },
-{ 0x28, 215, 0, 475 },
-{ 0x18, 215, 0, 476 },
-{ 0x4, 215, 0, 487 },
-{ 0x2, 215, 0, 488 },
-{ 0x1, 215, 0, 489 },
-{ 0x140, 227, 0, 429 },
-{ 0x540, 227, 0, 427 },
-{ 0x340, 227, 0, 428 },
-{ 0xc0, 227, 0, 441 },
-{ 0x2c0, 227, 0, 439 },
-{ 0x1c0, 227, 0, 440 },
-{ 0x20, 227, 0, 456 },
-{ 0xa0, 227, 0, 454 },
-{ 0x60, 227, 0, 455 },
-{ 0x10, 227, 0, 468 },
-{ 0x50, 227, 0, 466 },
-{ 0x30, 227, 0, 467 },
-{ 0x8, 227, 0, 480 },
-{ 0x28, 227, 0, 478 },
-{ 0x18, 227, 0, 479 },
-{ 0x4, 227, 0, 490 },
-{ 0x2, 227, 0, 491 },
-{ 0x1, 227, 0, 492 },
-{ 0x8, 350, 0, 494 },
-{ 0x18, 350, 0, 493 },
-{ 0x4, 350, 0, 496 },
-{ 0xc, 350, 0, 495 },
-{ 0x2, 350, 0, 503 },
-{ 0x1, 350, 0, 504 },
-{ 0x4, 348, 0, 498 },
-{ 0xc, 348, 0, 497 },
-{ 0x2, 348, 0, 505 },
-{ 0x1, 348, 0, 506 },
-{ 0x4, 346, 0, 500 },
-{ 0xc, 346, 0, 499 },
-{ 0x2, 346, 0, 507 },
-{ 0x1, 346, 0, 508 },
-{ 0x4, 344, 0, 502 },
-{ 0xc, 344, 0, 501 },
-{ 0x2, 344, 0, 509 },
-{ 0x1, 344, 0, 510 },
-{ 0xa00, 208, 0, 525 },
-{ 0x2a00, 208, 0, 523 },
-{ 0x1a00, 208, 0, 524 },
-{ 0x600, 208, 0, 537 },
-{ 0x2600, 208, 0, 513 },
-{ 0xa600, 208, 0, 511 },
-{ 0x6600, 208, 0, 512 },
-{ 0x1600, 208, 0, 535 },
-{ 0xe00, 208, 0, 536 },
-{ 0x100, 208, 0, 549 },
-{ 0x500, 208, 0, 547 },
-{ 0x300, 208, 0, 548 },
-{ 0x80, 208, 0, 552 },
-{ 0x280, 208, 0, 550 },
-{ 0x180, 208, 0, 551 },
-{ 0x40, 208, 0, 564 },
-{ 0x140, 208, 0, 562 },
-{ 0xc0, 208, 0, 563 },
-{ 0x20, 208, 0, 576 },
-{ 0xa0, 208, 0, 574 },
-{ 0x60, 208, 0, 575 },
-{ 0x10, 208, 0, 588 },
-{ 0x50, 208, 0, 586 },
-{ 0x30, 208, 0, 587 },
-{ 0x8, 208, 0, 600 },
-{ 0x28, 208, 0, 598 },
-{ 0x18, 208, 0, 599 },
-{ 0x4, 208, 0, 610 },
-{ 0x2, 208, 0, 611 },
-{ 0x1, 208, 0, 612 },
-{ 0x500, 205, 0, 528 },
-{ 0x1500, 205, 0, 526 },
-{ 0xd00, 205, 0, 527 },
-{ 0x300, 205, 0, 540 },
-{ 0x1300, 205, 0, 516 },
-{ 0x5300, 205, 0, 514 },
-{ 0x3300, 205, 0, 515 },
-{ 0xb00, 205, 0, 538 },
-{ 0x700, 205, 0, 539 },
-{ 0x80, 205, 0, 555 },
-{ 0x280, 205, 0, 553 },
-{ 0x180, 205, 0, 554 },
-{ 0x40, 205, 0, 567 },
-{ 0x140, 205, 0, 565 },
-{ 0xc0, 205, 0, 566 },
-{ 0x20, 205, 0, 579 },
-{ 0xa0, 205, 0, 577 },
-{ 0x60, 205, 0, 578 },
-{ 0x10, 205, 0, 591 },
-{ 0x50, 205, 0, 589 },
-{ 0x30, 205, 0, 590 },
-{ 0x8, 205, 0, 603 },
-{ 0x28, 205, 0, 601 },
-{ 0x18, 205, 0, 602 },
-{ 0x4, 205, 0, 613 },
-{ 0x2, 205, 0, 614 },
-{ 0x1, 205, 0, 615 },
-{ 0x500, 202, 0, 531 },
-{ 0x1500, 202, 0, 529 },
-{ 0xd00, 202, 0, 530 },
-{ 0x300, 202, 0, 543 },
-{ 0x1300, 202, 0, 519 },
-{ 0x5300, 202, 0, 517 },
-{ 0x3300, 202, 0, 518 },
-{ 0xb00, 202, 0, 541 },
-{ 0x700, 202, 0, 542 },
-{ 0x80, 202, 0, 558 },
-{ 0x280, 202, 0, 556 },
-{ 0x180, 202, 0, 557 },
-{ 0x40, 202, 0, 570 },
-{ 0x140, 202, 0, 568 },
-{ 0xc0, 202, 0, 569 },
-{ 0x20, 202, 0, 582 },
-{ 0xa0, 202, 0, 580 },
-{ 0x60, 202, 0, 581 },
-{ 0x10, 202, 0, 594 },
-{ 0x50, 202, 0, 592 },
-{ 0x30, 202, 0, 593 },
-{ 0x8, 202, 0, 606 },
-{ 0x28, 202, 0, 604 },
-{ 0x18, 202, 0, 605 },
-{ 0x4, 202, 0, 616 },
-{ 0x2, 202, 0, 617 },
-{ 0x1, 202, 0, 618 },
-{ 0x500, 199, 0, 534 },
-{ 0x1500, 199, 0, 532 },
-{ 0xd00, 199, 0, 533 },
-{ 0x300, 199, 0, 546 },
-{ 0x1300, 199, 0, 522 },
-{ 0x5300, 199, 0, 520 },
-{ 0x3300, 199, 0, 521 },
-{ 0xb00, 199, 0, 544 },
-{ 0x700, 199, 0, 545 },
-{ 0x80, 199, 0, 561 },
-{ 0x280, 199, 0, 559 },
-{ 0x180, 199, 0, 560 },
-{ 0x40, 199, 0, 573 },
-{ 0x140, 199, 0, 571 },
-{ 0xc0, 199, 0, 572 },
-{ 0x20, 199, 0, 585 },
-{ 0xa0, 199, 0, 583 },
-{ 0x60, 199, 0, 584 },
-{ 0x10, 199, 0, 597 },
-{ 0x50, 199, 0, 595 },
-{ 0x30, 199, 0, 596 },
-{ 0x8, 199, 0, 609 },
-{ 0x28, 199, 0, 607 },
-{ 0x18, 199, 0, 608 },
-{ 0x4, 199, 0, 619 },
-{ 0x2, 199, 0, 620 },
-{ 0x1, 199, 0, 621 },
-{ 0x8, 190, 0, 622 },
-{ 0x4, 190, 0, 623 },
-{ 0x2, 190, 0, 624 },
-{ 0x1, 190, 0, 625 },
-{ 0x2, 128, 0, 628 },
-{ 0xa, 128, 0, 626 },
-{ 0x6, 128, 0, 627 },
-{ 0x1, 128, 0, 634 },
-{ 0x5, 128, 0, 632 },
-{ 0x3, 128, 0, 633 },
-{ 0x2, 127, 0, 631 },
-{ 0xa, 127, 0, 629 },
-{ 0x6, 127, 0, 630 },
-{ 0x1, 127, 0, 637 },
-{ 0x5, 127, 0, 635 },
-{ 0x3, 127, 0, 636 },
-{ 0x4, 383, 0, 638 },
-{ 0x2, 383, 0, 639 },
-{ 0x1, 383, 0, 640 },
-{ 0x4, 382, 0, 641 },
-{ 0x2, 382, 0, 642 },
-{ 0x1, 382, 0, 643 },
-{ 0x4, 381, 0, 644 },
-{ 0x2, 381, 0, 645 },
-{ 0x1, 381, 0, 646 },
-{ 0x4, 380, 0, 647 },
-{ 0x2, 380, 0, 648 },
-{ 0x1, 380, 0, 649 },
-{ 0x2, 90, 0, 652 },
-{ 0xa, 90, 0, 650 },
-{ 0x6, 90, 0, 651 },
-{ 0x1, 90, 0, 664 },
-{ 0x5, 90, 0, 662 },
-{ 0x3, 90, 0, 663 },
-{ 0x2, 89, 0, 655 },
-{ 0xa, 89, 0, 653 },
-{ 0x6, 89, 0, 654 },
-{ 0x1, 89, 0, 667 },
-{ 0x5, 89, 0, 665 },
-{ 0x3, 89, 0, 666 },
-{ 0x2, 88, 0, 658 },
-{ 0xa, 88, 0, 656 },
-{ 0x6, 88, 0, 657 },
-{ 0x1, 88, 0, 670 },
-{ 0x5, 88, 0, 668 },
-{ 0x3, 88, 0, 669 },
-{ 0x2, 87, 0, 661 },
-{ 0xa, 87, 0, 659 },
-{ 0x6, 87, 0, 660 },
-{ 0x1, 87, 0, 673 },
-{ 0x5, 87, 0, 671 },
-{ 0x3, 87, 0, 672 },
-{ 0x8, 349, 0, 675 },
-{ 0x18, 349, 0, 674 },
-{ 0x4, 349, 0, 677 },
-{ 0xc, 349, 0, 676 },
-{ 0x2, 349, 0, 684 },
-{ 0x1, 349, 0, 685 },
-{ 0x4, 347, 0, 679 },
-{ 0xc, 347, 0, 678 },
-{ 0x2, 347, 0, 686 },
-{ 0x1, 347, 0, 687 },
-{ 0x4, 345, 0, 681 },
-{ 0xc, 345, 0, 680 },
-{ 0x2, 345, 0, 688 },
-{ 0x1, 345, 0, 689 },
-{ 0x4, 343, 0, 683 },
-{ 0xc, 343, 0, 682 },
-{ 0x2, 343, 0, 690 },
-{ 0x1, 343, 0, 691 },
-{ 0xa00, 207, 0, 706 },
-{ 0x2a00, 207, 0, 704 },
-{ 0x1a00, 207, 0, 705 },
-{ 0x600, 207, 0, 718 },
-{ 0x2600, 207, 0, 694 },
-{ 0xa600, 207, 0, 692 },
-{ 0x6600, 207, 0, 693 },
-{ 0x1600, 207, 0, 716 },
-{ 0xe00, 207, 0, 717 },
-{ 0x100, 207, 0, 730 },
-{ 0x500, 207, 0, 728 },
-{ 0x300, 207, 0, 729 },
-{ 0x80, 207, 0, 733 },
-{ 0x280, 207, 0, 731 },
-{ 0x180, 207, 0, 732 },
-{ 0x40, 207, 0, 745 },
-{ 0x140, 207, 0, 743 },
-{ 0xc0, 207, 0, 744 },
-{ 0x20, 207, 0, 757 },
-{ 0xa0, 207, 0, 755 },
-{ 0x60, 207, 0, 756 },
-{ 0x10, 207, 0, 769 },
-{ 0x50, 207, 0, 767 },
-{ 0x30, 207, 0, 768 },
-{ 0x8, 207, 0, 781 },
-{ 0x28, 207, 0, 779 },
-{ 0x18, 207, 0, 780 },
-{ 0x4, 207, 0, 791 },
-{ 0x2, 207, 0, 792 },
-{ 0x1, 207, 0, 793 },
-{ 0x500, 204, 0, 709 },
-{ 0x1500, 204, 0, 707 },
-{ 0xd00, 204, 0, 708 },
-{ 0x300, 204, 0, 721 },
-{ 0x1300, 204, 0, 697 },
-{ 0x5300, 204, 0, 695 },
-{ 0x3300, 204, 0, 696 },
-{ 0xb00, 204, 0, 719 },
-{ 0x700, 204, 0, 720 },
-{ 0x80, 204, 0, 736 },
-{ 0x280, 204, 0, 734 },
-{ 0x180, 204, 0, 735 },
-{ 0x40, 204, 0, 748 },
-{ 0x140, 204, 0, 746 },
-{ 0xc0, 204, 0, 747 },
-{ 0x20, 204, 0, 760 },
-{ 0xa0, 204, 0, 758 },
-{ 0x60, 204, 0, 759 },
-{ 0x10, 204, 0, 772 },
-{ 0x50, 204, 0, 770 },
-{ 0x30, 204, 0, 771 },
-{ 0x8, 204, 0, 784 },
-{ 0x28, 204, 0, 782 },
-{ 0x18, 204, 0, 783 },
-{ 0x4, 204, 0, 794 },
-{ 0x2, 204, 0, 795 },
-{ 0x1, 204, 0, 796 },
-{ 0x500, 201, 0, 712 },
-{ 0x1500, 201, 0, 710 },
-{ 0xd00, 201, 0, 711 },
-{ 0x300, 201, 0, 724 },
-{ 0x1300, 201, 0, 700 },
-{ 0x5300, 201, 0, 698 },
-{ 0x3300, 201, 0, 699 },
-{ 0xb00, 201, 0, 722 },
-{ 0x700, 201, 0, 723 },
-{ 0x80, 201, 0, 739 },
-{ 0x280, 201, 0, 737 },
-{ 0x180, 201, 0, 738 },
-{ 0x40, 201, 0, 751 },
-{ 0x140, 201, 0, 749 },
-{ 0xc0, 201, 0, 750 },
-{ 0x20, 201, 0, 763 },
-{ 0xa0, 201, 0, 761 },
-{ 0x60, 201, 0, 762 },
-{ 0x10, 201, 0, 775 },
-{ 0x50, 201, 0, 773 },
-{ 0x30, 201, 0, 774 },
-{ 0x8, 201, 0, 787 },
-{ 0x28, 201, 0, 785 },
-{ 0x18, 201, 0, 786 },
-{ 0x4, 201, 0, 797 },
-{ 0x2, 201, 0, 798 },
-{ 0x1, 201, 0, 799 },
-{ 0x500, 198, 0, 715 },
-{ 0x1500, 198, 0, 713 },
-{ 0xd00, 198, 0, 714 },
-{ 0x300, 198, 0, 727 },
-{ 0x1300, 198, 0, 703 },
-{ 0x5300, 198, 0, 701 },
-{ 0x3300, 198, 0, 702 },
-{ 0xb00, 198, 0, 725 },
-{ 0x700, 198, 0, 726 },
-{ 0x80, 198, 0, 742 },
-{ 0x280, 198, 0, 740 },
-{ 0x180, 198, 0, 741 },
-{ 0x40, 198, 0, 754 },
-{ 0x140, 198, 0, 752 },
-{ 0xc0, 198, 0, 753 },
-{ 0x20, 198, 0, 766 },
-{ 0xa0, 198, 0, 764 },
-{ 0x60, 198, 0, 765 },
-{ 0x10, 198, 0, 778 },
-{ 0x50, 198, 0, 776 },
-{ 0x30, 198, 0, 777 },
-{ 0x8, 198, 0, 790 },
-{ 0x28, 198, 0, 788 },
-{ 0x18, 198, 0, 789 },
-{ 0x4, 198, 0, 800 },
-{ 0x2, 198, 0, 801 },
-{ 0x1, 198, 0, 802 },
-{ 0xa00, 206, 0, 817 },
-{ 0x2a00, 206, 0, 815 },
-{ 0x1a00, 206, 0, 816 },
-{ 0x600, 206, 0, 829 },
-{ 0x2600, 206, 0, 805 },
-{ 0xa600, 206, 0, 803 },
-{ 0x6600, 206, 0, 804 },
-{ 0x1600, 206, 0, 827 },
-{ 0xe00, 206, 0, 828 },
-{ 0x100, 206, 0, 841 },
-{ 0x500, 206, 0, 839 },
-{ 0x300, 206, 0, 840 },
-{ 0x80, 206, 0, 844 },
-{ 0x280, 206, 0, 842 },
-{ 0x180, 206, 0, 843 },
-{ 0x40, 206, 0, 856 },
-{ 0x140, 206, 0, 854 },
-{ 0xc0, 206, 0, 855 },
-{ 0x20, 206, 0, 868 },
-{ 0xa0, 206, 0, 866 },
-{ 0x60, 206, 0, 867 },
-{ 0x10, 206, 0, 880 },
-{ 0x50, 206, 0, 878 },
-{ 0x30, 206, 0, 879 },
-{ 0x8, 206, 0, 892 },
-{ 0x28, 206, 0, 890 },
-{ 0x18, 206, 0, 891 },
-{ 0x4, 206, 0, 902 },
-{ 0x2, 206, 0, 903 },
-{ 0x1, 206, 0, 904 },
-{ 0x500, 203, 0, 820 },
-{ 0x1500, 203, 0, 818 },
-{ 0xd00, 203, 0, 819 },
-{ 0x300, 203, 0, 832 },
-{ 0x1300, 203, 0, 808 },
-{ 0x5300, 203, 0, 806 },
-{ 0x3300, 203, 0, 807 },
-{ 0xb00, 203, 0, 830 },
-{ 0x700, 203, 0, 831 },
-{ 0x80, 203, 0, 847 },
-{ 0x280, 203, 0, 845 },
-{ 0x180, 203, 0, 846 },
-{ 0x40, 203, 0, 859 },
-{ 0x140, 203, 0, 857 },
-{ 0xc0, 203, 0, 858 },
-{ 0x20, 203, 0, 871 },
-{ 0xa0, 203, 0, 869 },
-{ 0x60, 203, 0, 870 },
-{ 0x10, 203, 0, 883 },
-{ 0x50, 203, 0, 881 },
-{ 0x30, 203, 0, 882 },
-{ 0x8, 203, 0, 895 },
-{ 0x28, 203, 0, 893 },
-{ 0x18, 203, 0, 894 },
-{ 0x4, 203, 0, 905 },
-{ 0x2, 203, 0, 906 },
-{ 0x1, 203, 0, 907 },
-{ 0x500, 200, 0, 823 },
-{ 0x1500, 200, 0, 821 },
-{ 0xd00, 200, 0, 822 },
-{ 0x300, 200, 0, 835 },
-{ 0x1300, 200, 0, 811 },
-{ 0x5300, 200, 0, 809 },
-{ 0x3300, 200, 0, 810 },
-{ 0xb00, 200, 0, 833 },
-{ 0x700, 200, 0, 834 },
-{ 0x80, 200, 0, 850 },
-{ 0x280, 200, 0, 848 },
-{ 0x180, 200, 0, 849 },
-{ 0x40, 200, 0, 862 },
-{ 0x140, 200, 0, 860 },
-{ 0xc0, 200, 0, 861 },
-{ 0x20, 200, 0, 874 },
-{ 0xa0, 200, 0, 872 },
-{ 0x60, 200, 0, 873 },
-{ 0x10, 200, 0, 886 },
-{ 0x50, 200, 0, 884 },
-{ 0x30, 200, 0, 885 },
-{ 0x8, 200, 0, 898 },
-{ 0x28, 200, 0, 896 },
-{ 0x18, 200, 0, 897 },
-{ 0x4, 200, 0, 908 },
-{ 0x2, 200, 0, 909 },
-{ 0x1, 200, 0, 910 },
-{ 0x500, 197, 0, 826 },
-{ 0x1500, 197, 0, 824 },
-{ 0xd00, 197, 0, 825 },
-{ 0x300, 197, 0, 838 },
-{ 0x1300, 197, 0, 814 },
-{ 0x5300, 197, 0, 812 },
-{ 0x3300, 197, 0, 813 },
-{ 0xb00, 197, 0, 836 },
-{ 0x700, 197, 0, 837 },
-{ 0x80, 197, 0, 853 },
-{ 0x280, 197, 0, 851 },
-{ 0x180, 197, 0, 852 },
-{ 0x40, 197, 0, 865 },
-{ 0x140, 197, 0, 863 },
-{ 0xc0, 197, 0, 864 },
-{ 0x20, 197, 0, 877 },
-{ 0xa0, 197, 0, 875 },
-{ 0x60, 197, 0, 876 },
-{ 0x10, 197, 0, 889 },
-{ 0x50, 197, 0, 887 },
-{ 0x30, 197, 0, 888 },
-{ 0x8, 197, 0, 901 },
-{ 0x28, 197, 0, 899 },
-{ 0x18, 197, 0, 900 },
-{ 0x4, 197, 0, 911 },
-{ 0x2, 197, 0, 912 },
-{ 0x1, 197, 0, 913 },
-{ 0x1, 48, 0, 916 },
-{ 0x3, 47, 0, 917 },
-{ 0x1, 369, 0, 918 },
-{ 0x1, 375, 0, 919 },
-{ 0x2, 329, 0, 922 },
-{ 0x1, 329, 0, 923 },
-{ 0x2, 327, 0, 924 },
-{ 0x1, 327, 0, 925 },
-{ 0x1, 326, 0, 926 },
-{ 0x1, 271, 0, 931 },
-{ 0x1, 270, 0, 932 },
-{ 0x1, 269, 0, 933 },
-{ 0x1, 268, 0, 934 },
-{ 0x1, 196, 0, 935 },
-{ 0x1, 195, 0, 936 },
-{ 0x1, 267, 0, 937 },
-{ 0x1, 266, 0, 938 },
-{ 0x1, 265, 0, 939 },
-{ 0x1, 264, 0, 940 },
-{ 0x1, 263, 0, 941 },
-{ 0x1, 262, 0, 942 },
-{ 0x1, 261, 0, 943 },
-{ 0x2, 194, 0, 944 },
-{ 0x1, 194, 0, 945 },
-{ 0x2, 309, 0, 951 },
-{ 0x1, 309, 0, 952 },
-{ 0x1, 260, 0, 953 },
-{ 0x1, 259, 0, 954 },
-{ 0x1, 258, 0, 955 },
-{ 0x1, 257, 0, 956 },
-{ 0x1, 7, 0, 957 },
-{ 0x1, 256, 0, 958 },
-{ 0x1, 255, 0, 959 },
-{ 0x1, 254, 0, 960 },
-{ 0x1, 253, 0, 961 },
-{ 0x1, 331, 0, 962 },
-{ 0x1, 342, 0, 963 },
-{ 0x1, 332, 0, 964 },
-{ 0x1, 364, 0, 965 },
-{ 0x1, 252, 0, 968 },
-{ 0x1, 193, 0, 969 },
-{ 0x1, 129, 0, 972 },
-{ 0x2, 234, 0, 976 },
-{ 0x1, 234, 0, 977 },
-{ 0x1, 188, 0, 978 },
-{ 0x5, 46, 0, 980 },
-{ 0x3, 46, 0, 981 },
-{ 0x5, 45, 0, 982 },
-{ 0x3, 45, 0, 983 },
-{ 0x1, 308, 0, 984 },
-{ 0x1, 316, 0, 985 },
-{ 0x1, 314, 0, 986 },
-{ 0x1, 335, 0, 987 },
-{ 0x1, 315, 0, 988 },
-{ 0x1, 313, 0, 989 },
-{ 0x2, 321, 0, 990 },
-{ 0x1, 321, 0, 992 },
-{ 0x2, 319, 0, 991 },
-{ 0x1, 319, 0, 993 },
-{ 0x2, 339, 0, 994 },
-{ 0x1, 339, 0, 997 },
-{ 0x2, 320, 0, 995 },
-{ 0x1, 320, 0, 998 },
-{ 0x2, 318, 0, 996 },
-{ 0x1, 318, 0, 999 },
-{ 0x1, 281, 0, 1000 },
-{ 0x1, 280, 0, 1001 },
-{ 0x1, 312, 0, 1002 },
-{ 0x1, 303, 0, 1003 },
-{ 0x1, 305, 0, 1004 },
-{ 0x1, 302, 0, 1005 },
-{ 0x1, 304, 0, 1006 },
-{ 0x2, 379, 0, 1007 },
-{ 0x1, 379, 0, 1010 },
-{ 0x2, 378, 0, 1008 },
-{ 0x1, 378, 0, 1011 },
-{ 0x2, 377, 0, 1009 },
-{ 0x1, 377, 0, 1012 },
-{ 0x1, 291, 0, 1013 },
-{ 0x2, 290, 0, 1014 },
-{ 0x1, 290, 0, 1015 },
-{ 0x2, 237, 0, 1016 },
-{ 0x1, 237, 0, 1019 },
-{ 0x2, 236, 0, 1017 },
-{ 0x1, 236, 0, 1020 },
-{ 0x2, 235, 0, 1018 },
-{ 0x1, 235, 0, 1021 },
-{ 0x2, 306, 0, 1022 },
-{ 0x1, 306, 0, 1023 },
-{ 0x2, 307, 0, 1024 },
-{ 0x1, 307, 0, 1025 },
-{ 0xa, 373, 1, 1031 },
-{ 0xa, 374, 0, 1030 },
-{ 0x1a, 373, 1, 1027 },
-{ 0x32, 374, 0, 1026 },
-{ 0x6, 373, 1, 1035 },
-{ 0x6, 374, 0, 1034 },
-{ 0x1, 373, 1, 1041 },
-{ 0x1, 374, 0, 1040 },
-{ 0x9, 373, 1, 1033 },
-{ 0x9, 374, 0, 1032 },
-{ 0x19, 373, 1, 1029 },
-{ 0x31, 374, 0, 1028 },
-{ 0x5, 373, 1, 1037 },
-{ 0x5, 374, 0, 1036 },
-{ 0x3, 373, 1, 1039 },
-{ 0x3, 374, 0, 1038 },
-{ 0xa, 370, 1, 1047 },
-{ 0xa, 371, 0, 1046 },
-{ 0x1a, 370, 1, 1043 },
-{ 0x32, 371, 0, 1042 },
-{ 0x6, 370, 1, 1051 },
-{ 0x6, 371, 0, 1050 },
-{ 0x1, 370, 1, 1057 },
-{ 0x1, 371, 0, 1056 },
-{ 0x9, 370, 1, 1049 },
-{ 0x9, 371, 0, 1048 },
-{ 0x19, 370, 1, 1045 },
-{ 0x31, 371, 0, 1044 },
-{ 0x5, 370, 1, 1053 },
-{ 0x5, 371, 0, 1052 },
-{ 0x3, 370, 1, 1055 },
-{ 0x3, 371, 0, 1054 },
-{ 0x1, 97, 0, 1058 },
-{ 0x1, 96, 0, 1059 },
-{ 0x1, 334, 1, 1061 },
-{ 0x1, 95, 0, 1060 },
-{ 0x2, 338, 1, 1063 },
-{ 0x2, 99, 0, 1062 },
-{ 0x1, 338, 1, 1065 },
-{ 0x1, 99, 0, 1064 },
-{ 0x1, 340, 0, 1066 },
-{ 0x1, 94, 0, 1067 },
-{ 0x2, 93, 0, 1068 },
-{ 0x2, 92, 0, 1069 },
-{ 0x1, 391, 1, 1075 },
-{ 0x1, 192, 0, 970 },
-{ 0x1, 390, 0, 1076 },
-{ 0x1, 389, 1, 1077 },
-{ 0x1, 191, 0, 979 },
-{ 0x1, 251, 0, 1078 },
-{ 0x1, 250, 1, 1079 },
-{ 0x1, 233, 0, 971 },
-{ 0x1, 249, 0, 1080 },
-{ 0x1, 248, 1, 1081 },
-{ 0x1, 368, 0, 973 },
-{ 0x1, 247, 1, 1082 },
-{ 0x1, 341, 0, 975 },
-{ 0x1, 246, 0, 1083 },
-{ 0x1, 245, 0, 1084 },
-{ 0x1, 244, 1, 1085 },
-{ 0x2, 341, 0, 974 },
-{ 0x10, 243, 0, 1089 },
-{ 0x90, 243, 0, 1087 },
-{ 0x190, 243, 0, 1086 },
-{ 0x50, 243, 0, 1088 },
-{ 0x30, 243, 0, 1091 },
-{ 0x70, 243, 0, 1090 },
-{ 0x8, 243, 0, 1093 },
-{ 0x18, 243, 0, 1092 },
-{ 0x4, 243, 0, 1094 },
-{ 0x1, 243, 0, 1097 },
-{ 0x3, 243, 0, 1096 },
-{ 0x1, 242, 1, 1098 },
-{ 0x2, 243, 0, 1095 },
-{ 0x3, 44, 0, 1099 },
-{ 0x1, 284, 1, 1100 },
-{ 0x1, 285, 1, 966 },
-{ 0x1, 286, 0, 86 },
-{ 0x1, 32, 1, 1101 },
-{ 0x1, 33, 1, 967 },
-{ 0x1, 34, 0, 87 },
-{ 0x1, 182, 0, 1102 },
-{ 0x4, 384, 0, 1103 },
-{ 0x2, 384, 0, 1104 },
-{ 0x1, 384, 1, 1106 },
-{ 0x1, 385, 0, 1105 },
-{ 0x8, 386, 0, 1107 },
-{ 0x4, 386, 0, 1108 },
-{ 0x1, 386, 1, 1110 },
-{ 0x2, 386, 0, 1109 },
-{ 0x8, 171, 0, 1111 },
-{ 0x4, 171, 0, 1112 },
-{ 0x2, 171, 0, 1113 },
-{ 0x1, 171, 1, 1115 },
-{ 0x1, 172, 0, 1114 },
-{ 0x10, 173, 0, 1116 },
-{ 0x8, 173, 0, 1117 },
-{ 0x4, 173, 0, 1118 },
-{ 0x1, 173, 1, 1120 },
-{ 0x2, 173, 0, 1119 },
-{ 0x220, 143, 0, 1121 },
-{ 0x120, 143, 0, 1122 },
-{ 0xa0, 143, 0, 1123 },
-{ 0x60, 143, 1, 1125 },
-{ 0x4, 144, 0, 1124 },
-{ 0x110, 143, 0, 1131 },
-{ 0x90, 143, 0, 1132 },
-{ 0x50, 143, 0, 1133 },
-{ 0x30, 143, 1, 1135 },
-{ 0x2, 144, 0, 1134 },
-{ 0x8, 143, 0, 1136 },
-{ 0x4, 143, 0, 1137 },
-{ 0x2, 143, 0, 1138 },
-{ 0x1, 143, 1, 1140 },
-{ 0x1, 144, 0, 1139 },
-{ 0x440, 145, 0, 1126 },
-{ 0x240, 145, 0, 1127 },
-{ 0x140, 145, 0, 1128 },
-{ 0xc0, 145, 1, 1130 },
-{ 0x40, 145, 0, 1129 },
-{ 0x220, 145, 0, 1141 },
-{ 0x120, 145, 0, 1142 },
-{ 0xa0, 145, 0, 1143 },
-{ 0x60, 145, 1, 1145 },
-{ 0x20, 145, 0, 1144 },
-{ 0x10, 145, 0, 1146 },
-{ 0x8, 145, 0, 1147 },
-{ 0x4, 145, 0, 1148 },
-{ 0x1, 145, 1, 1150 },
-{ 0x2, 145, 0, 1149 },
-{ 0x8, 167, 0, 1151 },
-{ 0x4, 167, 0, 1152 },
-{ 0x2, 167, 0, 1153 },
-{ 0x1, 167, 1, 1155 },
-{ 0x1, 168, 0, 1154 },
-{ 0x220, 139, 0, 1156 },
-{ 0x120, 139, 0, 1157 },
-{ 0xa0, 139, 0, 1158 },
-{ 0x60, 139, 1, 1160 },
-{ 0x4, 140, 0, 1159 },
-{ 0x110, 139, 0, 1166 },
-{ 0x90, 139, 0, 1167 },
-{ 0x50, 139, 0, 1168 },
-{ 0x30, 139, 1, 1170 },
-{ 0x2, 140, 0, 1169 },
-{ 0x8, 139, 0, 1171 },
-{ 0x4, 139, 0, 1172 },
-{ 0x2, 139, 0, 1173 },
-{ 0x1, 139, 1, 1175 },
-{ 0x1, 140, 0, 1174 },
-{ 0x440, 185, 0, 1161 },
-{ 0x240, 185, 0, 1162 },
-{ 0x140, 185, 0, 1163 },
-{ 0xc0, 185, 1, 1165 },
-{ 0x40, 185, 0, 1164 },
-{ 0x220, 185, 0, 1176 },
-{ 0x120, 185, 0, 1177 },
-{ 0xa0, 185, 0, 1178 },
-{ 0x60, 185, 1, 1180 },
-{ 0x20, 185, 0, 1179 },
-{ 0x10, 185, 0, 1181 },
-{ 0x8, 185, 0, 1182 },
-{ 0x4, 185, 0, 1183 },
-{ 0x1, 185, 1, 1185 },
-{ 0x2, 185, 0, 1184 },
-{ 0x8, 159, 0, 1186 },
-{ 0x4, 159, 0, 1187 },
-{ 0x2, 159, 0, 1188 },
-{ 0x1, 159, 1, 1190 },
-{ 0x1, 160, 0, 1189 },
-{ 0x10, 166, 0, 1191 },
-{ 0x8, 166, 0, 1192 },
-{ 0x4, 166, 0, 1193 },
-{ 0x1, 166, 1, 1195 },
-{ 0x2, 166, 0, 1194 },
-{ 0x220, 130, 0, 1196 },
-{ 0x120, 130, 0, 1197 },
-{ 0xa0, 130, 0, 1198 },
-{ 0x60, 130, 1, 1200 },
-{ 0x4, 131, 0, 1199 },
-{ 0x110, 130, 0, 1221 },
-{ 0x90, 130, 0, 1222 },
-{ 0x50, 130, 0, 1223 },
-{ 0x30, 130, 1, 1225 },
-{ 0x2, 131, 0, 1224 },
-{ 0x8, 130, 0, 1226 },
-{ 0x4, 130, 0, 1227 },
-{ 0x2, 130, 0, 1228 },
-{ 0x1, 130, 1, 1230 },
-{ 0x1, 131, 0, 1229 },
-{ 0x440, 138, 0, 1201 },
-{ 0x240, 138, 0, 1202 },
-{ 0x140, 138, 0, 1203 },
-{ 0xc0, 138, 1, 1205 },
-{ 0x40, 138, 0, 1204 },
-{ 0x220, 138, 0, 1231 },
-{ 0x120, 138, 0, 1232 },
-{ 0xa0, 138, 0, 1233 },
-{ 0x60, 138, 1, 1235 },
-{ 0x20, 138, 0, 1234 },
-{ 0x10, 138, 0, 1236 },
-{ 0x8, 138, 0, 1237 },
-{ 0x4, 138, 0, 1238 },
-{ 0x1, 138, 1, 1240 },
-{ 0x2, 138, 0, 1239 },
-{ 0x440, 101, 0, 1206 },
-{ 0x240, 101, 0, 1207 },
-{ 0x140, 101, 0, 1208 },
-{ 0xc0, 101, 1, 1210 },
-{ 0x40, 101, 0, 1209 },
-{ 0x220, 101, 0, 1241 },
-{ 0x120, 101, 0, 1242 },
-{ 0xa0, 101, 0, 1243 },
-{ 0x60, 101, 1, 1245 },
-{ 0x20, 101, 0, 1244 },
-{ 0x10, 101, 0, 1246 },
-{ 0x8, 101, 0, 1247 },
-{ 0x1, 101, 1, 1250 },
-{ 0x2, 101, 0, 1249 },
-{ 0x440, 146, 1, 1216 },
-{ 0x441, 126, 0, 1211 },
-{ 0x240, 146, 1, 1217 },
-{ 0x241, 126, 0, 1212 },
-{ 0x140, 146, 1, 1218 },
-{ 0x141, 126, 0, 1213 },
-{ 0xc0, 146, 1, 1220 },
-{ 0x40, 146, 1, 1219 },
-{ 0xc1, 126, 1, 1215 },
-{ 0x41, 126, 0, 1214 },
-{ 0x220, 146, 1, 1261 },
-{ 0x221, 126, 0, 1251 },
-{ 0x120, 146, 1, 1262 },
-{ 0x121, 126, 0, 1252 },
-{ 0xa0, 146, 1, 1263 },
-{ 0xa1, 126, 0, 1253 },
-{ 0x60, 146, 1, 1265 },
-{ 0x20, 146, 1, 1264 },
-{ 0x61, 126, 1, 1255 },
-{ 0x21, 126, 0, 1254 },
-{ 0x10, 146, 1, 1266 },
-{ 0x11, 126, 0, 1256 },
-{ 0x8, 146, 1, 1267 },
-{ 0x9, 126, 0, 1257 },
-{ 0x4, 146, 1, 1268 },
-{ 0x5, 126, 0, 1258 },
-{ 0x1, 146, 1, 1270 },
-{ 0x2, 146, 1, 1269 },
-{ 0x3, 126, 1, 1260 },
-{ 0x1, 126, 0, 1259 },
-{ 0x1, 111, 1, 1274 },
-{ 0x1, 112, 0, 1273 },
-{ 0x3, 111, 1, 1272 },
-{ 0x3, 112, 0, 1271 },
-{ 0x1108, 115, 1, 1355 },
-{ 0x1108, 119, 0, 1275 },
-{ 0x908, 115, 1, 1356 },
-{ 0x908, 119, 0, 1276 },
-{ 0x508, 115, 1, 1357 },
-{ 0x508, 119, 0, 1277 },
-{ 0x308, 115, 1, 1359 },
-{ 0x18, 116, 1, 1358 },
-{ 0x308, 119, 1, 1279 },
-{ 0x18, 120, 0, 1278 },
-{ 0x88, 115, 1, 1375 },
-{ 0x88, 119, 0, 1315 },
-{ 0x48, 115, 1, 1376 },
-{ 0x48, 119, 0, 1316 },
-{ 0x28, 115, 1, 1377 },
-{ 0x28, 119, 0, 1317 },
-{ 0x18, 115, 1, 1379 },
-{ 0x8, 116, 1, 1378 },
-{ 0x18, 119, 1, 1319 },
-{ 0x8, 120, 0, 1318 },
-{ 0x884, 115, 1, 1360 },
-{ 0x442, 117, 1, 1305 },
-{ 0x884, 119, 1, 1290 },
-{ 0x442, 121, 0, 1280 },
-{ 0x484, 115, 1, 1361 },
-{ 0x242, 117, 1, 1306 },
-{ 0x484, 119, 1, 1291 },
-{ 0x242, 121, 0, 1281 },
-{ 0x284, 115, 1, 1362 },
-{ 0x142, 117, 1, 1307 },
-{ 0x284, 119, 1, 1292 },
-{ 0x142, 121, 0, 1282 },
-{ 0x184, 115, 1, 1364 },
-{ 0xc, 116, 1, 1363 },
-{ 0xc2, 117, 1, 1309 },
-{ 0x6, 118, 1, 1308 },
-{ 0x184, 119, 1, 1294 },
-{ 0xc, 120, 1, 1293 },
-{ 0xc2, 121, 1, 1284 },
-{ 0x6, 122, 0, 1283 },
-{ 0x44, 115, 1, 1380 },
-{ 0x22, 117, 1, 1345 },
-{ 0x44, 119, 1, 1330 },
-{ 0x22, 121, 0, 1320 },
-{ 0x24, 115, 1, 1381 },
-{ 0x12, 117, 1, 1346 },
-{ 0x24, 119, 1, 1331 },
-{ 0x12, 121, 0, 1321 },
-{ 0x14, 115, 1, 1382 },
-{ 0xa, 117, 1, 1347 },
-{ 0x14, 119, 1, 1332 },
-{ 0xa, 121, 0, 1322 },
-{ 0xc, 115, 1, 1384 },
-{ 0x4, 116, 1, 1383 },
-{ 0x6, 117, 1, 1349 },
-{ 0x2, 118, 1, 1348 },
-{ 0xc, 119, 1, 1334 },
-{ 0x4, 120, 1, 1333 },
-{ 0x6, 121, 1, 1324 },
-{ 0x2, 122, 0, 1323 },
-{ 0x442, 115, 1, 1365 },
-{ 0x221, 117, 1, 1310 },
-{ 0x442, 119, 1, 1295 },
-{ 0x221, 121, 0, 1285 },
-{ 0x242, 115, 1, 1366 },
-{ 0x121, 117, 1, 1311 },
-{ 0x242, 119, 1, 1296 },
-{ 0x121, 121, 0, 1286 },
-{ 0x142, 115, 1, 1367 },
-{ 0xa1, 117, 1, 1312 },
-{ 0x142, 119, 1, 1297 },
-{ 0xa1, 121, 0, 1287 },
-{ 0xc2, 115, 1, 1369 },
-{ 0x6, 116, 1, 1368 },
-{ 0x61, 117, 1, 1314 },
-{ 0x3, 118, 1, 1313 },
-{ 0xc2, 119, 1, 1299 },
-{ 0x6, 120, 1, 1298 },
-{ 0x61, 121, 1, 1289 },
-{ 0x3, 122, 0, 1288 },
-{ 0x22, 115, 1, 1385 },
-{ 0x11, 117, 1, 1350 },
-{ 0x22, 119, 1, 1335 },
-{ 0x11, 121, 0, 1325 },
-{ 0x12, 115, 1, 1386 },
-{ 0x9, 117, 1, 1351 },
-{ 0x12, 119, 1, 1336 },
-{ 0x9, 121, 0, 1326 },
-{ 0xa, 115, 1, 1387 },
-{ 0x5, 117, 1, 1352 },
-{ 0xa, 119, 1, 1337 },
-{ 0x5, 121, 0, 1327 },
-{ 0x6, 115, 1, 1389 },
-{ 0x2, 116, 1, 1388 },
-{ 0x3, 117, 1, 1354 },
-{ 0x1, 118, 1, 1353 },
-{ 0x6, 119, 1, 1339 },
-{ 0x2, 120, 1, 1338 },
-{ 0x3, 121, 1, 1329 },
-{ 0x1, 122, 0, 1328 },
-{ 0x221, 115, 1, 1370 },
-{ 0x221, 119, 0, 1300 },
-{ 0x121, 115, 1, 1371 },
-{ 0x121, 119, 0, 1301 },
-{ 0xa1, 115, 1, 1372 },
-{ 0xa1, 119, 0, 1302 },
-{ 0x61, 115, 1, 1374 },
-{ 0x3, 116, 1, 1373 },
-{ 0x61, 119, 1, 1304 },
-{ 0x3, 120, 0, 1303 },
-{ 0x11, 115, 1, 1390 },
-{ 0x11, 119, 0, 1340 },
-{ 0x9, 115, 1, 1391 },
-{ 0x9, 119, 0, 1341 },
-{ 0x5, 115, 1, 1392 },
-{ 0x5, 119, 0, 1342 },
-{ 0x3, 115, 1, 1394 },
-{ 0x1, 116, 1, 1393 },
-{ 0x3, 119, 1, 1344 },
-{ 0x1, 120, 0, 1343 },
-{ 0x442, 157, 0, 1395 },
-{ 0x242, 157, 0, 1396 },
-{ 0x142, 157, 0, 1397 },
-{ 0xc2, 157, 1, 1399 },
-{ 0x6, 158, 1, 1398 },
-{ 0x1, 376, 0, 920 },
-{ 0x22, 157, 0, 1405 },
-{ 0x12, 157, 0, 1406 },
-{ 0xa, 157, 0, 1407 },
-{ 0x6, 157, 1, 1409 },
-{ 0x2, 158, 1, 1408 },
-{ 0x2, 310, 0, 949 },
-{ 0x221, 157, 0, 1400 },
-{ 0x121, 157, 0, 1401 },
-{ 0xa1, 157, 0, 1402 },
-{ 0x61, 157, 1, 1404 },
-{ 0x3, 158, 1, 1403 },
-{ 0x1, 372, 0, 921 },
-{ 0x11, 157, 0, 1410 },
-{ 0x9, 157, 0, 1411 },
-{ 0x5, 157, 0, 1412 },
-{ 0x3, 157, 1, 1414 },
-{ 0x1, 158, 1, 1413 },
-{ 0x1, 310, 0, 950 },
-{ 0x4, 163, 0, 1415 },
-{ 0x1, 163, 0, 1417 },
-{ 0x1, 170, 0, 1418 },
-{ 0x1, 169, 1, 1419 },
-{ 0x2, 163, 0, 1416 },
-{ 0x1, 148, 0, 1420 },
-{ 0x880, 154, 0, 1421 },
-{ 0x480, 154, 0, 1422 },
-{ 0x280, 154, 0, 1423 },
-{ 0x180, 154, 1, 1425 },
-{ 0x80, 155, 0, 1424 },
-{ 0x440, 154, 1, 1436 },
-{ 0x88, 156, 0, 1426 },
-{ 0x240, 154, 1, 1437 },
-{ 0x48, 156, 0, 1427 },
-{ 0x140, 154, 1, 1438 },
-{ 0x28, 156, 0, 1428 },
-{ 0xc0, 154, 1, 1440 },
-{ 0x40, 155, 1, 1439 },
-{ 0x18, 156, 1, 1430 },
-{ 0x8, 156, 0, 1429 },
-{ 0x220, 154, 1, 1441 },
-{ 0x44, 156, 0, 1431 },
-{ 0x120, 154, 1, 1442 },
-{ 0x24, 156, 0, 1432 },
-{ 0xa0, 154, 1, 1443 },
-{ 0x14, 156, 0, 1433 },
-{ 0x60, 154, 1, 1445 },
-{ 0x20, 155, 1, 1444 },
-{ 0xc, 156, 1, 1435 },
-{ 0x4, 156, 0, 1434 },
-{ 0x110, 154, 0, 1446 },
-{ 0x90, 154, 0, 1447 },
-{ 0x50, 154, 0, 1448 },
-{ 0x30, 154, 1, 1450 },
-{ 0x10, 155, 1, 1449 },
-{ 0x1, 328, 0, 914 },
-{ 0x88, 154, 0, 1451 },
-{ 0x48, 154, 0, 1452 },
-{ 0x28, 154, 0, 1453 },
-{ 0x18, 154, 1, 1455 },
-{ 0x8, 155, 1, 1454 },
-{ 0xc, 311, 0, 946 },
-{ 0x44, 154, 1, 1466 },
-{ 0x22, 156, 0, 1456 },
-{ 0x24, 154, 1, 1467 },
-{ 0x12, 156, 0, 1457 },
-{ 0x14, 154, 1, 1468 },
-{ 0xa, 156, 0, 1458 },
-{ 0xc, 154, 1, 1470 },
-{ 0x4, 155, 1, 1469 },
-{ 0x6, 156, 1, 1460 },
-{ 0x2, 156, 1, 1459 },
-{ 0x6, 311, 0, 947 },
-{ 0x22, 154, 1, 1471 },
-{ 0x11, 156, 0, 1461 },
-{ 0x12, 154, 1, 1472 },
-{ 0x9, 156, 0, 1462 },
-{ 0xa, 154, 1, 1473 },
-{ 0x5, 156, 0, 1463 },
-{ 0x6, 154, 1, 1475 },
-{ 0x2, 155, 1, 1474 },
-{ 0x3, 156, 1, 1465 },
-{ 0x1, 156, 1, 1464 },
-{ 0x3, 311, 0, 948 },
-{ 0x11, 154, 0, 1476 },
-{ 0x9, 154, 0, 1477 },
-{ 0x5, 154, 0, 1478 },
-{ 0x3, 154, 1, 1480 },
-{ 0x1, 155, 1, 1479 },
-{ 0x1, 108, 0, 915 },
-{ 0x8, 150, 0, 1481 },
-{ 0x4, 150, 0, 1482 },
-{ 0x2, 150, 0, 1483 },
-{ 0x1, 150, 1, 1485 },
-{ 0x1, 151, 1, 1484 },
-{ 0x1, 275, 0, 927 },
-{ 0x8, 152, 0, 1486 },
-{ 0x4, 152, 0, 1487 },
-{ 0x2, 152, 0, 1488 },
-{ 0x1, 152, 1, 1490 },
-{ 0x1, 153, 1, 1489 },
-{ 0x1, 274, 0, 928 },
-{ 0x8, 161, 0, 1491 },
-{ 0x4, 161, 0, 1492 },
-{ 0x2, 161, 0, 1493 },
-{ 0x1, 161, 1, 1495 },
-{ 0x1, 162, 1, 1494 },
-{ 0x1, 273, 0, 929 },
-{ 0x8, 164, 0, 1496 },
-{ 0x4, 164, 0, 1497 },
-{ 0x2, 164, 0, 1498 },
-{ 0x1, 164, 1, 1500 },
-{ 0x1, 165, 1, 1499 },
-{ 0x1, 272, 0, 930 },
-{ 0x8, 176, 0, 1501 },
-{ 0x4, 176, 0, 1502 },
-{ 0x2, 176, 0, 1503 },
-{ 0x1, 176, 1, 1505 },
-{ 0x1, 177, 0, 1504 },
-{ 0x8, 174, 0, 1506 },
-{ 0x4, 174, 0, 1507 },
-{ 0x2, 174, 0, 1508 },
-{ 0x1, 174, 1, 1510 },
-{ 0x1, 175, 0, 1509 },
-{ 0x1, 283, 0, 1511 },
-{ 0x1, 31, 0, 1512 },
-{ 0x8, 109, 0, 1513 },
-{ 0x4, 109, 0, 1514 },
-{ 0x2, 109, 0, 1515 },
-{ 0x1, 109, 1, 1517 },
-{ 0x1, 110, 0, 1516 },
-{ 0x8, 113, 0, 1518 },
-{ 0x4, 113, 0, 1519 },
-{ 0x2, 113, 0, 1520 },
-{ 0x1, 113, 1, 1522 },
-{ 0x1, 114, 0, 1521 },
-{ 0x8, 183, 0, 1523 },
-{ 0x4, 183, 0, 1524 },
-{ 0x2, 183, 0, 1525 },
-{ 0x1, 183, 1, 1527 },
-{ 0x1, 184, 0, 1526 },
-{ 0x1, 125, 0, 1528 },
-{ 0x442, 123, 0, 1529 },
-{ 0x242, 123, 0, 1530 },
-{ 0x142, 123, 0, 1531 },
-{ 0xc2, 123, 1, 1533 },
-{ 0x6, 124, 0, 1532 },
-{ 0x22, 123, 0, 1539 },
-{ 0x12, 123, 0, 1540 },
-{ 0xa, 123, 0, 1541 },
-{ 0x6, 123, 1, 1543 },
-{ 0x2, 124, 1, 1542 },
-{ 0x1, 93, 0, 1070 },
-{ 0x221, 123, 0, 1534 },
-{ 0x121, 123, 0, 1535 },
-{ 0xa1, 123, 0, 1536 },
-{ 0x61, 123, 1, 1538 },
-{ 0x3, 124, 0, 1537 },
-{ 0x11, 123, 0, 1544 },
-{ 0x9, 123, 0, 1545 },
-{ 0x5, 123, 0, 1546 },
-{ 0x3, 123, 1, 1548 },
-{ 0x1, 124, 1, 1547 },
-{ 0x1, 92, 0, 1071 },
-{ 0x1, 189, 0, 1549 },
-{ 0x1, 147, 0, 1550 },
-{ 0x1, 107, 0, 1551 },
-{ 0x1, 106, 0, 1552 },
-{ 0x4, 186, 0, 1553 },
-{ 0x2, 186, 0, 1554 },
-{ 0x1, 186, 0, 1555 },
-{ 0x1, 149, 0, 1556 },
-{ 0x2, 187, 0, 1557 },
-{ 0x1, 187, 0, 1558 },
-{ 0x4, 137, 0, 1559 },
-{ 0x2, 137, 0, 1560 },
-{ 0x1, 137, 0, 1561 },
-{ 0x4, 134, 0, 1562 },
-{ 0x1, 142, 0, 1565 },
-{ 0x1, 141, 1, 1566 },
-{ 0x2, 134, 0, 1563 },
-{ 0x1, 100, 0, 1567 },
-{ 0x1, 241, 1, 1568 },
-{ 0x1, 134, 0, 1564 },
-{ 0x8, 102, 0, 1569 },
-{ 0x4, 102, 0, 1570 },
-{ 0x2, 102, 0, 1571 },
-{ 0x1, 102, 1, 1573 },
-{ 0x1, 103, 0, 1572 },
-{ 0x8, 104, 0, 1574 },
-{ 0x4, 104, 0, 1575 },
-{ 0x2, 104, 0, 1576 },
-{ 0x1, 104, 1, 1578 },
-{ 0x1, 105, 1, 1577 },
-{ 0x1, 367, 0, 1072 },
-{ 0x8, 132, 0, 1579 },
-{ 0x4, 132, 0, 1580 },
-{ 0x2, 132, 0, 1581 },
-{ 0x1, 132, 1, 1583 },
-{ 0x1, 133, 1, 1582 },
-{ 0x1, 366, 0, 1073 },
-{ 0x8, 135, 0, 1584 },
-{ 0x4, 135, 0, 1585 },
-{ 0x2, 135, 0, 1586 },
-{ 0x1, 135, 1, 1588 },
-{ 0x1, 136, 1, 1587 },
-{ 0x1, 365, 0, 1074 },
-{ 0x8, 180, 0, 1589 },
-{ 0x4, 180, 0, 1590 },
-{ 0x2, 180, 0, 1591 },
-{ 0x1, 180, 1, 1593 },
-{ 0x1, 181, 0, 1592 },
-{ 0x8, 178, 0, 1594 },
-{ 0x4, 178, 0, 1595 },
-{ 0x2, 178, 0, 1596 },
-{ 0x1, 178, 1, 1598 },
-{ 0x1, 179, 0, 1597 },
-{ 0x8, 42, 0, 1603 },
-{ 0x18, 42, 0, 1599 },
-{ 0x4, 42, 0, 1604 },
-{ 0xc, 42, 0, 1600 },
-{ 0x2, 42, 0, 1605 },
-{ 0x6, 42, 0, 1601 },
-{ 0x1, 42, 0, 1606 },
-{ 0x3, 42, 0, 1602 },
-{ 0x51, 28, 0, 1608 },
-{ 0xd1, 28, 0, 1607 },
-{ 0x31, 28, 1, 1618 },
-{ 0x11, 29, 0, 1617 },
-{ 0x71, 28, 1, 1616 },
-{ 0x31, 29, 0, 1615 },
-{ 0x29, 28, 0, 1610 },
-{ 0x69, 28, 0, 1609 },
-{ 0x19, 28, 1, 1622 },
-{ 0x9, 29, 0, 1621 },
-{ 0x39, 28, 1, 1620 },
-{ 0x19, 29, 0, 1619 },
-{ 0x15, 28, 0, 1612 },
-{ 0x35, 28, 0, 1611 },
-{ 0xd, 28, 1, 1626 },
-{ 0x5, 29, 0, 1625 },
-{ 0x1d, 28, 1, 1624 },
-{ 0xd, 29, 0, 1623 },
-{ 0xb, 28, 0, 1614 },
-{ 0x1b, 28, 0, 1613 },
-{ 0x7, 28, 1, 1630 },
-{ 0x3, 29, 0, 1629 },
-{ 0xf, 28, 1, 1628 },
-{ 0x7, 29, 0, 1627 },
-{ 0xa2, 26, 0, 1632 },
-{ 0x1a2, 26, 0, 1631 },
-{ 0x62, 26, 1, 1642 },
-{ 0x22, 27, 0, 1641 },
-{ 0xe2, 26, 1, 1640 },
-{ 0x62, 27, 0, 1639 },
-{ 0x52, 26, 0, 1634 },
-{ 0xd2, 26, 0, 1633 },
-{ 0x32, 26, 1, 1646 },
-{ 0x12, 27, 0, 1645 },
-{ 0x72, 26, 1, 1644 },
-{ 0x32, 27, 0, 1643 },
-{ 0x2a, 26, 0, 1636 },
-{ 0x6a, 26, 0, 1635 },
-{ 0x1a, 26, 1, 1650 },
-{ 0xa, 27, 0, 1649 },
-{ 0x3a, 26, 1, 1648 },
-{ 0x1a, 27, 0, 1647 },
-{ 0x16, 26, 0, 1638 },
-{ 0x36, 26, 0, 1637 },
-{ 0xe, 26, 1, 1654 },
-{ 0x6, 27, 0, 1653 },
-{ 0x1e, 26, 1, 1652 },
-{ 0xe, 27, 0, 1651 },
-{ 0x51, 26, 0, 1656 },
-{ 0xd1, 26, 0, 1655 },
-{ 0x31, 26, 1, 1666 },
-{ 0x11, 27, 0, 1665 },
-{ 0x71, 26, 1, 1664 },
-{ 0x31, 27, 0, 1663 },
-{ 0x29, 26, 0, 1658 },
-{ 0x69, 26, 0, 1657 },
-{ 0x19, 26, 1, 1670 },
-{ 0x9, 27, 0, 1669 },
-{ 0x39, 26, 1, 1668 },
-{ 0x19, 27, 0, 1667 },
-{ 0x15, 26, 0, 1660 },
-{ 0x35, 26, 0, 1659 },
-{ 0xd, 26, 1, 1674 },
-{ 0x5, 27, 0, 1673 },
-{ 0x1d, 26, 1, 1672 },
-{ 0xd, 27, 0, 1671 },
-{ 0xb, 26, 0, 1662 },
-{ 0x1b, 26, 0, 1661 },
-{ 0x7, 26, 1, 1678 },
-{ 0x3, 27, 0, 1677 },
-{ 0xf, 26, 1, 1676 },
-{ 0x7, 27, 0, 1675 },
-{ 0x51, 24, 0, 1680 },
-{ 0xd1, 24, 0, 1679 },
-{ 0x31, 24, 1, 1690 },
-{ 0x11, 25, 0, 1689 },
-{ 0x71, 24, 1, 1688 },
-{ 0x31, 25, 0, 1687 },
-{ 0x29, 24, 0, 1682 },
-{ 0x69, 24, 0, 1681 },
-{ 0x19, 24, 1, 1694 },
-{ 0x9, 25, 0, 1693 },
-{ 0x39, 24, 1, 1692 },
-{ 0x19, 25, 0, 1691 },
-{ 0x15, 24, 0, 1684 },
-{ 0x35, 24, 0, 1683 },
-{ 0xd, 24, 1, 1698 },
-{ 0x5, 25, 0, 1697 },
-{ 0x1d, 24, 1, 1696 },
-{ 0xd, 25, 0, 1695 },
-{ 0xb, 24, 0, 1686 },
-{ 0x1b, 24, 0, 1685 },
-{ 0x7, 24, 1, 1702 },
-{ 0x3, 25, 0, 1701 },
-{ 0xf, 24, 1, 1700 },
-{ 0x7, 25, 0, 1699 },
-{ 0xa2, 22, 0, 1704 },
-{ 0x1a2, 22, 0, 1703 },
-{ 0x62, 22, 1, 1714 },
-{ 0x22, 23, 0, 1713 },
-{ 0xe2, 22, 1, 1712 },
-{ 0x62, 23, 0, 1711 },
-{ 0x52, 22, 0, 1706 },
-{ 0xd2, 22, 0, 1705 },
-{ 0x32, 22, 1, 1718 },
-{ 0x12, 23, 0, 1717 },
-{ 0x72, 22, 1, 1716 },
-{ 0x32, 23, 0, 1715 },
-{ 0x2a, 22, 0, 1708 },
-{ 0x6a, 22, 0, 1707 },
-{ 0x1a, 22, 1, 1722 },
-{ 0xa, 23, 0, 1721 },
-{ 0x3a, 22, 1, 1720 },
-{ 0x1a, 23, 0, 1719 },
-{ 0x16, 22, 0, 1710 },
-{ 0x36, 22, 0, 1709 },
-{ 0xe, 22, 1, 1726 },
-{ 0x6, 23, 0, 1725 },
-{ 0x1e, 22, 1, 1724 },
-{ 0xe, 23, 0, 1723 },
-{ 0x51, 22, 0, 1728 },
-{ 0xd1, 22, 0, 1727 },
-{ 0x31, 22, 1, 1738 },
-{ 0x11, 23, 0, 1737 },
-{ 0x71, 22, 1, 1736 },
-{ 0x31, 23, 0, 1735 },
-{ 0x29, 22, 0, 1730 },
-{ 0x69, 22, 0, 1729 },
-{ 0x19, 22, 1, 1742 },
-{ 0x9, 23, 0, 1741 },
-{ 0x39, 22, 1, 1740 },
-{ 0x19, 23, 0, 1739 },
-{ 0x15, 22, 0, 1732 },
-{ 0x35, 22, 0, 1731 },
-{ 0xd, 22, 1, 1746 },
-{ 0x5, 23, 0, 1745 },
-{ 0x1d, 22, 1, 1744 },
-{ 0xd, 23, 0, 1743 },
-{ 0xb, 22, 0, 1734 },
-{ 0x1b, 22, 0, 1733 },
-{ 0x7, 22, 1, 1750 },
-{ 0x3, 23, 0, 1749 },
-{ 0xf, 22, 1, 1748 },
-{ 0x7, 23, 0, 1747 },
-{ 0x51, 20, 1, 1776 },
-{ 0x50, 20, 0, 1752 },
-{ 0xd1, 20, 1, 1775 },
-{ 0xd0, 20, 0, 1751 },
-{ 0x31, 20, 1, 1786 },
-{ 0x30, 20, 1, 1762 },
-{ 0x11, 21, 1, 1785 },
-{ 0x10, 21, 0, 1761 },
-{ 0x71, 20, 1, 1784 },
-{ 0x70, 20, 1, 1760 },
-{ 0x31, 21, 1, 1783 },
-{ 0x30, 21, 0, 1759 },
-{ 0x29, 20, 1, 1778 },
-{ 0x28, 20, 0, 1754 },
-{ 0x69, 20, 1, 1777 },
-{ 0x68, 20, 0, 1753 },
-{ 0x19, 20, 1, 1790 },
-{ 0x18, 20, 1, 1766 },
-{ 0x9, 21, 1, 1789 },
-{ 0x8, 21, 0, 1765 },
-{ 0x39, 20, 1, 1788 },
-{ 0x38, 20, 1, 1764 },
-{ 0x19, 21, 1, 1787 },
-{ 0x18, 21, 0, 1763 },
-{ 0x15, 20, 1, 1780 },
-{ 0x14, 20, 0, 1756 },
-{ 0x35, 20, 1, 1779 },
-{ 0x34, 20, 0, 1755 },
-{ 0xd, 20, 1, 1794 },
-{ 0xc, 20, 1, 1770 },
-{ 0x5, 21, 1, 1793 },
-{ 0x4, 21, 0, 1769 },
-{ 0x1d, 20, 1, 1792 },
-{ 0x1c, 20, 1, 1768 },
-{ 0xd, 21, 1, 1791 },
-{ 0xc, 21, 0, 1767 },
-{ 0xb, 20, 1, 1782 },
-{ 0xa, 20, 0, 1758 },
-{ 0x1b, 20, 1, 1781 },
-{ 0x1a, 20, 0, 1757 },
-{ 0x7, 20, 1, 1798 },
-{ 0x6, 20, 1, 1774 },
-{ 0x3, 21, 1, 1797 },
-{ 0x2, 21, 0, 1773 },
-{ 0xf, 20, 1, 1796 },
-{ 0xe, 20, 1, 1772 },
-{ 0x7, 21, 1, 1795 },
-{ 0x6, 21, 0, 1771 },
-{ 0x8, 19, 0, 1800 },
-{ 0x18, 19, 0, 1799 },
-{ 0x1, 19, 1, 1804 },
-{ 0x2, 19, 0, 1803 },
-{ 0x3, 19, 1, 1802 },
-{ 0x4, 19, 0, 1801 },
-{ 0x1, 282, 0, 1805 },
-{ 0x14, 41, 0, 1808 },
-{ 0x34, 41, 0, 1806 },
-{ 0xc, 41, 0, 1809 },
-{ 0x1c, 41, 0, 1807 },
-{ 0x2, 41, 0, 1812 },
-{ 0x6, 41, 0, 1810 },
-{ 0x1, 41, 0, 1813 },
-{ 0x3, 41, 0, 1811 },
-{ 0x51, 17, 0, 1815 },
-{ 0xd1, 17, 0, 1814 },
-{ 0x31, 17, 1, 1825 },
-{ 0x11, 18, 0, 1824 },
-{ 0x71, 17, 1, 1823 },
-{ 0x31, 18, 0, 1822 },
-{ 0x29, 17, 0, 1817 },
-{ 0x69, 17, 0, 1816 },
-{ 0x19, 17, 1, 1829 },
-{ 0x9, 18, 0, 1828 },
-{ 0x39, 17, 1, 1827 },
-{ 0x19, 18, 0, 1826 },
-{ 0x15, 17, 0, 1819 },
-{ 0x35, 17, 0, 1818 },
-{ 0xd, 17, 1, 1833 },
-{ 0x5, 18, 0, 1832 },
-{ 0x1d, 17, 1, 1831 },
-{ 0xd, 18, 0, 1830 },
-{ 0xb, 17, 0, 1821 },
-{ 0x1b, 17, 0, 1820 },
-{ 0x7, 17, 1, 1837 },
-{ 0x3, 18, 0, 1836 },
-{ 0xf, 17, 1, 1835 },
-{ 0x7, 18, 0, 1834 },
-{ 0x1, 30, 0, 1838 },
-{ 0x1, 98, 0, 1839 },
-{ 0x2, 43, 0, 1840 },
-{ 0x1, 43, 0, 1841 },
-{ 0x1, 330, 0, 1842 },
-{ 0x2, 50, 0, 1843 },
-{ 0x1, 50, 0, 1844 },
-{ 0x1, 91, 0, 1845 },
-{ 0x51, 15, 0, 1847 },
-{ 0xd1, 15, 0, 1846 },
-{ 0x31, 15, 1, 1857 },
-{ 0x11, 16, 0, 1856 },
-{ 0x71, 15, 1, 1855 },
-{ 0x31, 16, 0, 1854 },
-{ 0x29, 15, 0, 1849 },
-{ 0x69, 15, 0, 1848 },
-{ 0x19, 15, 1, 1861 },
-{ 0x9, 16, 0, 1860 },
-{ 0x39, 15, 1, 1859 },
-{ 0x19, 16, 0, 1858 },
-{ 0x15, 15, 0, 1851 },
-{ 0x35, 15, 0, 1850 },
-{ 0xd, 15, 1, 1865 },
-{ 0x5, 16, 0, 1864 },
-{ 0x1d, 15, 1, 1863 },
-{ 0xd, 16, 0, 1862 },
-{ 0xb, 15, 0, 1853 },
-{ 0x1b, 15, 0, 1852 },
-{ 0x7, 15, 1, 1869 },
-{ 0x3, 16, 0, 1868 },
-{ 0xf, 15, 1, 1867 },
-{ 0x7, 16, 0, 1866 },
-{ 0xa20, 13, 0, 1871 },
-{ 0x1a20, 13, 0, 1870 },
-{ 0x620, 13, 1, 1881 },
-{ 0x220, 14, 0, 1880 },
-{ 0xe20, 13, 1, 1879 },
-{ 0x620, 14, 0, 1878 },
-{ 0x520, 13, 0, 1873 },
-{ 0xd20, 13, 0, 1872 },
-{ 0x320, 13, 1, 1885 },
-{ 0x120, 14, 0, 1884 },
-{ 0x720, 13, 1, 1883 },
-{ 0x320, 14, 0, 1882 },
-{ 0x2a0, 13, 0, 1875 },
-{ 0x6a0, 13, 0, 1874 },
-{ 0x1a0, 13, 1, 1889 },
-{ 0xa0, 14, 0, 1888 },
-{ 0x3a0, 13, 1, 1887 },
-{ 0x1a0, 14, 0, 1886 },
-{ 0x160, 13, 0, 1877 },
-{ 0x360, 13, 0, 1876 },
-{ 0xe0, 13, 1, 1893 },
-{ 0x60, 14, 0, 1892 },
-{ 0x1e0, 13, 1, 1891 },
-{ 0xe0, 14, 0, 1890 },
-{ 0x51, 13, 1, 1919 },
-{ 0x50, 13, 0, 1895 },
-{ 0xd1, 13, 1, 1918 },
-{ 0xd0, 13, 0, 1894 },
-{ 0x31, 13, 1, 1929 },
-{ 0x30, 13, 1, 1905 },
-{ 0x11, 14, 1, 1928 },
-{ 0x10, 14, 0, 1904 },
-{ 0x71, 13, 1, 1927 },
-{ 0x70, 13, 1, 1903 },
-{ 0x31, 14, 1, 1926 },
-{ 0x30, 14, 0, 1902 },
-{ 0x29, 13, 1, 1921 },
-{ 0x28, 13, 0, 1897 },
-{ 0x69, 13, 1, 1920 },
-{ 0x68, 13, 0, 1896 },
-{ 0x19, 13, 1, 1933 },
-{ 0x18, 13, 1, 1909 },
-{ 0x9, 14, 1, 1932 },
-{ 0x8, 14, 0, 1908 },
-{ 0x39, 13, 1, 1931 },
-{ 0x38, 13, 1, 1907 },
-{ 0x19, 14, 1, 1930 },
-{ 0x18, 14, 0, 1906 },
-{ 0x15, 13, 1, 1923 },
-{ 0x14, 13, 0, 1899 },
-{ 0x35, 13, 1, 1922 },
-{ 0x34, 13, 0, 1898 },
-{ 0xd, 13, 1, 1937 },
-{ 0xc, 13, 1, 1913 },
-{ 0x5, 14, 1, 1936 },
-{ 0x4, 14, 0, 1912 },
-{ 0x1d, 13, 1, 1935 },
-{ 0x1c, 13, 1, 1911 },
-{ 0xd, 14, 1, 1934 },
-{ 0xc, 14, 0, 1910 },
-{ 0xb, 13, 1, 1925 },
-{ 0xa, 13, 0, 1901 },
-{ 0x1b, 13, 1, 1924 },
-{ 0x1a, 13, 0, 1900 },
-{ 0x7, 13, 1, 1941 },
-{ 0x6, 13, 1, 1917 },
-{ 0x3, 14, 1, 1940 },
-{ 0x2, 14, 0, 1916 },
-{ 0xf, 13, 1, 1939 },
-{ 0xe, 13, 1, 1915 },
-{ 0x7, 14, 1, 1938 },
-{ 0x6, 14, 0, 1914 },
-{ 0x8, 12, 0, 1943 },
-{ 0x18, 12, 0, 1942 },
-{ 0x1, 12, 1, 1947 },
-{ 0x2, 12, 0, 1946 },
-{ 0x3, 12, 1, 1945 },
-{ 0x4, 12, 0, 1944 },
-{ 0x1, 80, 1, 2007 },
-{ 0x1, 81, 1, 2006 },
-{ 0x1, 82, 1, 2005 },
-{ 0x1, 83, 1, 2004 },
-{ 0x39, 39, 1, 20 },
-{ 0x19, 40, 0, 19 },
-{ 0x3, 80, 1, 2003 },
-{ 0x3, 81, 1, 2002 },
-{ 0x3, 82, 1, 2001 },
-{ 0x3, 83, 1, 2000 },
-{ 0x69, 39, 0, 9 },
-{ 0x14, 75, 1, 1997 },
-{ 0xa, 79, 1, 1996 },
-{ 0xd1, 39, 0, 7 },
-{ 0x34, 75, 1, 1949 },
-{ 0xe, 86, 0, 1948 },
-{ 0xc, 75, 1, 2061 },
-{ 0x6, 79, 0, 2060 },
-{ 0x2, 75, 1, 1955 },
-{ 0x2, 78, 0, 1954 },
-{ 0x12, 75, 1, 1953 },
-{ 0x6, 78, 0, 1952 },
-{ 0xa, 75, 1, 1999 },
-{ 0x5, 79, 1, 1998 },
-{ 0x71, 39, 1, 16 },
-{ 0x31, 40, 0, 15 },
-{ 0x1a, 75, 1, 1951 },
-{ 0x7, 86, 0, 1950 },
-{ 0x6, 75, 1, 2063 },
-{ 0x3, 79, 0, 2062 },
-{ 0x1, 75, 1, 2071 },
-{ 0x1, 76, 1, 2070 },
-{ 0x1, 77, 1, 2069 },
-{ 0x1, 78, 0, 2068 },
-{ 0x3, 75, 1, 2067 },
-{ 0x3, 76, 1, 2066 },
-{ 0x3, 77, 1, 2065 },
-{ 0x3, 78, 0, 2064 },
-{ 0x8, 58, 1, 2019 },
-{ 0x2, 61, 1, 2016 },
-{ 0x1, 63, 1, 2018 },
-{ 0x1, 64, 1, 2017 },
-{ 0xf, 39, 1, 28 },
-{ 0x7, 40, 0, 27 },
-{ 0x18, 58, 1, 2015 },
-{ 0x6, 61, 1, 2012 },
-{ 0x3, 63, 1, 2014 },
-{ 0x3, 64, 1, 2013 },
-{ 0x1b, 39, 0, 13 },
-{ 0x14, 58, 1, 2009 },
-{ 0xa, 62, 1, 2008 },
-{ 0x35, 39, 0, 11 },
-{ 0x34, 58, 1, 1957 },
-{ 0xe, 67, 0, 1956 },
-{ 0xc, 58, 1, 2073 },
-{ 0x6, 62, 0, 2072 },
-{ 0x2, 58, 1, 1963 },
-{ 0x4, 61, 0, 1962 },
-{ 0x12, 58, 1, 1961 },
-{ 0xc, 61, 0, 1960 },
-{ 0xa, 58, 1, 2011 },
-{ 0x5, 62, 1, 2010 },
-{ 0x1d, 39, 1, 24 },
-{ 0xd, 40, 0, 23 },
-{ 0x1a, 58, 1, 1959 },
-{ 0x7, 67, 0, 1958 },
-{ 0x6, 58, 1, 2075 },
-{ 0x3, 62, 0, 2074 },
-{ 0x1, 58, 1, 2083 },
-{ 0x1, 59, 1, 2082 },
-{ 0x1, 60, 1, 2081 },
-{ 0x1, 61, 0, 2080 },
-{ 0x3, 58, 1, 2079 },
-{ 0x3, 59, 1, 2078 },
-{ 0x3, 60, 1, 2077 },
-{ 0x3, 61, 0, 2076 },
-{ 0x28, 73, 1, 2021 },
-{ 0x28, 74, 0, 2020 },
-{ 0x68, 73, 1, 1965 },
-{ 0x38, 85, 0, 1964 },
-{ 0x18, 73, 1, 2085 },
-{ 0x18, 74, 0, 2084 },
-{ 0x14, 73, 1, 2023 },
-{ 0x14, 74, 0, 2022 },
-{ 0x34, 73, 1, 1967 },
-{ 0x1c, 85, 0, 1966 },
-{ 0xc, 73, 1, 2087 },
-{ 0xc, 74, 0, 2086 },
-{ 0xa, 73, 1, 2025 },
-{ 0xa, 74, 0, 2024 },
-{ 0x1a, 73, 1, 1969 },
-{ 0xe, 85, 0, 1968 },
-{ 0x6, 73, 1, 2089 },
-{ 0x6, 74, 0, 2088 },
-{ 0x5, 73, 1, 2027 },
-{ 0x5, 74, 0, 2026 },
-{ 0xd, 73, 1, 1971 },
-{ 0x7, 85, 0, 1970 },
-{ 0x3, 73, 1, 2091 },
-{ 0x3, 74, 0, 2090 },
-{ 0x28, 56, 1, 2029 },
-{ 0x28, 57, 0, 2028 },
-{ 0x68, 56, 1, 1973 },
-{ 0x38, 66, 0, 1972 },
-{ 0x18, 56, 1, 2093 },
-{ 0x18, 57, 0, 2092 },
-{ 0x14, 56, 1, 2031 },
-{ 0x14, 57, 0, 2030 },
-{ 0x34, 56, 1, 1975 },
-{ 0x1c, 66, 0, 1974 },
-{ 0xc, 56, 1, 2095 },
-{ 0xc, 57, 0, 2094 },
-{ 0xa, 56, 1, 2033 },
-{ 0xa, 57, 0, 2032 },
-{ 0x1a, 56, 1, 1977 },
-{ 0xe, 66, 0, 1976 },
-{ 0x6, 56, 1, 2097 },
-{ 0x6, 57, 0, 2096 },
-{ 0x5, 56, 1, 2035 },
-{ 0x5, 57, 0, 2034 },
-{ 0xd, 56, 1, 1979 },
-{ 0x7, 66, 0, 1978 },
-{ 0x3, 56, 1, 2099 },
-{ 0x3, 57, 0, 2098 },
-{ 0x8, 68, 1, 2047 },
-{ 0x2, 69, 1, 2046 },
-{ 0x2, 70, 1, 2045 },
-{ 0x2, 71, 0, 2044 },
-{ 0x18, 68, 1, 2043 },
-{ 0x6, 69, 1, 2042 },
-{ 0x6, 70, 1, 2041 },
-{ 0x6, 71, 0, 2040 },
-{ 0x14, 68, 1, 2037 },
-{ 0xa, 72, 0, 2036 },
-{ 0x34, 68, 1, 1981 },
-{ 0xe, 84, 0, 1980 },
-{ 0xc, 68, 1, 2101 },
-{ 0x6, 72, 0, 2100 },
-{ 0x2, 68, 1, 1987 },
-{ 0x4, 71, 0, 1986 },
-{ 0x12, 68, 1, 1985 },
-{ 0xc, 71, 0, 1984 },
-{ 0xa, 68, 1, 2039 },
-{ 0x5, 72, 0, 2038 },
-{ 0x1a, 68, 1, 1983 },
-{ 0x7, 84, 0, 1982 },
-{ 0x6, 68, 1, 2103 },
-{ 0x3, 72, 0, 2102 },
-{ 0x1, 68, 1, 2111 },
-{ 0x1, 69, 1, 2110 },
-{ 0x1, 70, 1, 2109 },
-{ 0x1, 71, 0, 2108 },
-{ 0x3, 68, 1, 2107 },
-{ 0x3, 69, 1, 2106 },
-{ 0x3, 70, 1, 2105 },
-{ 0x3, 71, 0, 2104 },
-{ 0x8, 51, 1, 2059 },
-{ 0x2, 52, 1, 2058 },
-{ 0x2, 53, 1, 2057 },
-{ 0x2, 54, 0, 2056 },
-{ 0x18, 51, 1, 2055 },
-{ 0x6, 52, 1, 2054 },
-{ 0x6, 53, 1, 2053 },
-{ 0x6, 54, 0, 2052 },
-{ 0x14, 51, 1, 2049 },
-{ 0xa, 55, 0, 2048 },
-{ 0x34, 51, 1, 1989 },
-{ 0xe, 65, 0, 1988 },
-{ 0xc, 51, 1, 2113 },
-{ 0x6, 55, 0, 2112 },
-{ 0x2, 51, 1, 1995 },
-{ 0x4, 54, 0, 1994 },
-{ 0x12, 51, 1, 1993 },
-{ 0xc, 54, 0, 1992 },
-{ 0xa, 51, 1, 2051 },
-{ 0x5, 55, 0, 2050 },
-{ 0x1a, 51, 1, 1991 },
-{ 0x7, 65, 0, 1990 },
-{ 0x6, 51, 1, 2115 },
-{ 0x3, 55, 0, 2114 },
-{ 0x1, 51, 1, 2123 },
-{ 0x1, 52, 1, 2122 },
-{ 0x1, 53, 1, 2121 },
-{ 0x1, 54, 0, 2120 },
-{ 0x3, 51, 1, 2119 },
-{ 0x3, 52, 1, 2118 },
-{ 0x3, 53, 1, 2117 },
-{ 0x3, 54, 0, 2116 },
-{ 0x1, 3, 0, 2124 },
-{ 0x1, 240, 0, 2125 },
-{ 0x1, 322, 0, 2126 },
-{ 0x1, 317, 0, 2127 },
-{ 0x2, 301, 0, 2128 },
-{ 0x1, 301, 0, 2131 },
-{ 0x2, 300, 0, 2129 },
-{ 0x1, 300, 0, 2132 },
-{ 0x2, 299, 0, 2130 },
-{ 0x1, 299, 0, 2133 },
-{ 0x1, 298, 0, 2134 },
-{ 0x1, 297, 0, 2135 },
-{ 0x2, 296, 0, 2136 },
-{ 0x1, 296, 0, 2138 },
-{ 0x2, 295, 0, 2137 },
-{ 0x1, 295, 0, 2139 },
-{ 0x1, 325, 0, 2146 },
-{ 0x8, 324, 0, 2140 },
-{ 0x4, 324, 0, 2142 },
-{ 0x2, 324, 0, 2144 },
-{ 0x1, 324, 0, 2147 },
-{ 0x8, 323, 0, 2141 },
-{ 0x4, 323, 0, 2143 },
-{ 0x2, 323, 0, 2145 },
-{ 0x1, 323, 0, 2148 },
-{ 0x1, 294, 0, 2155 },
-{ 0x8, 293, 0, 2149 },
-{ 0x4, 293, 0, 2151 },
-{ 0x2, 293, 0, 2153 },
-{ 0x1, 293, 0, 2156 },
-{ 0x8, 292, 0, 2150 },
-{ 0x4, 292, 0, 2152 },
-{ 0x2, 292, 1, 2154 },
-{ 0x4, 101, 0, 1248 },
-{ 0x1, 292, 0, 2157 },
-{ 0x1, 5, 0, 2158 },
-{ 0x1, 6, 0, 2159 },
-{ 0x1, 239, 0, 2160 },
-{ 0x1, 238, 0, 2161 },
-{ 0x1, 388, 0, 2162 },
-{ 0x1, 289, 0, 2163 },
-{ 0x1, 11, 0, 2164 },
-{ 0x1, 9, 0, 2165 },
-{ 0x1, 363, 0, 2166 },
-{ 0x1, 337, 0, 2167 },
-{ 0x1, 336, 0, 2168 },
-{ 0x1, 387, 0, 2169 },
-{ 0x1, 288, 0, 2170 },
-{ 0x1, 10, 0, 2171 },
-{ 0x1, 8, 0, 2172 },
+{ 0x51, 40, 0, 9 },
+{ 0x31, 40, 1, 19 },
+{ 0x11, 41, 0, 18 },
+{ 0x29, 40, 0, 11 },
+{ 0x19, 40, 1, 23 },
+{ 0x9, 41, 0, 22 },
+{ 0x15, 40, 0, 13 },
+{ 0xd, 40, 1, 27 },
+{ 0x5, 41, 0, 26 },
+{ 0xb, 40, 0, 15 },
+{ 0x7, 40, 1, 31 },
+{ 0x3, 41, 0, 30 },
+{ 0x51, 38, 1, 57 },
+{ 0x50, 38, 0, 33 },
+{ 0xd1, 38, 1, 56 },
+{ 0xd0, 38, 0, 32 },
+{ 0x31, 38, 1, 67 },
+{ 0x30, 38, 1, 43 },
+{ 0x11, 39, 1, 66 },
+{ 0x10, 39, 0, 42 },
+{ 0x71, 38, 1, 65 },
+{ 0x70, 38, 1, 41 },
+{ 0x31, 39, 1, 64 },
+{ 0x30, 39, 0, 40 },
+{ 0x29, 38, 1, 59 },
+{ 0x28, 38, 0, 35 },
+{ 0x69, 38, 1, 58 },
+{ 0x68, 38, 0, 34 },
+{ 0x19, 38, 1, 71 },
+{ 0x18, 38, 1, 47 },
+{ 0x9, 39, 1, 70 },
+{ 0x8, 39, 0, 46 },
+{ 0x39, 38, 1, 69 },
+{ 0x38, 38, 1, 45 },
+{ 0x19, 39, 1, 68 },
+{ 0x18, 39, 0, 44 },
+{ 0x15, 38, 1, 61 },
+{ 0x14, 38, 0, 37 },
+{ 0x35, 38, 1, 60 },
+{ 0x34, 38, 0, 36 },
+{ 0xd, 38, 1, 75 },
+{ 0xc, 38, 1, 51 },
+{ 0x5, 39, 1, 74 },
+{ 0x4, 39, 0, 50 },
+{ 0x1d, 38, 1, 73 },
+{ 0x1c, 38, 1, 49 },
+{ 0xd, 39, 1, 72 },
+{ 0xc, 39, 0, 48 },
+{ 0xb, 38, 1, 63 },
+{ 0xa, 38, 0, 39 },
+{ 0x1b, 38, 1, 62 },
+{ 0x1a, 38, 0, 38 },
+{ 0x7, 38, 1, 79 },
+{ 0x6, 38, 1, 55 },
+{ 0x3, 39, 1, 78 },
+{ 0x2, 39, 0, 54 },
+{ 0xf, 38, 1, 77 },
+{ 0xe, 38, 1, 53 },
+{ 0x7, 39, 1, 76 },
+{ 0x6, 39, 0, 52 },
+{ 0x8, 37, 0, 81 },
+{ 0x18, 37, 0, 80 },
+{ 0x1, 37, 1, 85 },
+{ 0x2, 37, 0, 84 },
+{ 0x3, 37, 1, 83 },
+{ 0x4, 37, 0, 82 },
+{ 0x1, 284, 0, 86 },
+{ 0x20, 237, 0, 96 },
+{ 0x220, 237, 0, 92 },
+{ 0x1220, 237, 0, 89 },
+{ 0xa20, 237, 0, 90 },
+{ 0x620, 237, 0, 91 },
+{ 0x120, 237, 0, 93 },
+{ 0xa0, 237, 0, 94 },
+{ 0x60, 237, 0, 95 },
+{ 0x10, 237, 0, 100 },
+{ 0x90, 237, 0, 97 },
+{ 0x50, 237, 0, 98 },
+{ 0x30, 237, 0, 99 },
+{ 0x8, 237, 0, 101 },
+{ 0x4, 237, 0, 102 },
+{ 0x2, 237, 0, 103 },
+{ 0x1, 237, 0, 104 },
+{ 0x1, 357, 0, 106 },
+{ 0x3, 357, 0, 105 },
+{ 0x2, 363, 0, 107 },
+{ 0x1, 363, 0, 108 },
+{ 0x2, 359, 0, 109 },
+{ 0x1, 359, 0, 110 },
+{ 0x2, 361, 0, 111 },
+{ 0x1, 361, 0, 112 },
+{ 0x2, 365, 0, 113 },
+{ 0x1, 365, 0, 114 },
+{ 0x1, 216, 0, 141 },
+{ 0x5, 216, 0, 139 },
+{ 0x3, 216, 0, 140 },
+{ 0x140, 225, 0, 117 },
+{ 0x540, 225, 0, 115 },
+{ 0x340, 225, 0, 116 },
+{ 0xc0, 225, 0, 129 },
+{ 0x2c0, 225, 0, 127 },
+{ 0x1c0, 225, 0, 128 },
+{ 0x20, 225, 0, 144 },
+{ 0xa0, 225, 0, 142 },
+{ 0x60, 225, 0, 143 },
+{ 0x10, 225, 0, 156 },
+{ 0x50, 225, 0, 154 },
+{ 0x30, 225, 0, 155 },
+{ 0x8, 225, 0, 168 },
+{ 0x28, 225, 0, 166 },
+{ 0x18, 225, 0, 167 },
+{ 0x4, 225, 0, 178 },
+{ 0x2, 225, 0, 179 },
+{ 0x1, 225, 0, 180 },
+{ 0x140, 219, 0, 120 },
+{ 0x540, 219, 0, 118 },
+{ 0x340, 219, 0, 119 },
+{ 0xc0, 219, 0, 132 },
+{ 0x2c0, 219, 0, 130 },
+{ 0x1c0, 219, 0, 131 },
+{ 0x20, 219, 0, 147 },
+{ 0xa0, 219, 0, 145 },
+{ 0x60, 219, 0, 146 },
+{ 0x10, 219, 0, 159 },
+{ 0x50, 219, 0, 157 },
+{ 0x30, 219, 0, 158 },
+{ 0x8, 219, 0, 171 },
+{ 0x28, 219, 0, 169 },
+{ 0x18, 219, 0, 170 },
+{ 0x4, 219, 0, 181 },
+{ 0x2, 219, 0, 182 },
+{ 0x1, 219, 0, 183 },
+{ 0x140, 222, 0, 123 },
+{ 0x540, 222, 0, 121 },
+{ 0x340, 222, 0, 122 },
+{ 0xc0, 222, 0, 135 },
+{ 0x2c0, 222, 0, 133 },
+{ 0x1c0, 222, 0, 134 },
+{ 0x20, 222, 0, 150 },
+{ 0xa0, 222, 0, 148 },
+{ 0x60, 222, 0, 149 },
+{ 0x10, 222, 0, 162 },
+{ 0x50, 222, 0, 160 },
+{ 0x30, 222, 0, 161 },
+{ 0x8, 222, 0, 174 },
+{ 0x28, 222, 0, 172 },
+{ 0x18, 222, 0, 173 },
+{ 0x4, 222, 0, 184 },
+{ 0x2, 222, 0, 185 },
+{ 0x1, 222, 0, 186 },
+{ 0x140, 234, 0, 126 },
+{ 0x540, 234, 0, 124 },
+{ 0x340, 234, 0, 125 },
+{ 0xc0, 234, 0, 138 },
+{ 0x2c0, 234, 0, 136 },
+{ 0x1c0, 234, 0, 137 },
+{ 0x20, 234, 0, 153 },
+{ 0xa0, 234, 0, 151 },
+{ 0x60, 234, 0, 152 },
+{ 0x10, 234, 0, 165 },
+{ 0x50, 234, 0, 163 },
+{ 0x30, 234, 0, 164 },
+{ 0x8, 234, 0, 177 },
+{ 0x28, 234, 0, 175 },
+{ 0x18, 234, 0, 176 },
+{ 0x4, 234, 0, 187 },
+{ 0x2, 234, 0, 188 },
+{ 0x1, 234, 0, 189 },
+{ 0x8, 338, 0, 190 },
+{ 0x4, 338, 0, 191 },
+{ 0x2, 338, 0, 192 },
+{ 0x1, 338, 0, 193 },
+{ 0x20, 236, 0, 201 },
+{ 0x220, 236, 0, 197 },
+{ 0x1220, 236, 0, 194 },
+{ 0xa20, 236, 0, 195 },
+{ 0x620, 236, 0, 196 },
+{ 0x120, 236, 0, 198 },
+{ 0xa0, 236, 0, 199 },
+{ 0x60, 236, 0, 200 },
+{ 0x10, 236, 0, 205 },
+{ 0x90, 236, 0, 202 },
+{ 0x50, 236, 0, 203 },
+{ 0x30, 236, 0, 204 },
+{ 0x8, 236, 0, 206 },
+{ 0x4, 236, 0, 207 },
+{ 0x2, 236, 0, 208 },
+{ 0x1, 236, 0, 209 },
+{ 0x20, 235, 0, 217 },
+{ 0x220, 235, 0, 213 },
+{ 0x1220, 235, 0, 210 },
+{ 0xa20, 235, 0, 211 },
+{ 0x620, 235, 0, 212 },
+{ 0x120, 235, 0, 214 },
+{ 0xa0, 235, 0, 215 },
+{ 0x60, 235, 0, 216 },
+{ 0x10, 235, 0, 221 },
+{ 0x90, 235, 0, 218 },
+{ 0x50, 235, 0, 219 },
+{ 0x30, 235, 0, 220 },
+{ 0x8, 235, 0, 222 },
+{ 0x4, 235, 0, 223 },
+{ 0x2, 235, 0, 224 },
+{ 0x1, 235, 0, 225 },
+{ 0x140, 227, 0, 228 },
+{ 0x540, 227, 0, 226 },
+{ 0x340, 227, 0, 227 },
+{ 0xc0, 227, 0, 237 },
+{ 0x2c0, 227, 0, 235 },
+{ 0x1c0, 227, 0, 236 },
+{ 0x20, 227, 0, 246 },
+{ 0xa0, 227, 0, 244 },
+{ 0x60, 227, 0, 245 },
+{ 0x10, 227, 0, 255 },
+{ 0x50, 227, 0, 253 },
+{ 0x30, 227, 0, 254 },
+{ 0x8, 227, 0, 264 },
+{ 0x28, 227, 0, 262 },
+{ 0x18, 227, 0, 263 },
+{ 0x4, 227, 0, 271 },
+{ 0x2, 227, 0, 272 },
+{ 0x1, 227, 0, 273 },
+{ 0x140, 229, 0, 231 },
+{ 0x540, 229, 0, 229 },
+{ 0x340, 229, 0, 230 },
+{ 0xc0, 229, 0, 240 },
+{ 0x2c0, 229, 0, 238 },
+{ 0x1c0, 229, 0, 239 },
+{ 0x20, 229, 0, 249 },
+{ 0xa0, 229, 0, 247 },
+{ 0x60, 229, 0, 248 },
+{ 0x10, 229, 0, 258 },
+{ 0x50, 229, 0, 256 },
+{ 0x30, 229, 0, 257 },
+{ 0x8, 229, 0, 267 },
+{ 0x28, 229, 0, 265 },
+{ 0x18, 229, 0, 266 },
+{ 0x4, 229, 0, 274 },
+{ 0x2, 229, 0, 275 },
+{ 0x1, 229, 0, 276 },
+{ 0x140, 231, 0, 234 },
+{ 0x540, 231, 0, 232 },
+{ 0x340, 231, 0, 233 },
+{ 0xc0, 231, 0, 243 },
+{ 0x2c0, 231, 0, 241 },
+{ 0x1c0, 231, 0, 242 },
+{ 0x20, 231, 0, 252 },
+{ 0xa0, 231, 0, 250 },
+{ 0x60, 231, 0, 251 },
+{ 0x10, 231, 0, 261 },
+{ 0x50, 231, 0, 259 },
+{ 0x30, 231, 0, 260 },
+{ 0x8, 231, 0, 270 },
+{ 0x28, 231, 0, 268 },
+{ 0x18, 231, 0, 269 },
+{ 0x4, 231, 0, 277 },
+{ 0x2, 231, 0, 278 },
+{ 0x1, 231, 0, 279 },
+{ 0x140, 226, 0, 282 },
+{ 0x540, 226, 0, 280 },
+{ 0x340, 226, 0, 281 },
+{ 0xc0, 226, 0, 291 },
+{ 0x2c0, 226, 0, 289 },
+{ 0x1c0, 226, 0, 290 },
+{ 0x20, 226, 0, 300 },
+{ 0xa0, 226, 0, 298 },
+{ 0x60, 226, 0, 299 },
+{ 0x10, 226, 0, 309 },
+{ 0x50, 226, 0, 307 },
+{ 0x30, 226, 0, 308 },
+{ 0x8, 226, 0, 318 },
+{ 0x28, 226, 0, 316 },
+{ 0x18, 226, 0, 317 },
+{ 0x4, 226, 0, 325 },
+{ 0x2, 226, 0, 326 },
+{ 0x1, 226, 0, 327 },
+{ 0x140, 228, 0, 285 },
+{ 0x540, 228, 0, 283 },
+{ 0x340, 228, 0, 284 },
+{ 0xc0, 228, 0, 294 },
+{ 0x2c0, 228, 0, 292 },
+{ 0x1c0, 228, 0, 293 },
+{ 0x20, 228, 0, 303 },
+{ 0xa0, 228, 0, 301 },
+{ 0x60, 228, 0, 302 },
+{ 0x10, 228, 0, 312 },
+{ 0x50, 228, 0, 310 },
+{ 0x30, 228, 0, 311 },
+{ 0x8, 228, 0, 321 },
+{ 0x28, 228, 0, 319 },
+{ 0x18, 228, 0, 320 },
+{ 0x4, 228, 0, 328 },
+{ 0x2, 228, 0, 329 },
+{ 0x1, 228, 0, 330 },
+{ 0x140, 230, 0, 288 },
+{ 0x540, 230, 0, 286 },
+{ 0x340, 230, 0, 287 },
+{ 0xc0, 230, 0, 297 },
+{ 0x2c0, 230, 0, 295 },
+{ 0x1c0, 230, 0, 296 },
+{ 0x20, 230, 0, 306 },
+{ 0xa0, 230, 0, 304 },
+{ 0x60, 230, 0, 305 },
+{ 0x10, 230, 0, 315 },
+{ 0x50, 230, 0, 313 },
+{ 0x30, 230, 0, 314 },
+{ 0x8, 230, 0, 324 },
+{ 0x28, 230, 0, 322 },
+{ 0x18, 230, 0, 323 },
+{ 0x4, 230, 0, 331 },
+{ 0x2, 230, 0, 332 },
+{ 0x1, 230, 0, 333 },
+{ 0x1, 356, 0, 335 },
+{ 0x3, 356, 0, 334 },
+{ 0x2, 362, 0, 336 },
+{ 0x1, 362, 0, 337 },
+{ 0x2, 358, 0, 338 },
+{ 0x1, 358, 0, 339 },
+{ 0x2, 360, 0, 340 },
+{ 0x1, 360, 0, 341 },
+{ 0x2, 364, 0, 342 },
+{ 0x1, 364, 0, 343 },
+{ 0x1, 215, 0, 370 },
+{ 0x5, 215, 0, 368 },
+{ 0x3, 215, 0, 369 },
+{ 0x140, 224, 0, 346 },
+{ 0x540, 224, 0, 344 },
+{ 0x340, 224, 0, 345 },
+{ 0xc0, 224, 0, 358 },
+{ 0x2c0, 224, 0, 356 },
+{ 0x1c0, 224, 0, 357 },
+{ 0x20, 224, 0, 373 },
+{ 0xa0, 224, 0, 371 },
+{ 0x60, 224, 0, 372 },
+{ 0x10, 224, 0, 385 },
+{ 0x50, 224, 0, 383 },
+{ 0x30, 224, 0, 384 },
+{ 0x8, 224, 0, 397 },
+{ 0x28, 224, 0, 395 },
+{ 0x18, 224, 0, 396 },
+{ 0x4, 224, 0, 407 },
+{ 0x2, 224, 0, 408 },
+{ 0x1, 224, 0, 409 },
+{ 0x140, 218, 0, 349 },
+{ 0x540, 218, 0, 347 },
+{ 0x340, 218, 0, 348 },
+{ 0xc0, 218, 0, 361 },
+{ 0x2c0, 218, 0, 359 },
+{ 0x1c0, 218, 0, 360 },
+{ 0x20, 218, 0, 376 },
+{ 0xa0, 218, 0, 374 },
+{ 0x60, 218, 0, 375 },
+{ 0x10, 218, 0, 388 },
+{ 0x50, 218, 0, 386 },
+{ 0x30, 218, 0, 387 },
+{ 0x8, 218, 0, 400 },
+{ 0x28, 218, 0, 398 },
+{ 0x18, 218, 0, 399 },
+{ 0x4, 218, 0, 410 },
+{ 0x2, 218, 0, 411 },
+{ 0x1, 218, 0, 412 },
+{ 0x140, 221, 0, 352 },
+{ 0x540, 221, 0, 350 },
+{ 0x340, 221, 0, 351 },
+{ 0xc0, 221, 0, 364 },
+{ 0x2c0, 221, 0, 362 },
+{ 0x1c0, 221, 0, 363 },
+{ 0x20, 221, 0, 379 },
+{ 0xa0, 221, 0, 377 },
+{ 0x60, 221, 0, 378 },
+{ 0x10, 221, 0, 391 },
+{ 0x50, 221, 0, 389 },
+{ 0x30, 221, 0, 390 },
+{ 0x8, 221, 0, 403 },
+{ 0x28, 221, 0, 401 },
+{ 0x18, 221, 0, 402 },
+{ 0x4, 221, 0, 413 },
+{ 0x2, 221, 0, 414 },
+{ 0x1, 221, 0, 415 },
+{ 0x140, 233, 0, 355 },
+{ 0x540, 233, 0, 353 },
+{ 0x340, 233, 0, 354 },
+{ 0xc0, 233, 0, 367 },
+{ 0x2c0, 233, 0, 365 },
+{ 0x1c0, 233, 0, 366 },
+{ 0x20, 233, 0, 382 },
+{ 0xa0, 233, 0, 380 },
+{ 0x60, 233, 0, 381 },
+{ 0x10, 233, 0, 394 },
+{ 0x50, 233, 0, 392 },
+{ 0x30, 233, 0, 393 },
+{ 0x8, 233, 0, 406 },
+{ 0x28, 233, 0, 404 },
+{ 0x18, 233, 0, 405 },
+{ 0x4, 233, 0, 416 },
+{ 0x2, 233, 0, 417 },
+{ 0x1, 233, 0, 418 },
+{ 0x1, 214, 0, 445 },
+{ 0x5, 214, 0, 443 },
+{ 0x3, 214, 0, 444 },
+{ 0x140, 223, 0, 421 },
+{ 0x540, 223, 0, 419 },
+{ 0x340, 223, 0, 420 },
+{ 0xc0, 223, 0, 433 },
+{ 0x2c0, 223, 0, 431 },
+{ 0x1c0, 223, 0, 432 },
+{ 0x20, 223, 0, 448 },
+{ 0xa0, 223, 0, 446 },
+{ 0x60, 223, 0, 447 },
+{ 0x10, 223, 0, 460 },
+{ 0x50, 223, 0, 458 },
+{ 0x30, 223, 0, 459 },
+{ 0x8, 223, 0, 472 },
+{ 0x28, 223, 0, 470 },
+{ 0x18, 223, 0, 471 },
+{ 0x4, 223, 0, 482 },
+{ 0x2, 223, 0, 483 },
+{ 0x1, 223, 0, 484 },
+{ 0x140, 217, 0, 424 },
+{ 0x540, 217, 0, 422 },
+{ 0x340, 217, 0, 423 },
+{ 0xc0, 217, 0, 436 },
+{ 0x2c0, 217, 0, 434 },
+{ 0x1c0, 217, 0, 435 },
+{ 0x20, 217, 0, 451 },
+{ 0xa0, 217, 0, 449 },
+{ 0x60, 217, 0, 450 },
+{ 0x10, 217, 0, 463 },
+{ 0x50, 217, 0, 461 },
+{ 0x30, 217, 0, 462 },
+{ 0x8, 217, 0, 475 },
+{ 0x28, 217, 0, 473 },
+{ 0x18, 217, 0, 474 },
+{ 0x4, 217, 0, 485 },
+{ 0x2, 217, 0, 486 },
+{ 0x1, 217, 0, 487 },
+{ 0x140, 220, 0, 427 },
+{ 0x540, 220, 0, 425 },
+{ 0x340, 220, 0, 426 },
+{ 0xc0, 220, 0, 439 },
+{ 0x2c0, 220, 0, 437 },
+{ 0x1c0, 220, 0, 438 },
+{ 0x20, 220, 0, 454 },
+{ 0xa0, 220, 0, 452 },
+{ 0x60, 220, 0, 453 },
+{ 0x10, 220, 0, 466 },
+{ 0x50, 220, 0, 464 },
+{ 0x30, 220, 0, 465 },
+{ 0x8, 220, 0, 478 },
+{ 0x28, 220, 0, 476 },
+{ 0x18, 220, 0, 477 },
+{ 0x4, 220, 0, 488 },
+{ 0x2, 220, 0, 489 },
+{ 0x1, 220, 0, 490 },
+{ 0x140, 232, 0, 430 },
+{ 0x540, 232, 0, 428 },
+{ 0x340, 232, 0, 429 },
+{ 0xc0, 232, 0, 442 },
+{ 0x2c0, 232, 0, 440 },
+{ 0x1c0, 232, 0, 441 },
+{ 0x20, 232, 0, 457 },
+{ 0xa0, 232, 0, 455 },
+{ 0x60, 232, 0, 456 },
+{ 0x10, 232, 0, 469 },
+{ 0x50, 232, 0, 467 },
+{ 0x30, 232, 0, 468 },
+{ 0x8, 232, 0, 481 },
+{ 0x28, 232, 0, 479 },
+{ 0x18, 232, 0, 480 },
+{ 0x4, 232, 0, 491 },
+{ 0x2, 232, 0, 492 },
+{ 0x1, 232, 0, 493 },
+{ 0x8, 355, 0, 495 },
+{ 0x18, 355, 0, 494 },
+{ 0x4, 355, 0, 497 },
+{ 0xc, 355, 0, 496 },
+{ 0x2, 355, 0, 504 },
+{ 0x1, 355, 0, 505 },
+{ 0x4, 353, 0, 499 },
+{ 0xc, 353, 0, 498 },
+{ 0x2, 353, 0, 506 },
+{ 0x1, 353, 0, 507 },
+{ 0x4, 351, 0, 501 },
+{ 0xc, 351, 0, 500 },
+{ 0x2, 351, 0, 508 },
+{ 0x1, 351, 0, 509 },
+{ 0x4, 349, 0, 503 },
+{ 0xc, 349, 0, 502 },
+{ 0x2, 349, 0, 510 },
+{ 0x1, 349, 0, 511 },
+{ 0xa00, 213, 0, 526 },
+{ 0x2a00, 213, 0, 524 },
+{ 0x1a00, 213, 0, 525 },
+{ 0x600, 213, 0, 538 },
+{ 0x2600, 213, 0, 514 },
+{ 0xa600, 213, 0, 512 },
+{ 0x6600, 213, 0, 513 },
+{ 0x1600, 213, 0, 536 },
+{ 0xe00, 213, 0, 537 },
+{ 0x100, 213, 0, 550 },
+{ 0x500, 213, 0, 548 },
+{ 0x300, 213, 0, 549 },
+{ 0x80, 213, 0, 553 },
+{ 0x280, 213, 0, 551 },
+{ 0x180, 213, 0, 552 },
+{ 0x40, 213, 0, 565 },
+{ 0x140, 213, 0, 563 },
+{ 0xc0, 213, 0, 564 },
+{ 0x20, 213, 0, 577 },
+{ 0xa0, 213, 0, 575 },
+{ 0x60, 213, 0, 576 },
+{ 0x10, 213, 0, 589 },
+{ 0x50, 213, 0, 587 },
+{ 0x30, 213, 0, 588 },
+{ 0x8, 213, 0, 601 },
+{ 0x28, 213, 0, 599 },
+{ 0x18, 213, 0, 600 },
+{ 0x4, 213, 0, 611 },
+{ 0x2, 213, 0, 612 },
+{ 0x1, 213, 0, 613 },
+{ 0x500, 210, 0, 529 },
+{ 0x1500, 210, 0, 527 },
+{ 0xd00, 210, 0, 528 },
+{ 0x300, 210, 0, 541 },
+{ 0x1300, 210, 0, 517 },
+{ 0x5300, 210, 0, 515 },
+{ 0x3300, 210, 0, 516 },
+{ 0xb00, 210, 0, 539 },
+{ 0x700, 210, 0, 540 },
+{ 0x80, 210, 0, 556 },
+{ 0x280, 210, 0, 554 },
+{ 0x180, 210, 0, 555 },
+{ 0x40, 210, 0, 568 },
+{ 0x140, 210, 0, 566 },
+{ 0xc0, 210, 0, 567 },
+{ 0x20, 210, 0, 580 },
+{ 0xa0, 210, 0, 578 },
+{ 0x60, 210, 0, 579 },
+{ 0x10, 210, 0, 592 },
+{ 0x50, 210, 0, 590 },
+{ 0x30, 210, 0, 591 },
+{ 0x8, 210, 0, 604 },
+{ 0x28, 210, 0, 602 },
+{ 0x18, 210, 0, 603 },
+{ 0x4, 210, 0, 614 },
+{ 0x2, 210, 0, 615 },
+{ 0x1, 210, 0, 616 },
+{ 0x500, 207, 0, 532 },
+{ 0x1500, 207, 0, 530 },
+{ 0xd00, 207, 0, 531 },
+{ 0x300, 207, 0, 544 },
+{ 0x1300, 207, 0, 520 },
+{ 0x5300, 207, 0, 518 },
+{ 0x3300, 207, 0, 519 },
+{ 0xb00, 207, 0, 542 },
+{ 0x700, 207, 0, 543 },
+{ 0x80, 207, 0, 559 },
+{ 0x280, 207, 0, 557 },
+{ 0x180, 207, 0, 558 },
+{ 0x40, 207, 0, 571 },
+{ 0x140, 207, 0, 569 },
+{ 0xc0, 207, 0, 570 },
+{ 0x20, 207, 0, 583 },
+{ 0xa0, 207, 0, 581 },
+{ 0x60, 207, 0, 582 },
+{ 0x10, 207, 0, 595 },
+{ 0x50, 207, 0, 593 },
+{ 0x30, 207, 0, 594 },
+{ 0x8, 207, 0, 607 },
+{ 0x28, 207, 0, 605 },
+{ 0x18, 207, 0, 606 },
+{ 0x4, 207, 0, 617 },
+{ 0x2, 207, 0, 618 },
+{ 0x1, 207, 0, 619 },
+{ 0x500, 204, 0, 535 },
+{ 0x1500, 204, 0, 533 },
+{ 0xd00, 204, 0, 534 },
+{ 0x300, 204, 0, 547 },
+{ 0x1300, 204, 0, 523 },
+{ 0x5300, 204, 0, 521 },
+{ 0x3300, 204, 0, 522 },
+{ 0xb00, 204, 0, 545 },
+{ 0x700, 204, 0, 546 },
+{ 0x80, 204, 0, 562 },
+{ 0x280, 204, 0, 560 },
+{ 0x180, 204, 0, 561 },
+{ 0x40, 204, 0, 574 },
+{ 0x140, 204, 0, 572 },
+{ 0xc0, 204, 0, 573 },
+{ 0x20, 204, 0, 586 },
+{ 0xa0, 204, 0, 584 },
+{ 0x60, 204, 0, 585 },
+{ 0x10, 204, 0, 598 },
+{ 0x50, 204, 0, 596 },
+{ 0x30, 204, 0, 597 },
+{ 0x8, 204, 0, 610 },
+{ 0x28, 204, 0, 608 },
+{ 0x18, 204, 0, 609 },
+{ 0x4, 204, 0, 620 },
+{ 0x2, 204, 0, 621 },
+{ 0x1, 204, 0, 622 },
+{ 0x8, 195, 0, 623 },
+{ 0x4, 195, 0, 624 },
+{ 0x2, 195, 0, 625 },
+{ 0x1, 195, 0, 626 },
+{ 0x2, 133, 0, 629 },
+{ 0xa, 133, 0, 627 },
+{ 0x6, 133, 0, 628 },
+{ 0x1, 133, 0, 635 },
+{ 0x5, 133, 0, 633 },
+{ 0x3, 133, 0, 634 },
+{ 0x2, 132, 0, 632 },
+{ 0xa, 132, 0, 630 },
+{ 0x6, 132, 0, 631 },
+{ 0x1, 132, 0, 638 },
+{ 0x5, 132, 0, 636 },
+{ 0x3, 132, 0, 637 },
+{ 0x4, 388, 0, 639 },
+{ 0x2, 388, 0, 640 },
+{ 0x1, 388, 0, 641 },
+{ 0x4, 387, 0, 642 },
+{ 0x2, 387, 0, 643 },
+{ 0x1, 387, 0, 644 },
+{ 0x4, 386, 0, 645 },
+{ 0x2, 386, 0, 646 },
+{ 0x1, 386, 0, 647 },
+{ 0x4, 385, 0, 648 },
+{ 0x2, 385, 0, 649 },
+{ 0x1, 385, 0, 650 },
+{ 0x2, 95, 0, 653 },
+{ 0xa, 95, 0, 651 },
+{ 0x6, 95, 0, 652 },
+{ 0x1, 95, 0, 665 },
+{ 0x5, 95, 0, 663 },
+{ 0x3, 95, 0, 664 },
+{ 0x2, 94, 0, 656 },
+{ 0xa, 94, 0, 654 },
+{ 0x6, 94, 0, 655 },
+{ 0x1, 94, 0, 668 },
+{ 0x5, 94, 0, 666 },
+{ 0x3, 94, 0, 667 },
+{ 0x2, 93, 0, 659 },
+{ 0xa, 93, 0, 657 },
+{ 0x6, 93, 0, 658 },
+{ 0x1, 93, 0, 671 },
+{ 0x5, 93, 0, 669 },
+{ 0x3, 93, 0, 670 },
+{ 0x2, 92, 0, 662 },
+{ 0xa, 92, 0, 660 },
+{ 0x6, 92, 0, 661 },
+{ 0x1, 92, 0, 674 },
+{ 0x5, 92, 0, 672 },
+{ 0x3, 92, 0, 673 },
+{ 0x8, 354, 0, 676 },
+{ 0x18, 354, 0, 675 },
+{ 0x4, 354, 0, 678 },
+{ 0xc, 354, 0, 677 },
+{ 0x2, 354, 0, 685 },
+{ 0x1, 354, 0, 686 },
+{ 0x4, 352, 0, 680 },
+{ 0xc, 352, 0, 679 },
+{ 0x2, 352, 0, 687 },
+{ 0x1, 352, 0, 688 },
+{ 0x4, 350, 0, 682 },
+{ 0xc, 350, 0, 681 },
+{ 0x2, 350, 0, 689 },
+{ 0x1, 350, 0, 690 },
+{ 0x4, 348, 0, 684 },
+{ 0xc, 348, 0, 683 },
+{ 0x2, 348, 0, 691 },
+{ 0x1, 348, 0, 692 },
+{ 0xa00, 212, 0, 707 },
+{ 0x2a00, 212, 0, 705 },
+{ 0x1a00, 212, 0, 706 },
+{ 0x600, 212, 0, 719 },
+{ 0x2600, 212, 0, 695 },
+{ 0xa600, 212, 0, 693 },
+{ 0x6600, 212, 0, 694 },
+{ 0x1600, 212, 0, 717 },
+{ 0xe00, 212, 0, 718 },
+{ 0x100, 212, 0, 731 },
+{ 0x500, 212, 0, 729 },
+{ 0x300, 212, 0, 730 },
+{ 0x80, 212, 0, 734 },
+{ 0x280, 212, 0, 732 },
+{ 0x180, 212, 0, 733 },
+{ 0x40, 212, 0, 746 },
+{ 0x140, 212, 0, 744 },
+{ 0xc0, 212, 0, 745 },
+{ 0x20, 212, 0, 758 },
+{ 0xa0, 212, 0, 756 },
+{ 0x60, 212, 0, 757 },
+{ 0x10, 212, 0, 770 },
+{ 0x50, 212, 0, 768 },
+{ 0x30, 212, 0, 769 },
+{ 0x8, 212, 0, 782 },
+{ 0x28, 212, 0, 780 },
+{ 0x18, 212, 0, 781 },
+{ 0x4, 212, 0, 792 },
+{ 0x2, 212, 0, 793 },
+{ 0x1, 212, 0, 794 },
+{ 0x500, 209, 0, 710 },
+{ 0x1500, 209, 0, 708 },
+{ 0xd00, 209, 0, 709 },
+{ 0x300, 209, 0, 722 },
+{ 0x1300, 209, 0, 698 },
+{ 0x5300, 209, 0, 696 },
+{ 0x3300, 209, 0, 697 },
+{ 0xb00, 209, 0, 720 },
+{ 0x700, 209, 0, 721 },
+{ 0x80, 209, 0, 737 },
+{ 0x280, 209, 0, 735 },
+{ 0x180, 209, 0, 736 },
+{ 0x40, 209, 0, 749 },
+{ 0x140, 209, 0, 747 },
+{ 0xc0, 209, 0, 748 },
+{ 0x20, 209, 0, 761 },
+{ 0xa0, 209, 0, 759 },
+{ 0x60, 209, 0, 760 },
+{ 0x10, 209, 0, 773 },
+{ 0x50, 209, 0, 771 },
+{ 0x30, 209, 0, 772 },
+{ 0x8, 209, 0, 785 },
+{ 0x28, 209, 0, 783 },
+{ 0x18, 209, 0, 784 },
+{ 0x4, 209, 0, 795 },
+{ 0x2, 209, 0, 796 },
+{ 0x1, 209, 0, 797 },
+{ 0x500, 206, 0, 713 },
+{ 0x1500, 206, 0, 711 },
+{ 0xd00, 206, 0, 712 },
+{ 0x300, 206, 0, 725 },
+{ 0x1300, 206, 0, 701 },
+{ 0x5300, 206, 0, 699 },
+{ 0x3300, 206, 0, 700 },
+{ 0xb00, 206, 0, 723 },
+{ 0x700, 206, 0, 724 },
+{ 0x80, 206, 0, 740 },
+{ 0x280, 206, 0, 738 },
+{ 0x180, 206, 0, 739 },
+{ 0x40, 206, 0, 752 },
+{ 0x140, 206, 0, 750 },
+{ 0xc0, 206, 0, 751 },
+{ 0x20, 206, 0, 764 },
+{ 0xa0, 206, 0, 762 },
+{ 0x60, 206, 0, 763 },
+{ 0x10, 206, 0, 776 },
+{ 0x50, 206, 0, 774 },
+{ 0x30, 206, 0, 775 },
+{ 0x8, 206, 0, 788 },
+{ 0x28, 206, 0, 786 },
+{ 0x18, 206, 0, 787 },
+{ 0x4, 206, 0, 798 },
+{ 0x2, 206, 0, 799 },
+{ 0x1, 206, 0, 800 },
+{ 0x500, 203, 0, 716 },
+{ 0x1500, 203, 0, 714 },
+{ 0xd00, 203, 0, 715 },
+{ 0x300, 203, 0, 728 },
+{ 0x1300, 203, 0, 704 },
+{ 0x5300, 203, 0, 702 },
+{ 0x3300, 203, 0, 703 },
+{ 0xb00, 203, 0, 726 },
+{ 0x700, 203, 0, 727 },
+{ 0x80, 203, 0, 743 },
+{ 0x280, 203, 0, 741 },
+{ 0x180, 203, 0, 742 },
+{ 0x40, 203, 0, 755 },
+{ 0x140, 203, 0, 753 },
+{ 0xc0, 203, 0, 754 },
+{ 0x20, 203, 0, 767 },
+{ 0xa0, 203, 0, 765 },
+{ 0x60, 203, 0, 766 },
+{ 0x10, 203, 0, 779 },
+{ 0x50, 203, 0, 777 },
+{ 0x30, 203, 0, 778 },
+{ 0x8, 203, 0, 791 },
+{ 0x28, 203, 0, 789 },
+{ 0x18, 203, 0, 790 },
+{ 0x4, 203, 0, 801 },
+{ 0x2, 203, 0, 802 },
+{ 0x1, 203, 0, 803 },
+{ 0xa00, 211, 0, 818 },
+{ 0x2a00, 211, 0, 816 },
+{ 0x1a00, 211, 0, 817 },
+{ 0x600, 211, 0, 830 },
+{ 0x2600, 211, 0, 806 },
+{ 0xa600, 211, 0, 804 },
+{ 0x6600, 211, 0, 805 },
+{ 0x1600, 211, 0, 828 },
+{ 0xe00, 211, 0, 829 },
+{ 0x100, 211, 0, 842 },
+{ 0x500, 211, 0, 840 },
+{ 0x300, 211, 0, 841 },
+{ 0x80, 211, 0, 845 },
+{ 0x280, 211, 0, 843 },
+{ 0x180, 211, 0, 844 },
+{ 0x40, 211, 0, 857 },
+{ 0x140, 211, 0, 855 },
+{ 0xc0, 211, 0, 856 },
+{ 0x20, 211, 0, 869 },
+{ 0xa0, 211, 0, 867 },
+{ 0x60, 211, 0, 868 },
+{ 0x10, 211, 0, 881 },
+{ 0x50, 211, 0, 879 },
+{ 0x30, 211, 0, 880 },
+{ 0x8, 211, 0, 893 },
+{ 0x28, 211, 0, 891 },
+{ 0x18, 211, 0, 892 },
+{ 0x4, 211, 0, 903 },
+{ 0x2, 211, 0, 904 },
+{ 0x1, 211, 0, 905 },
+{ 0x500, 208, 0, 821 },
+{ 0x1500, 208, 0, 819 },
+{ 0xd00, 208, 0, 820 },
+{ 0x300, 208, 0, 833 },
+{ 0x1300, 208, 0, 809 },
+{ 0x5300, 208, 0, 807 },
+{ 0x3300, 208, 0, 808 },
+{ 0xb00, 208, 0, 831 },
+{ 0x700, 208, 0, 832 },
+{ 0x80, 208, 0, 848 },
+{ 0x280, 208, 0, 846 },
+{ 0x180, 208, 0, 847 },
+{ 0x40, 208, 0, 860 },
+{ 0x140, 208, 0, 858 },
+{ 0xc0, 208, 0, 859 },
+{ 0x20, 208, 0, 872 },
+{ 0xa0, 208, 0, 870 },
+{ 0x60, 208, 0, 871 },
+{ 0x10, 208, 0, 884 },
+{ 0x50, 208, 0, 882 },
+{ 0x30, 208, 0, 883 },
+{ 0x8, 208, 0, 896 },
+{ 0x28, 208, 0, 894 },
+{ 0x18, 208, 0, 895 },
+{ 0x4, 208, 0, 906 },
+{ 0x2, 208, 0, 907 },
+{ 0x1, 208, 0, 908 },
+{ 0x500, 205, 0, 824 },
+{ 0x1500, 205, 0, 822 },
+{ 0xd00, 205, 0, 823 },
+{ 0x300, 205, 0, 836 },
+{ 0x1300, 205, 0, 812 },
+{ 0x5300, 205, 0, 810 },
+{ 0x3300, 205, 0, 811 },
+{ 0xb00, 205, 0, 834 },
+{ 0x700, 205, 0, 835 },
+{ 0x80, 205, 0, 851 },
+{ 0x280, 205, 0, 849 },
+{ 0x180, 205, 0, 850 },
+{ 0x40, 205, 0, 863 },
+{ 0x140, 205, 0, 861 },
+{ 0xc0, 205, 0, 862 },
+{ 0x20, 205, 0, 875 },
+{ 0xa0, 205, 0, 873 },
+{ 0x60, 205, 0, 874 },
+{ 0x10, 205, 0, 887 },
+{ 0x50, 205, 0, 885 },
+{ 0x30, 205, 0, 886 },
+{ 0x8, 205, 0, 899 },
+{ 0x28, 205, 0, 897 },
+{ 0x18, 205, 0, 898 },
+{ 0x4, 205, 0, 909 },
+{ 0x2, 205, 0, 910 },
+{ 0x1, 205, 0, 911 },
+{ 0x500, 202, 0, 827 },
+{ 0x1500, 202, 0, 825 },
+{ 0xd00, 202, 0, 826 },
+{ 0x300, 202, 0, 839 },
+{ 0x1300, 202, 0, 815 },
+{ 0x5300, 202, 0, 813 },
+{ 0x3300, 202, 0, 814 },
+{ 0xb00, 202, 0, 837 },
+{ 0x700, 202, 0, 838 },
+{ 0x80, 202, 0, 854 },
+{ 0x280, 202, 0, 852 },
+{ 0x180, 202, 0, 853 },
+{ 0x40, 202, 0, 866 },
+{ 0x140, 202, 0, 864 },
+{ 0xc0, 202, 0, 865 },
+{ 0x20, 202, 0, 878 },
+{ 0xa0, 202, 0, 876 },
+{ 0x60, 202, 0, 877 },
+{ 0x10, 202, 0, 890 },
+{ 0x50, 202, 0, 888 },
+{ 0x30, 202, 0, 889 },
+{ 0x8, 202, 0, 902 },
+{ 0x28, 202, 0, 900 },
+{ 0x18, 202, 0, 901 },
+{ 0x4, 202, 0, 912 },
+{ 0x2, 202, 0, 913 },
+{ 0x1, 202, 0, 914 },
+{ 0x1, 49, 0, 917 },
+{ 0x3, 48, 0, 918 },
+{ 0x1, 374, 0, 919 },
+{ 0x1, 380, 0, 920 },
+{ 0x2, 334, 0, 923 },
+{ 0x1, 334, 0, 924 },
+{ 0x2, 332, 0, 925 },
+{ 0x1, 332, 0, 926 },
+{ 0x1, 331, 0, 927 },
+{ 0x1, 276, 0, 932 },
+{ 0x1, 275, 0, 933 },
+{ 0x1, 274, 0, 934 },
+{ 0x1, 273, 0, 935 },
+{ 0x1, 201, 0, 936 },
+{ 0x1, 200, 0, 937 },
+{ 0x1, 272, 0, 938 },
+{ 0x1, 271, 0, 939 },
+{ 0x1, 270, 0, 940 },
+{ 0x1, 269, 0, 941 },
+{ 0x1, 268, 0, 942 },
+{ 0x1, 267, 0, 943 },
+{ 0x1, 266, 0, 944 },
+{ 0x2, 199, 0, 945 },
+{ 0x1, 199, 0, 946 },
+{ 0x2, 314, 0, 952 },
+{ 0x1, 314, 0, 953 },
+{ 0x1, 265, 0, 954 },
+{ 0x1, 264, 0, 955 },
+{ 0x1, 263, 0, 956 },
+{ 0x1, 262, 0, 957 },
+{ 0x1, 8, 0, 958 },
+{ 0x1, 261, 0, 959 },
+{ 0x1, 260, 0, 960 },
+{ 0x1, 259, 0, 961 },
+{ 0x1, 258, 0, 962 },
+{ 0x1, 336, 0, 963 },
+{ 0x1, 347, 0, 964 },
+{ 0x1, 337, 0, 965 },
+{ 0x1, 369, 0, 966 },
+{ 0x1, 257, 0, 969 },
+{ 0x1, 198, 0, 970 },
+{ 0x1, 134, 0, 973 },
+{ 0x2, 239, 0, 977 },
+{ 0x1, 239, 0, 978 },
+{ 0x1, 193, 0, 979 },
+{ 0x5, 47, 0, 981 },
+{ 0x3, 47, 0, 982 },
+{ 0x5, 46, 0, 983 },
+{ 0x3, 46, 0, 984 },
+{ 0x1, 313, 0, 985 },
+{ 0x1, 321, 0, 986 },
+{ 0x1, 319, 0, 987 },
+{ 0x1, 340, 0, 988 },
+{ 0x1, 320, 0, 989 },
+{ 0x1, 318, 0, 990 },
+{ 0x2, 326, 0, 991 },
+{ 0x1, 326, 0, 993 },
+{ 0x2, 324, 0, 992 },
+{ 0x1, 324, 0, 994 },
+{ 0x2, 344, 0, 995 },
+{ 0x1, 344, 0, 998 },
+{ 0x2, 325, 0, 996 },
+{ 0x1, 325, 0, 999 },
+{ 0x2, 323, 0, 997 },
+{ 0x1, 323, 0, 1000 },
+{ 0x1, 286, 0, 1001 },
+{ 0x1, 285, 0, 1002 },
+{ 0x1, 317, 0, 1003 },
+{ 0x1, 308, 0, 1004 },
+{ 0x1, 310, 0, 1005 },
+{ 0x1, 307, 0, 1006 },
+{ 0x1, 309, 0, 1007 },
+{ 0x2, 384, 0, 1008 },
+{ 0x1, 384, 0, 1011 },
+{ 0x2, 383, 0, 1009 },
+{ 0x1, 383, 0, 1012 },
+{ 0x2, 382, 0, 1010 },
+{ 0x1, 382, 0, 1013 },
+{ 0x1, 296, 0, 1014 },
+{ 0x2, 295, 0, 1015 },
+{ 0x1, 295, 0, 1016 },
+{ 0x2, 242, 0, 1017 },
+{ 0x1, 242, 0, 1020 },
+{ 0x2, 241, 0, 1018 },
+{ 0x1, 241, 0, 1021 },
+{ 0x2, 240, 0, 1019 },
+{ 0x1, 240, 0, 1022 },
+{ 0x2, 311, 0, 1023 },
+{ 0x1, 311, 0, 1024 },
+{ 0x2, 312, 0, 1025 },
+{ 0x1, 312, 0, 1026 },
+{ 0xa, 378, 1, 1032 },
+{ 0xa, 379, 0, 1031 },
+{ 0x1a, 378, 1, 1028 },
+{ 0x32, 379, 0, 1027 },
+{ 0x6, 378, 1, 1036 },
+{ 0x6, 379, 0, 1035 },
+{ 0x1, 378, 1, 1042 },
+{ 0x1, 379, 0, 1041 },
+{ 0x9, 378, 1, 1034 },
+{ 0x9, 379, 0, 1033 },
+{ 0x19, 378, 1, 1030 },
+{ 0x31, 379, 0, 1029 },
+{ 0x5, 378, 1, 1038 },
+{ 0x5, 379, 0, 1037 },
+{ 0x3, 378, 1, 1040 },
+{ 0x3, 379, 0, 1039 },
+{ 0xa, 375, 1, 1048 },
+{ 0xa, 376, 0, 1047 },
+{ 0x1a, 375, 1, 1044 },
+{ 0x32, 376, 0, 1043 },
+{ 0x6, 375, 1, 1052 },
+{ 0x6, 376, 0, 1051 },
+{ 0x1, 375, 1, 1058 },
+{ 0x1, 376, 0, 1057 },
+{ 0x9, 375, 1, 1050 },
+{ 0x9, 376, 0, 1049 },
+{ 0x19, 375, 1, 1046 },
+{ 0x31, 376, 0, 1045 },
+{ 0x5, 375, 1, 1054 },
+{ 0x5, 376, 0, 1053 },
+{ 0x3, 375, 1, 1056 },
+{ 0x3, 376, 0, 1055 },
+{ 0x1, 102, 0, 1059 },
+{ 0x1, 101, 0, 1060 },
+{ 0x1, 339, 1, 1062 },
+{ 0x1, 100, 0, 1061 },
+{ 0x2, 343, 1, 1064 },
+{ 0x2, 104, 0, 1063 },
+{ 0x1, 343, 1, 1066 },
+{ 0x1, 104, 0, 1065 },
+{ 0x1, 345, 0, 1067 },
+{ 0x1, 99, 0, 1068 },
+{ 0x2, 98, 0, 1069 },
+{ 0x2, 97, 0, 1070 },
+{ 0x1, 396, 1, 1076 },
+{ 0x1, 197, 0, 971 },
+{ 0x1, 395, 0, 1077 },
+{ 0x1, 394, 1, 1078 },
+{ 0x1, 196, 0, 980 },
+{ 0x1, 256, 0, 1079 },
+{ 0x1, 255, 1, 1080 },
+{ 0x1, 238, 0, 972 },
+{ 0x1, 254, 0, 1081 },
+{ 0x1, 253, 1, 1082 },
+{ 0x1, 373, 0, 974 },
+{ 0x1, 252, 1, 1083 },
+{ 0x1, 346, 0, 976 },
+{ 0x1, 251, 0, 1084 },
+{ 0x1, 250, 0, 1085 },
+{ 0x1, 249, 1, 1086 },
+{ 0x2, 346, 0, 975 },
+{ 0x10, 248, 0, 1090 },
+{ 0x90, 248, 0, 1088 },
+{ 0x190, 248, 0, 1087 },
+{ 0x50, 248, 0, 1089 },
+{ 0x30, 248, 0, 1092 },
+{ 0x70, 248, 0, 1091 },
+{ 0x8, 248, 0, 1094 },
+{ 0x18, 248, 0, 1093 },
+{ 0x4, 248, 0, 1095 },
+{ 0x1, 248, 0, 1098 },
+{ 0x3, 248, 0, 1097 },
+{ 0x1, 247, 1, 1099 },
+{ 0x2, 248, 0, 1096 },
+{ 0x3, 45, 0, 1100 },
+{ 0x1, 289, 1, 1101 },
+{ 0x1, 290, 1, 967 },
+{ 0x1, 291, 0, 87 },
+{ 0x1, 33, 1, 1102 },
+{ 0x1, 34, 1, 968 },
+{ 0x1, 35, 0, 88 },
+{ 0x1, 187, 0, 1103 },
+{ 0x4, 389, 0, 1104 },
+{ 0x2, 389, 0, 1105 },
+{ 0x1, 389, 1, 1107 },
+{ 0x1, 390, 0, 1106 },
+{ 0x8, 391, 0, 1108 },
+{ 0x4, 391, 0, 1109 },
+{ 0x1, 391, 1, 1111 },
+{ 0x2, 391, 0, 1110 },
+{ 0x8, 176, 0, 1112 },
+{ 0x4, 176, 0, 1113 },
+{ 0x2, 176, 0, 1114 },
+{ 0x1, 176, 1, 1116 },
+{ 0x1, 177, 0, 1115 },
+{ 0x10, 178, 0, 1117 },
+{ 0x8, 178, 0, 1118 },
+{ 0x4, 178, 0, 1119 },
+{ 0x1, 178, 1, 1121 },
+{ 0x2, 178, 0, 1120 },
+{ 0x220, 148, 0, 1122 },
+{ 0x120, 148, 0, 1123 },
+{ 0xa0, 148, 0, 1124 },
+{ 0x60, 148, 1, 1126 },
+{ 0x4, 149, 0, 1125 },
+{ 0x110, 148, 0, 1132 },
+{ 0x90, 148, 0, 1133 },
+{ 0x50, 148, 0, 1134 },
+{ 0x30, 148, 1, 1136 },
+{ 0x2, 149, 0, 1135 },
+{ 0x8, 148, 0, 1137 },
+{ 0x4, 148, 0, 1138 },
+{ 0x2, 148, 0, 1139 },
+{ 0x1, 148, 1, 1141 },
+{ 0x1, 149, 0, 1140 },
+{ 0x440, 150, 0, 1127 },
+{ 0x240, 150, 0, 1128 },
+{ 0x140, 150, 0, 1129 },
+{ 0xc0, 150, 1, 1131 },
+{ 0x40, 150, 0, 1130 },
+{ 0x220, 150, 0, 1142 },
+{ 0x120, 150, 0, 1143 },
+{ 0xa0, 150, 0, 1144 },
+{ 0x60, 150, 1, 1146 },
+{ 0x20, 150, 0, 1145 },
+{ 0x10, 150, 0, 1147 },
+{ 0x8, 150, 0, 1148 },
+{ 0x4, 150, 0, 1149 },
+{ 0x1, 150, 1, 1151 },
+{ 0x2, 150, 0, 1150 },
+{ 0x8, 172, 0, 1152 },
+{ 0x4, 172, 0, 1153 },
+{ 0x2, 172, 0, 1154 },
+{ 0x1, 172, 1, 1156 },
+{ 0x1, 173, 0, 1155 },
+{ 0x220, 144, 0, 1157 },
+{ 0x120, 144, 0, 1158 },
+{ 0xa0, 144, 0, 1159 },
+{ 0x60, 144, 1, 1161 },
+{ 0x4, 145, 0, 1160 },
+{ 0x110, 144, 0, 1167 },
+{ 0x90, 144, 0, 1168 },
+{ 0x50, 144, 0, 1169 },
+{ 0x30, 144, 1, 1171 },
+{ 0x2, 145, 0, 1170 },
+{ 0x8, 144, 0, 1172 },
+{ 0x4, 144, 0, 1173 },
+{ 0x2, 144, 0, 1174 },
+{ 0x1, 144, 1, 1176 },
+{ 0x1, 145, 0, 1175 },
+{ 0x440, 190, 0, 1162 },
+{ 0x240, 190, 0, 1163 },
+{ 0x140, 190, 0, 1164 },
+{ 0xc0, 190, 1, 1166 },
+{ 0x40, 190, 0, 1165 },
+{ 0x220, 190, 0, 1177 },
+{ 0x120, 190, 0, 1178 },
+{ 0xa0, 190, 0, 1179 },
+{ 0x60, 190, 1, 1181 },
+{ 0x20, 190, 0, 1180 },
+{ 0x10, 190, 0, 1182 },
+{ 0x8, 190, 0, 1183 },
+{ 0x4, 190, 0, 1184 },
+{ 0x1, 190, 1, 1186 },
+{ 0x2, 190, 0, 1185 },
+{ 0x8, 164, 0, 1187 },
+{ 0x4, 164, 0, 1188 },
+{ 0x2, 164, 0, 1189 },
+{ 0x1, 164, 1, 1191 },
+{ 0x1, 165, 0, 1190 },
+{ 0x10, 171, 0, 1192 },
+{ 0x8, 171, 0, 1193 },
+{ 0x4, 171, 0, 1194 },
+{ 0x1, 171, 1, 1196 },
+{ 0x2, 171, 0, 1195 },
+{ 0x220, 135, 0, 1197 },
+{ 0x120, 135, 0, 1198 },
+{ 0xa0, 135, 0, 1199 },
+{ 0x60, 135, 1, 1201 },
+{ 0x4, 136, 0, 1200 },
+{ 0x110, 135, 0, 1222 },
+{ 0x90, 135, 0, 1223 },
+{ 0x50, 135, 0, 1224 },
+{ 0x30, 135, 1, 1226 },
+{ 0x2, 136, 0, 1225 },
+{ 0x8, 135, 0, 1227 },
+{ 0x4, 135, 0, 1228 },
+{ 0x2, 135, 0, 1229 },
+{ 0x1, 135, 1, 1231 },
+{ 0x1, 136, 0, 1230 },
+{ 0x440, 143, 0, 1202 },
+{ 0x240, 143, 0, 1203 },
+{ 0x140, 143, 0, 1204 },
+{ 0xc0, 143, 1, 1206 },
+{ 0x40, 143, 0, 1205 },
+{ 0x220, 143, 0, 1232 },
+{ 0x120, 143, 0, 1233 },
+{ 0xa0, 143, 0, 1234 },
+{ 0x60, 143, 1, 1236 },
+{ 0x20, 143, 0, 1235 },
+{ 0x10, 143, 0, 1237 },
+{ 0x8, 143, 0, 1238 },
+{ 0x4, 143, 0, 1239 },
+{ 0x1, 143, 1, 1241 },
+{ 0x2, 143, 0, 1240 },
+{ 0x440, 106, 0, 1207 },
+{ 0x240, 106, 0, 1208 },
+{ 0x140, 106, 0, 1209 },
+{ 0xc0, 106, 1, 1211 },
+{ 0x40, 106, 0, 1210 },
+{ 0x220, 106, 0, 1242 },
+{ 0x120, 106, 0, 1243 },
+{ 0xa0, 106, 0, 1244 },
+{ 0x60, 106, 1, 1246 },
+{ 0x20, 106, 0, 1245 },
+{ 0x10, 106, 0, 1247 },
+{ 0x8, 106, 0, 1248 },
+{ 0x1, 106, 1, 1251 },
+{ 0x2, 106, 0, 1250 },
+{ 0x440, 151, 1, 1217 },
+{ 0x441, 131, 0, 1212 },
+{ 0x240, 151, 1, 1218 },
+{ 0x241, 131, 0, 1213 },
+{ 0x140, 151, 1, 1219 },
+{ 0x141, 131, 0, 1214 },
+{ 0xc0, 151, 1, 1221 },
+{ 0x40, 151, 1, 1220 },
+{ 0xc1, 131, 1, 1216 },
+{ 0x41, 131, 0, 1215 },
+{ 0x220, 151, 1, 1262 },
+{ 0x221, 131, 0, 1252 },
+{ 0x120, 151, 1, 1263 },
+{ 0x121, 131, 0, 1253 },
+{ 0xa0, 151, 1, 1264 },
+{ 0xa1, 131, 0, 1254 },
+{ 0x60, 151, 1, 1266 },
+{ 0x20, 151, 1, 1265 },
+{ 0x61, 131, 1, 1256 },
+{ 0x21, 131, 0, 1255 },
+{ 0x10, 151, 1, 1267 },
+{ 0x11, 131, 0, 1257 },
+{ 0x8, 151, 1, 1268 },
+{ 0x9, 131, 0, 1258 },
+{ 0x4, 151, 1, 1269 },
+{ 0x5, 131, 0, 1259 },
+{ 0x1, 151, 1, 1271 },
+{ 0x2, 151, 1, 1270 },
+{ 0x3, 131, 1, 1261 },
+{ 0x1, 131, 0, 1260 },
+{ 0x1, 116, 1, 1275 },
+{ 0x1, 117, 0, 1274 },
+{ 0x3, 116, 1, 1273 },
+{ 0x3, 117, 0, 1272 },
+{ 0x1108, 120, 1, 1356 },
+{ 0x1108, 124, 0, 1276 },
+{ 0x908, 120, 1, 1357 },
+{ 0x908, 124, 0, 1277 },
+{ 0x508, 120, 1, 1358 },
+{ 0x508, 124, 0, 1278 },
+{ 0x308, 120, 1, 1360 },
+{ 0x18, 121, 1, 1359 },
+{ 0x308, 124, 1, 1280 },
+{ 0x18, 125, 0, 1279 },
+{ 0x88, 120, 1, 1376 },
+{ 0x88, 124, 0, 1316 },
+{ 0x48, 120, 1, 1377 },
+{ 0x48, 124, 0, 1317 },
+{ 0x28, 120, 1, 1378 },
+{ 0x28, 124, 0, 1318 },
+{ 0x18, 120, 1, 1380 },
+{ 0x8, 121, 1, 1379 },
+{ 0x18, 124, 1, 1320 },
+{ 0x8, 125, 0, 1319 },
+{ 0x884, 120, 1, 1361 },
+{ 0x442, 122, 1, 1306 },
+{ 0x884, 124, 1, 1291 },
+{ 0x442, 126, 0, 1281 },
+{ 0x484, 120, 1, 1362 },
+{ 0x242, 122, 1, 1307 },
+{ 0x484, 124, 1, 1292 },
+{ 0x242, 126, 0, 1282 },
+{ 0x284, 120, 1, 1363 },
+{ 0x142, 122, 1, 1308 },
+{ 0x284, 124, 1, 1293 },
+{ 0x142, 126, 0, 1283 },
+{ 0x184, 120, 1, 1365 },
+{ 0xc, 121, 1, 1364 },
+{ 0xc2, 122, 1, 1310 },
+{ 0x6, 123, 1, 1309 },
+{ 0x184, 124, 1, 1295 },
+{ 0xc, 125, 1, 1294 },
+{ 0xc2, 126, 1, 1285 },
+{ 0x6, 127, 0, 1284 },
+{ 0x44, 120, 1, 1381 },
+{ 0x22, 122, 1, 1346 },
+{ 0x44, 124, 1, 1331 },
+{ 0x22, 126, 0, 1321 },
+{ 0x24, 120, 1, 1382 },
+{ 0x12, 122, 1, 1347 },
+{ 0x24, 124, 1, 1332 },
+{ 0x12, 126, 0, 1322 },
+{ 0x14, 120, 1, 1383 },
+{ 0xa, 122, 1, 1348 },
+{ 0x14, 124, 1, 1333 },
+{ 0xa, 126, 0, 1323 },
+{ 0xc, 120, 1, 1385 },
+{ 0x4, 121, 1, 1384 },
+{ 0x6, 122, 1, 1350 },
+{ 0x2, 123, 1, 1349 },
+{ 0xc, 124, 1, 1335 },
+{ 0x4, 125, 1, 1334 },
+{ 0x6, 126, 1, 1325 },
+{ 0x2, 127, 0, 1324 },
+{ 0x442, 120, 1, 1366 },
+{ 0x221, 122, 1, 1311 },
+{ 0x442, 124, 1, 1296 },
+{ 0x221, 126, 0, 1286 },
+{ 0x242, 120, 1, 1367 },
+{ 0x121, 122, 1, 1312 },
+{ 0x242, 124, 1, 1297 },
+{ 0x121, 126, 0, 1287 },
+{ 0x142, 120, 1, 1368 },
+{ 0xa1, 122, 1, 1313 },
+{ 0x142, 124, 1, 1298 },
+{ 0xa1, 126, 0, 1288 },
+{ 0xc2, 120, 1, 1370 },
+{ 0x6, 121, 1, 1369 },
+{ 0x61, 122, 1, 1315 },
+{ 0x3, 123, 1, 1314 },
+{ 0xc2, 124, 1, 1300 },
+{ 0x6, 125, 1, 1299 },
+{ 0x61, 126, 1, 1290 },
+{ 0x3, 127, 0, 1289 },
+{ 0x22, 120, 1, 1386 },
+{ 0x11, 122, 1, 1351 },
+{ 0x22, 124, 1, 1336 },
+{ 0x11, 126, 0, 1326 },
+{ 0x12, 120, 1, 1387 },
+{ 0x9, 122, 1, 1352 },
+{ 0x12, 124, 1, 1337 },
+{ 0x9, 126, 0, 1327 },
+{ 0xa, 120, 1, 1388 },
+{ 0x5, 122, 1, 1353 },
+{ 0xa, 124, 1, 1338 },
+{ 0x5, 126, 0, 1328 },
+{ 0x6, 120, 1, 1390 },
+{ 0x2, 121, 1, 1389 },
+{ 0x3, 122, 1, 1355 },
+{ 0x1, 123, 1, 1354 },
+{ 0x6, 124, 1, 1340 },
+{ 0x2, 125, 1, 1339 },
+{ 0x3, 126, 1, 1330 },
+{ 0x1, 127, 0, 1329 },
+{ 0x221, 120, 1, 1371 },
+{ 0x221, 124, 0, 1301 },
+{ 0x121, 120, 1, 1372 },
+{ 0x121, 124, 0, 1302 },
+{ 0xa1, 120, 1, 1373 },
+{ 0xa1, 124, 0, 1303 },
+{ 0x61, 120, 1, 1375 },
+{ 0x3, 121, 1, 1374 },
+{ 0x61, 124, 1, 1305 },
+{ 0x3, 125, 0, 1304 },
+{ 0x11, 120, 1, 1391 },
+{ 0x11, 124, 0, 1341 },
+{ 0x9, 120, 1, 1392 },
+{ 0x9, 124, 0, 1342 },
+{ 0x5, 120, 1, 1393 },
+{ 0x5, 124, 0, 1343 },
+{ 0x3, 120, 1, 1395 },
+{ 0x1, 121, 1, 1394 },
+{ 0x3, 124, 1, 1345 },
+{ 0x1, 125, 0, 1344 },
+{ 0x442, 162, 0, 1396 },
+{ 0x242, 162, 0, 1397 },
+{ 0x142, 162, 0, 1398 },
+{ 0xc2, 162, 1, 1400 },
+{ 0x6, 163, 1, 1399 },
+{ 0x1, 381, 0, 921 },
+{ 0x22, 162, 0, 1406 },
+{ 0x12, 162, 0, 1407 },
+{ 0xa, 162, 0, 1408 },
+{ 0x6, 162, 1, 1410 },
+{ 0x2, 163, 1, 1409 },
+{ 0x2, 315, 0, 950 },
+{ 0x221, 162, 0, 1401 },
+{ 0x121, 162, 0, 1402 },
+{ 0xa1, 162, 0, 1403 },
+{ 0x61, 162, 1, 1405 },
+{ 0x3, 163, 1, 1404 },
+{ 0x1, 377, 0, 922 },
+{ 0x11, 162, 0, 1411 },
+{ 0x9, 162, 0, 1412 },
+{ 0x5, 162, 0, 1413 },
+{ 0x3, 162, 1, 1415 },
+{ 0x1, 163, 1, 1414 },
+{ 0x1, 315, 0, 951 },
+{ 0x4, 168, 0, 1416 },
+{ 0x1, 168, 0, 1418 },
+{ 0x1, 175, 0, 1419 },
+{ 0x1, 174, 1, 1420 },
+{ 0x2, 168, 0, 1417 },
+{ 0x1, 153, 0, 1421 },
+{ 0x880, 159, 0, 1422 },
+{ 0x480, 159, 0, 1423 },
+{ 0x280, 159, 0, 1424 },
+{ 0x180, 159, 1, 1426 },
+{ 0x80, 160, 0, 1425 },
+{ 0x440, 159, 1, 1437 },
+{ 0x88, 161, 0, 1427 },
+{ 0x240, 159, 1, 1438 },
+{ 0x48, 161, 0, 1428 },
+{ 0x140, 159, 1, 1439 },
+{ 0x28, 161, 0, 1429 },
+{ 0xc0, 159, 1, 1441 },
+{ 0x40, 160, 1, 1440 },
+{ 0x18, 161, 1, 1431 },
+{ 0x8, 161, 0, 1430 },
+{ 0x220, 159, 1, 1442 },
+{ 0x44, 161, 0, 1432 },
+{ 0x120, 159, 1, 1443 },
+{ 0x24, 161, 0, 1433 },
+{ 0xa0, 159, 1, 1444 },
+{ 0x14, 161, 0, 1434 },
+{ 0x60, 159, 1, 1446 },
+{ 0x20, 160, 1, 1445 },
+{ 0xc, 161, 1, 1436 },
+{ 0x4, 161, 0, 1435 },
+{ 0x110, 159, 0, 1447 },
+{ 0x90, 159, 0, 1448 },
+{ 0x50, 159, 0, 1449 },
+{ 0x30, 159, 1, 1451 },
+{ 0x10, 160, 1, 1450 },
+{ 0x1, 333, 0, 915 },
+{ 0x88, 159, 0, 1452 },
+{ 0x48, 159, 0, 1453 },
+{ 0x28, 159, 0, 1454 },
+{ 0x18, 159, 1, 1456 },
+{ 0x8, 160, 1, 1455 },
+{ 0xc, 316, 0, 947 },
+{ 0x44, 159, 1, 1467 },
+{ 0x22, 161, 0, 1457 },
+{ 0x24, 159, 1, 1468 },
+{ 0x12, 161, 0, 1458 },
+{ 0x14, 159, 1, 1469 },
+{ 0xa, 161, 0, 1459 },
+{ 0xc, 159, 1, 1471 },
+{ 0x4, 160, 1, 1470 },
+{ 0x6, 161, 1, 1461 },
+{ 0x2, 161, 1, 1460 },
+{ 0x6, 316, 0, 948 },
+{ 0x22, 159, 1, 1472 },
+{ 0x11, 161, 0, 1462 },
+{ 0x12, 159, 1, 1473 },
+{ 0x9, 161, 0, 1463 },
+{ 0xa, 159, 1, 1474 },
+{ 0x5, 161, 0, 1464 },
+{ 0x6, 159, 1, 1476 },
+{ 0x2, 160, 1, 1475 },
+{ 0x3, 161, 1, 1466 },
+{ 0x1, 161, 1, 1465 },
+{ 0x3, 316, 0, 949 },
+{ 0x11, 159, 0, 1477 },
+{ 0x9, 159, 0, 1478 },
+{ 0x5, 159, 0, 1479 },
+{ 0x3, 159, 1, 1481 },
+{ 0x1, 160, 1, 1480 },
+{ 0x1, 113, 0, 916 },
+{ 0x8, 155, 0, 1482 },
+{ 0x4, 155, 0, 1483 },
+{ 0x2, 155, 0, 1484 },
+{ 0x1, 155, 1, 1486 },
+{ 0x1, 156, 1, 1485 },
+{ 0x1, 280, 0, 928 },
+{ 0x8, 157, 0, 1487 },
+{ 0x4, 157, 0, 1488 },
+{ 0x2, 157, 0, 1489 },
+{ 0x1, 157, 1, 1491 },
+{ 0x1, 158, 1, 1490 },
+{ 0x1, 279, 0, 929 },
+{ 0x8, 166, 0, 1492 },
+{ 0x4, 166, 0, 1493 },
+{ 0x2, 166, 0, 1494 },
+{ 0x1, 166, 1, 1496 },
+{ 0x1, 167, 1, 1495 },
+{ 0x1, 278, 0, 930 },
+{ 0x8, 169, 0, 1497 },
+{ 0x4, 169, 0, 1498 },
+{ 0x2, 169, 0, 1499 },
+{ 0x1, 169, 1, 1501 },
+{ 0x1, 170, 1, 1500 },
+{ 0x1, 277, 0, 931 },
+{ 0x8, 181, 0, 1502 },
+{ 0x4, 181, 0, 1503 },
+{ 0x2, 181, 0, 1504 },
+{ 0x1, 181, 1, 1506 },
+{ 0x1, 182, 0, 1505 },
+{ 0x8, 179, 0, 1507 },
+{ 0x4, 179, 0, 1508 },
+{ 0x2, 179, 0, 1509 },
+{ 0x1, 179, 1, 1511 },
+{ 0x1, 180, 0, 1510 },
+{ 0x1, 288, 0, 1512 },
+{ 0x1, 32, 0, 1513 },
+{ 0x8, 114, 0, 1514 },
+{ 0x4, 114, 0, 1515 },
+{ 0x2, 114, 0, 1516 },
+{ 0x1, 114, 1, 1518 },
+{ 0x1, 115, 0, 1517 },
+{ 0x8, 118, 0, 1519 },
+{ 0x4, 118, 0, 1520 },
+{ 0x2, 118, 0, 1521 },
+{ 0x1, 118, 1, 1523 },
+{ 0x1, 119, 0, 1522 },
+{ 0x8, 188, 0, 1524 },
+{ 0x4, 188, 0, 1525 },
+{ 0x2, 188, 0, 1526 },
+{ 0x1, 188, 1, 1528 },
+{ 0x1, 189, 0, 1527 },
+{ 0x1, 130, 0, 1529 },
+{ 0x442, 128, 0, 1530 },
+{ 0x242, 128, 0, 1531 },
+{ 0x142, 128, 0, 1532 },
+{ 0xc2, 128, 1, 1534 },
+{ 0x6, 129, 0, 1533 },
+{ 0x22, 128, 0, 1540 },
+{ 0x12, 128, 0, 1541 },
+{ 0xa, 128, 0, 1542 },
+{ 0x6, 128, 1, 1544 },
+{ 0x2, 129, 1, 1543 },
+{ 0x1, 98, 0, 1071 },
+{ 0x221, 128, 0, 1535 },
+{ 0x121, 128, 0, 1536 },
+{ 0xa1, 128, 0, 1537 },
+{ 0x61, 128, 1, 1539 },
+{ 0x3, 129, 0, 1538 },
+{ 0x11, 128, 0, 1545 },
+{ 0x9, 128, 0, 1546 },
+{ 0x5, 128, 0, 1547 },
+{ 0x3, 128, 1, 1549 },
+{ 0x1, 129, 1, 1548 },
+{ 0x1, 97, 0, 1072 },
+{ 0x1, 194, 0, 1550 },
+{ 0x1, 152, 0, 1551 },
+{ 0x1, 112, 0, 1552 },
+{ 0x1, 111, 0, 1553 },
+{ 0x4, 191, 0, 1554 },
+{ 0x2, 191, 0, 1555 },
+{ 0x1, 191, 0, 1556 },
+{ 0x1, 154, 0, 1557 },
+{ 0x2, 192, 0, 1558 },
+{ 0x1, 192, 0, 1559 },
+{ 0x4, 142, 0, 1560 },
+{ 0x2, 142, 0, 1561 },
+{ 0x1, 142, 0, 1562 },
+{ 0x4, 139, 0, 1563 },
+{ 0x1, 147, 0, 1566 },
+{ 0x1, 146, 1, 1567 },
+{ 0x2, 139, 0, 1564 },
+{ 0x1, 105, 0, 1568 },
+{ 0x1, 246, 1, 1569 },
+{ 0x1, 139, 0, 1565 },
+{ 0x8, 107, 0, 1570 },
+{ 0x4, 107, 0, 1571 },
+{ 0x2, 107, 0, 1572 },
+{ 0x1, 107, 1, 1574 },
+{ 0x1, 108, 0, 1573 },
+{ 0x8, 109, 0, 1575 },
+{ 0x4, 109, 0, 1576 },
+{ 0x2, 109, 0, 1577 },
+{ 0x1, 109, 1, 1579 },
+{ 0x1, 110, 1, 1578 },
+{ 0x1, 372, 0, 1073 },
+{ 0x8, 137, 0, 1580 },
+{ 0x4, 137, 0, 1581 },
+{ 0x2, 137, 0, 1582 },
+{ 0x1, 137, 1, 1584 },
+{ 0x1, 138, 1, 1583 },
+{ 0x1, 371, 0, 1074 },
+{ 0x8, 140, 0, 1585 },
+{ 0x4, 140, 0, 1586 },
+{ 0x2, 140, 0, 1587 },
+{ 0x1, 140, 1, 1589 },
+{ 0x1, 141, 1, 1588 },
+{ 0x1, 370, 0, 1075 },
+{ 0x8, 185, 0, 1590 },
+{ 0x4, 185, 0, 1591 },
+{ 0x2, 185, 0, 1592 },
+{ 0x1, 185, 1, 1594 },
+{ 0x1, 186, 0, 1593 },
+{ 0x8, 183, 0, 1595 },
+{ 0x4, 183, 0, 1596 },
+{ 0x2, 183, 0, 1597 },
+{ 0x1, 183, 1, 1599 },
+{ 0x1, 184, 0, 1598 },
+{ 0x8, 43, 0, 1604 },
+{ 0x18, 43, 0, 1600 },
+{ 0x4, 43, 0, 1605 },
+{ 0xc, 43, 0, 1601 },
+{ 0x2, 43, 0, 1606 },
+{ 0x6, 43, 0, 1602 },
+{ 0x1, 43, 0, 1607 },
+{ 0x3, 43, 0, 1603 },
+{ 0x51, 29, 0, 1609 },
+{ 0xd1, 29, 0, 1608 },
+{ 0x31, 29, 1, 1619 },
+{ 0x11, 30, 0, 1618 },
+{ 0x71, 29, 1, 1617 },
+{ 0x31, 30, 0, 1616 },
+{ 0x29, 29, 0, 1611 },
+{ 0x69, 29, 0, 1610 },
+{ 0x19, 29, 1, 1623 },
+{ 0x9, 30, 0, 1622 },
+{ 0x39, 29, 1, 1621 },
+{ 0x19, 30, 0, 1620 },
+{ 0x15, 29, 0, 1613 },
+{ 0x35, 29, 0, 1612 },
+{ 0xd, 29, 1, 1627 },
+{ 0x5, 30, 0, 1626 },
+{ 0x1d, 29, 1, 1625 },
+{ 0xd, 30, 0, 1624 },
+{ 0xb, 29, 0, 1615 },
+{ 0x1b, 29, 0, 1614 },
+{ 0x7, 29, 1, 1631 },
+{ 0x3, 30, 0, 1630 },
+{ 0xf, 29, 1, 1629 },
+{ 0x7, 30, 0, 1628 },
+{ 0xa2, 27, 0, 1633 },
+{ 0x1a2, 27, 0, 1632 },
+{ 0x62, 27, 1, 1643 },
+{ 0x22, 28, 0, 1642 },
+{ 0xe2, 27, 1, 1641 },
+{ 0x62, 28, 0, 1640 },
+{ 0x52, 27, 0, 1635 },
+{ 0xd2, 27, 0, 1634 },
+{ 0x32, 27, 1, 1647 },
+{ 0x12, 28, 0, 1646 },
+{ 0x72, 27, 1, 1645 },
+{ 0x32, 28, 0, 1644 },
+{ 0x2a, 27, 0, 1637 },
+{ 0x6a, 27, 0, 1636 },
+{ 0x1a, 27, 1, 1651 },
+{ 0xa, 28, 0, 1650 },
+{ 0x3a, 27, 1, 1649 },
+{ 0x1a, 28, 0, 1648 },
+{ 0x16, 27, 0, 1639 },
+{ 0x36, 27, 0, 1638 },
+{ 0xe, 27, 1, 1655 },
+{ 0x6, 28, 0, 1654 },
+{ 0x1e, 27, 1, 1653 },
+{ 0xe, 28, 0, 1652 },
+{ 0x51, 27, 0, 1657 },
+{ 0xd1, 27, 0, 1656 },
+{ 0x31, 27, 1, 1667 },
+{ 0x11, 28, 0, 1666 },
+{ 0x71, 27, 1, 1665 },
+{ 0x31, 28, 0, 1664 },
+{ 0x29, 27, 0, 1659 },
+{ 0x69, 27, 0, 1658 },
+{ 0x19, 27, 1, 1671 },
+{ 0x9, 28, 0, 1670 },
+{ 0x39, 27, 1, 1669 },
+{ 0x19, 28, 0, 1668 },
+{ 0x15, 27, 0, 1661 },
+{ 0x35, 27, 0, 1660 },
+{ 0xd, 27, 1, 1675 },
+{ 0x5, 28, 0, 1674 },
+{ 0x1d, 27, 1, 1673 },
+{ 0xd, 28, 0, 1672 },
+{ 0xb, 27, 0, 1663 },
+{ 0x1b, 27, 0, 1662 },
+{ 0x7, 27, 1, 1679 },
+{ 0x3, 28, 0, 1678 },
+{ 0xf, 27, 1, 1677 },
+{ 0x7, 28, 0, 1676 },
+{ 0x51, 25, 0, 1681 },
+{ 0xd1, 25, 0, 1680 },
+{ 0x31, 25, 1, 1691 },
+{ 0x11, 26, 0, 1690 },
+{ 0x71, 25, 1, 1689 },
+{ 0x31, 26, 0, 1688 },
+{ 0x29, 25, 0, 1683 },
+{ 0x69, 25, 0, 1682 },
+{ 0x19, 25, 1, 1695 },
+{ 0x9, 26, 0, 1694 },
+{ 0x39, 25, 1, 1693 },
+{ 0x19, 26, 0, 1692 },
+{ 0x15, 25, 0, 1685 },
+{ 0x35, 25, 0, 1684 },
+{ 0xd, 25, 1, 1699 },
+{ 0x5, 26, 0, 1698 },
+{ 0x1d, 25, 1, 1697 },
+{ 0xd, 26, 0, 1696 },
+{ 0xb, 25, 0, 1687 },
+{ 0x1b, 25, 0, 1686 },
+{ 0x7, 25, 1, 1703 },
+{ 0x3, 26, 0, 1702 },
+{ 0xf, 25, 1, 1701 },
+{ 0x7, 26, 0, 1700 },
+{ 0xa2, 23, 0, 1705 },
+{ 0x1a2, 23, 0, 1704 },
+{ 0x62, 23, 1, 1715 },
+{ 0x22, 24, 0, 1714 },
+{ 0xe2, 23, 1, 1713 },
+{ 0x62, 24, 0, 1712 },
+{ 0x52, 23, 0, 1707 },
+{ 0xd2, 23, 0, 1706 },
+{ 0x32, 23, 1, 1719 },
+{ 0x12, 24, 0, 1718 },
+{ 0x72, 23, 1, 1717 },
+{ 0x32, 24, 0, 1716 },
+{ 0x2a, 23, 0, 1709 },
+{ 0x6a, 23, 0, 1708 },
+{ 0x1a, 23, 1, 1723 },
+{ 0xa, 24, 0, 1722 },
+{ 0x3a, 23, 1, 1721 },
+{ 0x1a, 24, 0, 1720 },
+{ 0x16, 23, 0, 1711 },
+{ 0x36, 23, 0, 1710 },
+{ 0xe, 23, 1, 1727 },
+{ 0x6, 24, 0, 1726 },
+{ 0x1e, 23, 1, 1725 },
+{ 0xe, 24, 0, 1724 },
+{ 0x51, 23, 0, 1729 },
+{ 0xd1, 23, 0, 1728 },
+{ 0x31, 23, 1, 1739 },
+{ 0x11, 24, 0, 1738 },
+{ 0x71, 23, 1, 1737 },
+{ 0x31, 24, 0, 1736 },
+{ 0x29, 23, 0, 1731 },
+{ 0x69, 23, 0, 1730 },
+{ 0x19, 23, 1, 1743 },
+{ 0x9, 24, 0, 1742 },
+{ 0x39, 23, 1, 1741 },
+{ 0x19, 24, 0, 1740 },
+{ 0x15, 23, 0, 1733 },
+{ 0x35, 23, 0, 1732 },
+{ 0xd, 23, 1, 1747 },
+{ 0x5, 24, 0, 1746 },
+{ 0x1d, 23, 1, 1745 },
+{ 0xd, 24, 0, 1744 },
+{ 0xb, 23, 0, 1735 },
+{ 0x1b, 23, 0, 1734 },
+{ 0x7, 23, 1, 1751 },
+{ 0x3, 24, 0, 1750 },
+{ 0xf, 23, 1, 1749 },
+{ 0x7, 24, 0, 1748 },
+{ 0x51, 21, 1, 1777 },
+{ 0x50, 21, 0, 1753 },
+{ 0xd1, 21, 1, 1776 },
+{ 0xd0, 21, 0, 1752 },
+{ 0x31, 21, 1, 1787 },
+{ 0x30, 21, 1, 1763 },
+{ 0x11, 22, 1, 1786 },
+{ 0x10, 22, 0, 1762 },
+{ 0x71, 21, 1, 1785 },
+{ 0x70, 21, 1, 1761 },
+{ 0x31, 22, 1, 1784 },
+{ 0x30, 22, 0, 1760 },
+{ 0x29, 21, 1, 1779 },
+{ 0x28, 21, 0, 1755 },
+{ 0x69, 21, 1, 1778 },
+{ 0x68, 21, 0, 1754 },
+{ 0x19, 21, 1, 1791 },
+{ 0x18, 21, 1, 1767 },
+{ 0x9, 22, 1, 1790 },
+{ 0x8, 22, 0, 1766 },
+{ 0x39, 21, 1, 1789 },
+{ 0x38, 21, 1, 1765 },
+{ 0x19, 22, 1, 1788 },
+{ 0x18, 22, 0, 1764 },
+{ 0x15, 21, 1, 1781 },
+{ 0x14, 21, 0, 1757 },
+{ 0x35, 21, 1, 1780 },
+{ 0x34, 21, 0, 1756 },
+{ 0xd, 21, 1, 1795 },
+{ 0xc, 21, 1, 1771 },
+{ 0x5, 22, 1, 1794 },
+{ 0x4, 22, 0, 1770 },
+{ 0x1d, 21, 1, 1793 },
+{ 0x1c, 21, 1, 1769 },
+{ 0xd, 22, 1, 1792 },
+{ 0xc, 22, 0, 1768 },
+{ 0xb, 21, 1, 1783 },
+{ 0xa, 21, 0, 1759 },
+{ 0x1b, 21, 1, 1782 },
+{ 0x1a, 21, 0, 1758 },
+{ 0x7, 21, 1, 1799 },
+{ 0x6, 21, 1, 1775 },
+{ 0x3, 22, 1, 1798 },
+{ 0x2, 22, 0, 1774 },
+{ 0xf, 21, 1, 1797 },
+{ 0xe, 21, 1, 1773 },
+{ 0x7, 22, 1, 1796 },
+{ 0x6, 22, 0, 1772 },
+{ 0x8, 20, 0, 1801 },
+{ 0x18, 20, 0, 1800 },
+{ 0x1, 20, 1, 1805 },
+{ 0x2, 20, 0, 1804 },
+{ 0x3, 20, 1, 1803 },
+{ 0x4, 20, 0, 1802 },
+{ 0x1, 287, 0, 1806 },
+{ 0x14, 42, 0, 1809 },
+{ 0x34, 42, 0, 1807 },
+{ 0xc, 42, 0, 1810 },
+{ 0x1c, 42, 0, 1808 },
+{ 0x2, 42, 0, 1813 },
+{ 0x6, 42, 0, 1811 },
+{ 0x1, 42, 0, 1814 },
+{ 0x3, 42, 0, 1812 },
+{ 0x51, 18, 0, 1816 },
+{ 0xd1, 18, 0, 1815 },
+{ 0x31, 18, 1, 1826 },
+{ 0x11, 19, 0, 1825 },
+{ 0x71, 18, 1, 1824 },
+{ 0x31, 19, 0, 1823 },
+{ 0x29, 18, 0, 1818 },
+{ 0x69, 18, 0, 1817 },
+{ 0x19, 18, 1, 1830 },
+{ 0x9, 19, 0, 1829 },
+{ 0x39, 18, 1, 1828 },
+{ 0x19, 19, 0, 1827 },
+{ 0x15, 18, 0, 1820 },
+{ 0x35, 18, 0, 1819 },
+{ 0xd, 18, 1, 1834 },
+{ 0x5, 19, 0, 1833 },
+{ 0x1d, 18, 1, 1832 },
+{ 0xd, 19, 0, 1831 },
+{ 0xb, 18, 0, 1822 },
+{ 0x1b, 18, 0, 1821 },
+{ 0x7, 18, 1, 1838 },
+{ 0x3, 19, 0, 1837 },
+{ 0xf, 18, 1, 1836 },
+{ 0x7, 19, 0, 1835 },
+{ 0x1, 31, 0, 1839 },
+{ 0x1, 103, 0, 1840 },
+{ 0x2, 44, 0, 1841 },
+{ 0x1, 44, 0, 1842 },
+{ 0x1, 335, 0, 1843 },
+{ 0x2, 51, 0, 1844 },
+{ 0x1, 51, 0, 1845 },
+{ 0x1, 96, 0, 1846 },
+{ 0x51, 16, 0, 1848 },
+{ 0xd1, 16, 0, 1847 },
+{ 0x31, 16, 1, 1858 },
+{ 0x11, 17, 0, 1857 },
+{ 0x71, 16, 1, 1856 },
+{ 0x31, 17, 0, 1855 },
+{ 0x29, 16, 0, 1850 },
+{ 0x69, 16, 0, 1849 },
+{ 0x19, 16, 1, 1862 },
+{ 0x9, 17, 0, 1861 },
+{ 0x39, 16, 1, 1860 },
+{ 0x19, 17, 0, 1859 },
+{ 0x15, 16, 0, 1852 },
+{ 0x35, 16, 0, 1851 },
+{ 0xd, 16, 1, 1866 },
+{ 0x5, 17, 0, 1865 },
+{ 0x1d, 16, 1, 1864 },
+{ 0xd, 17, 0, 1863 },
+{ 0xb, 16, 0, 1854 },
+{ 0x1b, 16, 0, 1853 },
+{ 0x7, 16, 1, 1870 },
+{ 0x3, 17, 0, 1869 },
+{ 0xf, 16, 1, 1868 },
+{ 0x7, 17, 0, 1867 },
+{ 0xa20, 14, 0, 1872 },
+{ 0x1a20, 14, 0, 1871 },
+{ 0x620, 14, 1, 1882 },
+{ 0x220, 15, 0, 1881 },
+{ 0xe20, 14, 1, 1880 },
+{ 0x620, 15, 0, 1879 },
+{ 0x520, 14, 0, 1874 },
+{ 0xd20, 14, 0, 1873 },
+{ 0x320, 14, 1, 1886 },
+{ 0x120, 15, 0, 1885 },
+{ 0x720, 14, 1, 1884 },
+{ 0x320, 15, 0, 1883 },
+{ 0x2a0, 14, 0, 1876 },
+{ 0x6a0, 14, 0, 1875 },
+{ 0x1a0, 14, 1, 1890 },
+{ 0xa0, 15, 0, 1889 },
+{ 0x3a0, 14, 1, 1888 },
+{ 0x1a0, 15, 0, 1887 },
+{ 0x160, 14, 0, 1878 },
+{ 0x360, 14, 0, 1877 },
+{ 0xe0, 14, 1, 1894 },
+{ 0x60, 15, 0, 1893 },
+{ 0x1e0, 14, 1, 1892 },
+{ 0xe0, 15, 0, 1891 },
+{ 0x51, 14, 1, 1920 },
+{ 0x50, 14, 0, 1896 },
+{ 0xd1, 14, 1, 1919 },
+{ 0xd0, 14, 0, 1895 },
+{ 0x31, 14, 1, 1930 },
+{ 0x30, 14, 1, 1906 },
+{ 0x11, 15, 1, 1929 },
+{ 0x10, 15, 0, 1905 },
+{ 0x71, 14, 1, 1928 },
+{ 0x70, 14, 1, 1904 },
+{ 0x31, 15, 1, 1927 },
+{ 0x30, 15, 0, 1903 },
+{ 0x29, 14, 1, 1922 },
+{ 0x28, 14, 0, 1898 },
+{ 0x69, 14, 1, 1921 },
+{ 0x68, 14, 0, 1897 },
+{ 0x19, 14, 1, 1934 },
+{ 0x18, 14, 1, 1910 },
+{ 0x9, 15, 1, 1933 },
+{ 0x8, 15, 0, 1909 },
+{ 0x39, 14, 1, 1932 },
+{ 0x38, 14, 1, 1908 },
+{ 0x19, 15, 1, 1931 },
+{ 0x18, 15, 0, 1907 },
+{ 0x15, 14, 1, 1924 },
+{ 0x14, 14, 0, 1900 },
+{ 0x35, 14, 1, 1923 },
+{ 0x34, 14, 0, 1899 },
+{ 0xd, 14, 1, 1938 },
+{ 0xc, 14, 1, 1914 },
+{ 0x5, 15, 1, 1937 },
+{ 0x4, 15, 0, 1913 },
+{ 0x1d, 14, 1, 1936 },
+{ 0x1c, 14, 1, 1912 },
+{ 0xd, 15, 1, 1935 },
+{ 0xc, 15, 0, 1911 },
+{ 0xb, 14, 1, 1926 },
+{ 0xa, 14, 0, 1902 },
+{ 0x1b, 14, 1, 1925 },
+{ 0x1a, 14, 0, 1901 },
+{ 0x7, 14, 1, 1942 },
+{ 0x6, 14, 1, 1918 },
+{ 0x3, 15, 1, 1941 },
+{ 0x2, 15, 0, 1917 },
+{ 0xf, 14, 1, 1940 },
+{ 0xe, 14, 1, 1916 },
+{ 0x7, 15, 1, 1939 },
+{ 0x6, 15, 0, 1915 },
+{ 0x8, 13, 0, 1944 },
+{ 0x18, 13, 0, 1943 },
+{ 0x1, 13, 1, 1948 },
+{ 0x2, 13, 0, 1947 },
+{ 0x3, 13, 1, 1946 },
+{ 0x4, 13, 0, 1945 },
+{ 0x1, 84, 1, 2024 },
+{ 0x1, 85, 1, 2023 },
+{ 0x1, 86, 1, 2022 },
+{ 0x1, 87, 1, 2021 },
+{ 0x39, 40, 1, 21 },
+{ 0x19, 41, 0, 20 },
+{ 0x3, 84, 1, 2020 },
+{ 0x3, 85, 1, 2019 },
+{ 0x3, 86, 1, 2018 },
+{ 0x3, 87, 1, 2017 },
+{ 0x69, 40, 0, 10 },
+{ 0x14, 79, 1, 2014 },
+{ 0xa, 83, 1, 2013 },
+{ 0xd1, 40, 0, 8 },
+{ 0x34, 79, 1, 1950 },
+{ 0xe, 91, 0, 1949 },
+{ 0xc, 79, 1, 2094 },
+{ 0x6, 83, 0, 2093 },
+{ 0x2, 79, 1, 1956 },
+{ 0x2, 82, 0, 1955 },
+{ 0x12, 79, 1, 1954 },
+{ 0x6, 82, 0, 1953 },
+{ 0xa, 79, 1, 2016 },
+{ 0x5, 83, 1, 2015 },
+{ 0x71, 40, 1, 17 },
+{ 0x31, 41, 0, 16 },
+{ 0x1a, 79, 1, 1952 },
+{ 0x7, 91, 0, 1951 },
+{ 0x6, 79, 1, 2096 },
+{ 0x3, 83, 0, 2095 },
+{ 0x1, 79, 1, 2104 },
+{ 0x1, 80, 1, 2103 },
+{ 0x1, 81, 1, 2102 },
+{ 0x1, 82, 0, 2101 },
+{ 0x3, 79, 1, 2100 },
+{ 0x3, 80, 1, 2099 },
+{ 0x3, 81, 1, 2098 },
+{ 0x3, 82, 0, 2097 },
+{ 0x8, 60, 1, 2036 },
+{ 0x2, 63, 1, 2033 },
+{ 0x1, 65, 1, 2035 },
+{ 0x1, 66, 1, 2034 },
+{ 0xf, 40, 1, 29 },
+{ 0x7, 41, 0, 28 },
+{ 0x18, 60, 1, 2032 },
+{ 0x6, 63, 1, 2029 },
+{ 0x3, 65, 1, 2031 },
+{ 0x3, 66, 1, 2030 },
+{ 0x1b, 40, 0, 14 },
+{ 0x14, 60, 1, 2026 },
+{ 0xa, 64, 1, 2025 },
+{ 0x35, 40, 0, 12 },
+{ 0x34, 60, 1, 1958 },
+{ 0xe, 70, 0, 1957 },
+{ 0xc, 60, 1, 2106 },
+{ 0x6, 64, 0, 2105 },
+{ 0x2, 60, 1, 1964 },
+{ 0x4, 63, 0, 1963 },
+{ 0x12, 60, 1, 1962 },
+{ 0xc, 63, 0, 1961 },
+{ 0xa, 60, 1, 2028 },
+{ 0x5, 64, 1, 2027 },
+{ 0x1d, 40, 1, 25 },
+{ 0xd, 41, 0, 24 },
+{ 0x1a, 60, 1, 1960 },
+{ 0x7, 70, 0, 1959 },
+{ 0x6, 60, 1, 2108 },
+{ 0x3, 64, 0, 2107 },
+{ 0x1, 60, 1, 2116 },
+{ 0x1, 61, 1, 2115 },
+{ 0x1, 62, 1, 2114 },
+{ 0x1, 63, 0, 2113 },
+{ 0x3, 60, 1, 2112 },
+{ 0x3, 61, 1, 2111 },
+{ 0x3, 62, 1, 2110 },
+{ 0x3, 63, 0, 2109 },
+{ 0x28, 76, 1, 2040 },
+{ 0x44, 77, 1, 2037 },
+{ 0x88, 77, 1, 2039 },
+{ 0x28, 78, 0, 2038 },
+{ 0x68, 76, 1, 1968 },
+{ 0x188, 77, 1, 1967 },
+{ 0x38, 89, 1, 1966 },
+{ 0x38, 90, 0, 1965 },
+{ 0x18, 76, 1, 2120 },
+{ 0x14, 77, 1, 2117 },
+{ 0x28, 77, 1, 2119 },
+{ 0x18, 78, 0, 2118 },
+{ 0x14, 76, 1, 2044 },
+{ 0x24, 77, 1, 2043 },
+{ 0x48, 77, 1, 2041 },
+{ 0x14, 78, 0, 2042 },
+{ 0x34, 76, 1, 1972 },
+{ 0x64, 77, 1, 1971 },
+{ 0x1c, 89, 1, 1970 },
+{ 0x1c, 90, 0, 1969 },
+{ 0xc, 76, 1, 2124 },
+{ 0xc, 77, 1, 2123 },
+{ 0x18, 77, 1, 2121 },
+{ 0xc, 78, 0, 2122 },
+{ 0xa, 76, 1, 2048 },
+{ 0x11, 77, 1, 2045 },
+{ 0x22, 77, 1, 2047 },
+{ 0xa, 78, 0, 2046 },
+{ 0x1a, 76, 1, 1976 },
+{ 0x62, 77, 1, 1975 },
+{ 0xe, 89, 1, 1974 },
+{ 0xe, 90, 0, 1973 },
+{ 0x6, 76, 1, 2128 },
+{ 0x5, 77, 1, 2125 },
+{ 0xa, 77, 1, 2127 },
+{ 0x6, 78, 0, 2126 },
+{ 0x5, 76, 1, 2052 },
+{ 0x9, 77, 1, 2051 },
+{ 0x12, 77, 1, 2049 },
+{ 0x5, 78, 0, 2050 },
+{ 0xd, 76, 1, 1980 },
+{ 0x19, 77, 1, 1979 },
+{ 0x7, 89, 1, 1978 },
+{ 0x7, 90, 0, 1977 },
+{ 0x3, 76, 1, 2132 },
+{ 0x3, 77, 1, 2131 },
+{ 0x6, 77, 1, 2129 },
+{ 0x3, 78, 0, 2130 },
+{ 0x28, 57, 1, 2056 },
+{ 0x44, 58, 1, 2053 },
+{ 0x88, 58, 1, 2055 },
+{ 0x28, 59, 0, 2054 },
+{ 0x68, 57, 1, 1984 },
+{ 0x188, 58, 1, 1983 },
+{ 0x38, 68, 1, 1982 },
+{ 0x38, 69, 0, 1981 },
+{ 0x18, 57, 1, 2136 },
+{ 0x14, 58, 1, 2133 },
+{ 0x28, 58, 1, 2135 },
+{ 0x18, 59, 0, 2134 },
+{ 0x14, 57, 1, 2060 },
+{ 0x24, 58, 1, 2059 },
+{ 0x48, 58, 1, 2057 },
+{ 0x14, 59, 0, 2058 },
+{ 0x34, 57, 1, 1988 },
+{ 0x64, 58, 1, 1987 },
+{ 0x1c, 68, 1, 1986 },
+{ 0x1c, 69, 0, 1985 },
+{ 0xc, 57, 1, 2140 },
+{ 0xc, 58, 1, 2139 },
+{ 0x18, 58, 1, 2137 },
+{ 0xc, 59, 0, 2138 },
+{ 0xa, 57, 1, 2064 },
+{ 0x11, 58, 1, 2061 },
+{ 0x22, 58, 1, 2063 },
+{ 0xa, 59, 0, 2062 },
+{ 0x1a, 57, 1, 1992 },
+{ 0x62, 58, 1, 1991 },
+{ 0xe, 68, 1, 1990 },
+{ 0xe, 69, 0, 1989 },
+{ 0x6, 57, 1, 2144 },
+{ 0x5, 58, 1, 2141 },
+{ 0xa, 58, 1, 2143 },
+{ 0x6, 59, 0, 2142 },
+{ 0x5, 57, 1, 2068 },
+{ 0x9, 58, 1, 2067 },
+{ 0x12, 58, 1, 2065 },
+{ 0x5, 59, 0, 2066 },
+{ 0xd, 57, 1, 1996 },
+{ 0x19, 58, 1, 1995 },
+{ 0x7, 68, 1, 1994 },
+{ 0x7, 69, 0, 1993 },
+{ 0x3, 57, 1, 2148 },
+{ 0x3, 58, 1, 2147 },
+{ 0x6, 58, 1, 2145 },
+{ 0x3, 59, 0, 2146 },
+{ 0x8, 71, 1, 2080 },
+{ 0x2, 72, 1, 2079 },
+{ 0x2, 73, 1, 2078 },
+{ 0x2, 74, 0, 2077 },
+{ 0x18, 71, 1, 2076 },
+{ 0x6, 72, 1, 2075 },
+{ 0x6, 73, 1, 2074 },
+{ 0x6, 74, 0, 2073 },
+{ 0x14, 71, 1, 2070 },
+{ 0xa, 75, 0, 2069 },
+{ 0x34, 71, 1, 1998 },
+{ 0xe, 88, 0, 1997 },
+{ 0xc, 71, 1, 2150 },
+{ 0x6, 75, 0, 2149 },
+{ 0x2, 71, 1, 2004 },
+{ 0x4, 74, 0, 2003 },
+{ 0x12, 71, 1, 2002 },
+{ 0xc, 74, 0, 2001 },
+{ 0xa, 71, 1, 2072 },
+{ 0x5, 75, 0, 2071 },
+{ 0x1a, 71, 1, 2000 },
+{ 0x7, 88, 0, 1999 },
+{ 0x6, 71, 1, 2152 },
+{ 0x3, 75, 0, 2151 },
+{ 0x1, 71, 1, 2160 },
+{ 0x1, 72, 1, 2159 },
+{ 0x1, 73, 1, 2158 },
+{ 0x1, 74, 0, 2157 },
+{ 0x3, 71, 1, 2156 },
+{ 0x3, 72, 1, 2155 },
+{ 0x3, 73, 1, 2154 },
+{ 0x3, 74, 0, 2153 },
+{ 0x8, 52, 1, 2092 },
+{ 0x2, 53, 1, 2091 },
+{ 0x2, 54, 1, 2090 },
+{ 0x2, 55, 0, 2089 },
+{ 0x18, 52, 1, 2088 },
+{ 0x6, 53, 1, 2087 },
+{ 0x6, 54, 1, 2086 },
+{ 0x6, 55, 0, 2085 },
+{ 0x14, 52, 1, 2082 },
+{ 0xa, 56, 0, 2081 },
+{ 0x34, 52, 1, 2006 },
+{ 0xe, 67, 0, 2005 },
+{ 0xc, 52, 1, 2162 },
+{ 0x6, 56, 0, 2161 },
+{ 0x2, 52, 1, 2012 },
+{ 0x4, 55, 0, 2011 },
+{ 0x12, 52, 1, 2010 },
+{ 0xc, 55, 0, 2009 },
+{ 0xa, 52, 1, 2084 },
+{ 0x5, 56, 0, 2083 },
+{ 0x1a, 52, 1, 2008 },
+{ 0x7, 67, 0, 2007 },
+{ 0x6, 52, 1, 2164 },
+{ 0x3, 56, 0, 2163 },
+{ 0x1, 52, 1, 2172 },
+{ 0x1, 53, 1, 2171 },
+{ 0x1, 54, 1, 2170 },
+{ 0x1, 55, 0, 2169 },
+{ 0x3, 52, 1, 2168 },
+{ 0x3, 53, 1, 2167 },
+{ 0x3, 54, 1, 2166 },
+{ 0x3, 55, 0, 2165 },
 { 0x1, 4, 0, 2173 },
-{ 0x1, 362, 0, 2174 },
-{ 0x1, 361, 0, 2175 },
-{ 0x1, 1, 0, 2176 },
-{ 0x1, 0, 0, 2177 },
+{ 0x1, 245, 0, 2174 },
+{ 0x1, 327, 0, 2175 },
+{ 0x1, 322, 0, 2176 },
+{ 0x2, 306, 0, 2177 },
+{ 0x1, 306, 0, 2180 },
+{ 0x2, 305, 0, 2178 },
+{ 0x1, 305, 0, 2181 },
+{ 0x2, 304, 0, 2179 },
+{ 0x1, 304, 0, 2182 },
+{ 0x1, 303, 0, 2183 },
+{ 0x1, 302, 0, 2184 },
+{ 0x2, 301, 0, 2185 },
+{ 0x1, 301, 0, 2187 },
+{ 0x2, 300, 0, 2186 },
+{ 0x1, 300, 0, 2188 },
+{ 0x1, 330, 0, 2195 },
+{ 0x8, 329, 0, 2189 },
+{ 0x4, 329, 0, 2191 },
+{ 0x2, 329, 0, 2193 },
+{ 0x1, 329, 0, 2196 },
+{ 0x8, 328, 0, 2190 },
+{ 0x4, 328, 0, 2192 },
+{ 0x2, 328, 0, 2194 },
+{ 0x1, 328, 0, 2197 },
+{ 0x1, 299, 0, 2204 },
+{ 0x8, 298, 0, 2198 },
+{ 0x4, 298, 0, 2200 },
+{ 0x2, 298, 0, 2202 },
+{ 0x1, 298, 0, 2205 },
+{ 0x8, 297, 0, 2199 },
+{ 0x4, 297, 0, 2201 },
+{ 0x2, 297, 1, 2203 },
+{ 0x4, 106, 0, 1249 },
+{ 0x1, 297, 0, 2206 },
+{ 0x1, 6, 0, 2207 },
+{ 0x1, 7, 0, 2208 },
+{ 0x1, 244, 0, 2209 },
+{ 0x1, 243, 0, 2210 },
+{ 0x1, 393, 0, 2211 },
+{ 0x1, 294, 0, 2212 },
+{ 0x1, 12, 0, 2213 },
+{ 0x1, 10, 0, 2214 },
+{ 0x1, 368, 0, 2215 },
+{ 0x1, 342, 0, 2216 },
+{ 0x1, 341, 0, 2217 },
+{ 0x1, 392, 0, 2218 },
+{ 0x1, 293, 0, 2219 },
+{ 0x1, 11, 0, 2220 },
+{ 0x1, 9, 0, 2221 },
+{ 0x1, 5, 0, 2222 },
+{ 0x1, 367, 0, 2223 },
+{ 0x1, 366, 0, 2224 },
+{ 0x1, 1, 0, 2225 },
+{ 0x1, 0, 0, 2226 },
 };
 
diff --git a/opcodes/ia64-ic.tbl b/opcodes/ia64-ic.tbl
index bae3433..115a276 100644
--- a/opcodes/ia64-ic.tbl
+++ b/opcodes/ia64-ic.tbl
@@ -21,7 +21,7 @@
 fpcmp-s2;	fpcmp[Field(sf)==s2]
 fpcmp-s3;	fpcmp[Field(sf)==s3]
 fr-readers;	IC:fp-arith, IC:fp-non-arith, IC:pr-writers-fp, chk.s[Format in {M21}], getf
-fr-writers;	IC:fp-arith, IC:fp-non-arith\fclass, IC:mem-readers-fp
+fr-writers;	IC:fp-arith, IC:fp-non-arith\fclass, IC:mem-readers-fp, setf
 gr-readers;	IC:gr-readers-writers, IC:mem-readers, IC:mem-writers, chk.s, cmp, cmp4, fc, itc.i, itc.d, itr.i, itr.d, IC:mov-to-AR-gr, IC:mov-to-BR, IC:mov-to-CR, IC:mov-to-IND, IC:mov-from-IND, IC:mov-to-PR-allreg, IC:mov-to-PSR-l, IC:mov-to-PSR-um, IC:probe-all, ptc.e, ptc.g, ptc.ga, ptc.l, ptr.i, ptr.d, setf, tbit, tnat
 gr-readers-writers;	IC:mov-from-IND, add, addl, addp4, adds, and, andcm, IC:czx, dep\dep[Format in {I13}], extr, IC:mem-readers-int, IC:ld-all-postinc, IC:lfetch-postinc, IC:mix, IC:mux, or, IC:pack, IC:padd, IC:pavg, IC:pavgsub, IC:pcmp, IC:pmax, IC:pmin, IC:pmpy, IC:pmpyshr, popcnt, IC:probe-nofault, IC:psad, IC:pshl, IC:pshladd, IC:pshr, IC:pshradd, IC:psub, shl, shladd, shladdp4, shr, shrp, IC:st-postinc, sub, IC:sxt, tak, thash, tpa, ttag, IC:unpack, xor, IC:zxt
 gr-writers;	alloc, dep, getf, IC:gr-readers-writers, IC:mem-readers-int, IC:mov-from-AR, IC:mov-from-BR, IC:mov-from-CR, IC:mov-from-PR, IC:mov-from-PSR, IC:mov-from-PSR-um, IC:mov-ip, movl
diff --git a/opcodes/ia64-opc-a.c b/opcodes/ia64-opc-a.c
index 8df8029..9ca2f1a 100644
--- a/opcodes/ia64-opc-a.c
+++ b/opcodes/ia64-opc-a.c
@@ -167,21 +167,37 @@
     {"cmp4.ne.and",	 A2, OpX2TbTaC (0xc, 1, 0, 1, 1), {P1, P2, R2, R3}},
     {"cmp4.eq.andcm",	 A2, OpX2TbTaC (0xc, 1, 0, 1, 1), {P1, P2, R2, R3}, PSEUDO},
     {"cmp.gt.and",	 A2, OpX2TbTaC (0xc, 0, 1, 0, 0), {P1, P2, GR0, R3}},
+    {"cmp.lt.and",	 A2, OpX2TbTaC (0xc, 0, 1, 0, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.le.andcm",	 A2, OpX2TbTaC (0xc, 0, 1, 0, 0), {P1, P2, GR0, R3}, PSEUDO},
+    {"cmp.ge.andcm",	 A2, OpX2TbTaC (0xc, 0, 1, 0, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.le.and",	 A2, OpX2TbTaC (0xc, 0, 1, 0, 1), {P1, P2, GR0, R3}},
+    {"cmp.ge.and",	 A2, OpX2TbTaC (0xc, 0, 1, 0, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.gt.andcm",	 A2, OpX2TbTaC (0xc, 0, 1, 0, 1), {P1, P2, GR0, R3}, PSEUDO},
+    {"cmp.lt.andcm",	 A2, OpX2TbTaC (0xc, 0, 1, 0, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.ge.and",	 A2, OpX2TbTaC (0xc, 0, 1, 1, 0), {P1, P2, GR0, R3}},
+    {"cmp.le.and",	 A2, OpX2TbTaC (0xc, 0, 1, 1, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.lt.andcm",	 A2, OpX2TbTaC (0xc, 0, 1, 1, 0), {P1, P2, GR0, R3}, PSEUDO},
+    {"cmp.gt.andcm",	 A2, OpX2TbTaC (0xc, 0, 1, 1, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.lt.and",	 A2, OpX2TbTaC (0xc, 0, 1, 1, 1), {P1, P2, GR0, R3}},
+    {"cmp.gt.and",	 A2, OpX2TbTaC (0xc, 0, 1, 1, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.ge.andcm",	 A2, OpX2TbTaC (0xc, 0, 1, 1, 1), {P1, P2, GR0, R3}, PSEUDO},
+    {"cmp.le.andcm",	 A2, OpX2TbTaC (0xc, 0, 1, 1, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.gt.and",	 A2, OpX2TbTaC (0xc, 1, 1, 0, 0), {P1, P2, GR0, R3}},
+    {"cmp4.lt.and",	 A2, OpX2TbTaC (0xc, 1, 1, 0, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.le.andcm",	 A2, OpX2TbTaC (0xc, 1, 1, 0, 0), {P1, P2, GR0, R3}, PSEUDO},
+    {"cmp4.ge.andcm",	 A2, OpX2TbTaC (0xc, 1, 1, 0, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.le.and",	 A2, OpX2TbTaC (0xc, 1, 1, 0, 1), {P1, P2, GR0, R3}},
+    {"cmp4.ge.and",	 A2, OpX2TbTaC (0xc, 1, 1, 0, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.gt.andcm",	 A2, OpX2TbTaC (0xc, 1, 1, 0, 1), {P1, P2, GR0, R3}, PSEUDO},
+    {"cmp4.lt.andcm",	 A2, OpX2TbTaC (0xc, 1, 1, 0, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.ge.and",	 A2, OpX2TbTaC (0xc, 1, 1, 1, 0), {P1, P2, GR0, R3}},
+    {"cmp4.le.and",	 A2, OpX2TbTaC (0xc, 1, 1, 1, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.lt.andcm",	 A2, OpX2TbTaC (0xc, 1, 1, 1, 0), {P1, P2, GR0, R3}, PSEUDO},
+    {"cmp4.gt.andcm",	 A2, OpX2TbTaC (0xc, 1, 1, 1, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.lt.and",	 A2, OpX2TbTaC (0xc, 1, 1, 1, 1), {P1, P2, GR0, R3}},
+    {"cmp4.gt.and",	 A2, OpX2TbTaC (0xc, 1, 1, 1, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.ge.andcm",	 A2, OpX2TbTaC (0xc, 1, 1, 1, 1), {P1, P2, GR0, R3}, PSEUDO},
+    {"cmp4.le.andcm",	 A2, OpX2TbTaC (0xc, 1, 1, 1, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.lt",		 A2, OpX2TaC   (0xc, 2, 0, 0), {P1, P2, IMM8, R3}},
     {"cmp.le",		 A2, OpX2TaC   (0xc, 2, 0, 0), {P1, P2, IMM8M1, R3}},
     {"cmp.gt",		 A2, OpX2TaC   (0xc, 2, 0, 0), {P2, P1, IMM8M1, R3}},
@@ -231,21 +247,37 @@
     {"cmp4.ne.or",	 A2, OpX2TbTaC (0xd, 1, 0, 1, 1), {P1, P2, R2, R3}},
     {"cmp4.eq.orcm",	 A2, OpX2TbTaC (0xd, 1, 0, 1, 1), {P1, P2, R2, R3}, PSEUDO},
     {"cmp.gt.or",	 A2, OpX2TbTaC (0xd, 0, 1, 0, 0), {P1, P2, GR0, R3}},
+    {"cmp.lt.or",	 A2, OpX2TbTaC (0xd, 0, 1, 0, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.le.orcm",	 A2, OpX2TbTaC (0xd, 0, 1, 0, 0), {P1, P2, GR0, R3}, PSEUDO},
+    {"cmp.ge.orcm",	 A2, OpX2TbTaC (0xd, 0, 1, 0, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.le.or",	 A2, OpX2TbTaC (0xd, 0, 1, 0, 1), {P1, P2, GR0, R3}},
+    {"cmp.ge.or",	 A2, OpX2TbTaC (0xd, 0, 1, 0, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.gt.orcm",	 A2, OpX2TbTaC (0xd, 0, 1, 0, 1), {P1, P2, GR0, R3}, PSEUDO},
+    {"cmp.lt.orcm",	 A2, OpX2TbTaC (0xd, 0, 1, 0, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.ge.or",	 A2, OpX2TbTaC (0xd, 0, 1, 1, 0), {P1, P2, GR0, R3}},
+    {"cmp.le.or",	 A2, OpX2TbTaC (0xd, 0, 1, 1, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.lt.orcm",	 A2, OpX2TbTaC (0xd, 0, 1, 1, 0), {P1, P2, GR0, R3}, PSEUDO},
+    {"cmp.gt.orcm",	 A2, OpX2TbTaC (0xd, 0, 1, 1, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.lt.or",	 A2, OpX2TbTaC (0xd, 0, 1, 1, 1), {P1, P2, GR0, R3}},
+    {"cmp.gt.or",	 A2, OpX2TbTaC (0xd, 0, 1, 1, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.ge.orcm",	 A2, OpX2TbTaC (0xd, 0, 1, 1, 1), {P1, P2, GR0, R3}, PSEUDO},
+    {"cmp.le.orcm",	 A2, OpX2TbTaC (0xd, 0, 1, 1, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.gt.or",	 A2, OpX2TbTaC (0xd, 1, 1, 0, 0), {P1, P2, GR0, R3}},
+    {"cmp4.lt.or",	 A2, OpX2TbTaC (0xd, 1, 1, 0, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.le.orcm",	 A2, OpX2TbTaC (0xd, 1, 1, 0, 0), {P1, P2, GR0, R3}, PSEUDO},
+    {"cmp4.ge.orcm",	 A2, OpX2TbTaC (0xd, 1, 1, 0, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.le.or",	 A2, OpX2TbTaC (0xd, 1, 1, 0, 1), {P1, P2, GR0, R3}},
+    {"cmp4.ge.or",	 A2, OpX2TbTaC (0xd, 1, 1, 0, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.gt.orcm",	 A2, OpX2TbTaC (0xd, 1, 1, 0, 1), {P1, P2, GR0, R3}, PSEUDO},
+    {"cmp4.lt.orcm",	 A2, OpX2TbTaC (0xd, 1, 1, 0, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.ge.or",	 A2, OpX2TbTaC (0xd, 1, 1, 1, 0), {P1, P2, GR0, R3}},
+    {"cmp4.le.or",	 A2, OpX2TbTaC (0xd, 1, 1, 1, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.lt.orcm",	 A2, OpX2TbTaC (0xd, 1, 1, 1, 0), {P1, P2, GR0, R3}, PSEUDO},
+    {"cmp4.gt.orcm",	 A2, OpX2TbTaC (0xd, 1, 1, 1, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.lt.or",	 A2, OpX2TbTaC (0xd, 1, 1, 1, 1), {P1, P2, GR0, R3}},
+    {"cmp4.gt.or",	 A2, OpX2TbTaC (0xd, 1, 1, 1, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.ge.orcm",	 A2, OpX2TbTaC (0xd, 1, 1, 1, 1), {P1, P2, GR0, R3}, PSEUDO},
+    {"cmp4.le.orcm",	 A2, OpX2TbTaC (0xd, 1, 1, 1, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.ltu",		 A2, OpX2TaC   (0xd, 2, 0, 0), {P1, P2, IMM8, R3}},
     {"cmp.leu",		 A2, OpX2TaC   (0xd, 2, 0, 0), {P1, P2, IMM8M1U8, R3}},
     {"cmp.gtu",		 A2, OpX2TaC   (0xd, 2, 0, 0), {P2, P1, IMM8M1U8, R3}},
@@ -287,21 +319,37 @@
     {"cmp4.ne.or.andcm", A2, OpX2TbTaC (0xe, 1, 0, 1, 1), {P1, P2, R2, R3}},
     {"cmp4.eq.and.orcm", A2, OpX2TbTaC (0xe, 1, 0, 1, 1), {P2, P1, R2, R3}, PSEUDO},
     {"cmp.gt.or.andcm",	 A2, OpX2TbTaC (0xe, 0, 1, 0, 0), {P1, P2, GR0, R3}},
+    {"cmp.lt.or.andcm",	 A2, OpX2TbTaC (0xe, 0, 1, 0, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.le.and.orcm",	 A2, OpX2TbTaC (0xe, 0, 1, 0, 0), {P2, P1, GR0, R3}, PSEUDO},
+    {"cmp.ge.and.orcm",	 A2, OpX2TbTaC (0xe, 0, 1, 0, 0), {P2, P1, R3, GR0}, PSEUDO},
     {"cmp.le.or.andcm",	 A2, OpX2TbTaC (0xe, 0, 1, 0, 1), {P1, P2, GR0, R3}},
+    {"cmp.ge.or.andcm",	 A2, OpX2TbTaC (0xe, 0, 1, 0, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.gt.and.orcm",	 A2, OpX2TbTaC (0xe, 0, 1, 0, 1), {P2, P1, GR0, R3}, PSEUDO},
+    {"cmp.lt.and.orcm",	 A2, OpX2TbTaC (0xe, 0, 1, 0, 1), {P2, P1, R3, GR0}, PSEUDO},
     {"cmp.ge.or.andcm",	 A2, OpX2TbTaC (0xe, 0, 1, 1, 0), {P1, P2, GR0, R3}},
+    {"cmp.le.or.andcm",	 A2, OpX2TbTaC (0xe, 0, 1, 1, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.lt.and.orcm",	 A2, OpX2TbTaC (0xe, 0, 1, 1, 0), {P2, P1, GR0, R3}, PSEUDO},
+    {"cmp.gt.and.orcm",	 A2, OpX2TbTaC (0xe, 0, 1, 1, 0), {P2, P1, R3, GR0}, PSEUDO},
     {"cmp.lt.or.andcm",	 A2, OpX2TbTaC (0xe, 0, 1, 1, 1), {P1, P2, GR0, R3}},
+    {"cmp.gt.or.andcm",	 A2, OpX2TbTaC (0xe, 0, 1, 1, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp.ge.and.orcm",	 A2, OpX2TbTaC (0xe, 0, 1, 1, 1), {P2, P1, GR0, R3}, PSEUDO},
+    {"cmp.le.and.orcm",	 A2, OpX2TbTaC (0xe, 0, 1, 1, 1), {P2, P1, R3, GR0}, PSEUDO},
     {"cmp4.gt.or.andcm", A2, OpX2TbTaC (0xe, 1, 1, 0, 0), {P1, P2, GR0, R3}},
+    {"cmp4.lt.or.andcm", A2, OpX2TbTaC (0xe, 1, 1, 0, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.le.and.orcm", A2, OpX2TbTaC (0xe, 1, 1, 0, 0), {P2, P1, GR0, R3}, PSEUDO},
+    {"cmp4.ge.and.orcm", A2, OpX2TbTaC (0xe, 1, 1, 0, 0), {P2, P1, R3, GR0}, PSEUDO},
     {"cmp4.le.or.andcm", A2, OpX2TbTaC (0xe, 1, 1, 0, 1), {P1, P2, GR0, R3}},
+    {"cmp4.ge.or.andcm", A2, OpX2TbTaC (0xe, 1, 1, 0, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.gt.and.orcm", A2, OpX2TbTaC (0xe, 1, 1, 0, 1), {P2, P1, GR0, R3}, PSEUDO},
+    {"cmp4.lt.and.orcm", A2, OpX2TbTaC (0xe, 1, 1, 0, 1), {P2, P1, R3, GR0}, PSEUDO},
     {"cmp4.ge.or.andcm", A2, OpX2TbTaC (0xe, 1, 1, 1, 0), {P1, P2, GR0, R3}},
+    {"cmp4.le.or.andcm", A2, OpX2TbTaC (0xe, 1, 1, 1, 0), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.lt.and.orcm", A2, OpX2TbTaC (0xe, 1, 1, 1, 0), {P2, P1, GR0, R3}, PSEUDO},
+    {"cmp4.gt.and.orcm", A2, OpX2TbTaC (0xe, 1, 1, 1, 0), {P2, P1, R3, GR0}, PSEUDO},
     {"cmp4.lt.or.andcm", A2, OpX2TbTaC (0xe, 1, 1, 1, 1), {P1, P2, GR0, R3}},
+    {"cmp4.gt.or.andcm", A2, OpX2TbTaC (0xe, 1, 1, 1, 1), {P1, P2, R3, GR0}, PSEUDO},
     {"cmp4.ge.and.orcm", A2, OpX2TbTaC (0xe, 1, 1, 1, 1), {P2, P1, GR0, R3}, PSEUDO},
+    {"cmp4.le.and.orcm", A2, OpX2TbTaC (0xe, 1, 1, 1, 1), {P2, P1, R3, GR0}, PSEUDO},
     {"cmp.eq",		 A2, OpX2TaC   (0xe, 2, 0, 0), {P1, P2, IMM8, R3}},
     {"cmp.ne",		 A2, OpX2TaC   (0xe, 2, 0, 0), {P2, P1, IMM8, R3}},
     {"cmp.eq.unc",	 A2, OpX2TaC   (0xe, 2, 0, 1), {P1, P2, IMM8, R3}},
diff --git a/opcodes/ia64-opc-d.c b/opcodes/ia64-opc-d.c
index 6021d3b..27390f5 100644
--- a/opcodes/ia64-opc-d.c
+++ b/opcodes/ia64-opc-d.c
@@ -1,7 +1,9 @@
 struct ia64_opcode ia64_opcodes_d[] =
   {
     {"add",   IA64_TYPE_DYN, 1, 0, 0,
-     {IA64_OPND_R1, IA64_OPND_IMM22, IA64_OPND_R3}},
+     {IA64_OPND_R1, IA64_OPND_IMM22, IA64_OPND_R3_2}},
+    {"add",   IA64_TYPE_DYN, 1, 0, 0,
+     {IA64_OPND_R1, IA64_OPND_IMM14, IA64_OPND_R3}},
     {"break", IA64_TYPE_DYN, 0, 0, 0, {IA64_OPND_IMMU21}},
     {"chk.s", IA64_TYPE_DYN, 0, 0, 0, {IA64_OPND_R2, IA64_OPND_TGT25b}},
     {"mov",   IA64_TYPE_DYN, 1, 0, 0, {IA64_OPND_R1,  IA64_OPND_AR3}},
diff --git a/opcodes/m32r-desc.h b/opcodes/m32r-desc.h
index 774891d..9fe57ab 100644
--- a/opcodes/m32r-desc.h
+++ b/opcodes/m32r-desc.h
@@ -45,7 +45,7 @@
 #define CGEN_INT_INSN_P 1
 
 /* Maximum nymber of syntax bytes in an instruction.  */
-#define CGEN_ACTUAL_MAX_SYNTAX_BYTES 15
+#define CGEN_ACTUAL_MAX_SYNTAX_ELEMENTS 15
 
 /* CGEN_MNEMONIC_OPERANDS is defined if mnemonics have operands.
    e.g. In "b,a foo" the ",a" is an operand.  If mnemonics have operands
diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c
index a75dc89..849f9f2 100644
--- a/opcodes/mips-dis.c
+++ b/opcodes/mips-dis.c
@@ -137,7 +137,7 @@
 
     case 'a':
       (*info->print_address_func)
-	(((pc & ~ (bfd_vma) 0x0fffffff)
+	((((pc + 4) & ~ (bfd_vma) 0x0fffffff)
 	  | (((l >> OP_SH_TARGET) & OP_MASK_TARGET) << 2)),
 	 info);
       break;
@@ -1038,9 +1038,9 @@
       if (! use_extend)
 	extend = 0;
       l = ((l & 0x1f) << 23) | ((l & 0x3e0) << 13) | (extend << 2);
-      (*info->print_address_func) ((memaddr & 0xf0000000) | l, info);
+      (*info->print_address_func) (((memaddr + 4) & 0xf0000000) | l, info);
       info->insn_type = dis_jsr;
-      info->target = (memaddr & 0xf0000000) | l;
+      info->target = ((memaddr + 4) & 0xf0000000) | l;
       info->branch_delay_insns = 1;
       break;
 
diff --git a/opcodes/pdp11-dis.c b/opcodes/pdp11-dis.c
new file mode 100644
index 0000000..e13c7aa
--- /dev/null
+++ b/opcodes/pdp11-dis.c
@@ -0,0 +1,323 @@
+/* Print DEC PDP-11 instructions.
+   Copyright 2001 Free Software Foundation, Inc.
+
+This file 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 "dis-asm.h"
+#include "opcode/pdp11.h"
+
+#define AFTER_INSTRUCTION	"\t"
+#define OPERAND_SEPARATOR	", "
+
+#define JUMP	0x1000	/* flag that this operand is used in a jump */
+
+#define FPRINTF	(*info->fprintf_func)
+#define F	info->stream
+
+/* sign-extend a 16-bit number in an int */
+#define SIGN_BITS	(8 * sizeof (int) - 16)
+#define sign_extend(x) (((x) << SIGN_BITS) >> SIGN_BITS)
+
+static int read_word PARAMS ((bfd_vma memaddr, int *word,
+			      disassemble_info *info));
+static void print_signed_octal PARAMS ((int n, disassemble_info *info));
+static void print_reg PARAMS ((int reg, disassemble_info *info));
+static void print_freg PARAMS ((int freg, disassemble_info *info));
+static int print_operand PARAMS ((bfd_vma *memaddr, int code,
+				  disassemble_info *info));
+int print_insn_pdp11 PARAMS ((bfd_vma memaddr, disassemble_info *info));
+
+static int
+read_word (memaddr, word, info)
+     bfd_vma memaddr;
+     int *word;
+     disassemble_info *info;
+{
+  int status;
+  bfd_byte x[2];
+
+  status = (*info->read_memory_func) (memaddr, x, 2, info);
+  if (status != 0)
+    return -1;
+
+  *word = x[1] << 8 | x[0];
+  return 0;
+}
+
+static void
+print_signed_octal (n, info)
+     int n;
+     disassemble_info *info;
+{
+  if (n < 0)
+    FPRINTF (F, "-%o", -n);
+  else
+    FPRINTF (F, "%o", n);
+}
+
+static void
+print_reg (reg, info)
+     int reg;
+     disassemble_info *info;
+{
+  /* mask off the addressing mode, if any */
+  reg &= 7;
+
+  switch (reg)
+    {
+    case 0: case 1: case 2: case 3: case 4: case 5:
+		FPRINTF (F, "r%d", reg); break;
+    case 6:	FPRINTF (F, "sp"); break;
+    case 7:	FPRINTF (F, "pc"); break;
+    default:	/* error */
+    }
+}
+
+static void
+print_freg (freg, info)
+     int freg;
+     disassemble_info *info;
+{
+  FPRINTF (F, "fr%d", freg);
+}
+
+static int
+print_operand (memaddr, code, info)
+     bfd_vma *memaddr;
+     int code;
+     disassemble_info *info;
+{
+  int mode = (code >> 3) & 7;
+  int reg = code & 7;
+  int disp;
+
+  switch (mode)
+    {
+    case 0:
+      print_reg (reg, info);
+      break;
+    case 1:
+      FPRINTF (F, "(");
+      print_reg (reg, info);
+      FPRINTF (F, ")");
+      break;
+    case 2:
+      if (reg == 7)
+	{
+	  int data;
+	  if (read_word (*memaddr, &data, info) < 0)
+	    return -1;
+	  FPRINTF (F, "$");
+	  print_signed_octal (sign_extend (data), info);
+	  *memaddr += 2;
+	}
+      else
+	{
+	  FPRINTF (F, "(");
+	  print_reg (reg, info);
+	  FPRINTF (F, ")+");
+	}
+	break;
+    case 3:
+      if (reg == 7)
+	{
+	  int address;
+	  if (read_word (*memaddr, &address, info) < 0)
+	    return -1;
+	  FPRINTF (F, "*$%o", address);
+	  *memaddr += 2;
+	}
+      else
+	{
+	  FPRINTF (F, "*(");
+	  print_reg (reg, info);
+	  FPRINTF (F, ")+");
+	}
+	break;
+    case 4:
+      FPRINTF (F, "-(");
+      print_reg (reg, info);
+      FPRINTF (F, ")");
+      break;
+    case 5:
+      FPRINTF (F, "*-(");
+      print_reg (reg, info);
+      FPRINTF (F, ")");
+      break;
+    case 6:
+    case 7:
+      if (read_word (*memaddr, &disp, info) < 0)
+	return -1;
+      *memaddr += 2;
+      if (reg == 7)
+	{
+	  bfd_vma address = *memaddr + sign_extend (disp);
+	  if (!(code & JUMP))
+	    FPRINTF (F, "*$");
+	  (*info->print_address_func) (address, info);
+	}
+      else
+	{
+	  if (mode == 7)
+	    FPRINTF (F, "*");
+	  print_signed_octal (sign_extend (disp), info);
+	  FPRINTF (F, "(");
+	  print_reg (reg, info);
+	  FPRINTF (F, ")");
+	}
+      break;
+    }
+
+  return 0;
+}
+
+/* Print the PDP-11 instruction at address MEMADDR in debugged memory,
+   on INFO->STREAM.  Returns length of the instruction, in bytes.  */
+
+int
+print_insn_pdp11 (memaddr, info)
+     bfd_vma memaddr;
+     disassemble_info *info;
+{
+  bfd_vma start_memaddr = memaddr;
+  int opcode;
+  int src, dst;
+  int i;
+
+  info->bytes_per_line = 6;
+  info->bytes_per_chunk = 2;
+  info->display_endian = BFD_ENDIAN_LITTLE;
+
+  if (read_word (memaddr, &opcode, info) != 0)
+    return -1;
+  memaddr += 2;
+
+  src = (opcode >> 6) & 0x3f;
+  dst = opcode & 0x3f;
+
+  for (i = 0; i < pdp11_num_opcodes; i++)
+    {
+#define OP pdp11_opcodes[i]
+      if ((opcode & OP.mask) == OP.opcode)
+	switch (OP.type)
+	  {
+	  case PDP11_OPCODE_NO_OPS:
+	    FPRINTF (F, OP.name);
+	    break;
+	  case PDP11_OPCODE_REG:
+	    FPRINTF (F, OP.name);
+	    FPRINTF (F, AFTER_INSTRUCTION);
+	    print_reg (dst, info);
+	    break;
+	  case PDP11_OPCODE_OP:
+	    FPRINTF (F, OP.name);
+	    FPRINTF (F, AFTER_INSTRUCTION);
+	    if (strcmp (OP.name, "jmp") == 0)
+	      dst |= JUMP;
+	    if (print_operand (&memaddr, dst, info) < 0)
+	      return -1;
+	    break;
+	  case PDP11_OPCODE_REG_OP:
+	    FPRINTF (F, OP.name);
+	    FPRINTF (F, AFTER_INSTRUCTION);
+	    print_reg (src, info);
+	    FPRINTF (F, OPERAND_SEPARATOR);
+	    if (strcmp (OP.name, "jsr") == 0)
+	      dst |= JUMP;
+	    if (print_operand (&memaddr, dst, info) < 0)
+	      return -1;
+	    break;
+	  case PDP11_OPCODE_REG_OP_REV:
+	    FPRINTF (F, OP.name);
+	    FPRINTF (F, AFTER_INSTRUCTION);
+	    if (print_operand (&memaddr, dst, info) < 0)
+	      return -1;
+	    FPRINTF (F, OPERAND_SEPARATOR);
+	    print_reg (src, info);
+	    break;
+	  case PDP11_OPCODE_AC_OP:
+	    {
+	      int ac = (opcode & 0xe0) >> 6;
+	      FPRINTF (F, OP.name);
+	      FPRINTF (F, AFTER_INSTRUCTION);
+	      print_freg (ac, info);
+	      FPRINTF (F, OPERAND_SEPARATOR);
+	      if (print_operand (&memaddr, dst, info) < 0)
+		return -1;
+	      break;
+	    }
+	  case PDP11_OPCODE_OP_OP:
+	    FPRINTF (F, OP.name);
+	    FPRINTF (F, AFTER_INSTRUCTION);
+	    if (print_operand (&memaddr, src, info) < 0)
+	      return -1;
+	    FPRINTF (F, OPERAND_SEPARATOR);
+	    if (print_operand (&memaddr, dst, info) < 0)
+	      return -1;
+	    break;
+	  case PDP11_OPCODE_DISPL:
+	    {
+	      int displ = (opcode & 0xff) << 8;
+	      bfd_vma address = memaddr + (sign_extend (displ) >> 7);
+	      FPRINTF (F, OP.name);
+	      FPRINTF (F, AFTER_INSTRUCTION);
+	      (*info->print_address_func) (address, info);
+	      break;
+	    }
+	  case PDP11_OPCODE_REG_DISPL:
+	    {
+	      int displ = (opcode & 0x3f) << 10;
+	      bfd_vma address = memaddr + (sign_extend (displ) >> 9);
+	      FPRINTF (F, OP.name);
+	      FPRINTF (F, AFTER_INSTRUCTION);
+	      print_reg (src, info);
+	      FPRINTF (F, OPERAND_SEPARATOR);
+	      (*info->print_address_func) (address, info);
+	      break;
+	    }
+	  case PDP11_OPCODE_IMM8:
+	    {
+	      int code = opcode & 0xff;
+	      FPRINTF (F, OP.name);
+	      FPRINTF (F, AFTER_INSTRUCTION);
+	      FPRINTF (F, "%o", code);
+	      break;
+	    }
+	  case PDP11_OPCODE_IMM6:
+	    {
+	      int code = opcode & 0x3f;
+	      FPRINTF (F, OP.name);
+	      FPRINTF (F, AFTER_INSTRUCTION);
+	      FPRINTF (F, "%o", code);
+	      break;
+	    }
+	  case PDP11_OPCODE_IMM3:
+	    {
+	      int code = opcode & 7;
+	      FPRINTF (F, OP.name);
+	      FPRINTF (F, AFTER_INSTRUCTION);
+	      FPRINTF (F, "%o", code);
+	      break;
+	    }
+	  default:
+	    /* TODO: is this a proper way of signalling an error? */
+	    FPRINTF (F, "<internal error: unrecognized instruction type>");
+	    return -1;
+	  }
+#undef OP
+    }
+
+  return memaddr - start_memaddr;
+}
diff --git a/opcodes/pdp11-opc.c b/opcodes/pdp11-opc.c
new file mode 100644
index 0000000..3517dee
--- /dev/null
+++ b/opcodes/pdp11-opc.c
@@ -0,0 +1,245 @@
+/* Opcode table for PDP-11.
+   Copyright 2001 Free Software Foundation, Inc.
+
+This file 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 "opcode/pdp11.h"
+
+const struct pdp11_opcode pdp11_opcodes[] =
+{
+  /* name,	pattern, mask,	opcode type,		insn type,    alias */
+  { "halt",	0x0000,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "wait",	0x0001,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "rti",	0x0002,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "bpt",	0x0003,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "iot",	0x0004,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "reset",	0x0005,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "rtt",	0x0006,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_LEIS },
+  { "mfpt",	0x0007,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_MFPT },
+  { "jmp",	0x0040,	0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "rts",	0x0080,	0xfff8, PDP11_OPCODE_REG,	PDP11_BASIC },
+  { "",		0x0088, 0xfff8, PDP11_OPCODE_ILLEGAL,	PDP11_NONE },
+  { "",		0x0090, 0xfff8, PDP11_OPCODE_ILLEGAL,	PDP11_NONE },
+  { "spl",	0x0098,	0xfff8, PDP11_OPCODE_IMM3,	PDP11_SPL },
+  { "nop",	0x00a0,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "clc",	0x00a1,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "clv",	0x00a2,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "cl_3",	0x00a3,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "clz",	0x00a4,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "cl_5",	0x00a5,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "cl_6",	0x00a6,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "cl_7",	0x00a7,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "cln",	0x00a8,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "cl_9",	0x00a9,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "cl_a",	0x00aa,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "cl_b",	0x00ab,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "cl_c",	0x00ac,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "cl_d",	0x00ad,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "cl_e",	0x00ae,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "ccc",	0x00af,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "se_0",	0x00b0,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "sec",	0x00a1,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "sev",	0x00b2,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "se_3",	0x00b3,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "sez",	0x00b4,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "se_5",	0x00b5,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "se_6",	0x00b6,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "se_7",	0x00b7,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "sen",	0x00b8,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "se_9",	0x00b9,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "se_a",	0x00ba,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "se_b",	0x00bb,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "se_c",	0x00bc,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "se_d",	0x00bd,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "se_e",	0x00be,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "scc",	0x00bf,	0xffff, PDP11_OPCODE_NO_OPS,	PDP11_BASIC },
+  { "swab",	0x00c0,	0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "br",	0x0100, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },
+  { "bne",	0x0200, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },
+  { "beq",	0x0300, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },
+  { "bge",	0x0400, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },
+  { "blt",	0x0500, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },
+  { "bgt",	0x0600, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },
+  { "ble",	0x0700, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },
+  { "jsr",	0x0800, 0xfe00, PDP11_OPCODE_REG_OP,	PDP11_BASIC },
+  { "clr",	0x0a00, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "com",	0x0a40, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "inc",	0x0a80, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "dec",	0x0ac0, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "neg",	0x0b00, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "adc",	0x0b40, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "sbc",	0x0b80, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "tst",	0x0bc0, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "ror",	0x0c00, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "rol",	0x0c40, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "asr",	0x0c80, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "asl",	0x0cc0, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "mark",	0x0d00, 0xffc0, PDP11_OPCODE_OP,	PDP11_LEIS },
+  { "mfpi",	0x0d40, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "mtpi",	0x0d80, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "sxt",	0x0dc0, 0xffc0, PDP11_OPCODE_OP,	PDP11_LEIS },
+  { "csm",	0x0e00, 0xffc0, PDP11_OPCODE_OP,	PDP11_CSM },
+  { "tstset",	0x0e40, 0xffc0, PDP11_OPCODE_OP,	PDP11_MPROC },
+  { "wrtlck",	0x0e80, 0xffc0, PDP11_OPCODE_OP,	PDP11_MPROC },
+/*{ "",		0x0ec0, 0xffe0, PDP11_OPCODE_ILLEGAL,	PDP11_NONE },*/
+  { "mov",	0x1000, 0xf000, PDP11_OPCODE_OP_OP,	PDP11_BASIC },
+  { "cmp",	0x2000, 0xf000, PDP11_OPCODE_OP_OP,	PDP11_BASIC },
+  { "bit",	0x3000, 0xf000, PDP11_OPCODE_OP_OP,	PDP11_BASIC },
+  { "bic",	0x4000, 0xf000, PDP11_OPCODE_OP_OP,	PDP11_BASIC },
+  { "bis",	0x5000, 0xf000, PDP11_OPCODE_OP_OP,	PDP11_BASIC },
+  { "add",	0x6000, 0xf000, PDP11_OPCODE_OP_OP,	PDP11_BASIC },
+  { "mul",	0x7000, 0xfe00, PDP11_OPCODE_REG_OP_REV,PDP11_EIS },
+  { "div",	0x7200, 0xfe00, PDP11_OPCODE_REG_OP_REV,PDP11_EIS },
+  { "ash",	0x7400, 0xfe00, PDP11_OPCODE_REG_OP_REV,PDP11_EIS },
+  { "ashc",	0x7600, 0xfe00, PDP11_OPCODE_REG_OP_REV,PDP11_EIS },
+  { "xor",	0x7800, 0xfe00, PDP11_OPCODE_REG_OP,	PDP11_LEIS },
+  { "fadd",	0x7a00, 0xfff8, PDP11_OPCODE_REG,	PDP11_FIS },
+  { "fsub",	0x7a08, 0xfff8, PDP11_OPCODE_REG,	PDP11_FIS },
+  { "fmul",	0x7a10, 0xfff8, PDP11_OPCODE_REG,	PDP11_FIS },
+  { "fdiv",	0x7a18, 0xfff8, PDP11_OPCODE_REG,	PDP11_FIS },
+/*{ "",		0x7a20, 0xffe0, PDP11_OPCODE_ILLEGAL,	PDP11_NONE },*/
+/*{ "",		0x7a40, 0xffc0, PDP11_OPCODE_ILLEGAL,	PDP11_NONE },*/
+/*{ "",		0x7a80, 0xff80, PDP11_OPCODE_ILLEGAL,	PDP11_NONE },*/
+/*{ "",		0x7b00, 0xffe0, PDP11_OPCODE_ILLEGAL,	PDP11_NONE },*/
+  { "l2dr",	0x7c10, 0xfff8, PDP11_OPCODE_REG,	PDP11_CIS },/*l2d*/
+  { "movc",	0x7c18, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "movrc",	0x7c19, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "movtc",	0x7c1a, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "locc",	0x7c20, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "skpc",	0x7c21, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "scanc",	0x7c22, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "spanc",	0x7c23, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cmpc",	0x7c24, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "matc",	0x7c25, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "addn",	0x7c28, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "subn",	0x7c29, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cmpn",	0x7c2a, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cvtnl",	0x7c2b, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cvtpn",	0x7c2c, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cvtnp",	0x7c2d, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "ashn",	0x7c2e, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cvtln",	0x7c2f, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "l3dr",	0x7c30, 0xfff8, PDP11_OPCODE_REG,	PDP11_CIS },/*l3d*/
+  { "addp",	0x7c38, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "subp",	0x7c39, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cmpp",	0x7c3a, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cvtpl",	0x7c3b, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "mulp",	0x7c3c, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "divp",	0x7c3d, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "ashp",	0x7c3e, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cvtlp",	0x7c3f, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "movci",	0x7c58, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "movrci",	0x7c59, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "movtci",	0x7c5a, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "locci",	0x7c60, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "skpci",	0x7c61, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "scanci",	0x7c62, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "spanci",	0x7c63, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cmpci",	0x7c64, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "matci",	0x7c65, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "addni",	0x7c68, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "subni",	0x7c69, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cmpni",	0x7c6a, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cvtnli",	0x7c6b, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cvtpni",	0x7c6c, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cvtnpi",	0x7c6d, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "ashni",	0x7c6e, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cvtlni",	0x7c6f, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "addpi",	0x7c78, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "subpi",	0x7c79, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cmppi",	0x7c7a, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cvtpli",	0x7c7b, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "mulpi",	0x7c7c, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "divpi",	0x7c7d, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "ashpi",	0x7c7e, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "cvtlpi",	0x7c7f, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_CIS },
+  { "med",	0x7d80, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_UCODE },
+  { "xfc",	0x7dc0, 0xffc0, PDP11_OPCODE_IMM6,	PDP11_UCODE },
+  { "sob",	0x7e00, 0xfe00, PDP11_OPCODE_REG_DISPL,	PDP11_LEIS },
+  { "bpl",	0x8000, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },
+  { "bmi",	0x8100, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },
+  { "bhi",	0x8200, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },
+  { "blos",	0x8300, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },
+  { "bvc",	0x8400, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },
+  { "bvs",	0x8500, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },
+  { "bcc",	0x8600, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },/*bhis*/
+  { "bcs",	0x8700, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },/*blo*/
+  { "emt",	0x8800, 0xff00, PDP11_OPCODE_IMM8,	PDP11_BASIC },
+  { "sys",	0x8900, 0xff00, PDP11_OPCODE_IMM8,	PDP11_BASIC },/*trap*/
+  { "clrb",	0x8a00, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "comb",	0x8a40, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "incb",	0x8a80, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "decb",	0x8ac0, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "negb",	0x8b00, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "adcb",	0x8b40, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "sbcb",	0x8b80, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "tstb",	0x8bc0, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "rorb",	0x8c00, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "rolb",	0x8c40, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "asrb",	0x8c80, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "aslb",	0x8cc0, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "mtps",	0x8d00, 0xffc0, PDP11_OPCODE_OP,	PDP11_MXPS },
+  { "mfpd",	0x8d40, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "mtpd",	0x8d80, 0xffc0, PDP11_OPCODE_OP,	PDP11_BASIC },
+  { "mfps",	0x8dc0, 0xffc0, PDP11_OPCODE_OP,	PDP11_MXPS },
+  { "movb",	0x9000, 0xf000, PDP11_OPCODE_OP_OP,	PDP11_BASIC },
+  { "cmpb",	0xa000, 0xf000, PDP11_OPCODE_OP_OP,	PDP11_BASIC },
+  { "bitb",	0xb000, 0xf000, PDP11_OPCODE_OP_OP,	PDP11_BASIC },
+  { "bicb",	0xc000, 0xf000, PDP11_OPCODE_OP_OP,	PDP11_BASIC },
+  { "bisb",	0xd000, 0xf000, PDP11_OPCODE_OP_OP,	PDP11_BASIC },
+  { "sub",	0xe000, 0xf000, PDP11_OPCODE_OP_OP,	PDP11_BASIC },
+  { "cfcc",	0xf000, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_FPP },
+  { "setf",	0xf001, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_FPP },
+  { "seti",	0xf002, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_FPP },
+  { "ldub",	0xf003, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_UCODE },
+  /* fpp trap	0xf004..0xf008 */
+  { "setd",	0xf009, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_FPP },
+  { "setl",	0xf00a, 0xffff, PDP11_OPCODE_NO_OPS,	PDP11_FPP },
+  /* fpp trap	0xf00b..0xf03f */
+  { "ldfps",	0xf040, 0xffc0, PDP11_OPCODE_OP,	PDP11_FPP },
+  { "stfps",	0xf080, 0xffc0, PDP11_OPCODE_OP,	PDP11_FPP },
+  { "stst",	0xf0c0, 0xffc0, PDP11_OPCODE_OP,	PDP11_FPP },
+  { "clrf",	0xf100, 0xffc0, PDP11_OPCODE_OP,	PDP11_FPP },
+  { "tstf",	0xf140, 0xffc0, PDP11_OPCODE_OP,	PDP11_FPP },
+  { "absf",	0xf180, 0xffc0, PDP11_OPCODE_OP,	PDP11_FPP },
+  { "negf",	0xf1c0, 0xffc0, PDP11_OPCODE_OP,	PDP11_FPP },
+  { "mulf",	0xf200, 0xff00, PDP11_OPCODE_AC_OP,	PDP11_FPP },
+  { "modf",	0xf300, 0xff00, PDP11_OPCODE_AC_OP,	PDP11_FPP },
+  { "addf",	0xf400, 0xff00, PDP11_OPCODE_AC_OP,	PDP11_FPP },
+  { "ldf",	0xf500, 0xff00, PDP11_OPCODE_AC_OP,	PDP11_FPP },/*movif*/
+  { "subf",	0xf600, 0xff00, PDP11_OPCODE_AC_OP,	PDP11_FPP },
+  { "cmpf",	0xf700, 0xff00, PDP11_OPCODE_AC_OP,	PDP11_FPP },
+  { "stf",	0xf800, 0xff00, PDP11_OPCODE_AC_OP,	PDP11_FPP },/*movfi*/
+  { "divf",	0xf900, 0xff00, PDP11_OPCODE_AC_OP,	PDP11_FPP },
+  { "stexp",	0xfa00, 0xff00, PDP11_OPCODE_AC_OP,	PDP11_FPP },
+  { "stcfi",	0xfb00, 0xff00, PDP11_OPCODE_AC_OP,	PDP11_FPP },
+  { "stcff",	0xfc00, 0xff00, PDP11_OPCODE_AC_OP,	PDP11_FPP },/* ? */
+  { "ldexp",	0xfd00, 0xff00, PDP11_OPCODE_AC_OP,	PDP11_FPP },
+  { "ldcif",	0xfe00, 0xff00, PDP11_OPCODE_AC_OP,	PDP11_FPP },
+  { "ldcff",	0xff00, 0xff00, PDP11_OPCODE_AC_OP,	PDP11_FPP },/* ? */
+};
+
+const struct pdp11_opcode pdp11_aliases[] =
+{
+  /* name,	pattern, mask,	opcode type,		insn type */
+  { "l2d",	0x7c10, 0xfff8, PDP11_OPCODE_REG,	PDP11_CIS },
+  { "l3d",	0x7c30, 0xfff8, PDP11_OPCODE_REG,	PDP11_CIS },
+  { "bhis",	0x8600, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },
+  { "blo",	0x8700, 0xff00, PDP11_OPCODE_DISPL,	PDP11_BASIC },
+  { "trap",	0x8900, 0xff00, PDP11_OPCODE_IMM8,	PDP11_BASIC },
+};
+
+const int pdp11_num_opcodes = sizeof pdp11_opcodes / sizeof pdp11_opcodes[0];
+const int pdp11_num_aliases = sizeof pdp11_aliases / sizeof pdp11_aliases[0];
diff --git a/opcodes/po/POTFILES.in b/opcodes/po/POTFILES.in
index b30cbd5..766319d 100644
--- a/opcodes/po/POTFILES.in
+++ b/opcodes/po/POTFILES.in
@@ -69,10 +69,14 @@
 mips-dis.c
 mips-opc.c
 ns32k-dis.c
+pdp11-dis.c
+pdp11-opc.c
 pj-dis.c
 pj-opc.c
 ppc-dis.c
 ppc-opc.c
+s390-dis.c
+s390-opc.c
 sh-dis.c
 sh-opc.h
 sparc-dis.c
diff --git a/opcodes/po/opcodes.pot b/opcodes/po/opcodes.pot
index 3336bbd..f7de22b 100644
--- a/opcodes/po/opcodes.pot
+++ b/opcodes/po/opcodes.pot
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2001-01-11 12:44-0800\n"
+"POT-Creation-Date: 2001-02-18 14:44-0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -186,7 +186,7 @@
 msgid "%02x\t\t*unknown*"
 msgstr ""
 
-#: i386-dis.c:2740
+#: i386-dis.c:2742
 msgid "<internal disassembler error>"
 msgstr ""
 
diff --git a/opcodes/s390-dis.c b/opcodes/s390-dis.c
new file mode 100644
index 0000000..6409d5f
--- /dev/null
+++ b/opcodes/s390-dis.c
@@ -0,0 +1,231 @@
+/* s390-dis.c -- Disassemble S390 instructions
+   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+
+   This file is part of GDB, GAS and the GNU binutils.
+
+   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 "ansidecl.h"
+#include "sysdep.h"
+#include "dis-asm.h"
+#include "opcode/s390.h"
+
+static int init_flag = 0;
+static int opc_index[256];
+static int current_arch_mask = 0;
+
+/* Set up index table for first opcode byte */
+static void 
+init_disasm(info)
+    struct disassemble_info *info ATTRIBUTE_UNUSED;
+{
+  const struct s390_opcode *opcode;
+  const struct s390_opcode *opcode_end;
+
+  memset(opc_index, 0, sizeof(opc_index));
+  opcode_end = s390_opcodes + s390_num_opcodes;
+  for (opcode = s390_opcodes; opcode < opcode_end; opcode++) {
+    opc_index[(int) opcode->opcode[0]] = opcode - s390_opcodes;
+    while ((opcode < opcode_end) && 
+           (opcode[1].opcode[0] == opcode->opcode[0]))
+      opcode++;
+  }
+  switch (info->mach) {
+  case bfd_mach_s390_esa:
+    current_arch_mask = 1 << S390_OPCODE_ESA;
+    break;
+  case bfd_mach_s390_esame:
+    current_arch_mask = 1 << S390_OPCODE_ESAME;
+    break;
+  default:
+    abort();
+  }
+  init_flag = 1;
+}
+
+/* Extracts an operand value from an instruction.  */
+
+static inline unsigned int
+s390_extract_operand (insn, operand)
+     unsigned char *insn;
+     const struct s390_operand *operand;
+{
+  unsigned int val;
+  int bits;
+
+  /* extract fragments of the operand byte for byte */
+  insn += operand->shift/8;
+  bits = (operand->shift & 7) + operand->bits;
+  val = 0;
+  do {
+    val <<= 8;
+    val |= (unsigned int) *insn++;
+    bits -= 8;
+  } while (bits > 0);
+  val >>= -bits;
+  val &= ((1U << (operand->bits-1))<<1) - 1;
+
+  /* sign extend value if the operand is signed or pc relative */
+  if ((operand->flags & (S390_OPERAND_SIGNED|S390_OPERAND_PCREL)) &&
+      (val & (1U << (operand->bits-1))))
+    val |= (-1U << (operand->bits-1))<<1;
+ 
+  /* double value if the operand is pc relative */
+  if (operand->flags & S390_OPERAND_PCREL)
+    val <<= 1;
+ 
+  /* length x in an instructions has real length x+1 */
+  if (operand->flags & S390_OPERAND_LENGTH)
+    val++;
+  return val;
+}
+
+/* Print a S390 instruction.  */
+
+int
+print_insn_s390 (memaddr, info)
+     bfd_vma memaddr;
+     struct disassemble_info *info;
+{
+  bfd_byte buffer[6];
+  const struct s390_opcode *opcode;
+  const struct s390_opcode *opcode_end;
+  unsigned int value;
+  int status, opsize, bufsize;
+  char separator;
+
+  if (init_flag == 0)
+    init_disasm(info);
+
+  /* The output looks better if we put 6 bytes on a line.  */
+  info->bytes_per_line = 6;
+
+  /* Every S390 instruction is max 6 bytes long.  */
+  memset(buffer, 0, 6);
+  status = (*info->read_memory_func) (memaddr, buffer, 6, info);
+  if (status != 0) {
+    for (bufsize = 0; bufsize < 6; bufsize++)
+      if ((*info->read_memory_func) (memaddr, buffer, bufsize+1, info) != 0)
+        break;
+    if (bufsize <= 0) {
+      (*info->memory_error_func) (status, memaddr, info);
+      return -1;
+    }
+    /* Opsize calculation looks strange but it works
+       00xxxxxx -> 2 bytes, 01xxxxxx/10xxxxxx -> 4 bytes, 
+       11xxxxxx -> 6 bytes.  */
+    opsize = ((((buffer[0]>>6)+1)>>1)+1)<<1;
+    status = opsize > bufsize;
+  } else {
+    bufsize = 6;
+    opsize = ((((buffer[0]>>6)+1)>>1)+1)<<1;
+  }
+
+  if (status == 0) {
+    /* Find the first match in the opcode table.  */
+    opcode_end = s390_opcodes + s390_num_opcodes;
+    for (opcode = s390_opcodes + opc_index[(int) buffer[0]]; 
+         (opcode < opcode_end) && (buffer[0] == opcode->opcode[0]);
+         opcode++) {
+      const struct s390_operand *operand;
+      const unsigned char *opindex;
+
+      /* check architecture */
+      if (!(opcode->architecture & current_arch_mask))
+        continue;
+      /* check signature of the opcode */
+      if ((buffer[1] & opcode->mask[1]) != opcode->opcode[1] ||
+          (buffer[2] & opcode->mask[2]) != opcode->opcode[2] ||
+          (buffer[3] & opcode->mask[3]) != opcode->opcode[3] ||
+          (buffer[4] & opcode->mask[4]) != opcode->opcode[4] ||
+          (buffer[5] & opcode->mask[5]) != opcode->opcode[5])
+        continue;
+  
+      /* the instruction is valid */
+      if (opcode->operands[0] != 0)
+        (*info->fprintf_func) (info->stream, "%s\t", opcode->name);
+      else
+        (*info->fprintf_func) (info->stream, "%s", opcode->name);
+  
+      /* Extract the operands.  */
+      separator = 0;
+      for (opindex = opcode->operands; *opindex != 0; opindex++) {
+        unsigned int value;
+
+        operand = s390_operands + *opindex;
+        value = s390_extract_operand(buffer, operand);
+
+        if ((operand->flags & S390_OPERAND_INDEX) && value == 0)
+          continue;
+        if ((operand->flags & S390_OPERAND_BASE) && 
+            value == 0 && separator == '(') {
+          separator = ',';
+          continue;
+        }
+
+        if (separator)
+          (*info->fprintf_func) (info->stream, "%c", separator);
+
+        if (operand->flags & S390_OPERAND_GPR)
+          (*info->fprintf_func) (info->stream, "%%r%i", value);
+        else if (operand->flags & S390_OPERAND_FPR)
+          (*info->fprintf_func) (info->stream, "%%f%i", value);
+        else if (operand->flags & S390_OPERAND_AR)
+          (*info->fprintf_func) (info->stream, "%%a%i", value);
+        else if (operand->flags & S390_OPERAND_CR)
+          (*info->fprintf_func) (info->stream, "%%c%i", value);
+        else if (operand->flags & S390_OPERAND_PCREL)
+          (*info->print_address_func) (memaddr + (int) value, info);
+        else if (operand->flags & S390_OPERAND_SIGNED)
+          (*info->fprintf_func) (info->stream, "%i", (int) value);
+        else
+	  (*info->fprintf_func) (info->stream, "%i", value);
+
+        if (operand->flags & S390_OPERAND_DISP) {
+	  separator = '(';
+        } else if (operand->flags & S390_OPERAND_BASE) {
+	  (*info->fprintf_func) (info->stream, ")");
+          separator = ',';
+        } else
+	  separator = ',';
+      }
+
+      /* found instruction, printed it, return its size */
+      return opsize;
+    }
+    /* no matching instruction found, fall through to hex print  */
+  }
+
+  if (bufsize >= 4) {
+    value = (unsigned int) buffer[0];
+    value = (value << 8) + (unsigned int) buffer[1];
+    value = (value << 8) + (unsigned int) buffer[2];
+    value = (value << 8) + (unsigned int) buffer[3];
+    (*info->fprintf_func) (info->stream,".long\t0x%08x", value);
+    return 4;
+  } else if (bufsize >= 2) {
+    value = (unsigned int) buffer[0];
+    value = (value << 8) + (unsigned int) buffer[1];
+    (*info->fprintf_func) (info->stream,".short\t0x%04x", value);
+    return 2;
+  } else {
+    value = (unsigned int) buffer[0];
+    (*info->fprintf_func) (info->stream,".byte\t0x%02x", value);
+    return 1;
+  }
+}
diff --git a/opcodes/s390-mkopc.c b/opcodes/s390-mkopc.c
new file mode 100644
index 0000000..c290dec
--- /dev/null
+++ b/opcodes/s390-mkopc.c
@@ -0,0 +1,172 @@
+/* s390-mkopc.c -- Generates opcode table out of s390-opc.txt
+   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+
+   This file is part of GDB, GAS, and the GNU binutils.
+
+   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 <stdlib.h>
+#include <string.h>
+
+/* ARCHBITS_ESA and ARCH_ESAME correspond to the bit numbers defined
+   by s390_opcode_arch_val in include/opcode/s390.h:
+     ARCHBITS_ESAONLY = (1<<S390_OPCODE_ESA)
+     ARCHBITS_ESA     = (1<<S390_OPCODE_ESA) + (1<<S390_OPCODE_ESAME)
+     ARCHBITS_ESA     = (1<<S390_OPCODE_ESAME).  */
+#define ARCHBITS_ESAONLY 1
+#define ARCHBITS_ESA     3
+#define ARCHBITS_ESAME   2
+
+struct op_struct {
+	char  opcode[16];
+	char  mnemonic[16];
+	char  format[16];
+        int   archbits;
+        unsigned long long sort_value;
+        int   no_nibbles;
+};
+
+struct op_struct *op_array;
+int max_ops;
+int no_ops;
+
+static void
+createTable(void)
+{
+    max_ops = 256;
+    op_array = malloc(max_ops*sizeof(struct op_struct));
+    no_ops = 0;
+}
+
+/*
+ *  `insertOpcode': insert an op_struct into sorted opcode array 
+ */
+static void
+insertOpcode(char *opcode, char *mnemonic, char *format, int archbits)
+{
+    char *str;
+    unsigned long long sort_value;
+    int no_nibbles;
+    int ix, k;
+
+    while (no_ops >= max_ops) {
+      max_ops = max_ops*2;
+      op_array = realloc(op_array, max_ops*sizeof(struct op_struct));
+    }
+    sort_value = 0;
+    str = opcode;
+    for (ix = 0; ix < 16; ix++) {
+      if (*str >= '0' && *str <= '9')
+	sort_value = (sort_value << 4) + (*str - '0');
+      else if (*str >= 'a' && *str <= 'f')
+	sort_value = (sort_value << 4) + (*str - 'a' + 10);
+      else if (*str >= 'A' && *str <= 'F')
+	sort_value = (sort_value << 4) + (*str - 'A' + 10);
+      else if (*str == '?')
+	sort_value <<= 4;
+      else
+	break;
+      str++;
+    }
+    sort_value <<= 4*(16 - ix);
+    no_nibbles = ix;
+    for (ix = 0; ix < no_ops; ix++)
+      if (sort_value > op_array[ix].sort_value)
+        break;
+    for (k = no_ops; k > ix; k--)
+      op_array[k] = op_array[k-1];
+    strcpy(op_array[ix].opcode, opcode);
+    strcpy(op_array[ix].mnemonic, mnemonic);
+    strcpy(op_array[ix].format, format);
+    op_array[ix].sort_value = sort_value;
+    op_array[ix].no_nibbles = no_nibbles;
+    op_array[ix].archbits = archbits;
+    no_ops++;
+}
+
+
+/*
+ *  `dumpTable': write opcode table
+ */
+static void
+dumpTable(void)
+{
+    char *str;
+    int  ix;
+
+    /*  Write hash table entries (slots). */
+    printf("const struct s390_opcode s390_opcodes[] = {\n");
+    for (ix = 0; ix < no_ops; ix++) {
+      printf("  { \"%s\", ", op_array[ix].mnemonic);
+      for (str = op_array[ix].opcode; *str != 0; str++)
+	if (*str == '?')
+	  *str = '0';
+      printf("OP%i(0x%sLL), ", 
+	     op_array[ix].no_nibbles*4, op_array[ix].opcode);
+      printf("MASK_%s, INSTR_%s, ",
+             op_array[ix].format, op_array[ix].format);
+      printf("%i}", op_array[ix].archbits);
+      if (ix < no_ops-1)
+	printf(",\n");
+      else
+	printf("\n");
+    }
+    printf("};\n\n");
+    printf("const int s390_num_opcodes =\n");
+    printf("  sizeof (s390_opcodes) / sizeof (s390_opcodes[0]);\n\n");
+}
+
+
+int
+main(void)
+{
+    char currentLine[256];
+
+    createTable();
+    /*  Read opcode descriptions from `stdin'.  For each mnemonic,
+     *  make an entry into the opcode table.
+     */
+    while (fgets(currentLine, sizeof(currentLine), stdin) != NULL) {
+      char  opcode[16];
+      char  mnemonic[16];
+      char  format[16];
+      char  description[64];
+      char  archtag[16];
+      int   archbits;
+
+      if (currentLine[0] == '#')
+        continue;
+      memset(opcode, 0, 8);
+      if (sscanf(currentLine, "%15s %15s %15s \"%[^\"]\" %15s",
+                 opcode, mnemonic, format, description, archtag) == 5) {
+        if (strcmp(archtag, "esaonly") == 0)
+          archbits = ARCHBITS_ESAONLY;
+        else if (strcmp(archtag, "esa") == 0)
+          archbits = ARCHBITS_ESA;
+        else if (strcmp(archtag, "esame") == 0)
+          archbits = ARCHBITS_ESAME;
+        else
+          archbits = 0;
+        insertOpcode(opcode, mnemonic, format, archbits);
+      } else
+        fprintf(stderr, "Couldn't scan line %s\n", currentLine);
+    }
+
+    dumpTable();
+    return 0;
+}
diff --git a/opcodes/s390-opc.c b/opcodes/s390-opc.c
new file mode 100644
index 0000000..90fc2f7
--- /dev/null
+++ b/opcodes/s390-opc.c
@@ -0,0 +1,969 @@
+/* s390-opc.c -- S390 opcode list
+   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+
+   This file is part of GDB, GAS, and the GNU binutils.
+
+   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 "ansidecl.h"
+#include "opcode/s390.h"
+
+/* This file holds the S390 opcode table.  The opcode table
+   includes almost all of the extended instruction mnemonics.  This
+   permits the disassembler to use them, and simplifies the assembler
+   logic, at the cost of increasing the table size.  The table is
+   strictly constant data, so the compiler should be able to put it in
+   the .text section.
+
+   This file also holds the operand table.  All knowledge about
+   inserting operands into instructions and vice-versa is kept in this
+   file.  */
+
+/* The operands table.
+   The fields are bits, shift, insert, extract, flags.  */
+
+const struct s390_operand s390_operands[] =
+{
+#define UNUSED 0
+  { 0, 0, 0 },                    /* Indicates the end of the operand list */
+
+#define R_8    1                  /* GPR starting at position 8 */
+  { 4, 8, S390_OPERAND_GPR },
+#define R_12   2                  /* GPR starting at position 12 */
+  { 4, 12, S390_OPERAND_GPR },    
+#define R_16   3                  /* GPR starting at position 16 */
+  { 4, 16, S390_OPERAND_GPR },    
+#define R_20   4                  /* GPR starting at position 20 */
+  { 4, 20, S390_OPERAND_GPR },    
+#define R_24   5                  /* GPR starting at position 24 */
+  { 4, 24, S390_OPERAND_GPR },    
+#define R_28   6                  /* GPR starting at position 28 */
+  { 4, 28, S390_OPERAND_GPR },    
+#define R_32   7                  /* GPR starting at position 32 */
+  { 4, 32, S390_OPERAND_GPR },
+
+#define F_8    8                  /* FPR starting at position 8 */
+  { 4, 8, S390_OPERAND_FPR },
+#define F_12   9                  /* FPR starting at position 12 */
+  { 4, 12, S390_OPERAND_FPR },
+#define F_16   10                 /* FPR starting at position 16 */
+  { 4, 16, S390_OPERAND_FPR },
+#define F_20   11                 /* FPR starting at position 16 */
+  { 4, 16, S390_OPERAND_FPR },
+#define F_24   12                 /* FPR starting at position 24 */
+  { 4, 24, S390_OPERAND_FPR },
+#define F_28   13                 /* FPR starting at position 28 */
+  { 4, 28, S390_OPERAND_FPR },
+#define F_32   14                 /* FPR starting at position 32 */
+  { 4, 32, S390_OPERAND_FPR },
+
+#define A_8    15                 /* Access reg. starting at position 8 */
+  { 4, 8, S390_OPERAND_AR },
+#define A_12   16                 /* Access reg. starting at position 12 */
+  { 4, 12, S390_OPERAND_AR },
+#define A_24   17                 /* Access reg. starting at position 24 */
+  { 4, 24, S390_OPERAND_AR },
+#define A_28   18                 /* Access reg. starting at position 28 */
+  { 4, 28, S390_OPERAND_AR },
+
+#define C_8    19                 /* Control reg. starting at position 8 */
+  { 4, 8, S390_OPERAND_CR },
+#define C_12   20                 /* Control reg. starting at position 12 */
+  { 4, 12, S390_OPERAND_CR },
+
+#define B_16   21                 /* Base register starting at position 16 */
+  { 4, 16, S390_OPERAND_BASE|S390_OPERAND_GPR },   
+#define B_32   22                 /* Base register starting at position 32 */
+  { 4, 32, S390_OPERAND_BASE|S390_OPERAND_GPR },   
+
+#define X_12   23                 /* Index register starting at position 12 */
+  { 4, 12, S390_OPERAND_INDEX|S390_OPERAND_GPR },                   
+
+#define D_20   24                 /* Displacement starting at position 20 */
+  { 12, 20, S390_OPERAND_DISP },  
+#define D_36   25                 /* Displacement starting at position 36 */
+  { 12, 36, S390_OPERAND_DISP },  
+
+#define L4_8   26                 /* 4 bit length starting at position 8 */
+  { 4, 8, S390_OPERAND_LENGTH },                         
+#define L4_12  27                 /* 4 bit length starting at position 12 */
+  { 4, 12, S390_OPERAND_LENGTH },
+#define L8_8   28                 /* 8 bit length starting at position 8 */
+  { 8, 8, S390_OPERAND_LENGTH },                    
+
+#define U4_8   29                 /* 4 bit unsigned value starting at 8 */
+  { 4, 8, 0 },
+#define U4_12  30                 /* 4 bit unsigned value starting at 12 */
+  { 4, 12, 0 },
+#define U4_16  31                 /* 4 bit unsigned value starting at 16 */
+  { 4, 16, 0 },
+#define U4_20  32                 /* 4 bit unsigned value starting at 20 */
+  { 4, 20, 0 },
+#define U8_8   33                 /* 8 bit unsigned value starting at 8 */
+  { 8, 8, 0 },                    
+#define U8_16  34                 /* 8 bit unsigned value starting at 16 */
+  { 8, 16, 0 },
+#define I16_16 35                 /* 16 bit signed value starting at 16 */
+  { 16, 16, S390_OPERAND_SIGNED },
+#define U16_16 36                 /* 16 bit unsigned value starting at 16 */
+  { 16, 16, 0 },                  
+#define J16_16 37                 /* PC relative jump offset at 16 */
+  { 16, 16, S390_OPERAND_PCREL },  
+#define J32_16 38                 /* PC relative long offset at 16 */
+  { 32, 16, S390_OPERAND_PCREL }
+};
+
+
+/* Macros used to form opcodes.  */
+
+/* 8/16/48 bit opcodes */
+#define OP8(x) { x, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define OP16(x) { x>>8, x&255, 0x00, 0x00, 0x00, 0x00 }
+#define OP48(x) { x>>40, (x>>32)&255, (x>>24)&255, \
+                  (x>>16)&255, (x>>8)&255, x&255}
+
+#define INSTR_E      2, { 0,0,0,0,0,0 }                  /* e.g. pr   */
+#define INSTR_RR     2, { R_8,R_12,0,0,0,0 }             /* e.g. lr   */
+#define INSTR_RR_M   2, { U4_8,R_12,0,0,0,0 }            /* e.g. bcr  */
+#define INSTR_RR_B   2, { R_12, 0,0,0,0,0 }              /* e.g. br   */
+#define INSTR_RR_I   2, { U8_8, 0,0,0,0,0 }              /* e.g. svc  */
+#define INSTR_RR_R   2, { R_8, 0,0,0,0,0 }               /* e.g. spm  */
+#define INSTR_RR_E   2, { R_8,R_12,0,0,0,0 }             /* e.g. aer  */
+#define INSTR_RR_D   2, { F_8,F_12,0,0,0,0 }             /* e.g. adr  */
+#define INSTR_RR_X   2, { R_8,R_12,0,0,0,0 }             /* e.g. mxr  */
+#define INSTR_RR_ED  2, { F_8,F_12,0,0,0,0 }             /* e.g. mer  */
+#define INSTR_RR_DE  2, { F_8,F_12,0,0,0,0 }             /* e.g. lrer */
+#define INSTR_RR_DX  2, { F_8,F_12,0,0,0,0 }             /* e.g. mxdr */
+#define INSTR_RR_XD  2, { F_8,F_12,0,0,0,0 }             /* e.g. lrdr */
+#define INSTR_RRE    4, { R_24,R_28,0,0,0,0 }            /* e.g. lura */
+#define INSTR_RRE_A  4, { A_24,A_28,0,0,0,0 }            /* e.g. cpya */
+#define INSTR_RRE_F  4, { F_24,F_28,0,0,0,0 }            /* e.g. debr */
+#define INSTR_RRE_O  4, { 0,0,0,0,0,0 }                  /* e.g. palb */
+#define INSTR_RRE_R  4, { R_24,0,0,0,0,0 }               /* e.g. ipm  */
+#define INSTR_RRE_R2 4, { R_28,0,0,0,0,0 }               /* e.g. tb   */
+#define INSTR_RRE_E  4, { F_24,0,0,0,0,0 }               /* e.g. sqer */
+#define INSTR_RRE_D  4, { F_24,0,0,0,0,0 }               /* e.g. sqdr */
+#define INSTR_RRE_X  4, { F_24,0,0,0,0,0 }               /* e.g. dxr  */
+#define INSTR_RRE_AR 4, { A_24,R_28,0,0,0,0 }            /* e.g. sar  */
+#define INSTR_RRE_RA 4, { R_24,A_28,0,0,0,0 }            /* e.g. ear  */
+#define INSTR_RRF_M  4, { R_24,U4_16,R_28,0,0,0 }        /* e.g. cfxbr*/
+#define INSTR_RRF_RM 4, { R_24,R_16,R_28,U4_20,0,0 }     /* e.g. didbr*/
+#define INSTR_RRF_R  4, { R_16,R_24,R_28,0,0,0 }         /* e.g. madbr*/
+#define INSTR_RRF_F  4, { F_16,F_24,F_28,0,0,0 }         /* e.g. madbr*/
+#define INSTR_RS     4, { R_8,R_12,D_20,B_16,0,0 }       /* e.g. cs   */
+#define INSTR_RS_A   4, { A_8,A_12,D_20,B_16,0,0 }       /* e.g. lam  */
+#define INSTR_RS_C   4, { C_8,C_12,D_20,B_16,0,0 }       /* e.g. lctl */
+#define INSTR_RS_M   4, { R_8,U4_12,D_20,B_16,0,0 }      /* e.g. icm  */
+#define INSTR_RS_S   4, { R_8,D_20,B_16,0,0,0 }          /* e.g. sll  */
+#define INSTR_RS_D   4, { R_8,D_20,B_16,0,0,0 }          /* e.g. sldl */
+#define INSTR_RX     4, { R_8,D_20,X_12,B_16,0,0 }       /* e.g. l    */
+#define INSTR_RX_M   4, { U4_8,D_20,X_12,B_16,0,0 }      /* e.g. bc   */
+#define INSTR_RX_B   4, { D_20,X_12,B_16,0,0,0 }         /* e.g. b    */
+#define INSTR_RX_E   4, { F_8,D_20,X_12,B_16,0,0 }       /* e.g. ae   */
+#define INSTR_RX_D   4, { F_8,D_20,X_12,B_16,0,0 }       /* e.g. ad   */
+#define INSTR_RX_ED  4, { F_8,D_20,X_12,B_16,0,0 }       /* e.g. me   */
+#define INSTR_RX_DX  4, { F_8,D_20,X_12,B_16,0,0 }       /* e.g. mxd  */
+#define INSTR_RXE    6, { R_8,D_20,X_12,B_16,0,0 }       /* e.g. agr  */
+#define INSTR_RXE_F  6, { F_8,D_20,X_12,B_16,0,0 }       /* e.g. axbr */
+#define INSTR_RXF    6, { F_32,D_20,X_12,B_16,F_8,0 }    /* e.g. madb */
+#define INSTR_S      4, { D_20,B_16,0,0,0,0 }            /* e.g. lpsw */
+#define INSTR_S_O    4, { 0,0,0,0,0,0 }                  /* e.g. hsch */
+#define INSTR_SI     4, { D_20,B_16,U8_8,0,0,0 }         /* e.g. cli  */
+#define INSTR_SS_RR  6, { D_20,R_8,B_16,D_36,B_32,R_12 } /* e.g. mvck */
+#define INSTR_SS_LL  6, { D_20,L4_8,B_16,D_36,L4_12,B_32 } /* e.g. pack */
+#define INSTR_SS_LI  6, { D_20,L4_8,B_16,D_36,B_32,U4_12 } /* e.g. srp  */
+#define INSTR_SS_L   6, { D_20,L8_8,B_16,D_36,B_32,0 }   /* e.g. mvc  */
+#define INSTR_SS_LMD 6, { R_8,R_12,D_20,B_16,D_36,B_32 } /* e.g. lmd  */
+#define INSTR_SS_PLO 6, { R_8,D_20,B_16,R_12,D_36,B_32 } /* e.g. plo  */
+#define INSTR_SSE    6, { D_20,B_16,D_36,B_32,0,0 }      /* e.g. mvsdk */
+#define INSTR_RI     4, { R_8,I16_16,0,0,0,0 }           /* e.g. ahi  */
+#define INSTR_RI_U   4, { R_8,U16_16,0,0,0,0 }           /* e.g. tml  */
+#define INSTR_RI_A   4, { R_8,J16_16,0,0,0,0 }           /* e.g. brct */
+#define INSTR_RI_MA  4, { U4_8,J16_16,0,0,0 }            /* e.g. brc  */
+#define INSTR_RI_B   4, { J16_16,0,0,0,0 }               /* e.g. j    */
+#define INSTR_RSI_A  4, { R_8,R_12,J16_16,0,0,0 }        /* e.g. brxh */
+#define INSTR_RSE    6, { R_8,D_20,B_16,R_12,0,0 }       /* e.g. lmg  */
+#define INSTR_RSE_M  6, { R_8,U4_12,D_20,B_16,0,0 }      /* e.g. icmh */
+#define INSTR_RSE_R  6, { R_8,R_12,D_20,B_16,0,0 }       /* e.g. lmh  */
+#define INSTR_RIE_A  6, { R_8,J16_16,R_12,0,0,0 }        /* e.g. brxhg */
+#define INSTR_RIL_A  6, { R_8,J32_16,0,0,0,0 }           /* e.g. brasl */
+#define INSTR_RIL_B  6, { J32_16,0,0,0,0,0 }             /* e.g. jg   */
+#define INSTR_RIL_MA 6, { R_8,J32_16,0,0,0,0 }           /* e.g. brcl */
+ 
+#define MASK_E      { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RR     { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RR_M   { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RR_B   { 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RR_I   { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RR_R   { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RR_E   { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RR_D   { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RR_X   { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RR_ED  { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RR_DE  { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RR_DX  { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RR_XD  { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RRE    { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
+#define MASK_RRE_A  { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
+#define MASK_RRE_F  { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
+#define MASK_RRE_O  { 0xff, 0xff, 0xff, 0xff, 0x00, 0x00 }
+#define MASK_RRE_R  { 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00 }
+#define MASK_RRE_R2 { 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00 }
+#define MASK_RRE_E  { 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00 }
+#define MASK_RRE_D  { 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00 }
+#define MASK_RRE_X  { 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00 }
+#define MASK_RRE_AR { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
+#define MASK_RRE_RA { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }
+#define MASK_RRF_M  { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RRF_RM { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RRF_R  { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RRF_F  { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RS     { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RS_A   { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RS_C   { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RS_M   { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RS_S   { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RS_D   { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RX     { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RX_M   { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RX_B   { 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RX_E   { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RX_D   { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RX_ED  { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RX_DX  { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RXE    { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
+#define MASK_RXE_F  { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
+#define MASK_RXF    { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
+#define MASK_S      { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_S_O    { 0xff, 0xff, 0xff, 0xff, 0x00, 0x00 }
+#define MASK_SI     { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_SS_RR  { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_SS_LL  { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_SS_LI  { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_SS_L   { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_SS_LMD { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_SS_PLO { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_SSE    { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RI     { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RI_U   { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RI_A   { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RI_MA  { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RI_B   { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RSI_A  { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RSE    { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
+#define MASK_RSE_M  { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
+#define MASK_RSE_R  { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
+#define MASK_RIE_A  { 0xff, 0x00, 0x00, 0x00, 0x00, 0xff }
+#define MASK_RIL_A  { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RIL_B  { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RIL_M  { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
+#define MASK_RIL_MA { 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00 }
+ 
+/* The opcode formats table (blueprints for .insn pseudo mnemonic). */
+
+const struct s390_opcode s390_opformats[] = {
+  { "e",	OP8(0x00LL),	MASK_E,		INSTR_E,	3 },
+  { "ri",	OP8(0x00LL),	MASK_RI,	INSTR_RI,	3 },
+  { "ri_a",	OP8(0x00LL),	MASK_RI_A,	INSTR_RI_A,	3 },
+  { "ri_b",	OP8(0x00LL),	MASK_RI_B,	INSTR_RI_B,	3 },
+  { "ri_ma",	OP8(0x00LL),	MASK_RI_MA,	INSTR_RI_MA,	3 },
+  { "ri_u",	OP8(0x00LL),	MASK_RI_U,	INSTR_RI_U,	3 },
+  { "rie_a",	OP8(0x00LL),	MASK_RIE_A,	INSTR_RIE_A,	3 },
+  { "ril_a",	OP8(0x00LL),	MASK_RIL_A,	INSTR_RIL_A,	3 },
+  { "ril_b",	OP8(0x00LL),	MASK_RIL_B,	INSTR_RIL_B,	3 },
+  { "ril_ma",	OP8(0x00LL),	MASK_RIL_MA,	INSTR_RIL_MA,	3 },
+  { "rr",	OP8(0x00LL),	MASK_RR,	INSTR_RR,	3 },
+  { "rr_b",	OP8(0x00LL),	MASK_RR_B,	INSTR_RR_B,	3 },
+  { "rr_d",	OP8(0x00LL),	MASK_RR_D,	INSTR_RR_D,	3 },
+  { "rr_de",	OP8(0x00LL),	MASK_RR_DE,	INSTR_RR_DE,	3 },
+  { "rr_dx",	OP8(0x00LL),	MASK_RR_DX,	INSTR_RR_DX,	3 },
+  { "rr_e",	OP8(0x00LL),	MASK_RR_E,	INSTR_RR_E,	3 },
+  { "rr_ed",	OP8(0x00LL),	MASK_RR_ED,	INSTR_RR_ED,	3 },
+  { "rr_i",	OP8(0x00LL),	MASK_RR_I,	INSTR_RR_I,	3 },
+  { "rr_m",	OP8(0x00LL),	MASK_RR_M,	INSTR_RR_M,	3 },
+  { "rr_r",	OP8(0x00LL),	MASK_RR_R,	INSTR_RR_R,	3 },
+  { "rr_x",	OP8(0x00LL),	MASK_RR_X,	INSTR_RR_X,	3 },
+  { "rr_xd",	OP8(0x00LL),	MASK_RR_XD,	INSTR_RR_XD,	3 },
+  { "rre",	OP8(0x00LL),	MASK_RRE,	INSTR_RRE,	3 },
+  { "rre_a",	OP8(0x00LL),	MASK_RRE_A,	INSTR_RRE_A,	3 },
+  { "rre_ar",	OP8(0x00LL),	MASK_RRE_AR,	INSTR_RRE_AR,	3 },
+  { "rre_d",	OP8(0x00LL),	MASK_RRE_D,	INSTR_RRE_D,	3 },
+  { "rre_e",	OP8(0x00LL),	MASK_RRE_E,	INSTR_RRE_E,	3 },
+  { "rre_f",	OP8(0x00LL),	MASK_RRE_F,	INSTR_RRE_F,	3 },
+  { "rre_o",	OP8(0x00LL),	MASK_RRE_O,	INSTR_RRE_O,	3 },
+  { "rre_r",	OP8(0x00LL),	MASK_RRE_R,	INSTR_RRE_R,	3 },
+  { "rre_r2",	OP8(0x00LL),	MASK_RRE_R2,	INSTR_RRE_R2,	3 },
+  { "rre_ra",	OP8(0x00LL),	MASK_RRE_RA,	INSTR_RRE_RA,	3 },
+  { "rre_x",	OP8(0x00LL),	MASK_RRE_X,	INSTR_RRE_X,	3 },
+  { "rrf_f",	OP8(0x00LL),	MASK_RRF_F,	INSTR_RRF_F,	3 },
+  { "rrf_m",	OP8(0x00LL),	MASK_RRF_M,	INSTR_RRF_M,	3 },
+  { "rrf_r",	OP8(0x00LL),	MASK_RRF_R,	INSTR_RRF_R,	3 },
+  { "rrf_rm",	OP8(0x00LL),	MASK_RRF_RM,	INSTR_RRF_RM,	3 },
+  { "rs",	OP8(0x00LL),	MASK_RS,	INSTR_RS,	3 },
+  { "rs_a",	OP8(0x00LL),	MASK_RS_A,	INSTR_RS_A,	3 },
+  { "rs_c",	OP8(0x00LL),	MASK_RS_C,	INSTR_RS_C,	3 },
+  { "rs_d",	OP8(0x00LL),	MASK_RS_D,	INSTR_RS_D,	3 },
+  { "rs_m",	OP8(0x00LL),	MASK_RS_M,	INSTR_RS_M,	3 },
+  { "rs_s",	OP8(0x00LL),	MASK_RS_S,	INSTR_RS_S,	3 },
+  { "rse",	OP8(0x00LL),	MASK_RSE,	INSTR_RSE,	3 },
+  { "rse_m",	OP8(0x00LL),	MASK_RSE_M,	INSTR_RSE_M,	3 },
+  { "rse_r",	OP8(0x00LL),	MASK_RSE_R,	INSTR_RSE_R,	3 },
+  { "rsi_a",	OP8(0x00LL),	MASK_RSI_A,	INSTR_RSI_A,	3 },
+  { "rx",	OP8(0x00LL),	MASK_RX,	INSTR_RX,	3 },
+  { "rx_b",	OP8(0x00LL),	MASK_RX_B,	INSTR_RX_B,	3 },
+  { "rx_d",	OP8(0x00LL),	MASK_RX_D,	INSTR_RX_D,	3 },
+  { "rx_dx",	OP8(0x00LL),	MASK_RX_DX,	INSTR_RX_DX,	3 },
+  { "rx_e",	OP8(0x00LL),	MASK_RX_E,	INSTR_RX_E,	3 },
+  { "rx_ed",	OP8(0x00LL),	MASK_RX_ED,	INSTR_RX_ED,	3 },
+  { "rx_m",	OP8(0x00LL),	MASK_RX_M,	INSTR_RX_M,	3 },
+  { "rxe",	OP8(0x00LL),	MASK_RXE,	INSTR_RXE,	3 },
+  { "rxe_f",	OP8(0x00LL),	MASK_RXE_F,	INSTR_RXE_F,	3 },
+  { "rxf",	OP8(0x00LL),	MASK_RXF,	INSTR_RXF,	3 },
+  { "s",	OP8(0x00LL),	MASK_S,		INSTR_S,	3 },
+  { "si",	OP8(0x00LL),	MASK_SI,	INSTR_SI,	3 },
+  { "ss_l",	OP8(0x00LL),	MASK_SS_L,	INSTR_SS_L,	3 },
+  { "ss_li",	OP8(0x00LL),	MASK_SS_LI,	INSTR_SS_LI,	3 },
+  { "ss_ll",	OP8(0x00LL),	MASK_SS_LL,	INSTR_SS_LL,	3 },
+  { "ss_lmd",	OP8(0x00LL),	MASK_SS_LMD,	INSTR_SS_LMD,	3 },
+  { "ss_plo",	OP8(0x00LL),	MASK_SS_PLO,	INSTR_SS_PLO,	3 },
+  { "ss_rr",	OP8(0x00LL),	MASK_SS_RR,	INSTR_SS_RR,	3 },
+  { "sse",	OP8(0x00LL),	MASK_SSE,	INSTR_SSE,	3 },
+};
+
+const int s390_num_opformats =
+  sizeof (s390_opformats) / sizeof (s390_opformats[0]);
+
+/* The opcode table.
+
+   The format of the opcode table is:
+
+   NAME	     OPCODE	MASK	OPERANDS
+
+   NAME is the name of the instruction.
+   OPCODE is the instruction opcode.
+   MASK is the opcode mask; this is used to tell the disassembler
+     which bits in the actual opcode must match OPCODE.
+   OPERANDS is the list of operands.
+
+   The disassembler reads the table in order and prints the first
+   instruction which matches. */
+
+const struct s390_opcode s390_opcodes[] = {
+  { "dp", OP8(0xfdLL), MASK_SS_LL, INSTR_SS_LL, 3},
+  { "mp", OP8(0xfcLL), MASK_SS_LL, INSTR_SS_LL, 3},
+  { "sp", OP8(0xfbLL), MASK_SS_LL, INSTR_SS_LL, 3},
+  { "ap", OP8(0xfaLL), MASK_SS_LL, INSTR_SS_LL, 3},
+  { "cp", OP8(0xf9LL), MASK_SS_LL, INSTR_SS_LL, 3},
+  { "zap", OP8(0xf8LL), MASK_SS_LL, INSTR_SS_LL, 3},
+  { "unpk", OP8(0xf3LL), MASK_SS_LL, INSTR_SS_LL, 3},
+  { "pack", OP8(0xf2LL), MASK_SS_LL, INSTR_SS_LL, 3},
+  { "mvo", OP8(0xf1LL), MASK_SS_LL, INSTR_SS_LL, 3},
+  { "srp", OP8(0xf0LL), MASK_SS_LI, INSTR_SS_LI, 3},
+  { "lmd", OP8(0xefLL), MASK_SS_LMD, INSTR_SS_LMD, 2},
+  { "plo", OP8(0xeeLL), MASK_SS_PLO, INSTR_SS_PLO, 3},
+  { "msdb", OP48(0xed000000001fLL), MASK_RXF, INSTR_RXF, 3},
+  { "madb", OP48(0xed000000001eLL), MASK_RXF, INSTR_RXF, 3},
+  { "ddb", OP48(0xed000000001dLL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "mdb", OP48(0xed000000001cLL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "sdb", OP48(0xed000000001bLL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "adb", OP48(0xed000000001aLL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "cdb", OP48(0xed0000000019LL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "kdb", OP48(0xed0000000018LL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "meeb", OP48(0xed0000000017LL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "sqdb", OP48(0xed0000000015LL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "sqeb", OP48(0xed0000000014LL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "tcxb", OP48(0xed0000000012LL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "tcdb", OP48(0xed0000000011LL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "tceb", OP48(0xed0000000010LL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "mseb", OP48(0xed000000000fLL), MASK_RXF, INSTR_RXF, 3},
+  { "maeb", OP48(0xed000000000eLL), MASK_RXF, INSTR_RXF, 3},
+  { "deb", OP48(0xed000000000dLL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "mdeb", OP48(0xed000000000cLL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "seb", OP48(0xed000000000bLL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "aeb", OP48(0xed000000000aLL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "ceb", OP48(0xed0000000009LL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "keb", OP48(0xed0000000008LL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "mxdb", OP48(0xed0000000007LL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "lxeb", OP48(0xed0000000006LL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "lxdb", OP48(0xed0000000005LL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "ldeb", OP48(0xed0000000004LL), MASK_RXE_F, INSTR_RXE_F, 3},
+  { "brxlg", OP48(0xec0000000045LL), MASK_RIE_A, INSTR_RIE_A, 2},
+  { "brxhg", OP48(0xec0000000044LL), MASK_RIE_A, INSTR_RIE_A, 2},
+  { "lmh", OP48(0xeb0000000096LL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "icmh", OP48(0xeb0000000080LL), MASK_RSE_M, INSTR_RSE_M, 2},
+  { "bxleg", OP48(0xeb0000000045LL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "bxhg", OP48(0xeb0000000044LL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "cdsg", OP48(0xeb000000003eLL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "csg", OP48(0xeb0000000030LL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "lctlg", OP48(0xeb000000002fLL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "stcmh", OP48(0xeb000000002cLL), MASK_RSE_M, INSTR_RSE_M, 2},
+  { "stmh", OP48(0xeb0000000026LL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "stctg", OP48(0xeb0000000025LL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "stmg", OP48(0xeb0000000024LL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "clmh", OP48(0xeb0000000020LL), MASK_RSE_M, INSTR_RSE_M, 2},
+  { "rll", OP48(0xeb000000001dLL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "rllg", OP48(0xeb000000001cLL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "tracg", OP48(0xeb000000000fLL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "sllg", OP48(0xeb000000000dLL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "srlg", OP48(0xeb000000000cLL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "slag", OP48(0xeb000000000bLL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "srag", OP48(0xeb000000000aLL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "lmg", OP48(0xeb0000000004LL), MASK_RSE_R, INSTR_RSE_R, 2},
+  { "mvcin", OP8(0xe8LL), MASK_SS_L, INSTR_SS_L, 3},
+  { "mvcdk", OP16(0xe50fLL), MASK_SSE, INSTR_SSE, 3},
+  { "mvcsk", OP16(0xe50eLL), MASK_SSE, INSTR_SSE, 3},
+  { "tprot", OP16(0xe501LL), MASK_SSE, INSTR_SSE, 3},
+  { "strag", OP48(0xe50000000002LL), MASK_SSE, INSTR_SSE, 2},
+  { "lasp", OP16(0xe500LL), MASK_SSE, INSTR_SSE, 3},
+  { "slb", OP48(0xe30000000099LL), MASK_RXE, INSTR_RXE, 2},
+  { "alc", OP48(0xe30000000098LL), MASK_RXE, INSTR_RXE, 2},
+  { "dl", OP48(0xe30000000097LL), MASK_RXE, INSTR_RXE, 2},
+  { "ml", OP48(0xe30000000096LL), MASK_RXE, INSTR_RXE, 2},
+  { "llgh", OP48(0xe30000000091LL), MASK_RXE, INSTR_RXE, 2},
+  { "llgc", OP48(0xe30000000090LL), MASK_RXE, INSTR_RXE, 2},
+  { "lpq", OP48(0xe3000000008fLL), MASK_RXE, INSTR_RXE, 2},
+  { "stpq", OP48(0xe3000000008eLL), MASK_RXE, INSTR_RXE, 2},
+  { "slbg", OP48(0xe30000000089LL), MASK_RXE, INSTR_RXE, 2},
+  { "alcg", OP48(0xe30000000088LL), MASK_RXE, INSTR_RXE, 2},
+  { "dlg", OP48(0xe30000000087LL), MASK_RXE, INSTR_RXE, 2},
+  { "mlg", OP48(0xe30000000086LL), MASK_RXE, INSTR_RXE, 2},
+  { "xg", OP48(0xe30000000082LL), MASK_RXE, INSTR_RXE, 2},
+  { "og", OP48(0xe30000000081LL), MASK_RXE, INSTR_RXE, 2},
+  { "ng", OP48(0xe30000000080LL), MASK_RXE, INSTR_RXE, 2},
+  { "bctg", OP48(0xe30000000046LL), MASK_RXE, INSTR_RXE, 2},
+  { "strvh", OP48(0xe3000000003fLL), MASK_RXE, INSTR_RXE, 2},
+  { "strv", OP48(0xe3000000003eLL), MASK_RXE, INSTR_RXE, 2},
+  { "clgf", OP48(0xe30000000031LL), MASK_RXE, INSTR_RXE, 2},
+  { "cgf", OP48(0xe30000000030LL), MASK_RXE, INSTR_RXE, 2},
+  { "strvg", OP48(0xe3000000002fLL), MASK_RXE, INSTR_RXE, 2},
+  { "cvdg", OP48(0xe3000000002eLL), MASK_RXE, INSTR_RXE, 2},
+  { "stg", OP48(0xe30000000024LL), MASK_RXE, INSTR_RXE, 2},
+  { "clg", OP48(0xe30000000021LL), MASK_RXE, INSTR_RXE, 2},
+  { "cg", OP48(0xe30000000020LL), MASK_RXE, INSTR_RXE, 2},
+  { "lrvh", OP48(0xe3000000001fLL), MASK_RXE, INSTR_RXE, 2},
+  { "lrv", OP48(0xe3000000001eLL), MASK_RXE, INSTR_RXE, 2},
+  { "dsgf", OP48(0xe3000000001dLL), MASK_RXE, INSTR_RXE, 2},
+  { "msgf", OP48(0xe3000000001cLL), MASK_RXE, INSTR_RXE, 2},
+  { "slgf", OP48(0xe3000000001bLL), MASK_RXE, INSTR_RXE, 2},
+  { "algf", OP48(0xe3000000001aLL), MASK_RXE, INSTR_RXE, 2},
+  { "sgf", OP48(0xe30000000019LL), MASK_RXE, INSTR_RXE, 2},
+  { "agf", OP48(0xe30000000018LL), MASK_RXE, INSTR_RXE, 2},
+  { "llgt", OP48(0xe30000000017LL), MASK_RXE, INSTR_RXE, 2},
+  { "llgf", OP48(0xe30000000016LL), MASK_RXE, INSTR_RXE, 2},
+  { "lgf", OP48(0xe30000000014LL), MASK_RXE, INSTR_RXE, 2},
+  { "lrvg", OP48(0xe3000000000fLL), MASK_RXE, INSTR_RXE, 2},
+  { "cvbg", OP48(0xe3000000000eLL), MASK_RXE, INSTR_RXE, 2},
+  { "dsg", OP48(0xe3000000000dLL), MASK_RXE, INSTR_RXE, 2},
+  { "msg", OP48(0xe3000000000cLL), MASK_RXE, INSTR_RXE, 2},
+  { "slg", OP48(0xe3000000000bLL), MASK_RXE, INSTR_RXE, 2},
+  { "alg", OP48(0xe3000000000aLL), MASK_RXE, INSTR_RXE, 2},
+  { "sg", OP48(0xe30000000009LL), MASK_RXE, INSTR_RXE, 2},
+  { "ag", OP48(0xe30000000008LL), MASK_RXE, INSTR_RXE, 2},
+  { "lg", OP48(0xe30000000004LL), MASK_RXE, INSTR_RXE, 2},
+  { "lrag", OP48(0xe30000000003LL), MASK_RXE, INSTR_RXE, 2},
+  { "edmk", OP8(0xdfLL), MASK_SS_L, INSTR_SS_L, 3},
+  { "ed", OP8(0xdeLL), MASK_SS_L, INSTR_SS_L, 3},
+  { "trt", OP8(0xddLL), MASK_SS_L, INSTR_SS_L, 3},
+  { "tr", OP8(0xdcLL), MASK_SS_L, INSTR_SS_L, 3},
+  { "mvcs", OP8(0xdbLL), MASK_SS_RR, INSTR_SS_RR, 3},
+  { "mvcp", OP8(0xdaLL), MASK_SS_RR, INSTR_SS_RR, 3},
+  { "mvck", OP8(0xd9LL), MASK_SS_RR, INSTR_SS_RR, 3},
+  { "xc", OP8(0xd7LL), MASK_SS_L, INSTR_SS_L, 3},
+  { "oc", OP8(0xd6LL), MASK_SS_L, INSTR_SS_L, 3},
+  { "clc", OP8(0xd5LL), MASK_SS_L, INSTR_SS_L, 3},
+  { "nc", OP8(0xd4LL), MASK_SS_L, INSTR_SS_L, 3},
+  { "mvz", OP8(0xd3LL), MASK_SS_L, INSTR_SS_L, 3},
+  { "mvc", OP8(0xd2LL), MASK_SS_L, INSTR_SS_L, 3},
+  { "mvn", OP8(0xd1LL), MASK_SS_L, INSTR_SS_L, 3},
+  { "jg", OP16(0xc0f4LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jgno", OP16(0xc0e4LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jgnh", OP16(0xc0d4LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jgnp", OP16(0xc0d4LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jgle", OP16(0xc0c4LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jgnl", OP16(0xc0b4LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jgnm", OP16(0xc0b4LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jghe", OP16(0xc0a4LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jge", OP16(0xc084LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jgz", OP16(0xc084LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jgne", OP16(0xc074LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jgnz", OP16(0xc074LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jgnhe", OP16(0xc054LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jgl", OP16(0xc044LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jgm", OP16(0xc044LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jgnle", OP16(0xc034LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jgh", OP16(0xc024LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jgp", OP16(0xc024LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "jgo", OP16(0xc014LL), MASK_RIL_B, INSTR_RIL_B, 2},
+  { "brasl", OP16(0xc005LL), MASK_RIL_A, INSTR_RIL_A, 2},
+  { "brcl", OP16(0xc004LL), MASK_RIL_MA, INSTR_RIL_MA, 2},
+  { "larl", OP16(0xc000LL), MASK_RIL_A, INSTR_RIL_A, 2},
+  { "icm", OP8(0xbfLL), MASK_RS_M, INSTR_RS_M, 3},
+  { "stcm", OP8(0xbeLL), MASK_RS_M, INSTR_RS_M, 3},
+  { "clm", OP8(0xbdLL), MASK_RS_M, INSTR_RS_M, 3},
+  { "cds", OP8(0xbbLL), MASK_RS, INSTR_RS, 3},
+  { "cs", OP8(0xbaLL), MASK_RS, INSTR_RS, 3},
+  { "esea", OP16(0xb99dLL), MASK_RRE_R, INSTR_RRE_R, 2},
+  { "slbr", OP16(0xb999LL), MASK_RRE, INSTR_RRE, 2},
+  { "alcr", OP16(0xb998LL), MASK_RRE, INSTR_RRE, 2},
+  { "dlr", OP16(0xb997LL), MASK_RRE, INSTR_RRE, 2},
+  { "mlr", OP16(0xb996LL), MASK_RRE, INSTR_RRE, 2},
+  { "epsw", OP16(0xb98dLL), MASK_RRE, INSTR_RRE, 2},
+  { "slbgr", OP16(0xb989LL), MASK_RRE, INSTR_RRE, 2},
+  { "alcgr", OP16(0xb988LL), MASK_RRE, INSTR_RRE, 2},
+  { "dlgr", OP16(0xb987LL), MASK_RRE, INSTR_RRE, 2},
+  { "mlgr", OP16(0xb986LL), MASK_RRE, INSTR_RRE, 2},
+  { "xgr", OP16(0xb982LL), MASK_RRE, INSTR_RRE, 2},
+  { "ogr", OP16(0xb981LL), MASK_RRE, INSTR_RRE, 2},
+  { "ngr", OP16(0xb980LL), MASK_RRE, INSTR_RRE, 2},
+  { "bctgr", OP16(0xb946LL), MASK_RRE, INSTR_RRE, 2},
+  { "clgfr", OP16(0xb931LL), MASK_RRE, INSTR_RRE, 2},
+  { "cgfr", OP16(0xb930LL), MASK_RRE, INSTR_RRE, 2},
+  { "sturg", OP16(0xb925LL), MASK_RRE, INSTR_RRE, 2},
+  { "clgr", OP16(0xb921LL), MASK_RRE, INSTR_RRE, 2},
+  { "cgr", OP16(0xb920LL), MASK_RRE, INSTR_RRE, 2},
+  { "lrvr", OP16(0xb91fLL), MASK_RRE, INSTR_RRE, 2},
+  { "dsgfr", OP16(0xb91dLL), MASK_RRE, INSTR_RRE, 2},
+  { "msgfr", OP16(0xb91cLL), MASK_RRE, INSTR_RRE, 2},
+  { "slgfr", OP16(0xb91bLL), MASK_RRE, INSTR_RRE, 2},
+  { "algfr", OP16(0xb91aLL), MASK_RRE, INSTR_RRE, 2},
+  { "sgfr", OP16(0xb919LL), MASK_RRE, INSTR_RRE, 2},
+  { "agfr", OP16(0xb918LL), MASK_RRE, INSTR_RRE, 2},
+  { "llgtr", OP16(0xb917LL), MASK_RRE, INSTR_RRE, 2},
+  { "llgfr", OP16(0xb916LL), MASK_RRE, INSTR_RRE, 2},
+  { "lgfr", OP16(0xb914LL), MASK_RRE, INSTR_RRE, 2},
+  { "lcgfr", OP16(0xb913LL), MASK_RRE, INSTR_RRE, 2},
+  { "ltgfr", OP16(0xb912LL), MASK_RRE, INSTR_RRE, 2},
+  { "lngfr", OP16(0xb911LL), MASK_RRE, INSTR_RRE, 2},
+  { "lpgfr", OP16(0xb910LL), MASK_RRE, INSTR_RRE, 2},
+  { "lrvgr", OP16(0xb90fLL), MASK_RRE, INSTR_RRE, 2},
+  { "eregg", OP16(0xb90eLL), MASK_RRE, INSTR_RRE, 2},
+  { "dsgr", OP16(0xb90dLL), MASK_RRE, INSTR_RRE, 2},
+  { "msgr", OP16(0xb90cLL), MASK_RRE, INSTR_RRE, 2},
+  { "slgr", OP16(0xb90bLL), MASK_RRE, INSTR_RRE, 2},
+  { "algr", OP16(0xb90aLL), MASK_RRE, INSTR_RRE, 2},
+  { "sgr", OP16(0xb909LL), MASK_RRE, INSTR_RRE, 2},
+  { "agr", OP16(0xb908LL), MASK_RRE, INSTR_RRE, 2},
+  { "lurag", OP16(0xb905LL), MASK_RRE, INSTR_RRE, 2},
+  { "lgr", OP16(0xb904LL), MASK_RRE, INSTR_RRE, 2},
+  { "lcgr", OP16(0xb903LL), MASK_RRE, INSTR_RRE, 2},
+  { "ltgr", OP16(0xb902LL), MASK_RRE, INSTR_RRE, 2},
+  { "lngr", OP16(0xb901LL), MASK_RRE, INSTR_RRE, 2},
+  { "lpgr", OP16(0xb900LL), MASK_RRE, INSTR_RRE, 2},
+  { "lctl", OP8(0xb7LL), MASK_RS_C, INSTR_RS_C, 3},
+  { "stctl", OP8(0xb6LL), MASK_RS_C, INSTR_RS_C, 3},
+  { "cgxr", OP16(0xb3caLL), MASK_RRF_F, INSTR_RRF_F, 2},
+  { "cgdr", OP16(0xb3c9LL), MASK_RRF_F, INSTR_RRF_F, 2},
+  { "cger", OP16(0xb3c8LL), MASK_RRF_F, INSTR_RRF_F, 2},
+  { "cxgr", OP16(0xb3c6LL), MASK_RRE, INSTR_RRE, 2},
+  { "cdgr", OP16(0xb3c5LL), MASK_RRE, INSTR_RRE, 2},
+  { "cegr", OP16(0xb3c4LL), MASK_RRE, INSTR_RRE, 2},
+  { "cgxbr", OP16(0xb3aaLL), MASK_RRF_M, INSTR_RRF_M, 2},
+  { "cgdbr", OP16(0xb3a9LL), MASK_RRF_M, INSTR_RRF_M, 2},
+  { "cgebr", OP16(0xb3a8LL), MASK_RRF_M, INSTR_RRF_M, 2},
+  { "cxgbr", OP16(0xb3a6LL), MASK_RRE, INSTR_RRE, 2},
+  { "cdgbr", OP16(0xb3a5LL), MASK_RRE, INSTR_RRE, 2},
+  { "cegbr", OP16(0xb3a4LL), MASK_RRE, INSTR_RRE, 2},
+  { "cfxbr", OP16(0xb39aLL), MASK_RRF_M, INSTR_RRF_M, 3},
+  { "cfdbr", OP16(0xb399LL), MASK_RRF_M, INSTR_RRF_M, 3},
+  { "cfebr", OP16(0xb398LL), MASK_RRF_M, INSTR_RRF_M, 3},
+  { "cxfbr", OP16(0xb396LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "cdfbr", OP16(0xb395LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "cefbr", OP16(0xb394LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "efpc", OP16(0xb38cLL), MASK_RRE, INSTR_RRE, 3},
+  { "sfpc", OP16(0xb384LL), MASK_RRE, INSTR_RRE, 3},
+  { "fidbr", OP16(0xb35fLL), MASK_RRF_M, INSTR_RRF_M, 3},
+  { "didbr", OP16(0xb35bLL), MASK_RRF_RM, INSTR_RRF_RM, 3},
+  { "fiebr", OP16(0xb357LL), MASK_RRF_M, INSTR_RRF_M, 3},
+  { "diebr", OP16(0xb353LL), MASK_RRF_RM, INSTR_RRF_RM, 3},
+  { "dxbr", OP16(0xb34dLL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "mxbr", OP16(0xb34cLL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "sxbr", OP16(0xb34bLL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "axbr", OP16(0xb34aLL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "cxbr", OP16(0xb349LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "kxbr", OP16(0xb348LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "fixbr", OP16(0xb347LL), MASK_RRF_M, INSTR_RRF_M, 3},
+  { "lexbr", OP16(0xb346LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "ldxbr", OP16(0xb345LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "ledbr", OP16(0xb344LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "lcxbr", OP16(0xb343LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "ltxbr", OP16(0xb342LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "lnxbr", OP16(0xb341LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "lpxbr", OP16(0xb340LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "msdbr", OP16(0xb31fLL), MASK_RRF_R, INSTR_RRF_R, 3},
+  { "madbr", OP16(0xb31eLL), MASK_RRF_R, INSTR_RRF_R, 3},
+  { "ddbr", OP16(0xb31dLL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "mdbr", OP16(0xb31cLL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "sdbr", OP16(0xb31bLL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "adbr", OP16(0xb31aLL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "cdbr", OP16(0xb319LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "kdbr", OP16(0xb318LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "meebr", OP16(0xb317LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "sqxbr", OP16(0xb316LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "sqdbr", OP16(0xb315LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "sqebr", OP16(0xb314LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "lcdbr", OP16(0xb313LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "ltdbr", OP16(0xb312LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "lndbr", OP16(0xb311LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "lpdbr", OP16(0xb310LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "msebr", OP16(0xb30fLL), MASK_RRF_R, INSTR_RRF_R, 3},
+  { "maebr", OP16(0xb30eLL), MASK_RRF_R, INSTR_RRF_R, 3},
+  { "debr", OP16(0xb30dLL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "mdebr", OP16(0xb30cLL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "sebr", OP16(0xb30bLL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "aebr", OP16(0xb30aLL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "cebr", OP16(0xb309LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "kebr", OP16(0xb308LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "mxdbr", OP16(0xb307LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "lxebr", OP16(0xb306LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "lxdbr", OP16(0xb305LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "ldebr", OP16(0xb304LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "lcebr", OP16(0xb303LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "ltebr", OP16(0xb302LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "lnebr", OP16(0xb301LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "lpebr", OP16(0xb300LL), MASK_RRE_F, INSTR_RRE_F, 3},
+  { "trap4", OP16(0xb2ffLL), MASK_S, INSTR_S, 3},
+  { "lpswe", OP16(0xb2b2LL), MASK_S, INSTR_S, 2},
+  { "stfl", OP16(0xb2b1LL), MASK_S, INSTR_S, 2},
+  { "cutfu", OP16(0xb2a7LL), MASK_RRE, INSTR_RRE, 3},
+  { "cuutf", OP16(0xb2a6LL), MASK_RRE, INSTR_RRE, 3},
+  { "tre", OP16(0xb2a5LL), MASK_RRE, INSTR_RRE, 2},
+  { "lfpc", OP16(0xb29dLL), MASK_S, INSTR_S, 3},
+  { "stfpc", OP16(0xb29cLL), MASK_S, INSTR_S, 3},
+  { "srnm", OP16(0xb299LL), MASK_S, INSTR_S, 3},
+  { "stsi", OP16(0xb27dLL), MASK_S, INSTR_S, 3},
+  { "sacf", OP16(0xb279LL), MASK_S, INSTR_S, 3},
+  { "stcke", OP16(0xb278LL), MASK_S, INSTR_S, 2},
+  { "rp", OP16(0xb277LL), MASK_S, INSTR_S, 3},
+  { "siga", OP16(0xb274LL), MASK_S, INSTR_S, 3},
+  { "cmpsc", OP16(0xb263LL), MASK_RRE, INSTR_RRE, 3},
+  { "srst", OP16(0xb25eLL), MASK_RRE, INSTR_RRE, 3},
+  { "clst", OP16(0xb25dLL), MASK_RRE, INSTR_RRE, 3},
+  { "bsa", OP16(0xb25aLL), MASK_RRE, INSTR_RRE, 3},
+  { "bsg", OP16(0xb258LL), MASK_RRE, INSTR_RRE, 3},
+  { "cuse", OP16(0xb257LL), MASK_RRE, INSTR_RRE, 3},
+  { "mvst", OP16(0xb255LL), MASK_RRE, INSTR_RRE, 3},
+  { "mvpg", OP16(0xb254LL), MASK_RRE, INSTR_RRE, 3},
+  { "msr", OP16(0xb252LL), MASK_RRE, INSTR_RRE, 3},
+  { "csp", OP16(0xb250LL), MASK_RRE, INSTR_RRE, 3},
+  { "ear", OP16(0xb24fLL), MASK_RRE_RA, INSTR_RRE_RA, 3},
+  { "sar", OP16(0xb24eLL), MASK_RRE_AR, INSTR_RRE_AR, 3},
+  { "cpya", OP16(0xb24dLL), MASK_RRE_A, INSTR_RRE_A, 3},
+  { "tar", OP16(0xb24cLL), MASK_RRE_AR, INSTR_RRE_AR, 3},
+  { "lura", OP16(0xb24bLL), MASK_RRE, INSTR_RRE, 3},
+  { "esta", OP16(0xb24aLL), MASK_RRE, INSTR_RRE, 3},
+  { "ereg", OP16(0xb249LL), MASK_RRE, INSTR_RRE, 3},
+  { "palb", OP16(0xb248LL), MASK_RRE_O, INSTR_RRE_O, 3},
+  { "msta", OP16(0xb247LL), MASK_RRE_R, INSTR_RRE_R, 3},
+  { "stura", OP16(0xb246LL), MASK_RRE, INSTR_RRE, 3},
+  { "sqer", OP16(0xb245LL), MASK_RRE_E, INSTR_RRE_E, 3},
+  { "sqdr", OP16(0xb244LL), MASK_RRE_D, INSTR_RRE_D, 3},
+  { "cksm", OP16(0xb241LL), MASK_RRE, INSTR_RRE, 3},
+  { "bakr", OP16(0xb240LL), MASK_RRE, INSTR_RRE, 3},
+  { "schm", OP16(0xb23cLL), MASK_S_O, INSTR_S_O, 3},
+  { "rchp", OP16(0xb23bLL), MASK_S_O, INSTR_S_O, 3},
+  { "stcps", OP16(0xb23aLL), MASK_S, INSTR_S, 3},
+  { "stcrw", OP16(0xb239LL), MASK_S, INSTR_S, 3},
+  { "rsch", OP16(0xb238LL), MASK_S_O, INSTR_S_O, 3},
+  { "sal", OP16(0xb237LL), MASK_S_O, INSTR_S_O, 3},
+  { "tpi", OP16(0xb236LL), MASK_S, INSTR_S, 3},
+  { "tsch", OP16(0xb235LL), MASK_S, INSTR_S, 3},
+  { "stsch", OP16(0xb234LL), MASK_S, INSTR_S, 3},
+  { "ssch", OP16(0xb233LL), MASK_S, INSTR_S, 3},
+  { "msch", OP16(0xb232LL), MASK_S, INSTR_S, 3},
+  { "hsch", OP16(0xb231LL), MASK_S_O, INSTR_S_O, 3},
+  { "csch", OP16(0xb230LL), MASK_S_O, INSTR_S_O, 3},
+  { "dxr", OP16(0xb22dLL), MASK_RRE_X, INSTR_RRE_X, 3},
+  { "tb", OP16(0xb22cLL), MASK_RRE_R2, INSTR_RRE_R2, 3},
+  { "sske", OP16(0xb22bLL), MASK_RRE, INSTR_RRE, 3},
+  { "rrbe", OP16(0xb22aLL), MASK_RRE, INSTR_RRE, 3},
+  { "iske", OP16(0xb229LL), MASK_RRE, INSTR_RRE, 3},
+  { "pt", OP16(0xb228LL), MASK_RRE, INSTR_RRE, 3},
+  { "esar", OP16(0xb227LL), MASK_RRE_R, INSTR_RRE_R, 3},
+  { "epar", OP16(0xb226LL), MASK_RRE_R, INSTR_RRE_R, 3},
+  { "ssar", OP16(0xb225LL), MASK_RRE_R, INSTR_RRE_R, 3},
+  { "iac", OP16(0xb224LL), MASK_RRE_R, INSTR_RRE_R, 3},
+  { "ivsk", OP16(0xb223LL), MASK_RRE, INSTR_RRE, 3},
+  { "ipm", OP16(0xb222LL), MASK_RRE_R, INSTR_RRE_R, 3},
+  { "ipte", OP16(0xb221LL), MASK_RRE, INSTR_RRE, 3},
+  { "cfc", OP16(0xb21aLL), MASK_S, INSTR_S, 3},
+  { "sac", OP16(0xb219LL), MASK_S, INSTR_S, 3},
+  { "pc", OP16(0xb218LL), MASK_S, INSTR_S, 3},
+  { "sie", OP16(0xb214LL), MASK_S, INSTR_S, 3},
+  { "stap", OP16(0xb212LL), MASK_S, INSTR_S, 3},
+  { "stpx", OP16(0xb211LL), MASK_S, INSTR_S, 3},
+  { "spx", OP16(0xb210LL), MASK_S, INSTR_S, 3},
+  { "ptlb", OP16(0xb20dLL), MASK_S_O, INSTR_S_O, 3},
+  { "ipk", OP16(0xb20bLL), MASK_S_O, INSTR_S_O, 3},
+  { "spka", OP16(0xb20aLL), MASK_S, INSTR_S, 3},
+  { "stpt", OP16(0xb209LL), MASK_S, INSTR_S, 3},
+  { "spt", OP16(0xb208LL), MASK_S, INSTR_S, 3},
+  { "stckc", OP16(0xb207LL), MASK_S, INSTR_S, 3},
+  { "sckc", OP16(0xb206LL), MASK_S, INSTR_S, 3},
+  { "stck", OP16(0xb205LL), MASK_S, INSTR_S, 3},
+  { "sck", OP16(0xb204LL), MASK_S, INSTR_S, 3},
+  { "stidp", OP16(0xb202LL), MASK_S, INSTR_S, 3},
+  { "lra", OP8(0xb1LL), MASK_RX, INSTR_RX, 3},
+  { "mc", OP8(0xafLL), MASK_SI, INSTR_SI, 3},
+  { "sigp", OP8(0xaeLL), MASK_RS, INSTR_RS, 3},
+  { "stosm", OP8(0xadLL), MASK_SI, INSTR_SI, 3},
+  { "stnsm", OP8(0xacLL), MASK_SI, INSTR_SI, 3},
+  { "clcle", OP8(0xa9LL), MASK_RS, INSTR_RS, 3},
+  { "mvcle", OP8(0xa8LL), MASK_RS, INSTR_RS, 3},
+  { "j", OP16(0xa7f4LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jno", OP16(0xa7e4LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jnh", OP16(0xa7d4LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jnp", OP16(0xa7d4LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jle", OP16(0xa7c4LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jnl", OP16(0xa7b4LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jnm", OP16(0xa7b4LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jhe", OP16(0xa7a4LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "je", OP16(0xa784LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jz", OP16(0xa784LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jne", OP16(0xa774LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jnz", OP16(0xa774LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jnhe", OP16(0xa754LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jl", OP16(0xa744LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jm", OP16(0xa744LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jnle", OP16(0xa734LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jh", OP16(0xa724LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jp", OP16(0xa724LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "jo", OP16(0xa714LL), MASK_RI_B, INSTR_RI_B, 3},
+  { "cghi", OP16(0xa70fLL), MASK_RI, INSTR_RI, 2},
+  { "chi", OP16(0xa70eLL), MASK_RI, INSTR_RI, 3},
+  { "mghi", OP16(0xa70dLL), MASK_RI, INSTR_RI, 2},
+  { "mhi", OP16(0xa70cLL), MASK_RI, INSTR_RI, 3},
+  { "aghi", OP16(0xa70bLL), MASK_RI, INSTR_RI, 2},
+  { "ahi", OP16(0xa70aLL), MASK_RI, INSTR_RI, 3},
+  { "lghi", OP16(0xa709LL), MASK_RI, INSTR_RI, 2},
+  { "lhi", OP16(0xa708LL), MASK_RI, INSTR_RI, 3},
+  { "brctg", OP16(0xa707LL), MASK_RI_A, INSTR_RI_A, 2},
+  { "brct", OP16(0xa706LL), MASK_RI_A, INSTR_RI_A, 3},
+  { "bras", OP16(0xa705LL), MASK_RI_A, INSTR_RI_A, 3},
+  { "brc", OP16(0xa704LL), MASK_RI_MA, INSTR_RI_MA, 3},
+  { "tmhl", OP16(0xa703LL), MASK_RI_U, INSTR_RI_U, 2},
+  { "tmhh", OP16(0xa702LL), MASK_RI_U, INSTR_RI_U, 2},
+  { "tml", OP16(0xa701LL), MASK_RI_U, INSTR_RI_U, 3},
+  { "tmll", OP16(0xa701LL), MASK_RI_U, INSTR_RI_U, 2},
+  { "tmh", OP16(0xa700LL), MASK_RI_U, INSTR_RI_U, 3},
+  { "tmlh", OP16(0xa700LL), MASK_RI_U, INSTR_RI_U, 2},
+  { "llill", OP16(0xa50fLL), MASK_RI_U, INSTR_RI_U, 2},
+  { "llilh", OP16(0xa50eLL), MASK_RI_U, INSTR_RI_U, 2},
+  { "llihl", OP16(0xa50dLL), MASK_RI_U, INSTR_RI_U, 2},
+  { "llihh", OP16(0xa50cLL), MASK_RI_U, INSTR_RI_U, 2},
+  { "oill", OP16(0xa50bLL), MASK_RI_U, INSTR_RI_U, 2},
+  { "oilh", OP16(0xa50aLL), MASK_RI_U, INSTR_RI_U, 2},
+  { "oihl", OP16(0xa509LL), MASK_RI_U, INSTR_RI_U, 2},
+  { "oihh", OP16(0xa508LL), MASK_RI_U, INSTR_RI_U, 2},
+  { "nill", OP16(0xa507LL), MASK_RI_U, INSTR_RI_U, 2},
+  { "nilh", OP16(0xa506LL), MASK_RI_U, INSTR_RI_U, 2},
+  { "nihl", OP16(0xa505LL), MASK_RI_U, INSTR_RI_U, 2},
+  { "nihh", OP16(0xa504LL), MASK_RI_U, INSTR_RI_U, 2},
+  { "iill", OP16(0xa503LL), MASK_RI_U, INSTR_RI_U, 2},
+  { "iilh", OP16(0xa502LL), MASK_RI_U, INSTR_RI_U, 2},
+  { "iihl", OP16(0xa501LL), MASK_RI_U, INSTR_RI_U, 2},
+  { "iihh", OP16(0xa500LL), MASK_RI_U, INSTR_RI_U, 2},
+  { "stam", OP8(0x9bLL), MASK_RS_A, INSTR_RS_A, 3},
+  { "lam", OP8(0x9aLL), MASK_RS_A, INSTR_RS_A, 3},
+  { "trace", OP8(0x99LL), MASK_RS, INSTR_RS, 3},
+  { "lm", OP8(0x98LL), MASK_RS, INSTR_RS, 3},
+  { "xi", OP8(0x97LL), MASK_SI, INSTR_SI, 3},
+  { "oi", OP8(0x96LL), MASK_SI, INSTR_SI, 3},
+  { "cli", OP8(0x95LL), MASK_SI, INSTR_SI, 3},
+  { "ni", OP8(0x94LL), MASK_SI, INSTR_SI, 3},
+  { "ts", OP8(0x93LL), MASK_S, INSTR_S, 3},
+  { "mvi", OP8(0x92LL), MASK_SI, INSTR_SI, 3},
+  { "tm", OP8(0x91LL), MASK_SI, INSTR_SI, 3},
+  { "stm", OP8(0x90LL), MASK_RS, INSTR_RS, 3},
+  { "slda", OP8(0x8fLL), MASK_RS_D, INSTR_RS_D, 3},
+  { "srda", OP8(0x8eLL), MASK_RS_D, INSTR_RS_D, 3},
+  { "sldl", OP8(0x8dLL), MASK_RS_D, INSTR_RS_D, 3},
+  { "srdl", OP8(0x8cLL), MASK_RS_D, INSTR_RS_D, 3},
+  { "sla", OP8(0x8bLL), MASK_RS_S, INSTR_RS_S, 3},
+  { "sra", OP8(0x8aLL), MASK_RS_S, INSTR_RS_S, 3},
+  { "sll", OP8(0x89LL), MASK_RS_S, INSTR_RS_S, 3},
+  { "srl", OP8(0x88LL), MASK_RS_S, INSTR_RS_S, 3},
+  { "bxle", OP8(0x87LL), MASK_RS, INSTR_RS, 3},
+  { "bxh", OP8(0x86LL), MASK_RS, INSTR_RS, 3},
+  { "brxle", OP8(0x85LL), MASK_RSI_A, INSTR_RSI_A, 3},
+  { "brxh", OP8(0x84LL), MASK_RSI_A, INSTR_RSI_A, 3},
+  { "diag", OP8(0x83LL), MASK_RS, INSTR_RS, 3},
+  { "lpsw", OP8(0x82LL), MASK_S, INSTR_S, 3},
+  { "ssm", OP8(0x80LL), MASK_S, INSTR_S, 3},
+  { "su", OP8(0x7fLL), MASK_RX_E, INSTR_RX_E, 3},
+  { "au", OP8(0x7eLL), MASK_RX_E, INSTR_RX_E, 3},
+  { "de", OP8(0x7dLL), MASK_RX_E, INSTR_RX_E, 3},
+  { "me", OP8(0x7cLL), MASK_RX_ED, INSTR_RX_ED, 3},
+  { "se", OP8(0x7bLL), MASK_RX_E, INSTR_RX_E, 3},
+  { "ae", OP8(0x7aLL), MASK_RX_E, INSTR_RX_E, 3},
+  { "ce", OP8(0x79LL), MASK_RX_E, INSTR_RX_E, 3},
+  { "le", OP8(0x78LL), MASK_RX_E, INSTR_RX_E, 3},
+  { "ms", OP8(0x71LL), MASK_RX, INSTR_RX, 3},
+  { "ste", OP8(0x70LL), MASK_RX_E, INSTR_RX_E, 3},
+  { "sw", OP8(0x6fLL), MASK_RX_D, INSTR_RX_D, 3},
+  { "aw", OP8(0x6eLL), MASK_RX_D, INSTR_RX_D, 3},
+  { "dd", OP8(0x6dLL), MASK_RX_D, INSTR_RX_D, 3},
+  { "md", OP8(0x6cLL), MASK_RX_D, INSTR_RX_D, 3},
+  { "sd", OP8(0x6bLL), MASK_RX_D, INSTR_RX_D, 3},
+  { "ad", OP8(0x6aLL), MASK_RX_D, INSTR_RX_D, 3},
+  { "cd", OP8(0x69LL), MASK_RX_D, INSTR_RX_D, 3},
+  { "ld", OP8(0x68LL), MASK_RX_D, INSTR_RX_D, 3},
+  { "mxd", OP8(0x67LL), MASK_RX_DX, INSTR_RX_DX, 3},
+  { "std", OP8(0x60LL), MASK_RX_D, INSTR_RX_D, 3},
+  { "sl", OP8(0x5fLL), MASK_RX, INSTR_RX, 3},
+  { "al", OP8(0x5eLL), MASK_RX, INSTR_RX, 3},
+  { "d", OP8(0x5dLL), MASK_RX, INSTR_RX, 3},
+  { "m", OP8(0x5cLL), MASK_RX, INSTR_RX, 3},
+  { "s", OP8(0x5bLL), MASK_RX, INSTR_RX, 3},
+  { "a", OP8(0x5aLL), MASK_RX, INSTR_RX, 3},
+  { "c", OP8(0x59LL), MASK_RX, INSTR_RX, 3},
+  { "l", OP8(0x58LL), MASK_RX, INSTR_RX, 3},
+  { "x", OP8(0x57LL), MASK_RX, INSTR_RX, 3},
+  { "o", OP8(0x56LL), MASK_RX, INSTR_RX, 3},
+  { "cl", OP8(0x55LL), MASK_RX, INSTR_RX, 3},
+  { "n", OP8(0x54LL), MASK_RX, INSTR_RX, 3},
+  { "lae", OP8(0x51LL), MASK_RX, INSTR_RX, 3},
+  { "st", OP8(0x50LL), MASK_RX, INSTR_RX, 3},
+  { "cvb", OP8(0x4fLL), MASK_RX, INSTR_RX, 3},
+  { "cvd", OP8(0x4eLL), MASK_RX, INSTR_RX, 3},
+  { "bas", OP8(0x4dLL), MASK_RX, INSTR_RX, 3},
+  { "mh", OP8(0x4cLL), MASK_RX, INSTR_RX, 3},
+  { "sh", OP8(0x4bLL), MASK_RX, INSTR_RX, 3},
+  { "ah", OP8(0x4aLL), MASK_RX, INSTR_RX, 3},
+  { "ch", OP8(0x49LL), MASK_RX, INSTR_RX, 3},
+  { "lh", OP8(0x48LL), MASK_RX, INSTR_RX, 3},
+  { "b", OP16(0x47f0LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bno", OP16(0x47e0LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bnh", OP16(0x47d0LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bnp", OP16(0x47d0LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "ble", OP16(0x47c0LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bnl", OP16(0x47b0LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bnm", OP16(0x47b0LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bhe", OP16(0x47a0LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "be", OP16(0x4780LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bz", OP16(0x4780LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bne", OP16(0x4770LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bnz", OP16(0x4770LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bnhe", OP16(0x4750LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bl", OP16(0x4740LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bm", OP16(0x4740LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bnle", OP16(0x4730LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bh", OP16(0x4720LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bp", OP16(0x4720LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bo", OP16(0x4710LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bc", OP8(0x47LL), MASK_RX_M, INSTR_RX_M, 3},
+  { "nop", OP16(0x4700LL), MASK_RX_B, INSTR_RX_B, 3},
+  { "bct", OP8(0x46LL), MASK_RX, INSTR_RX, 3},
+  { "bal", OP8(0x45LL), MASK_RX, INSTR_RX, 3},
+  { "ex", OP8(0x44LL), MASK_RX, INSTR_RX, 3},
+  { "ic", OP8(0x43LL), MASK_RX, INSTR_RX, 3},
+  { "stc", OP8(0x42LL), MASK_RX, INSTR_RX, 3},
+  { "la", OP8(0x41LL), MASK_RX, INSTR_RX, 3},
+  { "sth", OP8(0x40LL), MASK_RX, INSTR_RX, 3},
+  { "sur", OP8(0x3fLL), MASK_RR_E, INSTR_RR_E, 3},
+  { "aur", OP8(0x3eLL), MASK_RR_E, INSTR_RR_E, 3},
+  { "der", OP8(0x3dLL), MASK_RR_E, INSTR_RR_E, 3},
+  { "mer", OP8(0x3cLL), MASK_RR_ED, INSTR_RR_ED, 3},
+  { "ser", OP8(0x3bLL), MASK_RR_E, INSTR_RR_E, 3},
+  { "aer", OP8(0x3aLL), MASK_RR_E, INSTR_RR_E, 3},
+  { "cer", OP8(0x39LL), MASK_RR_E, INSTR_RR_E, 3},
+  { "ler", OP8(0x38LL), MASK_RR_E, INSTR_RR_E, 3},
+  { "sxr", OP8(0x37LL), MASK_RR_X, INSTR_RR_X, 3},
+  { "axr", OP8(0x36LL), MASK_RR, INSTR_RR, 3},
+  { "lrer", OP8(0x35LL), MASK_RR_DE, INSTR_RR_DE, 3},
+  { "her", OP8(0x34LL), MASK_RR_E, INSTR_RR_E, 3},
+  { "lcer", OP8(0x33LL), MASK_RR_E, INSTR_RR_E, 3},
+  { "lter", OP8(0x32LL), MASK_RR_E, INSTR_RR_E, 3},
+  { "lner", OP8(0x31LL), MASK_RR_E, INSTR_RR_E, 3},
+  { "lper", OP8(0x30LL), MASK_RR_E, INSTR_RR_E, 3},
+  { "swr", OP8(0x2fLL), MASK_RR_D, INSTR_RR_D, 3},
+  { "awr", OP8(0x2eLL), MASK_RR_D, INSTR_RR_D, 3},
+  { "ddr", OP8(0x2dLL), MASK_RR_D, INSTR_RR_D, 3},
+  { "mdr", OP8(0x2cLL), MASK_RR_D, INSTR_RR_D, 3},
+  { "sdr", OP8(0x2bLL), MASK_RR_D, INSTR_RR_D, 3},
+  { "adr", OP8(0x2aLL), MASK_RR_D, INSTR_RR_D, 3},
+  { "cdr", OP8(0x29LL), MASK_RR_D, INSTR_RR_D, 3},
+  { "ldr", OP8(0x28LL), MASK_RR_D, INSTR_RR_D, 3},
+  { "mxdr", OP8(0x27LL), MASK_RR_DX, INSTR_RR_DX, 3},
+  { "mxr", OP8(0x26LL), MASK_RR_X, INSTR_RR_X, 3},
+  { "lrdr", OP8(0x25LL), MASK_RR_XD, INSTR_RR_XD, 3},
+  { "hdr", OP8(0x24LL), MASK_RR_D, INSTR_RR_D, 3},
+  { "lcdr", OP8(0x23LL), MASK_RR_D, INSTR_RR_D, 3},
+  { "ltdr", OP8(0x22LL), MASK_RR_D, INSTR_RR_D, 3},
+  { "lndr", OP8(0x21LL), MASK_RR_D, INSTR_RR_D, 3},
+  { "lpdr", OP8(0x20LL), MASK_RR_D, INSTR_RR_D, 3},
+  { "slr", OP8(0x1fLL), MASK_RR, INSTR_RR, 3},
+  { "alr", OP8(0x1eLL), MASK_RR, INSTR_RR, 3},
+  { "dr", OP8(0x1dLL), MASK_RR, INSTR_RR, 3},
+  { "mr", OP8(0x1cLL), MASK_RR, INSTR_RR, 3},
+  { "sr", OP8(0x1bLL), MASK_RR, INSTR_RR, 3},
+  { "ar", OP8(0x1aLL), MASK_RR, INSTR_RR, 3},
+  { "cr", OP8(0x19LL), MASK_RR, INSTR_RR, 3},
+  { "lr", OP8(0x18LL), MASK_RR, INSTR_RR, 3},
+  { "xr", OP8(0x17LL), MASK_RR, INSTR_RR, 3},
+  { "or", OP8(0x16LL), MASK_RR, INSTR_RR, 3},
+  { "clr", OP8(0x15LL), MASK_RR, INSTR_RR, 3},
+  { "nr", OP8(0x14LL), MASK_RR, INSTR_RR, 3},
+  { "lcr", OP8(0x13LL), MASK_RR, INSTR_RR, 3},
+  { "ltr", OP8(0x12LL), MASK_RR, INSTR_RR, 3},
+  { "lnr", OP8(0x11LL), MASK_RR, INSTR_RR, 3},
+  { "lpr", OP8(0x10LL), MASK_RR, INSTR_RR, 3},
+  { "clcl", OP8(0x0fLL), MASK_RR, INSTR_RR, 3},
+  { "mvcl", OP8(0x0eLL), MASK_RR, INSTR_RR, 3},
+  { "basr", OP8(0x0dLL), MASK_RR, INSTR_RR, 3},
+  { "bassm", OP8(0x0cLL), MASK_RR, INSTR_RR, 3},
+  { "bsm", OP8(0x0bLL), MASK_RR, INSTR_RR, 3},
+  { "svc", OP8(0x0aLL), MASK_RR_I, INSTR_RR_I, 3},
+  { "br", OP16(0x07f0LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bnor", OP16(0x07e0LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bnhr", OP16(0x07d0LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bnpr", OP16(0x07d0LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bler", OP16(0x07c0LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bnlr", OP16(0x07b0LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bnmr", OP16(0x07b0LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bher", OP16(0x07a0LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "ber", OP16(0x0780LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bzr", OP16(0x0780LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bner", OP16(0x0770LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bnzr", OP16(0x0770LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bnher", OP16(0x0750LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "blr", OP16(0x0740LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bmr", OP16(0x0740LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bnler", OP16(0x0730LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bhr", OP16(0x0720LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bpr", OP16(0x0720LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bor", OP16(0x0710LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bcr", OP8(0x07LL), MASK_RR_M, INSTR_RR_M, 3},
+  { "nopr", OP16(0x0700LL), MASK_RR_B, INSTR_RR_B, 3},
+  { "bctr", OP8(0x06LL), MASK_RR, INSTR_RR, 3},
+  { "balr", OP8(0x05LL), MASK_RR, INSTR_RR, 3},
+  { "spm", OP8(0x04LL), MASK_RR_R, INSTR_RR_R, 3},
+  { "trap2", OP16(0x01ffLL), MASK_E, INSTR_E, 3},
+  { "sam64", OP16(0x010eLL), MASK_E, INSTR_E, 2},
+  { "sam31", OP16(0x010dLL), MASK_E, INSTR_E, 2},
+  { "sam24", OP16(0x010cLL), MASK_E, INSTR_E, 2},
+  { "tam", OP16(0x010bLL), MASK_E, INSTR_E, 2},
+  { "sckpf", OP16(0x0107LL), MASK_E, INSTR_E, 3},
+  { "upt", OP16(0x0102LL), MASK_E, INSTR_E, 3},
+  { "pr", OP16(0x0101LL), MASK_E, INSTR_E, 3}
+};
+
+const int s390_num_opcodes =
+  sizeof (s390_opcodes) / sizeof (s390_opcodes[0]);
+
+
+
diff --git a/opcodes/s390-opc.txt b/opcodes/s390-opc.txt
new file mode 100644
index 0000000..fecb308
--- /dev/null
+++ b/opcodes/s390-opc.txt
@@ -0,0 +1,601 @@
+#  S/390 opcodes list. Use s390-mkopc to convert it into the opcode table.
+#  Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+#  Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+5a a RX "add" esa
+6a ad RX_D "add normalized (long)" esa
+2a adr RR_D "add normalized (long)" esa
+7a ae RX_E "add normalized (short)" esa
+3a aer RR_E "add normalized (short)" esa
+4a ah RX "add halfword" esa
+5e al RX "add logical" esa
+1e alr RR "add logical" esa
+fa ap SS_LL "add decimal" esa
+1a ar RR "add" esa
+7e au RX_E "add unnormalized (short)" esa
+3e aur RR_E "add unnormalized (short)" esa
+6e aw RX_D "add unnormalized (long)" esa
+2e awr RR_D "add unnormalized (long)" esa
+36 axr RR "add normalized" esa
+b240 bakr RRE "branch and stack" esa
+45 bal RX "branch and link" esa
+05 balr RR "branch and link" esa
+4d bas RX "branch and save" esa
+0d basr RR "branch and save" esa
+0c bassm RR "branch and save and set mode" esa
+47 bc RX_M "branch on condition" esa
+07 bcr RR_M "branch on condition" esa
+46 bct RX "branch on count" esa
+06 bctr RR "branch on count" esa
+b258 bsg RRE "branch in subspace group" esa
+0b bsm RR "branch and set mode" esa
+86 bxh RS "branch on index high" esa
+87 bxle RS "branch on index low or equal" esa
+59 c RX "compare" esa
+69 cd RX_D "compare (long)" esa
+29 cdr RR_D "compare (long)" esa
+bb cds RS "compare double and swap" esa
+79 ce RX_E "compare (short)" esa
+39 cer RR_E "compare (short)" esa
+b21a cfc S "compare and form codeword" esa
+49 ch RX "compare halfword" esa
+55 cl RX "compare logical" esa
+d5 clc SS_L "compare logical" esa
+0f clcl RR "compare logical long" esa
+95 cli SI "compare logical" esa
+bd clm RS_M "compare logical characters under mask" esa
+15 clr RR "compare logical" esa
+b25d clst RRE "compare logical string" esa
+b263 cmpsc RRE "compression call" esa
+f9 cp SS_LL "compare decimal" esa
+b24d cpya RRE_A "copy access" esa
+19 cr RR "compare" esa
+ba cs RS "compare and swap" esa
+b230 csch S_O "clear subchannel" esa
+b257 cuse RRE "compare until substring equal" esa
+b250 csp RRE "compare and swap and purge" esa
+4f cvb RX "convert to binary" esa
+4e cvd RX "convert to decimal" esa
+5d d RX "divide" esa
+6d dd RX_D "divide (long)" esa
+2d ddr RR_D "divide (long)" esa
+7d de RX_E "divide (short)" esa
+3d der RR_E "divide (short)" esa
+83 diag RS "diagnose" esa
+fd dp SS_LL "divide decimal" esa
+1d dr RR "divide" esa
+b22d dxr RRE_X "divide (ext.)" esa
+b24f ear RRE_RA "extract access" esa
+de ed SS_L "edit" esa
+df edmk SS_L "edit and mark" esa
+b226 epar RRE_R "extract primary ASN" esa
+b249 ereg RRE "extract stacked registers" esa
+b227 esar RRE_R "extract secondary ASN" esa
+b24a esta RRE "extract stacked state" esa
+44 ex RX "execute" esa
+24 hdr RR_D "halve (long)" esa
+34 her RR_E "halve (short)" esa
+b231 hsch S_O "halt subchannel" esa
+b224 iac RRE_R "insert address space control" esa
+43 ic RX "insert character" esa
+bf icm RS_M "insert characters under mask" esa
+b20b ipk S_O "insert PSW key" esa
+b222 ipm RRE_R "insert program mask" esa
+b221 ipte RRE "invalidate page table entry" esa
+b229 iske RRE "insert storage key extended" esa
+b223 ivsk RRE "insert virtual storage key" esa
+58 l RX "load" esa
+41 la RX "load address" esa
+51 lae RX "load address extended" esa
+9a lam RS_A "load access multiple" esa
+e500 lasp SSE "load address space parameters" esa
+23 lcdr RR_D "load complement (long)" esa
+33 lcer RR_E "load complement (short)" esa
+13 lcr RR "load complement" esa
+b7 lctl RS_C "load control" esa
+68 ld RX_D "load (long)" esa
+28 ldr RR_D "load (long)" esa
+78 le RX_E "load (short)" esa
+38 ler RR_E "load (short)" esa
+48 lh RX "load halfword" esa
+98 lm RS "load multiple" esa
+21 lndr RR_D "load negative (long)" esa
+31 lner RR_E "load negative (short)" esa
+11 lnr RR "load negative" esa
+20 lpdr RR_D "load positive (long)" esa
+30 lper RR_E "load positive (short)" esa
+10 lpr RR "load positive" esa
+82 lpsw S "load PSW" esa
+18 lr RR "load" esa
+b1 lra RX "load real address" esa
+25 lrdr RR_XD "load rounded (ext. to long)" esa
+35 lrer RR_DE "load rounded (long to short)" esa
+22 ltdr RR_D "load and test (long)" esa
+32 lter RR_E "load and test (short)" esa
+12 ltr RR "load and test" esa
+b24b lura RRE "load using real address" esa
+5c m RX "multiply" esa
+af mc SI "monitor call" esa
+6c md RX_D "multiply (long)" esa
+2c mdr RR_D "multiply (long)" esa
+7c me RX_ED "multiply (short to long)" esa
+3c mer RR_ED "multiply (short to long)" esa
+4c mh RX "multiply halfword" esa
+fc mp SS_LL "multiply decimal" esa
+1c mr RR "multiply" esa
+b232 msch S "modify subchannel" esa
+b247 msta RRE_R "modify stacked state" esa
+d2 mvc SS_L "move" esa
+e50f mvcdk SSE "move with destination key" esa
+e8 mvcin SS_L "move inverse" esa
+d9 mvck SS_RR "move with key" esa
+0e mvcl RR "move long" esa
+da mvcp SS_RR "move to primary" esa
+db mvcs SS_RR "move to secondary" esa
+e50e mvcsk SSE "move with source key" esa
+92 mvi SI "move" esa
+d1 mvn SS_L "move numerics" esa
+f1 mvo SS_LL "move with offset" esa
+b254 mvpg RRE "move page" esa
+b255 mvst RRE "move string" esa
+d3 mvz SS_L "move zones" esa
+67 mxd RX_DX "multiply (long to ext.)" esa
+27 mxdr RR_DX "multiply (long to ext.)" esa
+26 mxr RR_X "multiply (ext.)" esa
+54 n RX "AND" esa
+d4 nc SS_L "AND" esa
+94 ni SI "AND" esa
+14 nr RR "AND" esa
+56 o RX "OR" esa
+d6 oc SS_L "OR" esa
+96 oi SI "OR" esa
+16 or RR "OR" esa
+f2 pack SS_LL "pack" esa
+b248 palb RRE_O "purge ALB" esa
+b218 pc S "program call" esa
+0101 pr E "program return" esa
+b228 pt RRE "program transfer" esa
+b20d ptlb S_O "purge TLB" esa
+b23b rchp S_O "reset channel path" esa
+b22a rrbe RRE "reset reference bit extended" esa
+b238 rsch S_O "resume subchannel" esa
+5b s RX "subtract" esa
+b219 sac S "set address space control" esa
+b279 sacf S "set address space control fast" esa
+b237 sal S_O "set address limit" esa
+b24e sar RRE_AR "set access" esa
+b23c schm S_O "set channel monitor" esa
+b204 sck S "set clock" esa
+b206 sckc S "set clock comparator" esa
+6b sd RX_D "subtract normalized (long)" esa
+2b sdr RR_D "subtract normalized (long)" esa
+7b se RX_E "subtract normalized (short)" esa
+3b ser RR_E "subtract normalized (short)" esa
+4b sh RX "subtract halfword" esa
+b214 sie S "start interpretive execution" esa
+ae sigp RS "signal processor" esa
+5f sl RX "subtract logical" esa
+8b sla RS_S "shift left single" esa
+8f slda RS_D "shift left double (long)" esa
+8d sldl RS_D "shift left double logical (long)" esa
+89 sll RS_S "shift left single logical" esa
+1f slr RR "subtract logical" esa
+fb sp SS_LL "subtract decimal" esa
+b20a spka S "set PSW key from address" esa
+04 spm RR_R "set program mask" esa
+b208 spt S "set CPU timer" esa
+b210 spx S "set prefix" esa
+b244 sqdr RRE_D "square root (long)" esa
+b245 sqer RRE_E "square root (short)" esa
+1b sr RR "subtract" esa
+8a sra RS_S "shift right single" esa
+8e srda RS_D "shift right double (long)" esa
+8c srdl RS_D "shift right double logical (long)" esa
+88 srl RS_S "shift right single logical" esa
+f0 srp SS_LI "shift and round decimal" esa
+b25e srst RRE "search string" esa
+b225 ssar RRE_R "set secondary ASN" esa
+b233 ssch S "start subchannel" esa
+b22b sske RRE "set storage key extended" esa
+80 ssm S "set system mask" esa
+50 st RX "store" esa
+9b stam RS_A "store access multiple" esa
+b212 stap S "store CPU address" esa
+42 stc RX "store character" esa
+b205 stck S "store clock" esa
+b207 stckc S "store clock comparator" esa
+be stcm RS_M "store characters under mask" esa
+b23a stcps S "store channel path status" esa
+b239 stcrw S "store channel report word" esa
+b6 stctl RS_C "store control" esa
+60 std RX_D "store (long)" esa
+70 ste RX_E "store (short)" esa
+40 sth RX "store halfword" esa
+b202 stidp S "store CPU id" esa
+90 stm RS "store multiple" esa
+ac stnsm SI "store then AND system mask" esa
+ad stosm SI "store then OR system mask" esa
+b209 stpt S "store CPU timer" esa
+b211 stpx S "store prefix" esa
+b234 stsch S "store subchannel" esa
+b246 stura RRE "store using real address" esa
+7f su RX_E "subtract unnormalized (short)" esa
+3f sur RR_E "subtract unnormalized (short)" esa
+0a svc RR_I "supervisor call" esa
+6f sw RX_D "subtract unnormalized (long)" esa
+2f swr RR_D "subtract unnormalized (long)" esa
+37 sxr RR_X "subtract normalized (ext.)" esa
+b24c tar RRE_AR "test access" esa
+b22c tb RRE_R2 "test block" esa
+91 tm SI "test under mask" esa
+b236 tpi S "test pending interruption" esa
+e501 tprot SSE "test protection" esa
+dc tr SS_L "translate" esa
+99 trace RS "trace" esa
+dd trt SS_L "translate and test" esa
+93 ts S "test and set" esa
+b235 tsch S "test subchannel" esa
+f3 unpk SS_LL "unpack" esa
+0102 upt E "update tree" esa
+57 x RX "exclusive OR" esa
+d7 xc SS_L "exclusive OR" esa
+97 xi SI "exclusive OR" esa
+17 xr RR "exclusive OR" esa
+f8 zap SS_LL "zero and add" esa
+a70a ahi RI "add halfword immediate" esa
+84 brxh RSI_A "branch relative on index high" esa
+85 brxle RSI_A "branch relative on index low or equal" esa
+a705 bras RI_A "branch relative and save" esa
+a704 brc RI_MA "branch relative on condition" esa
+a706 brct RI_A "branch relative on count" esa
+b241 cksm RRE "checksum" esa
+a70e chi RI "compare halfword immediate" esa
+a9 clcle RS "compare logical long extended" esa
+a708 lhi RI "load halfword immediate" esa
+a8 mvcle RS "move long extended" esa
+a70c mhi RI "multiply halfword immediate" esa
+b252 msr RRE "multiply single" esa
+71 ms RX "multiply single" esa
+a700 tmh RI_U "test under mask high" esa
+a701 tml RI_U "test under mask low" esa
+0700 nopr RR_B "no operation" esa
+0710 bor RR_B "branch on overflow / if ones" esa
+0720 bhr RR_B "branch on high" esa
+0720 bpr RR_B "branch on plus" esa
+0730 bnler RR_B "branch on not low or equal" esa
+0740 blr RR_B "branch on low" esa
+0740 bmr RR_B "branch on minus / if mixed" esa
+0750 bnher RR_B "branch on not high or equal" esa
+0770 bner RR_B "branch on not equal" esa
+0770 bnzr RR_B "branch on not zero / if not zeros" esa
+0780 ber RR_B "branch on equal" esa
+0780 bzr RR_B "branch on zero / if zeros" esa
+07a0 bher RR_B "branch on high or equal" esa
+07b0 bnlr RR_B "branch on not low" esa
+07b0 bnmr RR_B "branch on not minus / if not mixed" esa
+07c0 bler RR_B "brach on low or equal" esa
+07d0 bnhr RR_B "branch on not high" esa
+07d0 bnpr RR_B "branch on not plus" esa
+07e0 bnor RR_B "branch on not overflow / if not ones" esa
+07f0 br RR_B "unconditional branch" esa
+4700 nop RX_B "no operation" esa
+4710 bo RX_B "branch on overflow / if ones" esa
+4720 bh RX_B "branch on high" esa
+4720 bp RX_B "branch on plus" esa
+4730 bnle RX_B "branch on not low or equal" esa
+4740 bl RX_B "branch on low" esa
+4740 bm RX_B "branch on minus / if mixed" esa
+4750 bnhe RX_B "branch on not high or equal" esa
+4770 bne RX_B "branch on not equal" esa
+4770 bnz RX_B "branch on not zero / if not zeros" esa
+4780 be RX_B "branch on equal" esa
+4780 bz RX_B "branch on zero / if zeros" esa
+47a0 bhe RX_B "branch on high or equal" esa
+47b0 bnl RX_B "branch on not low" esa
+47b0 bnm RX_B "branch on not minus / if not mixed" esa
+47c0 ble RX_B "branch on low or equal" esa
+47d0 bnh RX_B "branch on not high" esa
+47d0 bnp RX_B "branch on not plus" esa
+47e0 bno RX_B "branch on not overflow / if not ones" esa
+47f0 b RX_B "unconditional branch" esa
+a714 jo RI_B "jump on overflow / if ones" esa
+a724 jh RI_B "jump on A high" esa
+a724 jp RI_B "jump on plus" esa
+a734 jnle RI_B "jump on not low or equal" esa
+a744 jl RI_B "jump on A low" esa
+a744 jm RI_B "jump on minus / if mixed" esa
+a754 jnhe RI_B "jump on not high or equal" esa
+a774 jne RI_B "jump on A not equal B" esa
+a774 jnz RI_B "jump on not zero / if not zeros" esa
+a784 je RI_B "jump on A equal B" esa
+a784 jz RI_B "jump on zero / if zeros" esa
+a7a4 jhe RI_B "jump on high or equal" esa
+a7b4 jnl RI_B "jump on A not low" esa
+a7b4 jnm RI_B "jump on not minus / if not mixed" esa
+a7c4 jle RI_B "jump on low or equal" esa
+a7d4 jnh RI_B "jump on A not high" esa
+a7d4 jnp RI_B "jump on not plus" esa
+a7e4 jno RI_B "jump on not overflow / if not ones" esa
+a7f4 j RI_B "jump" esa
+b34a axbr RRE_F "add extended bfp" esa
+b31a adbr RRE_F "add long bfp" esa
+ed000000001a adb RXE_F "add long bfp" esa
+b30a aebr RRE_F "add short bfp" esa
+ed000000000a aeb RXE_F "add short bfp" esa
+b349 cxbr RRE_F "compare extended bfp" esa
+b319 cdbr RRE_F "compare long bfp" esa
+ed0000000019 cdb RXE_F "compare long bfp" esa
+b309 cebr RRE_F "compare short bfp" esa
+ed0000000009 ceb RXE_F "compare short bfp" esa
+b348 kxbr RRE_F "compare and signal extended bfp" esa
+b318 kdbr RRE_F "compare and signal long bfp" esa
+ed0000000018 kdb RXE_F "compare and signal long bfp" esa
+b308 kebr RRE_F "compare and signal short bfp" esa
+ed0000000008 keb RXE_F "compare and signal short bfp" esa
+b396 cxfbr RRE_F "convert from fixed 32 to extended bfp" esa
+b395 cdfbr RRE_F "convert from fixed 32 to long bfp" esa
+b394 cefbr RRE_F "convert from fixed 32 to short bfp" esa
+b39a cfxbr RRF_M "convert to fixed extended bfp to 32" esa
+b399 cfdbr RRF_M "convert to fixed long bfp to 32" esa
+b398 cfebr RRF_M "convert to fixed short bfp to 32" esa
+b34d dxbr RRE_F "divide extended bfp" esa
+b31d ddbr RRE_F "divide long bfp" esa
+ed000000001d ddb RXE_F "divide long bfp" esa
+b30d debr RRE_F "divide short bfp" esa
+ed000000000d deb RXE_F "divide short bfp" esa
+b35b didbr RRF_RM "divide to integer long bfp" esa
+b353 diebr RRF_RM "divide to integer short bfp" esa
+b38c efpc RRE "extract fpc" esa
+b342 ltxbr RRE_F "load and test extended bfp" esa
+b312 ltdbr RRE_F "load and test long bfp" esa
+b302 ltebr RRE_F "load and test short bfp" esa
+b343 lcxbr RRE_F "load complement extended bfp" esa
+b313 lcdbr RRE_F "load complement long bfp" esa
+b303 lcebr RRE_F "load complement short bfp" esa
+b347 fixbr RRF_M "load fp integer extended bfp" esa
+b35f fidbr RRF_M "load fp integer long bfp" esa
+b357 fiebr RRF_M "load fp integer short bfp" esa
+b29d lfpc S "load fpc" esa
+b305 lxdbr RRE_F "load lengthened long to extended bfp" esa
+ed0000000005 lxdb RXE_F "load lengthened long to extended bfp" esa
+b306 lxebr RRE_F "load lengthened short to extended bfp" esa
+ed0000000006 lxeb RXE_F "load lengthened short to extended bfp" esa
+b304 ldebr RRE_F "load lengthened short to long bfp" esa
+ed0000000004 ldeb RXE_F "load lengthened short to long bfp" esa
+b341 lnxbr RRE_F "load negative extended bfp" esa
+b311 lndbr RRE_F "load negative long bfp" esa
+b301 lnebr RRE_F "load negative short bfp" esa
+b340 lpxbr RRE_F "load positive extended bfp" esa
+b310 lpdbr RRE_F "load positive long bfp" esa
+b300 lpebr RRE_F "load positive short bfp" esa
+b345 ldxbr RRE_F "load rounded extended to long bfp" esa
+b346 lexbr RRE_F "load rounded extended to short bfp" esa
+b344 ledbr RRE_F "load rounded long to short bfp" esa
+b34c mxbr RRE_F "multiply extended bfp" esa
+b31c mdbr RRE_F "multiply long bfp" esa
+ed000000001c mdb RXE_F "multiply long bfp" esa
+b307 mxdbr RRE_F "multiply long to extended bfp" esa
+ed0000000007 mxdb RXE_F "multiply long to extended bfp" esa
+b317 meebr RRE_F "multiply short bfp" esa
+ed0000000017 meeb RXE_F "multiply short bfp" esa
+b30c mdebr RRE_F "multiply short to long bfp" esa
+ed000000000c mdeb RXE_F "multiply short to long bfp" esa
+b31e madbr RRF_R "multiply and add long bfp" esa
+ed000000001e madb RXF "multiply and add long bfp" esa
+b30e maebr RRF_R "multiply and add short bfp" esa
+ed000000000e maeb RXF "multiply and add short bfp" esa
+b31f msdbr RRF_R "multiply and subtract long bfp" esa
+ed000000001f msdb RXF "multiply and subtract long bfp" esa
+b30f msebr RRF_R "multiply and subtract short bfp" esa
+ed000000000f mseb RXF "multiply and subtract short bfp" esa
+b384 sfpc RRE "set fpc" esa
+b299 srnm S "set rounding mode" esa
+b316 sqxbr RRE_F "square root extended bfp" esa
+b315 sqdbr RRE_F "square root long bfp" esa
+ed0000000015 sqdb RXE_F "square root long bfp" esa
+b314 sqebr RRE_F "square root short bfp" esa
+ed0000000014 sqeb RXE_F "square root short bfp" esa
+b29c stfpc S "store fpc" esa
+b34b sxbr RRE_F "subtract extended bfp" esa
+b31b sdbr RRE_F "subtract long bfp" esa
+ed000000001b sdb RXE_F "subtract long bfp" esa
+b30b sebr RRE_F "subtract short bfp" esa
+ed000000000b seb RXE_F "subtract short bfp" esa
+ed0000000012 tcxb RXE_F "test data class extended bfp" esa
+ed0000000011 tcdb RXE_F "test data class long bfp" esa
+ed0000000010 tceb RXE_F "test data class short bfp" esa
+b274 siga S "signal adapter" esa
+# are the following instructions confidential ??
+b2a6 cuutf RRE "convert unicode to utf-8" esa
+b2a7 cutfu RRE "convert utf-8 to unicode" esa
+ee plo SS_PLO "perform locked operation" esa
+b25a bsa RRE "branch and set authority" esa
+b277 rp S "resume program" esa
+0107 sckpf E "set clock programmable field" esa
+b27d stsi S "store system information" esa
+01ff trap2 E "trap" esa
+b2ff trap4 S "trap4" esa
+# Here are the new esame instructions:
+b946 bctgr RRE "branch on count 64" esame
+b900 lpgr RRE "load positive 64" esame
+b910 lpgfr RRE "load positive 64<32" esame
+b901 lngr RRE "load negative 64" esame
+b911 lngfr RRE "load negative 64<32" esame
+b902 ltgr RRE "load and test 64" esame
+b912 ltgfr RRE "load and test 64<32" esame
+b903 lcgr RRE "load complement 64" esame
+b913 lcgfr RRE "load complement 64<32" esame
+b980 ngr RRE "and 64" esame
+b921 clgr RRE "compare logical 64" esame
+b931 clgfr RRE "compare logical 64<32" esame
+b981 ogr RRE "or 64" esame
+b982 xgr RRE "exclusive or 64" esame
+b904 lgr RRE "load 64" esame
+b914 lgfr RRE "load 64<32" esame
+b920 cgr RRE "compare 64" esame
+b930 cgfr RRE "compare 64<32" esame
+b908 agr RRE "add 64" esame
+b918 agfr RRE "add 64<32" esame
+b909 sgr RRE "subtract 64" esame
+b919 sgfr RRE "subtract 64<32" esame
+b90a algr RRE "add logical 64" esame
+b91a algfr RRE "add logical 64<32" esame
+b90b slgr RRE "subtract logical 64" esame
+b91b slgfr RRE "subtract logical 64<32" esame
+e30000000046 bctg RXE "branch on count 64" esame
+e3000000002e cvdg RXE "convert to decimal 64" esame
+e3000000000e cvbg RXE "convert to binary 64" esame
+e30000000024 stg RXE "store 64" esame
+e30000000080 ng RXE "and 64" esame
+e30000000021 clg RXE "compare logical 64" esame
+e30000000031 clgf RXE "comparee logical 64<32" esame
+e30000000081 og RXE "or 64" esame
+e30000000082 xg RXE "exclusive or 64" esame
+e30000000004 lg RXE "load 64" esame
+e30000000014 lgf RXE "load 64<32" esame
+e30000000020 cg RXE "compare 64" esame
+e30000000030 cgf RXE "compare 64<32" esame
+e30000000008 ag RXE "add 64" esame
+e30000000018 agf RXE "add 64<32" esame
+e30000000009 sg RXE "subtract 64" esame
+e30000000019 sgf RXE "subtract 64<32" esame
+e3000000000a alg RXE "add logical 64" esame
+e3000000001a algf RXE "add logical 64<32" esame
+e3000000000b slg RXE "subtract logical 64" esame
+e3000000001b slgf RXE "subtract logical 64<32" esame
+e3000000000c msg RXE "multiply single 64" esame
+e3000000001c msgf RXE "multiply single 64<32" esame
+ec0000000044 brxhg RIE_A "branch relative on index high 64" esame
+ec0000000045 brxlg RIE_A "branch relative on index low or equal 64" esame
+eb0000000044 bxhg RSE_R "branch on index high 64" esame
+eb0000000045 bxleg RSE_R "branch on index low or equal 64" esame
+eb000000000c srlg RSE_R "shift right single logical 64" esame
+eb000000000d sllg RSE_R "shift left single logical 64" esame
+eb000000000a srag RSE_R "shift right single 64" esame
+eb000000000b slag RSE_R "shift left single 64" esame
+eb0000000024 stmg RSE_R "store multiple 64" esame
+eb0000000026 stmh RSE_R "store multiple high" esame
+eb0000000004 lmg RSE_R "load multiple 64" esame
+eb0000000096 lmh RSE_R "load multiple high" esame
+ef lmd SS_LMD "load multiple disjoint" esame
+eb000000000f tracg RSE_R "trace 64" esame
+e30000000003 lrag RXE "load real address 64" esame
+e50000000002 strag SSE "store read address" esame
+eb0000000025 stctg RSE_R "store control 64" esame
+eb000000002f lctlg RSE_R "load control 64" esame
+eb0000000030 csg RSE_R "compare and swap 64" esame
+eb000000003e cdsg RSE_R "compare double and swap 64" esame
+eb0000000020 clmh RSE_M "compare logical characters under mask high" esame
+eb000000002c stcmh RSE_M "store characters under mask high" esame
+eb0000000080 icmh RSE_M "insert characters under mask high" esame
+a700 tmlh RI_U "test under mask low high" esame
+a702 tmhh RI_U "test under mask high high" esame
+a701 tmll RI_U "test under mask low low" esame
+a703 tmhl RI_U "test under mask high low" esame
+c004 brcl RIL_MA "branch relative on condition long" esame
+c014 jgo RIL_B "jump long on overflow / if ones" esame
+c024 jgh RIL_B "jump long on high" esame
+c024 jgp RIL_B "jump long on plus" esame
+c034 jgnle RIL_B "jump long on not low or equal" esame
+c044 jgl RIL_B "jump long on low" esame
+c044 jgm RIL_B "jump long on minus / if mixed" esame
+c054 jgnhe RIL_B "jump long on not high or equal" esame
+c074 jgne RIL_B "jump long on not equal" esame
+c074 jgnz RIL_B "jump long on not zero / if not zeros" esame
+c084 jge RIL_B "jump long on equal" esame
+c084 jgz RIL_B "jump long on zero / if zeros" esame
+c0a4 jghe RIL_B "jump long on high or equal" esame
+c0b4 jgnl RIL_B "jump long on not low" esame
+c0b4 jgnm RIL_B "jump long on not minus / if not mixed" esame
+c0c4 jgle RIL_B "jump long on low or equal" esame
+c0d4 jgnh RIL_B "jump long on not high" esame
+c0d4 jgnp RIL_B "jump long on not plus" esame
+c0e4 jgno RIL_B "jump long on not overflow / if not ones" esame
+c0f4 jg RIL_B "jump long" esame
+c005 brasl RIL_A "branch relative and save long" esame
+a707 brctg RI_A "branch relative on count 64" esame
+a709 lghi RI "load halfword immediate 64" esame
+a70b aghi RI "add halfword immediate 64" esame
+a70d mghi RI "multiply halfword immediate 64" esame
+a70f cghi RI "compare halfword immediate 64" esame
+b925 sturg RRE "store using real address 64" esame
+b90e eregg RRE "extract stacked registers 64" esame
+b905 lurag RRE "load using real address 64" esame
+b90c msgr RRE "multiply single 64" esame
+b91c msgfr RRE "multiply single 64<32" esame
+b3a4 cegbr RRE "convert from fixed 64 to short bfp" esame
+b3a5 cdgbr RRE "convert from fixed 64 to long bfp" esame
+b3a6 cxgbr RRE "convert from fixed 64 to extended bfp" esame
+b3a8 cgebr RRF_M "convert to fixed short bfd to 64" esame
+b3a9 cgdbr RRF_M "convert to fixed long bfp to 64" esame
+b3aa cgxbr RRF_M "convert to fixed extended bfp to 64" esame
+b3c4 cegr RRE "convert from fixed 64 to short hfp" esame
+b3c5 cdgr RRE "convert from fixed 64 to long hfp" esame
+b3c6 cxgr RRE "convert from fixed 64 to extended hfp" esame
+b3c8 cger RRF_F "convert to fixed short hfp to 64" esame
+b3c9 cgdr RRF_F "convert to fixed long hfp to 64" esame
+b3ca cgxr RRF_F "convert to fixed extended hfp to 64" esame
+010b tam E "test addressing mode" esame
+010c sam24 E "set addressing mode 24" esame
+010d sam31 E "set addressing mode 31" esame
+010e sam64 E "set addressing mode 64" esame
+a500 iihh RI_U "insert immediate high high" esame
+a501 iihl RI_U "insert immediate high low" esame
+a502 iilh RI_U "insert immediate low high" esame
+a503 iill RI_U "insert immediate low low" esame
+a504 nihh RI_U "and immediate high high" esame
+a505 nihl RI_U "and immediate high low" esame
+a506 nilh RI_U "and immediate low high" esame
+a507 nill RI_U "and immediate low low" esame
+a508 oihh RI_U "or immediate high high" esame
+a509 oihl RI_U "or immediate high low" esame
+a50a oilh RI_U "or immediate low high" esame
+a50b oill RI_U "or immediate low low" esame
+a50c llihh RI_U "load logical immediate high high" esame
+a50d llihl RI_U "load logical immediate high low" esame
+a50e llilh RI_U "load logical immediate low high" esame
+a50f llill RI_U "load logical immediate low low" esame
+b2b1 stfl S "store facility list" esame
+b2b2 lpswe S "load psw extended" esame
+b90d dsgr RRE "divide single 64" esame
+b90f lrvgr RRE "load reversed 64" esame
+b916 llgfr RRE "load logical 64<32" esame
+b917 llgtr RRE "load logical thirty one bits" esame
+b91d dsgfr RRE "divide single 64<32" esame
+b91f lrvr RRE "load reversed 32" esame
+b986 mlgr RRE "multiply logical 64" esame
+b987 dlgr RRE "divide logical 64" esame
+b988 alcgr RRE "add logical with carry 64" esame
+b989 slbgr RRE "subtract logical with borrow 64" esame
+b98d epsw RRE "extract psw" esame
+b996 mlr RRE "multiply logical 32" esame
+b997 dlr RRE "divide logical 32" esame
+b998 alcr RRE "add logical with carry 32" esame
+b999 slbr RRE "subtract logical with borrow 32" esame
+b99d esea RRE_R "extract and set extended authority" esame
+c000 larl RIL_A "load address relative long" esame
+e3000000000d dsg RXE "divide single 64" esame
+e3000000000f lrvg RXE "load reversed 64" esame
+e30000000016 llgf RXE "load logical 64<32" esame
+e30000000017 llgt RXE "load logical thirty one bits" esame
+e3000000001d dsgf RXE "divide single 64<32" esame
+e3000000001e lrv RXE "load reversed 32" esame
+e3000000001f lrvh RXE "load reversed 16" esame
+e3000000002f strvg RXE "store reversed 64" esame
+e3000000003e strv RXE "store reversed 32" esame
+e3000000003f strvh RXE "store reversed 64" esame
+e30000000086 mlg RXE "multiply logical 64" esame
+e30000000087 dlg RXE "divide logical 64" esame
+e30000000088 alcg RXE "add logical with carry 64" esame
+e30000000089 slbg RXE "subtract logical with borrow 64" esame
+e3000000008e stpq RXE "store pair to quadword" esame
+e3000000008f lpq RXE "load pair from quadword" esame
+e30000000096 ml RXE "multiply logical 32" esame
+e30000000097 dl RXE "divide logical 32" esame
+e30000000098 alc RXE "add logical with carry 32" esame
+e30000000099 slb RXE "subtract logical with borrow 32" esame
+e30000000090 llgc RXE "load logical character" esame
+e30000000091 llgh RXE "load logical halfword" esame
+eb000000001c rllg RSE_R "rotate left single logical 64" esame
+eb000000001d rll RSE_R "rotate left single logical 32" esame
+b278 stcke S "store clock extended" esame
+b2a5 tre RRE "translate extended" esame